@platformos/platformos-check-common 0.0.16 → 0.0.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/dist/checks/index.d.ts +1 -1
- package/dist/checks/index.js +6 -2
- package/dist/checks/index.js.map +1 -1
- package/dist/checks/json-literal-quote-style/index.d.ts +2 -0
- package/dist/checks/json-literal-quote-style/index.js +42 -0
- package/dist/checks/json-literal-quote-style/index.js.map +1 -0
- package/dist/checks/liquid-html-syntax-error/checks/InvalidAssignSyntax.d.ts +21 -0
- package/dist/checks/liquid-html-syntax-error/checks/InvalidAssignSyntax.js +60 -0
- package/dist/checks/liquid-html-syntax-error/checks/InvalidAssignSyntax.js.map +1 -0
- package/dist/checks/liquid-html-syntax-error/checks/InvalidOutputPush.d.ts +17 -0
- package/dist/checks/liquid-html-syntax-error/checks/InvalidOutputPush.js +37 -0
- package/dist/checks/liquid-html-syntax-error/checks/InvalidOutputPush.js.map +1 -0
- package/dist/checks/liquid-html-syntax-error/checks/InvalidTagSyntax.js +1 -1
- package/dist/checks/liquid-html-syntax-error/index.js +17 -0
- package/dist/checks/liquid-html-syntax-error/index.js.map +1 -1
- package/dist/checks/partial-call-arguments/extract-undefined-variables.d.ts +14 -0
- package/dist/checks/partial-call-arguments/extract-undefined-variables.js +234 -0
- package/dist/checks/partial-call-arguments/extract-undefined-variables.js.map +1 -0
- package/dist/checks/partial-call-arguments/index.d.ts +2 -0
- package/dist/checks/partial-call-arguments/index.js +117 -0
- package/dist/checks/partial-call-arguments/index.js.map +1 -0
- package/dist/checks/unknown-property/index.js +22 -2
- package/dist/checks/unknown-property/index.js.map +1 -1
- package/dist/checks/valid-frontmatter/index.d.ts +2 -0
- package/dist/checks/valid-frontmatter/index.js +279 -0
- package/dist/checks/valid-frontmatter/index.js.map +1 -0
- package/dist/frontmatter/index.d.ts +1 -59
- package/dist/frontmatter/index.js +6 -298
- package/dist/frontmatter/index.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/src/checks/index.ts +6 -2
- package/src/checks/json-literal-quote-style/index.spec.ts +129 -0
- package/src/checks/json-literal-quote-style/index.ts +45 -0
- package/src/checks/liquid-html-syntax-error/checks/InvalidAssignSyntax.spec.ts +422 -0
- package/src/checks/liquid-html-syntax-error/checks/InvalidAssignSyntax.ts +63 -0
- package/src/checks/liquid-html-syntax-error/checks/InvalidOutputPush.spec.ts +104 -0
- package/src/checks/liquid-html-syntax-error/checks/InvalidOutputPush.ts +39 -0
- package/src/checks/liquid-html-syntax-error/checks/InvalidTagSyntax.spec.ts +86 -2
- package/src/checks/liquid-html-syntax-error/checks/InvalidTagSyntax.ts +1 -1
- package/src/checks/liquid-html-syntax-error/index.ts +19 -0
- package/src/checks/partial-call-arguments/extract-undefined-variables.spec.ts +218 -0
- package/src/checks/{metadata-params → partial-call-arguments}/extract-undefined-variables.ts +31 -6
- package/src/checks/partial-call-arguments/index.spec.ts +436 -0
- package/src/checks/{metadata-params → partial-call-arguments}/index.ts +18 -11
- package/src/checks/undefined-object/index.spec.ts +101 -0
- package/src/checks/unknown-property/index.spec.ts +42 -0
- package/src/checks/unknown-property/index.ts +24 -2
- package/src/checks/valid-frontmatter/index.spec.ts +666 -0
- package/src/checks/valid-frontmatter/index.ts +344 -0
- package/src/frontmatter/index.ts +9 -344
- package/src/checks/metadata-params/extract-undefined-variables.spec.ts +0 -115
- package/src/checks/metadata-params/index.spec.ts +0 -257
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# @platformos/theme-check-common
|
|
2
2
|
|
|
3
|
+
## 0.0.18
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Additional checks and improvements
|
|
8
|
+
- Updated dependencies
|
|
9
|
+
- @platformos/liquid-html-parser@0.0.16
|
|
10
|
+
|
|
11
|
+
## 0.0.17
|
|
12
|
+
|
|
13
|
+
### Patch Changes
|
|
14
|
+
|
|
15
|
+
- Fixed validation on unknown objects
|
|
16
|
+
|
|
3
17
|
## 0.0.16
|
|
4
18
|
|
|
5
19
|
### Patch Changes
|
package/dist/checks/index.d.ts
CHANGED
|
@@ -5,4 +5,4 @@ export declare const allChecks: (LiquidCheckDefinition | JSONCheckDefinition | G
|
|
|
5
5
|
* - meta.docs.recommended: true
|
|
6
6
|
* - Either no meta.targets list exist or if it does exist then Recommended is a target
|
|
7
7
|
*/
|
|
8
|
-
export declare const recommended: (LiquidCheckDefinition | JSONCheckDefinition |
|
|
8
|
+
export declare const recommended: (LiquidCheckDefinition | JSONCheckDefinition | GraphQLCheckDefinition | YAMLCheckDefinition)[];
|
package/dist/checks/index.js
CHANGED
|
@@ -26,7 +26,7 @@ const valid_json_1 = require("./valid-json");
|
|
|
26
26
|
const valid_doc_param_types_1 = require("./valid-doc-param-types");
|
|
27
27
|
const valid_render_partial_argument_types_1 = require("./valid-render-partial-argument-types");
|
|
28
28
|
const variable_name_1 = require("./variable-name");
|
|
29
|
-
const
|
|
29
|
+
const partial_call_arguments_1 = require("./partial-call-arguments");
|
|
30
30
|
const graphql_variables_1 = require("./graphql-variables");
|
|
31
31
|
const graphql_1 = require("./graphql");
|
|
32
32
|
const unknown_property_1 = require("./unknown-property");
|
|
@@ -35,6 +35,8 @@ const duplicate_function_arguments_1 = require("./duplicate-function-arguments")
|
|
|
35
35
|
const missing_render_partial_arguments_1 = require("./missing-render-partial-arguments");
|
|
36
36
|
const nested_graphql_query_1 = require("./nested-graphql-query");
|
|
37
37
|
const missing_page_1 = require("./missing-page");
|
|
38
|
+
const valid_frontmatter_1 = require("./valid-frontmatter");
|
|
39
|
+
const json_literal_quote_style_1 = require("./json-literal-quote-style");
|
|
38
40
|
exports.allChecks = [
|
|
39
41
|
deprecated_filter_1.DeprecatedFilter,
|
|
40
42
|
deprecated_tag_1.DeprecatedTag,
|
|
@@ -61,7 +63,7 @@ exports.allChecks = [
|
|
|
61
63
|
valid_doc_param_types_1.ValidDocParamTypes,
|
|
62
64
|
valid_render_partial_argument_types_1.ValidRenderPartialArgumentTypes,
|
|
63
65
|
variable_name_1.VariableName,
|
|
64
|
-
|
|
66
|
+
partial_call_arguments_1.PartialCallArguments,
|
|
65
67
|
graphql_variables_1.GraphQLVariablesCheck,
|
|
66
68
|
graphql_1.GraphQLCheck,
|
|
67
69
|
unknown_property_1.UnknownProperty,
|
|
@@ -69,6 +71,8 @@ exports.allChecks = [
|
|
|
69
71
|
missing_render_partial_arguments_1.MissingRenderPartialArguments,
|
|
70
72
|
nested_graphql_query_1.NestedGraphQLQuery,
|
|
71
73
|
missing_page_1.MissingPage,
|
|
74
|
+
valid_frontmatter_1.ValidFrontmatter,
|
|
75
|
+
json_literal_quote_style_1.JsonLiteralQuoteStyle,
|
|
72
76
|
];
|
|
73
77
|
/**
|
|
74
78
|
* The recommended checks is populated by all checks with the following conditions:
|
package/dist/checks/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/checks/index.ts"],"names":[],"mappings":";;;AAAA,oCAMkB;AAElB,2DAAuD;AACvD,qDAAiD;AACjD,6FAAuF;AACvF,iEAA2D;AAC3D,2DAAsD;AACtD,yEAAmE;AACnE,mEAA+D;AAC/D,mDAA+C;AAC/C,uDAAmD;AACnD,yDAAqD;AACrD,qEAAgE;AAChE,qEAAgE;AAChE,mEAA8D;AAC9D,yDAAqD;AACrD,qEAA+D;AAC/D,qDAAiD;AACjD,mGAA6F;AAC7F,mDAA+C;AAC/C,yDAAoD;AACpD,qEAAgE;AAChE,6CAAyC;AACzC,mEAA6D;AAC7D,+FAAwF;AACxF,mDAA+C;AAC/C,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/checks/index.ts"],"names":[],"mappings":";;;AAAA,oCAMkB;AAElB,2DAAuD;AACvD,qDAAiD;AACjD,6FAAuF;AACvF,iEAA2D;AAC3D,2DAAsD;AACtD,yEAAmE;AACnE,mEAA+D;AAC/D,mDAA+C;AAC/C,uDAAmD;AACnD,yDAAqD;AACrD,qEAAgE;AAChE,qEAAgE;AAChE,mEAA8D;AAC9D,yDAAqD;AACrD,qEAA+D;AAC/D,qDAAiD;AACjD,mGAA6F;AAC7F,mDAA+C;AAC/C,yDAAoD;AACpD,qEAAgE;AAChE,6CAAyC;AACzC,mEAA6D;AAC7D,+FAAwF;AACxF,mDAA+C;AAC/C,qEAAgE;AAChE,2DAA4D;AAC5D,uCAAyC;AACzC,yDAAqD;AACrD,6EAAuE;AACvE,iFAA4E;AAC5E,yFAAmF;AACnF,iEAA4D;AAC5D,iDAA6C;AAC7C,2DAAuD;AACvD,yEAAmE;AAEtD,QAAA,SAAS,GAKhB;IACJ,oCAAgB;IAChB,8BAAa;IACb,yDAA0B;IAC1B,oEAA+B;IAC/B,wCAAiB;IACjB,mCAAe;IACf,gDAAqB;IACrB,4CAAoB;IACpB,4BAAY;IACZ,gCAAc;IACd,kCAAe;IACf,6CAAoB;IACpB,6CAAoB;IACpB,2CAAmB;IACnB,kCAAe;IACf,4CAAmB;IACnB,8BAAa;IACb,0EAAkC;IAClC,4BAAY;IACZ,iCAAc;IACd,6CAAoB;IACpB,sBAAS;IACT,0CAAkB;IAClB,qEAA+B;IAC/B,4BAAY;IACZ,6CAAoB;IACpB,yCAAqB;IACrB,sBAAY;IACZ,kCAAe;IACf,oDAAuB;IACvB,gEAA6B;IAC7B,yCAAkB;IAClB,0BAAW;IACX,oCAAgB;IAChB,gDAAqB;CACtB,CAAC;AAEF;;;;GAIG;AACU,QAAA,WAAW,GAAG,iBAAS,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;IACpD,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;IAClD,MAAM,aAAa,GACjB,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO;QACnB,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM;QAC1B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,oBAAY,CAAC,WAAW,CAAC,CAAC;IAExD,OAAO,aAAa,IAAI,aAAa,CAAC;AACxC,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.JsonLiteralQuoteStyle = void 0;
|
|
4
|
+
const liquid_html_parser_1 = require("@platformos/liquid-html-parser");
|
|
5
|
+
const types_1 = require("../../types");
|
|
6
|
+
exports.JsonLiteralQuoteStyle = {
|
|
7
|
+
meta: {
|
|
8
|
+
code: 'JsonLiteralQuoteStyle',
|
|
9
|
+
name: 'Use double quotes in JSON literals',
|
|
10
|
+
docs: {
|
|
11
|
+
description: 'Enforces double-quoted string literals inside inline object/array literals (e.g. {% assign a = {"a": 5} %}). Single-quoted strings inside these literals are not valid JSON.',
|
|
12
|
+
recommended: true,
|
|
13
|
+
url: undefined,
|
|
14
|
+
},
|
|
15
|
+
type: types_1.SourceCodeType.LiquidHtml,
|
|
16
|
+
severity: types_1.Severity.ERROR,
|
|
17
|
+
schema: {},
|
|
18
|
+
targets: [],
|
|
19
|
+
},
|
|
20
|
+
create(context) {
|
|
21
|
+
return {
|
|
22
|
+
async String(node, ancestors) {
|
|
23
|
+
if (!node.single)
|
|
24
|
+
return;
|
|
25
|
+
// Only flag strings that are inside an inline object/array literal.
|
|
26
|
+
const insideJsonLiteral = ancestors.some((ancestor) => ancestor.type === liquid_html_parser_1.NodeTypes.JsonHashLiteral ||
|
|
27
|
+
ancestor.type === liquid_html_parser_1.NodeTypes.JsonArrayLiteral);
|
|
28
|
+
if (!insideJsonLiteral)
|
|
29
|
+
return;
|
|
30
|
+
context.report({
|
|
31
|
+
message: 'Use double quotes for string literals inside object/array literals (e.g. \'{"key": "value"}\', not "{\'key\': \'value\'}").',
|
|
32
|
+
startIndex: node.position.start,
|
|
33
|
+
endIndex: node.position.end,
|
|
34
|
+
fix: (corrector) => {
|
|
35
|
+
corrector.replace(node.position.start, node.position.end, JSON.stringify(node.value));
|
|
36
|
+
},
|
|
37
|
+
});
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/checks/json-literal-quote-style/index.ts"],"names":[],"mappings":";;;AAAA,uEAA2D;AAC3D,uCAA8E;AAEjE,QAAA,qBAAqB,GAA0B;IAC1D,IAAI,EAAE;QACJ,IAAI,EAAE,uBAAuB;QAC7B,IAAI,EAAE,oCAAoC;QAC1C,IAAI,EAAE;YACJ,WAAW,EACT,8KAA8K;YAChL,WAAW,EAAE,IAAI;YACjB,GAAG,EAAE,SAAS;SACf;QACD,IAAI,EAAE,sBAAc,CAAC,UAAU;QAC/B,QAAQ,EAAE,gBAAQ,CAAC,KAAK;QACxB,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,EAAE;KACZ;IAED,MAAM,CAAC,OAAO;QACZ,OAAO;YACL,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS;gBAC1B,IAAI,CAAC,IAAI,CAAC,MAAM;oBAAE,OAAO;gBAEzB,oEAAoE;gBACpE,MAAM,iBAAiB,GAAG,SAAS,CAAC,IAAI,CACtC,CAAC,QAAQ,EAAE,EAAE,CACX,QAAQ,CAAC,IAAI,KAAK,8BAAS,CAAC,eAAe;oBAC3C,QAAQ,CAAC,IAAI,KAAK,8BAAS,CAAC,gBAAgB,CAC/C,CAAC;gBACF,IAAI,CAAC,iBAAiB;oBAAE,OAAO;gBAE/B,OAAO,CAAC,MAAM,CAAC;oBACb,OAAO,EACL,6HAA6H;oBAC/H,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK;oBAC/B,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG;oBAC3B,GAAG,EAAE,CAAC,SAAS,EAAE,EAAE;wBACjB,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;oBACxF,CAAC;iBACF,CAAC,CAAC;YACL,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { LiquidTag } from '@platformos/liquid-html-parser';
|
|
2
|
+
import { Problem, SourceCodeType } from '../../..';
|
|
3
|
+
/**
|
|
4
|
+
* Detects structurally-invalid `assign` tags that neither `MultipleAssignValues` nor
|
|
5
|
+
* `InvalidPipeSyntax`/`InvalidFilterName` catch:
|
|
6
|
+
*
|
|
7
|
+
* {% assign %} — empty markup
|
|
8
|
+
* {% assign x %} — target only, no operator
|
|
9
|
+
* {% assign x "var" %} — missing `=`
|
|
10
|
+
* {% assign = 'v' %} — missing target
|
|
11
|
+
* {% assign x = %} — empty RHS
|
|
12
|
+
* {% assign 'str' = 'v' %} — target is a literal
|
|
13
|
+
* {% assign x := 'v' %} — operator is not `=`
|
|
14
|
+
*
|
|
15
|
+
* When the strict grammar rule `liquidTagAssignMarkup` fails, the parser falls back to
|
|
16
|
+
* the base case and stores markup as a raw string. That string almost always still
|
|
17
|
+
* contains `=`-plus-RHS with a filter or pipe issue (handled elsewhere). This check
|
|
18
|
+
* targets the cases where the `target = value` skeleton itself is broken, so it
|
|
19
|
+
* complements rather than duplicates the other sub-checks.
|
|
20
|
+
*/
|
|
21
|
+
export declare function detectInvalidAssignSyntax(node: LiquidTag): Problem<SourceCodeType.LiquidHtml> | undefined;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.detectInvalidAssignSyntax = detectInvalidAssignSyntax;
|
|
4
|
+
/**
|
|
5
|
+
* Detects structurally-invalid `assign` tags that neither `MultipleAssignValues` nor
|
|
6
|
+
* `InvalidPipeSyntax`/`InvalidFilterName` catch:
|
|
7
|
+
*
|
|
8
|
+
* {% assign %} — empty markup
|
|
9
|
+
* {% assign x %} — target only, no operator
|
|
10
|
+
* {% assign x "var" %} — missing `=`
|
|
11
|
+
* {% assign = 'v' %} — missing target
|
|
12
|
+
* {% assign x = %} — empty RHS
|
|
13
|
+
* {% assign 'str' = 'v' %} — target is a literal
|
|
14
|
+
* {% assign x := 'v' %} — operator is not `=`
|
|
15
|
+
*
|
|
16
|
+
* When the strict grammar rule `liquidTagAssignMarkup` fails, the parser falls back to
|
|
17
|
+
* the base case and stores markup as a raw string. That string almost always still
|
|
18
|
+
* contains `=`-plus-RHS with a filter or pipe issue (handled elsewhere). This check
|
|
19
|
+
* targets the cases where the `target = value` skeleton itself is broken, so it
|
|
20
|
+
* complements rather than duplicates the other sub-checks.
|
|
21
|
+
*/
|
|
22
|
+
function detectInvalidAssignSyntax(node) {
|
|
23
|
+
if (node.name !== 'assign')
|
|
24
|
+
return;
|
|
25
|
+
if (typeof node.markup !== 'string')
|
|
26
|
+
return;
|
|
27
|
+
const markup = node.markup.trim();
|
|
28
|
+
const eqIndex = markup.indexOf('=');
|
|
29
|
+
const hasEquals = eqIndex !== -1;
|
|
30
|
+
const lhs = hasEquals ? markup.slice(0, eqIndex).trim() : markup;
|
|
31
|
+
const rhs = hasEquals ? markup.slice(eqIndex + 1).trim() : '';
|
|
32
|
+
const isStructurallyBroken = markup === '' || !hasEquals || lhs === '' || rhs === '' || !isValidAssignTarget(lhs);
|
|
33
|
+
if (!isStructurallyBroken)
|
|
34
|
+
return;
|
|
35
|
+
return {
|
|
36
|
+
message: `Invalid syntax for tag 'assign'. Expected syntax: {% assign <var> = <value> %}`,
|
|
37
|
+
startIndex: node.position.start,
|
|
38
|
+
endIndex: node.position.end,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Rejects an LHS that is obviously not an assign target.
|
|
43
|
+
*
|
|
44
|
+
* NOTE: the parser's `variableSegment` rule is stricter than the platformOS runtime —
|
|
45
|
+
* Liquify (see assign_tag_test.rb "allow variable names to start with digit") accepts
|
|
46
|
+
* `23_hours_ago` as a valid name, but our grammar requires `(letter | "_")` at the
|
|
47
|
+
* start and falls back to the base case for digit-starting names. To avoid
|
|
48
|
+
* false-positive lint errors on code that runs fine, this shape check only rejects
|
|
49
|
+
* LHS forms that are never valid: literal delimiters at the start (`'`, `"`, `[`, `{`)
|
|
50
|
+
* and stray operator characters (`:` or a second `=`) that indicate the operator
|
|
51
|
+
* itself is malformed (e.g. `:=`).
|
|
52
|
+
*/
|
|
53
|
+
function isValidAssignTarget(lhs) {
|
|
54
|
+
if (/^['"[{]/.test(lhs))
|
|
55
|
+
return false;
|
|
56
|
+
if (/[:=]/.test(lhs))
|
|
57
|
+
return false;
|
|
58
|
+
return true;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=InvalidAssignSyntax.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InvalidAssignSyntax.js","sourceRoot":"","sources":["../../../../src/checks/liquid-html-syntax-error/checks/InvalidAssignSyntax.ts"],"names":[],"mappings":";;AAqBA,8DAuBC;AAzCD;;;;;;;;;;;;;;;;;GAiBG;AACH,SAAgB,yBAAyB,CACvC,IAAe;IAEf,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO;IACnC,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ;QAAE,OAAO;IAE5C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAElC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACpC,MAAM,SAAS,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC;IACjC,MAAM,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;IACjE,MAAM,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAE9D,MAAM,oBAAoB,GACxB,MAAM,KAAK,EAAE,IAAI,CAAC,SAAS,IAAI,GAAG,KAAK,EAAE,IAAI,GAAG,KAAK,EAAE,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;IAEvF,IAAI,CAAC,oBAAoB;QAAE,OAAO;IAElC,OAAO;QACL,OAAO,EAAE,gFAAgF;QACzF,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK;QAC/B,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG;KAC5B,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAS,mBAAmB,CAAC,GAAW;IACtC,IAAI,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IACtC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { LiquidTag, LiquidVariableOutput } from '@platformos/liquid-html-parser';
|
|
2
|
+
import { Problem, SourceCodeType } from '../../..';
|
|
3
|
+
/**
|
|
4
|
+
* Detects misuse of the `<<` (array push) operator inside output positions:
|
|
5
|
+
*
|
|
6
|
+
* {{ arr << "el" }} — invalid
|
|
7
|
+
* {% echo arr << "el" %} — invalid
|
|
8
|
+
*
|
|
9
|
+
* `<<` is only accepted as the top-level operator in an assign tag:
|
|
10
|
+
*
|
|
11
|
+
* {% assign arr << "el" %} — valid (pushes "el" onto arr)
|
|
12
|
+
*
|
|
13
|
+
* Runtime rejects output-position push with a hard syntax error; this check
|
|
14
|
+
* mirrors that with a clearer, actionable message than the generic
|
|
15
|
+
* `InvalidEchoValue` fallback ("Syntax is not supported").
|
|
16
|
+
*/
|
|
17
|
+
export declare function detectInvalidOutputPush(node: LiquidTag | LiquidVariableOutput): Problem<SourceCodeType.LiquidHtml> | undefined;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.detectInvalidOutputPush = detectInvalidOutputPush;
|
|
4
|
+
const liquid_html_parser_1 = require("@platformos/liquid-html-parser");
|
|
5
|
+
const PUSH_OPERATOR_MESSAGE = "The '<<' (push) operator is only valid inside '{% assign target << value %}'. Remove it or move the expression into an assign tag.";
|
|
6
|
+
/**
|
|
7
|
+
* Detects misuse of the `<<` (array push) operator inside output positions:
|
|
8
|
+
*
|
|
9
|
+
* {{ arr << "el" }} — invalid
|
|
10
|
+
* {% echo arr << "el" %} — invalid
|
|
11
|
+
*
|
|
12
|
+
* `<<` is only accepted as the top-level operator in an assign tag:
|
|
13
|
+
*
|
|
14
|
+
* {% assign arr << "el" %} — valid (pushes "el" onto arr)
|
|
15
|
+
*
|
|
16
|
+
* Runtime rejects output-position push with a hard syntax error; this check
|
|
17
|
+
* mirrors that with a clearer, actionable message than the generic
|
|
18
|
+
* `InvalidEchoValue` fallback ("Syntax is not supported").
|
|
19
|
+
*/
|
|
20
|
+
function detectInvalidOutputPush(node) {
|
|
21
|
+
if (node.type === liquid_html_parser_1.NodeTypes.LiquidTag && node.name !== 'echo')
|
|
22
|
+
return;
|
|
23
|
+
const markup = node.markup;
|
|
24
|
+
if (typeof markup !== 'string' || !markup)
|
|
25
|
+
return;
|
|
26
|
+
// Strip quoted strings so literal `<<` inside a string doesn't trigger the check
|
|
27
|
+
// (e.g. `{{ "a << b" }}` is a harmless string with no push operator).
|
|
28
|
+
const stripped = markup.replace(/'[^']*'|"[^"]*"/g, '');
|
|
29
|
+
if (!/<</.test(stripped))
|
|
30
|
+
return;
|
|
31
|
+
return {
|
|
32
|
+
message: PUSH_OPERATOR_MESSAGE,
|
|
33
|
+
startIndex: node.position.start,
|
|
34
|
+
endIndex: node.position.end,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=InvalidOutputPush.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InvalidOutputPush.js","sourceRoot":"","sources":["../../../../src/checks/liquid-html-syntax-error/checks/InvalidOutputPush.ts"],"names":[],"mappings":";;AAoBA,0DAkBC;AAtCD,uEAA4F;AAG5F,MAAM,qBAAqB,GACzB,oIAAoI,CAAC;AAEvI;;;;;;;;;;;;;GAaG;AACH,SAAgB,uBAAuB,CACrC,IAAsC;IAEtC,IAAI,IAAI,CAAC,IAAI,KAAK,8BAAS,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO;IAEtE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAC3B,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,MAAM;QAAE,OAAO;IAElD,iFAAiF;IACjF,sEAAsE;IACtE,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;IACxD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;QAAE,OAAO;IAEjC,OAAO;QACL,OAAO,EAAE,qBAAqB;QAC9B,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK;QAC/B,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG;KAC5B,CAAC;AACJ,CAAC"}
|
|
@@ -12,7 +12,7 @@ const TAGS_WITH_NO_EXPECTED_MARKUP = new Set(liquid_html_parser_1.TAGS_WITHOUT_M
|
|
|
12
12
|
* more specific error messages and autofixes. This check should NOT fire on these
|
|
13
13
|
* to avoid double-reporting or overriding their nuanced decisions.
|
|
14
14
|
*
|
|
15
|
-
* - assign → MultipleAssignValues, InvalidFilterName, InvalidPipeSyntax
|
|
15
|
+
* - assign → MultipleAssignValues, InvalidAssignSyntax, InvalidFilterName, InvalidPipeSyntax
|
|
16
16
|
* - echo → InvalidEchoValue, InvalidFilterName, InvalidPipeSyntax
|
|
17
17
|
* - if/elsif/unless → InvalidConditionalNode, InvalidConditionalNodeParenthesis
|
|
18
18
|
* - for/tablerow → InvalidLoopRange, InvalidLoopArguments
|
|
@@ -4,6 +4,7 @@ exports.LiquidHTMLSyntaxError = void 0;
|
|
|
4
4
|
const types_1 = require("../../types");
|
|
5
5
|
const utils_1 = require("../../utils");
|
|
6
6
|
const MultipleAssignValues_1 = require("./checks/MultipleAssignValues");
|
|
7
|
+
const InvalidAssignSyntax_1 = require("./checks/InvalidAssignSyntax");
|
|
7
8
|
const InvalidBooleanExpressions_1 = require("./checks/InvalidBooleanExpressions");
|
|
8
9
|
const InvalidEchoValue_1 = require("./checks/InvalidEchoValue");
|
|
9
10
|
const InvalidConditionalNode_1 = require("./checks/InvalidConditionalNode");
|
|
@@ -14,6 +15,7 @@ const InvalidFilterName_1 = require("./checks/InvalidFilterName");
|
|
|
14
15
|
const InvalidPipeSyntax_1 = require("./checks/InvalidPipeSyntax");
|
|
15
16
|
const UnknownTag_1 = require("./checks/UnknownTag");
|
|
16
17
|
const InvalidTagSyntax_1 = require("./checks/InvalidTagSyntax");
|
|
18
|
+
const InvalidOutputPush_1 = require("./checks/InvalidOutputPush");
|
|
17
19
|
const utils_2 = require("../utils");
|
|
18
20
|
function isParsingErrorWithLocation(error) {
|
|
19
21
|
return 'name' in error && error.name === 'LiquidHTMLParsingError' && 'loc' in error;
|
|
@@ -62,9 +64,17 @@ exports.LiquidHTMLSyntaxError = {
|
|
|
62
64
|
context.report(unknownTagProblem);
|
|
63
65
|
return;
|
|
64
66
|
}
|
|
67
|
+
// Push-operator misuse in `{% echo … << … %}` — dedicated message.
|
|
68
|
+
// Short-circuit so InvalidEchoValue doesn't duplicate with a generic message.
|
|
69
|
+
const outputPushProblem = (0, InvalidOutputPush_1.detectInvalidOutputPush)(node);
|
|
70
|
+
if (outputPushProblem) {
|
|
71
|
+
context.report(outputPushProblem);
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
65
74
|
// Run specific sub-checks first — they provide better error messages and autofixes.
|
|
66
75
|
const problems = [
|
|
67
76
|
(0, MultipleAssignValues_1.detectMultipleAssignValues)(node),
|
|
77
|
+
(0, InvalidAssignSyntax_1.detectInvalidAssignSyntax)(node),
|
|
68
78
|
(0, InvalidEchoValue_1.detectInvalidEchoValue)(node),
|
|
69
79
|
(0, InvalidLoopRange_1.detectInvalidLoopRange)(node),
|
|
70
80
|
(0, InvalidLoopArguments_1.detectInvalidLoopArguments)(node, tags),
|
|
@@ -105,6 +115,13 @@ exports.LiquidHTMLSyntaxError = {
|
|
|
105
115
|
async LiquidVariableOutput(node, ancestors) {
|
|
106
116
|
if ((0, utils_2.isWithinRawTagThatDoesNotParseItsContents)(ancestors))
|
|
107
117
|
return;
|
|
118
|
+
// Push-operator misuse in `{{ … << … }}` — dedicated message.
|
|
119
|
+
// Short-circuit so InvalidEchoValue doesn't duplicate with a generic message.
|
|
120
|
+
const outputPushProblem = (0, InvalidOutputPush_1.detectInvalidOutputPush)(node);
|
|
121
|
+
if (outputPushProblem) {
|
|
122
|
+
context.report(outputPushProblem);
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
108
125
|
const filterProblems = await (0, InvalidFilterName_1.detectInvalidFilterName)(node, (await filtersPromise) ?? []);
|
|
109
126
|
if (filterProblems.length > 0) {
|
|
110
127
|
filterProblems.forEach((problem) => context.report(problem));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/checks/liquid-html-syntax-error/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/checks/liquid-html-syntax-error/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parses a Liquid source string and returns a deduplicated list of variable names
|
|
3
|
+
* that are used but never defined. Returns `{ required: [], optional: [] }` on parse errors.
|
|
4
|
+
*
|
|
5
|
+
* Variables used exclusively with `| default` filter (e.g. `assign x = x | default: val`)
|
|
6
|
+
* are returned in `optional` — the partial handles the missing-argument case itself.
|
|
7
|
+
*
|
|
8
|
+
* This mirrors the variable tracking logic from the UndefinedObject check but
|
|
9
|
+
* packaged as a standalone synchronous function.
|
|
10
|
+
*/
|
|
11
|
+
export declare function extractUndefinedVariables(source: string, globalObjectNames?: string[]): {
|
|
12
|
+
required: string[];
|
|
13
|
+
optional: string[];
|
|
14
|
+
};
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.extractUndefinedVariables = extractUndefinedVariables;
|
|
4
|
+
const liquid_html_parser_1 = require("@platformos/liquid-html-parser");
|
|
5
|
+
/**
|
|
6
|
+
* Parses a Liquid source string and returns a deduplicated list of variable names
|
|
7
|
+
* that are used but never defined. Returns `{ required: [], optional: [] }` on parse errors.
|
|
8
|
+
*
|
|
9
|
+
* Variables used exclusively with `| default` filter (e.g. `assign x = x | default: val`)
|
|
10
|
+
* are returned in `optional` — the partial handles the missing-argument case itself.
|
|
11
|
+
*
|
|
12
|
+
* This mirrors the variable tracking logic from the UndefinedObject check but
|
|
13
|
+
* packaged as a standalone synchronous function.
|
|
14
|
+
*/
|
|
15
|
+
function extractUndefinedVariables(source, globalObjectNames = []) {
|
|
16
|
+
let ast;
|
|
17
|
+
try {
|
|
18
|
+
ast = (0, liquid_html_parser_1.toLiquidHtmlAST)(source);
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return { required: [], optional: [] };
|
|
22
|
+
}
|
|
23
|
+
const scopedVariables = new Map();
|
|
24
|
+
const fileScopedVariables = new Set(globalObjectNames);
|
|
25
|
+
const variables = [];
|
|
26
|
+
const variablesWithDefault = new Set();
|
|
27
|
+
function indexVariableScope(variableName, scope) {
|
|
28
|
+
if (!variableName)
|
|
29
|
+
return;
|
|
30
|
+
const indexedScope = scopedVariables.get(variableName) ?? [];
|
|
31
|
+
scopedVariables.set(variableName, indexedScope.concat(scope));
|
|
32
|
+
}
|
|
33
|
+
function walk(node, ancestors) {
|
|
34
|
+
// Process definitions from LiquidTag nodes
|
|
35
|
+
if (node.type === liquid_html_parser_1.NodeTypes.LiquidTag) {
|
|
36
|
+
handleLiquidTag(node, ancestors);
|
|
37
|
+
}
|
|
38
|
+
// Process definitions from LiquidBranch nodes (catch)
|
|
39
|
+
if (node.type === liquid_html_parser_1.NodeTypes.LiquidBranch) {
|
|
40
|
+
handleLiquidBranch(node);
|
|
41
|
+
}
|
|
42
|
+
// Process variable usages
|
|
43
|
+
if (node.type === liquid_html_parser_1.NodeTypes.VariableLookup) {
|
|
44
|
+
handleVariableLookup(node, ancestors);
|
|
45
|
+
}
|
|
46
|
+
// Recurse into children
|
|
47
|
+
const newAncestors = ancestors.concat(node);
|
|
48
|
+
for (const value of Object.values(node)) {
|
|
49
|
+
if (Array.isArray(value)) {
|
|
50
|
+
for (const item of value) {
|
|
51
|
+
if (isNode(item)) {
|
|
52
|
+
walk(item, newAncestors);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
else if (isNode(value)) {
|
|
57
|
+
walk(value, newAncestors);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
function handleLiquidTag(node, _ancestors) {
|
|
62
|
+
if (isLiquidTagAssign(node) || isLiquidTagGraphQL(node) || isLiquidTagParseJson(node)) {
|
|
63
|
+
indexVariableScope(node.markup.name, {
|
|
64
|
+
start: node.blockStartPosition.end,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
if (isLiquidTagHashAssign(node) && node.markup.target.name) {
|
|
68
|
+
indexVariableScope(node.markup.target.name, {
|
|
69
|
+
start: node.blockStartPosition.end,
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
if (isLiquidTagCapture(node)) {
|
|
73
|
+
indexVariableScope(node.markup.name, {
|
|
74
|
+
start: node.blockEndPosition?.end,
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
if (node.name === 'form') {
|
|
78
|
+
indexVariableScope(node.name, {
|
|
79
|
+
start: node.blockStartPosition.end,
|
|
80
|
+
end: node.blockEndPosition?.start,
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
if (node.name === 'function') {
|
|
84
|
+
const fnName = node.markup.name;
|
|
85
|
+
if (fnName.lookups.length === 0 && fnName.name !== null) {
|
|
86
|
+
indexVariableScope(fnName.name, {
|
|
87
|
+
start: node.position.end,
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
if ((isLiquidTagIncrement(node) || isLiquidTagDecrement(node)) && node.markup.name !== null) {
|
|
92
|
+
indexVariableScope(node.markup.name, {
|
|
93
|
+
start: node.position.start,
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
if (isLiquidForTag(node) || isLiquidTableRowTag(node)) {
|
|
97
|
+
indexVariableScope(node.markup.variableName, {
|
|
98
|
+
start: node.blockStartPosition.end,
|
|
99
|
+
end: node.blockEndPosition?.start,
|
|
100
|
+
});
|
|
101
|
+
indexVariableScope(node.name === 'for' ? 'forloop' : 'tablerowloop', {
|
|
102
|
+
start: node.blockStartPosition.end,
|
|
103
|
+
end: node.blockEndPosition?.start,
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
if (isLiquidTagBackground(node)) {
|
|
107
|
+
indexVariableScope(node.markup.jobId, {
|
|
108
|
+
start: node.position.end,
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
function handleLiquidBranch(node) {
|
|
113
|
+
if (node.name === liquid_html_parser_1.NamedTags.catch &&
|
|
114
|
+
node.markup &&
|
|
115
|
+
typeof node.markup !== 'string' &&
|
|
116
|
+
'name' in node.markup &&
|
|
117
|
+
node.markup.name) {
|
|
118
|
+
indexVariableScope(node.markup.name, {
|
|
119
|
+
start: node.blockStartPosition.end,
|
|
120
|
+
end: node.blockEndPosition?.start,
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
function handleVariableLookup(node, ancestors) {
|
|
125
|
+
const parent = ancestors[ancestors.length - 1];
|
|
126
|
+
if (isLiquidTag(parent) && isLiquidTagCapture(parent))
|
|
127
|
+
return;
|
|
128
|
+
if (isLiquidTag(parent) && isLiquidTagParseJson(parent))
|
|
129
|
+
return;
|
|
130
|
+
if (isFunctionMarkup(parent) && parent.name === node)
|
|
131
|
+
return;
|
|
132
|
+
if (isLiquidBranchCatch(parent) && parent.markup === node)
|
|
133
|
+
return;
|
|
134
|
+
if (isHashAssignMarkup(parent) && parent.target === node)
|
|
135
|
+
return;
|
|
136
|
+
variables.push(node);
|
|
137
|
+
// Detect `x | default: ...` — the variable is the expression of a LiquidVariable
|
|
138
|
+
// that has a `default` filter, meaning the partial handles the missing case itself.
|
|
139
|
+
if (node.name &&
|
|
140
|
+
isLiquidVariable(parent) &&
|
|
141
|
+
parent.expression === node &&
|
|
142
|
+
parent.filters.some((f) => f.name === 'default')) {
|
|
143
|
+
variablesWithDefault.add(node.name);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
walk(ast, []);
|
|
147
|
+
// Determine undefined variables
|
|
148
|
+
const seen = new Set();
|
|
149
|
+
const required = [];
|
|
150
|
+
const optional = [];
|
|
151
|
+
for (const variable of variables) {
|
|
152
|
+
if (!variable.name)
|
|
153
|
+
continue;
|
|
154
|
+
if (seen.has(variable.name))
|
|
155
|
+
continue;
|
|
156
|
+
const isVariableDefined = isDefined(variable.name, variable.position, fileScopedVariables, scopedVariables);
|
|
157
|
+
if (!isVariableDefined) {
|
|
158
|
+
seen.add(variable.name);
|
|
159
|
+
if (variablesWithDefault.has(variable.name)) {
|
|
160
|
+
optional.push(variable.name);
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
required.push(variable.name);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
return { required, optional };
|
|
168
|
+
}
|
|
169
|
+
function isNode(x) {
|
|
170
|
+
return x !== null && typeof x === 'object' && typeof x.type === 'string';
|
|
171
|
+
}
|
|
172
|
+
function isDefined(variableName, variablePosition, fileScopedVariables, scopedVariables) {
|
|
173
|
+
if (fileScopedVariables.has(variableName)) {
|
|
174
|
+
return true;
|
|
175
|
+
}
|
|
176
|
+
const scopes = scopedVariables.get(variableName);
|
|
177
|
+
if (!scopes) {
|
|
178
|
+
return false;
|
|
179
|
+
}
|
|
180
|
+
return scopes.some((scope) => {
|
|
181
|
+
const start = variablePosition.start;
|
|
182
|
+
const isVariableAfterScopeStart = !scope.start || start > scope.start;
|
|
183
|
+
const isVariableBeforeScopeEnd = !scope.end || start < scope.end;
|
|
184
|
+
return isVariableAfterScopeStart && isVariableBeforeScopeEnd;
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
function isLiquidTag(node) {
|
|
188
|
+
return node?.type === liquid_html_parser_1.NodeTypes.LiquidTag;
|
|
189
|
+
}
|
|
190
|
+
function isLiquidTagCapture(node) {
|
|
191
|
+
return node.name === liquid_html_parser_1.NamedTags.capture;
|
|
192
|
+
}
|
|
193
|
+
function isLiquidTagAssign(node) {
|
|
194
|
+
return node.name === liquid_html_parser_1.NamedTags.assign && typeof node.markup !== 'string';
|
|
195
|
+
}
|
|
196
|
+
function isLiquidTagHashAssign(node) {
|
|
197
|
+
return node.name === liquid_html_parser_1.NamedTags.hash_assign && typeof node.markup !== 'string';
|
|
198
|
+
}
|
|
199
|
+
function isLiquidTagGraphQL(node) {
|
|
200
|
+
return node.name === liquid_html_parser_1.NamedTags.graphql && typeof node.markup !== 'string';
|
|
201
|
+
}
|
|
202
|
+
function isLiquidTagParseJson(node) {
|
|
203
|
+
return node.name === liquid_html_parser_1.NamedTags.parse_json && typeof node.markup !== 'string';
|
|
204
|
+
}
|
|
205
|
+
function isLiquidForTag(node) {
|
|
206
|
+
return node.name === liquid_html_parser_1.NamedTags.for && typeof node.markup !== 'string';
|
|
207
|
+
}
|
|
208
|
+
function isLiquidTableRowTag(node) {
|
|
209
|
+
return node.name === liquid_html_parser_1.NamedTags.tablerow && typeof node.markup !== 'string';
|
|
210
|
+
}
|
|
211
|
+
function isLiquidTagIncrement(node) {
|
|
212
|
+
return node.name === liquid_html_parser_1.NamedTags.increment && typeof node.markup !== 'string';
|
|
213
|
+
}
|
|
214
|
+
function isLiquidTagDecrement(node) {
|
|
215
|
+
return node.name === liquid_html_parser_1.NamedTags.decrement && typeof node.markup !== 'string';
|
|
216
|
+
}
|
|
217
|
+
function isLiquidTagBackground(node) {
|
|
218
|
+
return (node.name === liquid_html_parser_1.NamedTags.background &&
|
|
219
|
+
typeof node.markup !== 'string' &&
|
|
220
|
+
node.markup.type === liquid_html_parser_1.NodeTypes.BackgroundMarkup);
|
|
221
|
+
}
|
|
222
|
+
function isHashAssignMarkup(node) {
|
|
223
|
+
return node?.type === liquid_html_parser_1.NodeTypes.HashAssignMarkup;
|
|
224
|
+
}
|
|
225
|
+
function isFunctionMarkup(node) {
|
|
226
|
+
return node?.type === liquid_html_parser_1.NodeTypes.FunctionMarkup;
|
|
227
|
+
}
|
|
228
|
+
function isLiquidBranchCatch(node) {
|
|
229
|
+
return node?.type === liquid_html_parser_1.NodeTypes.LiquidBranch && node.name === liquid_html_parser_1.NamedTags.catch;
|
|
230
|
+
}
|
|
231
|
+
function isLiquidVariable(node) {
|
|
232
|
+
return node?.type === liquid_html_parser_1.NodeTypes.LiquidVariable;
|
|
233
|
+
}
|
|
234
|
+
//# sourceMappingURL=extract-undefined-variables.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract-undefined-variables.js","sourceRoot":"","sources":["../../../src/checks/partial-call-arguments/extract-undefined-variables.ts"],"names":[],"mappings":"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"}
|