@platformos/platformos-check-common 0.0.7 → 0.0.9
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 +16 -0
- package/README.md +4 -4
- package/dist/AugmentedPlatformOSDocset.d.ts +11 -0
- package/dist/AugmentedPlatformOSDocset.js +81 -0
- package/dist/AugmentedPlatformOSDocset.js.map +1 -0
- package/dist/JSONValidator.js +1 -1
- package/dist/JSONValidator.js.map +1 -1
- package/dist/checks/deprecated-filter/index.js +4 -41
- package/dist/checks/deprecated-filter/index.js.map +1 -1
- package/dist/checks/deprecated-tag/index.js +21 -22
- package/dist/checks/deprecated-tag/index.js.map +1 -1
- package/dist/checks/duplicate-function-arguments/index.js +1 -1
- package/dist/checks/duplicate-function-arguments/index.js.map +1 -1
- package/dist/checks/duplicate-render-partial-arguments/index.js +1 -1
- package/dist/checks/duplicate-render-partial-arguments/index.js.map +1 -1
- package/dist/checks/graphql/index.js +1 -1
- package/dist/checks/graphql/index.js.map +1 -1
- package/dist/checks/graphql-variables/index.js +4 -0
- package/dist/checks/graphql-variables/index.js.map +1 -1
- package/dist/checks/img-width-and-height/index.js +1 -1
- package/dist/checks/img-width-and-height/index.js.map +1 -1
- package/dist/checks/index.d.ts +3 -3
- package/dist/checks/index.js +4 -79
- package/dist/checks/index.js.map +1 -1
- package/dist/checks/json-syntax-error/index.js +1 -1
- package/dist/checks/json-syntax-error/index.js.map +1 -1
- package/dist/checks/liquid-html-syntax-error/checks/InvalidLoopArguments.js +1 -1
- package/dist/checks/liquid-html-syntax-error/checks/InvalidLoopArguments.js.map +1 -1
- package/dist/checks/liquid-html-syntax-error/checks/InvalidTagSyntax.d.ts +19 -0
- package/dist/checks/liquid-html-syntax-error/checks/InvalidTagSyntax.js +79 -0
- package/dist/checks/liquid-html-syntax-error/checks/InvalidTagSyntax.js.map +1 -0
- package/dist/checks/liquid-html-syntax-error/checks/UnknownTag.d.ts +3 -0
- package/dist/checks/liquid-html-syntax-error/checks/UnknownTag.js +32 -0
- package/dist/checks/liquid-html-syntax-error/checks/UnknownTag.js.map +1 -0
- package/dist/checks/liquid-html-syntax-error/index.js +23 -5
- package/dist/checks/liquid-html-syntax-error/index.js.map +1 -1
- package/dist/checks/matching-translations/index.d.ts +2 -2
- package/dist/checks/matching-translations/index.js +114 -90
- package/dist/checks/matching-translations/index.js.map +1 -1
- package/dist/checks/metadata-params/index.js +6 -3
- package/dist/checks/metadata-params/index.js.map +1 -1
- package/dist/checks/missing-asset/index.js +1 -1
- package/dist/checks/missing-asset/index.js.map +1 -1
- package/dist/checks/missing-partial/index.d.ts +6 -0
- package/dist/checks/missing-partial/index.js +70 -0
- package/dist/checks/missing-partial/index.js.map +1 -0
- package/dist/checks/orphaned-partial/index.js +4 -4
- package/dist/checks/orphaned-partial/index.js.map +1 -1
- package/dist/checks/parser-blocking-script/index.js +10 -36
- package/dist/checks/parser-blocking-script/index.js.map +1 -1
- package/dist/checks/parser-blocking-script/suggestions.d.ts +1 -2
- package/dist/checks/parser-blocking-script/suggestions.js +1 -11
- package/dist/checks/parser-blocking-script/suggestions.js.map +1 -1
- package/dist/checks/reserved-doc-param-names/index.js +6 -5
- package/dist/checks/reserved-doc-param-names/index.js.map +1 -1
- package/dist/checks/translation-key-exists/index.js +1 -1
- package/dist/checks/translation-key-exists/index.js.map +1 -1
- package/dist/checks/unclosed-html-element/index.js +5 -1
- package/dist/checks/unclosed-html-element/index.js.map +1 -1
- package/dist/checks/undefined-object/index.js +13 -31
- package/dist/checks/undefined-object/index.js.map +1 -1
- package/dist/checks/unique-doc-param-names/index.js +1 -1
- package/dist/checks/unique-doc-param-names/index.js.map +1 -1
- package/dist/checks/unknown-filter/index.js +3 -3
- package/dist/checks/unknown-filter/index.js.map +1 -1
- package/dist/checks/unknown-property/index.js +1 -1
- package/dist/checks/unknown-property/index.js.map +1 -1
- package/dist/checks/unrecognized-render-partial-arguments/index.js +2 -2
- package/dist/checks/unrecognized-render-partial-arguments/index.js.map +1 -1
- package/dist/checks/unused-assign/index.js +1 -1
- package/dist/checks/unused-assign/index.js.map +1 -1
- package/dist/checks/unused-doc-param/index.js +1 -1
- package/dist/checks/unused-doc-param/index.js.map +1 -1
- package/dist/checks/utils.js +1 -1
- package/dist/checks/utils.js.map +1 -1
- package/dist/checks/valid-content-for-arguments/index.js +1 -1
- package/dist/checks/valid-content-for-arguments/index.js.map +1 -1
- package/dist/checks/valid-doc-param-types/index.js +4 -4
- package/dist/checks/valid-doc-param-types/index.js.map +1 -1
- package/dist/checks/valid-html-translation/index.d.ts +2 -2
- package/dist/checks/valid-html-translation/index.js +4 -4
- package/dist/checks/valid-html-translation/index.js.map +1 -1
- package/dist/checks/valid-json/index.js +1 -1
- package/dist/checks/valid-json/index.js.map +1 -1
- package/dist/checks/valid-render-partial-argument-types/index.js +2 -2
- package/dist/checks/valid-render-partial-argument-types/index.js.map +1 -1
- package/dist/checks/variable-name/index.js +1 -1
- package/dist/checks/variable-name/index.js.map +1 -1
- package/dist/context-utils.d.ts +18 -7
- package/dist/context-utils.js +68 -109
- package/dist/context-utils.js.map +1 -1
- package/dist/disabled-checks/index.js +4 -2
- package/dist/disabled-checks/index.js.map +1 -1
- package/dist/doc-generator/DocBlockGenerator.d.ts +16 -0
- package/dist/doc-generator/DocBlockGenerator.js +464 -0
- package/dist/doc-generator/DocBlockGenerator.js.map +1 -0
- package/dist/doc-generator/index.d.ts +1 -0
- package/dist/doc-generator/index.js +6 -0
- package/dist/doc-generator/index.js.map +1 -0
- package/dist/find-root.d.ts +7 -10
- package/dist/find-root.js +10 -17
- package/dist/find-root.js.map +1 -1
- package/dist/fixes/autofix.d.ts +4 -4
- package/dist/fixes/autofix.js +2 -2
- package/dist/fixes/autofix.js.map +1 -1
- package/dist/fixes/correctors/index.js +4 -0
- package/dist/fixes/correctors/index.js.map +1 -1
- package/dist/index.d.ts +5 -5
- package/dist/index.js +50 -17
- package/dist/index.js.map +1 -1
- package/dist/jsonc/parse.d.ts +1 -1
- package/dist/jsonc/parse.js +1 -1
- package/dist/liquid-doc/arguments.d.ts +7 -8
- package/dist/liquid-doc/arguments.js +28 -29
- package/dist/liquid-doc/arguments.js.map +1 -1
- package/dist/liquid-doc/liquidDoc.d.ts +1 -1
- package/dist/liquid-doc/liquidDoc.js.map +1 -1
- package/dist/liquid-doc/utils.d.ts +3 -3
- package/dist/liquid-doc/utils.js +14 -3
- package/dist/liquid-doc/utils.js.map +1 -1
- package/dist/path.d.ts +1 -0
- package/dist/path.js +16 -1
- package/dist/path.js.map +1 -1
- package/{src/test/MockTheme.ts → dist/test/MockApp.d.ts} +2 -3
- package/dist/test/MockApp.js +16 -0
- package/dist/test/MockApp.js.map +1 -0
- package/dist/test/MockFileSystem.d.ts +3 -3
- package/dist/test/MockFileSystem.js +6 -6
- package/dist/test/MockFileSystem.js.map +1 -1
- package/dist/test/index.d.ts +1 -1
- package/dist/test/index.js +1 -1
- package/dist/test/index.js.map +1 -1
- package/dist/test/test-helper.d.ts +10 -9
- package/dist/test/test-helper.js +15 -106
- package/dist/test/test-helper.js.map +1 -1
- package/dist/to-schema.d.ts +1 -1
- package/dist/to-source-code.d.ts +3 -2
- package/dist/to-source-code.js +20 -0
- package/dist/to-source-code.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types/platformos-liquid-docs.d.ts +128 -0
- package/dist/types/platformos-liquid-docs.js +3 -0
- package/dist/types/platformos-liquid-docs.js.map +1 -0
- package/dist/types/schemas/index.d.ts +0 -2
- package/dist/types/schemas/index.js.map +1 -1
- package/dist/types.d.ts +26 -67
- package/dist/types.js +3 -5
- package/dist/types.js.map +1 -1
- package/dist/utils/block.js.map +1 -1
- package/dist/utils/index.d.ts +0 -1
- package/dist/utils/index.js +0 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/yaml/parse.d.ts +5 -0
- package/dist/yaml/parse.js +94 -0
- package/dist/yaml/parse.js.map +1 -0
- package/package.json +4 -3
- package/src/{AugmentedThemeDocset.spec.ts → AugmentedPlatformOSDocset.spec.ts} +47 -34
- package/src/AugmentedPlatformOSDocset.ts +89 -0
- package/src/JSONValidator.ts +1 -1
- package/src/checks/deprecated-filter/index.spec.ts +76 -248
- package/src/checks/deprecated-filter/index.ts +5 -53
- package/src/checks/deprecated-tag/index.spec.ts +85 -34
- package/src/checks/deprecated-tag/index.ts +27 -22
- package/src/checks/duplicate-function-arguments/index.ts +1 -1
- package/src/checks/duplicate-render-partial-arguments/index.spec.ts +12 -12
- package/src/checks/duplicate-render-partial-arguments/index.ts +1 -1
- package/src/checks/graphql/index.ts +1 -1
- package/src/checks/graphql-variables/index.spec.ts +95 -0
- package/src/checks/graphql-variables/index.ts +4 -0
- package/src/checks/img-width-and-height/index.ts +2 -2
- package/src/checks/index.ts +11 -80
- package/src/checks/invalid-hash-assign-target/index.spec.ts +27 -27
- package/src/checks/json-syntax-error/index.ts +2 -2
- package/src/checks/liquid-html-syntax-error/checks/InvalidBooleanExpression.spec.ts +0 -11
- package/src/checks/liquid-html-syntax-error/checks/InvalidLoopArguments.spec.ts +1 -2
- package/src/checks/liquid-html-syntax-error/checks/InvalidLoopArguments.ts +2 -2
- package/src/checks/liquid-html-syntax-error/checks/InvalidTagSyntax.spec.ts +259 -0
- package/src/checks/liquid-html-syntax-error/checks/InvalidTagSyntax.ts +89 -0
- package/src/checks/liquid-html-syntax-error/checks/UnknownTag.spec.ts +293 -0
- package/src/checks/liquid-html-syntax-error/checks/UnknownTag.ts +43 -0
- package/src/checks/liquid-html-syntax-error/index.spec.ts +1 -6
- package/src/checks/liquid-html-syntax-error/index.ts +26 -5
- package/src/checks/matching-translations/index.spec.ts +187 -354
- package/src/checks/matching-translations/index.ts +117 -107
- package/src/checks/metadata-params/index.ts +6 -8
- package/src/checks/missing-asset/index.ts +1 -1
- package/src/checks/{missing-template → missing-partial}/index.spec.ts +6 -6
- package/src/checks/{missing-template → missing-partial}/index.ts +12 -26
- package/src/checks/orphaned-partial/index.ts +3 -3
- package/src/checks/parser-blocking-script/index.spec.ts +0 -118
- package/src/checks/parser-blocking-script/index.ts +3 -33
- package/src/checks/parser-blocking-script/suggestions.ts +1 -28
- package/src/checks/translation-key-exists/index.ts +1 -1
- package/src/checks/unclosed-html-element/index.ts +5 -1
- package/src/checks/undefined-object/index.spec.ts +32 -111
- package/src/checks/undefined-object/index.ts +15 -34
- package/src/checks/unique-doc-param-names/index.ts +1 -1
- package/src/checks/unknown-filter/index.spec.ts +2 -2
- package/src/checks/unknown-filter/index.ts +3 -3
- package/src/checks/unknown-property/index.ts +1 -1
- package/src/checks/unrecognized-render-partial-arguments/index.spec.ts +5 -5
- package/src/checks/unrecognized-render-partial-arguments/index.ts +2 -5
- package/src/checks/unused-assign/index.spec.ts +0 -30
- package/src/checks/unused-assign/index.ts +2 -2
- package/src/checks/unused-doc-param/index.ts +1 -1
- package/src/checks/utils.ts +1 -1
- package/src/checks/valid-doc-param-types/index.ts +4 -4
- package/src/checks/valid-html-translation/index.spec.ts +42 -32
- package/src/checks/valid-html-translation/index.ts +7 -7
- package/src/checks/valid-json/index.ts +2 -2
- package/src/checks/valid-render-partial-argument-types/index.spec.ts +13 -13
- package/src/checks/valid-render-partial-argument-types/index.ts +2 -5
- package/src/checks/variable-name/index.ts +1 -1
- package/src/context-utils.spec.ts +49 -77
- package/src/context-utils.ts +81 -129
- package/src/disabled-checks/index.spec.ts +26 -26
- package/src/disabled-checks/index.ts +2 -2
- package/src/disabled-checks/test-checks.ts +4 -4
- package/src/find-root.ts +12 -22
- package/src/fixes/autofix.spec.ts +2 -2
- package/src/fixes/autofix.ts +4 -4
- package/src/fixes/correctors/index.ts +4 -0
- package/src/ignore.spec.ts +4 -5
- package/src/index.ts +51 -21
- package/src/jsonc/parse.ts +1 -1
- package/src/liquid-doc/arguments.spec.ts +19 -45
- package/src/liquid-doc/arguments.ts +35 -42
- package/src/liquid-doc/liquidDoc.spec.ts +1 -1
- package/src/liquid-doc/liquidDoc.ts +1 -2
- package/src/liquid-doc/utils.ts +17 -8
- package/src/path.ts +16 -0
- package/src/test/MockApp.ts +17 -0
- package/src/test/MockFileSystem.spec.ts +10 -11
- package/src/test/MockFileSystem.ts +6 -6
- package/src/test/contain-offense.spec.ts +11 -3
- package/src/test/index.ts +1 -1
- package/src/test/test-helper.ts +43 -145
- package/src/to-source-code.ts +20 -1
- package/src/types/{theme-liquid-docs.ts → platformos-liquid-docs.ts} +8 -13
- package/src/types.ts +29 -92
- package/src/utils/index.ts +0 -1
- package/src/visitor.spec.ts +2 -2
- package/src/yaml/parse.ts +111 -0
- package/src/AugmentedThemeDocset.ts +0 -137
- package/src/checks/app-block-missing-schema/index.spec.ts +0 -121
- package/src/checks/app-block-missing-schema/index.ts +0 -46
- package/src/checks/app-block-valid-tags/index.spec.ts +0 -96
- package/src/checks/app-block-valid-tags/index.ts +0 -54
- package/src/checks/asset-preload/index.spec.ts +0 -78
- package/src/checks/asset-preload/index.ts +0 -65
- package/src/checks/asset-size-app-block-css/index.spec.ts +0 -88
- package/src/checks/asset-size-app-block-css/index.ts +0 -78
- package/src/checks/asset-size-app-block-javascript/index.spec.ts +0 -66
- package/src/checks/asset-size-app-block-javascript/index.ts +0 -78
- package/src/checks/asset-size-css/index.spec.ts +0 -166
- package/src/checks/asset-size-css/index.ts +0 -160
- package/src/checks/asset-size-javascript/index.spec.ts +0 -184
- package/src/checks/asset-size-javascript/index.ts +0 -144
- package/src/checks/block-id-usage/index.spec.ts +0 -76
- package/src/checks/block-id-usage/index.ts +0 -72
- package/src/checks/cdn-preconnect/index.spec.ts +0 -40
- package/src/checks/cdn-preconnect/index.ts +0 -43
- package/src/checks/content-for-header-modification/index.spec.ts +0 -65
- package/src/checks/content-for-header-modification/index.ts +0 -72
- package/src/checks/deprecate-bgsizes/index.spec.ts +0 -41
- package/src/checks/deprecate-bgsizes/index.ts +0 -49
- package/src/checks/deprecate-lazysizes/index.spec.ts +0 -26
- package/src/checks/deprecate-lazysizes/index.ts +0 -58
- package/src/checks/deprecated-filter/fixes.ts +0 -264
- package/src/checks/deprecated-fonts-on-sections-and-blocks/deprecated-fonts-data.ts +0 -1343
- package/src/checks/deprecated-fonts-on-sections-and-blocks/index.spec.ts +0 -613
- package/src/checks/deprecated-fonts-on-sections-and-blocks/index.ts +0 -284
- package/src/checks/deprecated-fonts-on-settings-schema/index.spec.ts +0 -102
- package/src/checks/deprecated-fonts-on-settings-schema/index.ts +0 -66
- package/src/checks/duplicate-content-for-arguments/index.spec.ts +0 -98
- package/src/checks/duplicate-content-for-arguments/index.ts +0 -43
- package/src/checks/empty-block-content/index.spec.ts +0 -117
- package/src/checks/empty-block-content/index.ts +0 -60
- package/src/checks/hardcoded-routes/index.spec.ts +0 -58
- package/src/checks/hardcoded-routes/index.ts +0 -100
- package/src/checks/json-missing-block/index.spec.ts +0 -435
- package/src/checks/json-missing-block/index.ts +0 -56
- package/src/checks/json-missing-block/missing-block-utils.ts +0 -147
- package/src/checks/liquid-free-settings/index.spec.ts +0 -180
- package/src/checks/liquid-free-settings/index.ts +0 -79
- package/src/checks/missing-content-for-arguments/index.spec.ts +0 -144
- package/src/checks/missing-content-for-arguments/index.ts +0 -46
- package/src/checks/pagination-size/index.spec.ts +0 -158
- package/src/checks/pagination-size/index.ts +0 -104
- package/src/checks/remote-asset/index.spec.ts +0 -280
- package/src/checks/remote-asset/index.ts +0 -238
- package/src/checks/reserved-doc-param-names/index.spec.ts +0 -62
- package/src/checks/reserved-doc-param-names/index.ts +0 -57
- package/src/checks/schema-presets-block-order/index.spec.ts +0 -344
- package/src/checks/schema-presets-block-order/index.ts +0 -154
- package/src/checks/schema-presets-static-blocks/index.spec.ts +0 -145
- package/src/checks/schema-presets-static-blocks/index.ts +0 -126
- package/src/checks/static-stylesheet-and-javascript-tags/index.spec.ts +0 -257
- package/src/checks/static-stylesheet-and-javascript-tags/index.ts +0 -48
- package/src/checks/unique-settings-id/index.spec.ts +0 -24
- package/src/checks/unique-settings-id/index.ts +0 -84
- package/src/checks/unique-settings-id/test-data.ts +0 -1191
- package/src/checks/unique-static-block-id/index.spec.ts +0 -55
- package/src/checks/unique-static-block-id/index.ts +0 -60
- package/src/checks/unrecognized-content-for-arguments/index.spec.ts +0 -145
- package/src/checks/unrecognized-content-for-arguments/index.ts +0 -55
- package/src/checks/valid-block-target/index.spec.ts +0 -1396
- package/src/checks/valid-block-target/index.ts +0 -142
- package/src/checks/valid-content-for-argument-types/index.spec.ts +0 -382
- package/src/checks/valid-content-for-argument-types/index.ts +0 -42
- package/src/checks/valid-content-for-arguments/index.spec.ts +0 -107
- package/src/checks/valid-content-for-arguments/index.ts +0 -98
- package/src/checks/valid-local-blocks/index.spec.ts +0 -286
- package/src/checks/valid-local-blocks/index.ts +0 -100
- package/src/checks/valid-local-blocks/valid-block-utils.ts +0 -97
- package/src/checks/valid-schema/index.spec.ts +0 -174
- package/src/checks/valid-schema/index.ts +0 -41
- package/src/checks/valid-schema-name/index.spec.ts +0 -112
- package/src/checks/valid-schema-name/index.ts +0 -75
- package/src/checks/valid-settings-key/index.spec.ts +0 -321
- package/src/checks/valid-settings-key/index.ts +0 -144
- package/src/checks/valid-static-block-type/index.spec.ts +0 -38
- package/src/checks/valid-static-block-type/index.ts +0 -58
- package/src/checks/valid-visible-if/index.spec.ts +0 -619
- package/src/checks/valid-visible-if/index.ts +0 -184
- package/src/checks/valid-visible-if/visible-if-utils.ts +0 -158
- package/src/tags/content-for.ts +0 -25
- package/src/to-schema.ts +0 -231
- package/src/types/schemas/index.ts +0 -5
- package/src/types/schemas/preset.ts +0 -52
- package/src/types/schemas/section.ts +0 -86
- package/src/types/schemas/setting.ts +0 -320
- package/src/types/schemas/template.ts +0 -34
- package/src/types/schemas/theme-block.ts +0 -34
- package/src/types/theme-schemas.ts +0 -80
- package/src/utils/block.ts +0 -300
- package/src/utils/markup.ts +0 -10
|
@@ -1,36 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
HtmlRawNode,
|
|
3
|
-
LiquidFilter,
|
|
4
|
-
LiquidVariable,
|
|
5
|
-
LiquidVariableOutput,
|
|
6
|
-
} from '@platformos/liquid-html-parser';
|
|
1
|
+
import { HtmlRawNode } from '@platformos/liquid-html-parser';
|
|
7
2
|
import { LiquidHtmlSuggestion } from '../../types';
|
|
8
|
-
import { last } from '../../utils';
|
|
9
3
|
|
|
10
4
|
const suggestionMessage = (attr: 'defer' | 'async') =>
|
|
11
5
|
`Use an HTML script tag with the ${attr} attribute instead`;
|
|
12
6
|
|
|
13
|
-
export const liquidFilterSuggestion = (
|
|
14
|
-
attr: 'defer' | 'async',
|
|
15
|
-
node: LiquidFilter,
|
|
16
|
-
parentNode: LiquidVariable,
|
|
17
|
-
grandParentNode: LiquidVariableOutput,
|
|
18
|
-
): LiquidHtmlSuggestion => ({
|
|
19
|
-
message: suggestionMessage(attr),
|
|
20
|
-
fix(corrector) {
|
|
21
|
-
const expression = node.source.slice(
|
|
22
|
-
parentNode.expression.position.start,
|
|
23
|
-
last(parentNode.filters, -1)?.position.end ?? node.position.start,
|
|
24
|
-
);
|
|
25
|
-
const url = `{{ ${expression} }}`;
|
|
26
|
-
corrector.replace(
|
|
27
|
-
grandParentNode.position.start,
|
|
28
|
-
grandParentNode.position.end,
|
|
29
|
-
`<script src="${url}" ${attr}></script>`,
|
|
30
|
-
);
|
|
31
|
-
},
|
|
32
|
-
});
|
|
33
|
-
|
|
34
7
|
export const scriptTagSuggestion = (
|
|
35
8
|
attr: 'defer' | 'async',
|
|
36
9
|
node: HtmlRawNode,
|
|
@@ -25,7 +25,7 @@ export const TranslationKeyExists: LiquidCheckDefinition = {
|
|
|
25
25
|
docs: {
|
|
26
26
|
description: 'Reports missing translation keys',
|
|
27
27
|
recommended: true,
|
|
28
|
-
url: 'https://
|
|
28
|
+
url: 'https://documentation.platformos.com/developer-guide/platformos-check/checks/translation-key-exists',
|
|
29
29
|
},
|
|
30
30
|
type: SourceCodeType.LiquidHtml,
|
|
31
31
|
severity: Severity.ERROR,
|
|
@@ -41,7 +41,7 @@ export const UnclosedHTMLElement: LiquidCheckDefinition = {
|
|
|
41
41
|
docs: {
|
|
42
42
|
description: 'Warns you of unbalanced HTML tags in branching code',
|
|
43
43
|
recommended: true,
|
|
44
|
-
url: 'https://
|
|
44
|
+
url: 'https://documentation.platformos.com/developer-guide/platformos-check/checks/unclosed-html-element',
|
|
45
45
|
},
|
|
46
46
|
type: SourceCodeType.LiquidHtml,
|
|
47
47
|
severity: Severity.WARNING,
|
|
@@ -272,6 +272,10 @@ function getConditionIdentifierForMarkup(condition: string | LiquidConditionalEx
|
|
|
272
272
|
condition.relation,
|
|
273
273
|
getConditionIdentifierForMarkup(condition.right),
|
|
274
274
|
].join(' ');
|
|
275
|
+
case NodeTypes.JsonHashLiteral:
|
|
276
|
+
return '{}';
|
|
277
|
+
case NodeTypes.JsonArrayLiteral:
|
|
278
|
+
return '[]';
|
|
275
279
|
default: {
|
|
276
280
|
return assertNever(condition);
|
|
277
281
|
}
|
|
@@ -205,20 +205,6 @@ describe('Module: UndefinedObject', () => {
|
|
|
205
205
|
expect(offenses.map((e) => e.message)).toEqual(["Unknown object 'c' used."]);
|
|
206
206
|
});
|
|
207
207
|
|
|
208
|
-
it('should contextually report on the undefined nature of the paginate object (defined in paginate tag, undefined outside)', async () => {
|
|
209
|
-
const sourceCode = `
|
|
210
|
-
{% assign col = 'string' | split: '' %}
|
|
211
|
-
{% paginate col by 5 %}
|
|
212
|
-
{{ paginate }}
|
|
213
|
-
{% endpaginate %}{{ paginate }}
|
|
214
|
-
`;
|
|
215
|
-
|
|
216
|
-
const offenses = await runLiquidCheck(UndefinedObject, sourceCode);
|
|
217
|
-
|
|
218
|
-
expect(offenses).toHaveLength(1);
|
|
219
|
-
expect(offenses.map((e) => e.message)).toEqual(["Unknown object 'paginate' used."]);
|
|
220
|
-
});
|
|
221
|
-
|
|
222
208
|
it('should contextually report on the undefined nature of the form object (defined in form tag, undefined outside)', async () => {
|
|
223
209
|
const sourceCode = `
|
|
224
210
|
{% form "cart" %}
|
|
@@ -256,7 +242,7 @@ describe('Module: UndefinedObject', () => {
|
|
|
256
242
|
}
|
|
257
243
|
});
|
|
258
244
|
|
|
259
|
-
it('should report an offense when object is undefined in a "
|
|
245
|
+
it('should report an offense when object is undefined in a "partial" file with doc tags that are missing the associated param', async () => {
|
|
260
246
|
const sourceCode = `
|
|
261
247
|
{% doc %}
|
|
262
248
|
{% enddoc %}
|
|
@@ -273,7 +259,7 @@ describe('Module: UndefinedObject', () => {
|
|
|
273
259
|
expect(offenses.map((e) => e.message)).toEqual(["Unknown object 'my_var' used."]);
|
|
274
260
|
});
|
|
275
261
|
|
|
276
|
-
it('should not report an offense when object is defined with @param in a
|
|
262
|
+
it('should not report an offense when object is defined with @param in a partial file', async () => {
|
|
277
263
|
const sourceCode = `
|
|
278
264
|
{% doc %}
|
|
279
265
|
@param {string} text
|
|
@@ -313,42 +299,9 @@ describe('Module: UndefinedObject', () => {
|
|
|
313
299
|
}
|
|
314
300
|
});
|
|
315
301
|
|
|
316
|
-
it('should support contextual exceptions', async () => {
|
|
317
|
-
let offenses: Offense[];
|
|
318
|
-
const contexts: [string, string][] = [
|
|
319
|
-
['section', 'sections/section.liquid'],
|
|
320
|
-
['predictive_search', 'sections/predictive-search.liquid'],
|
|
321
|
-
['recommendations', 'sections/recommendations.liquid'],
|
|
322
|
-
['comment', 'sections/main-article.liquid'],
|
|
323
|
-
['block', 'blocks/theme-app-extension.liquid'],
|
|
324
|
-
['app', 'blocks/theme-app-extension.liquid'],
|
|
325
|
-
['app', 'app/views/partials/theme-app-extension.liquid'],
|
|
326
|
-
];
|
|
327
|
-
for (const [object, goodPath] of contexts) {
|
|
328
|
-
offenses = await runLiquidCheck(UndefinedObject, `{{ ${object} }}`, goodPath);
|
|
329
|
-
expect(offenses).toHaveLength(0);
|
|
330
|
-
offenses = await runLiquidCheck(UndefinedObject, `{{ ${object} }}`, 'file.liquid');
|
|
331
|
-
expect(offenses).toHaveLength(1);
|
|
332
|
-
}
|
|
333
|
-
});
|
|
334
|
-
|
|
335
|
-
it('should support contextual exceptions for checkout.liquid', async () => {
|
|
302
|
+
it('should support contextual exceptions for partials', async () => {
|
|
336
303
|
let offenses: Offense[];
|
|
337
|
-
const contexts: [string, string][] = [
|
|
338
|
-
['locale', 'layout/checkout.liquid'],
|
|
339
|
-
['direction', 'layout/checkout.liquid'],
|
|
340
|
-
['skip_to_content_link', 'layout/checkout.liquid'],
|
|
341
|
-
['checkout_html_classes', 'layout/checkout.liquid'],
|
|
342
|
-
['checkout_stylesheets', 'layout/checkout.liquid'],
|
|
343
|
-
['checkout_scripts', 'layout/checkout.liquid'],
|
|
344
|
-
['content_for_logo', 'layout/checkout.liquid'],
|
|
345
|
-
['breadcrumb', 'layout/checkout.liquid'],
|
|
346
|
-
['order_summary_toggle', 'layout/checkout.liquid'],
|
|
347
|
-
['content_for_order_summary', 'layout/checkout.liquid'],
|
|
348
|
-
['alternative_payment_methods', 'layout/checkout.liquid'],
|
|
349
|
-
['content_for_footer', 'layout/checkout.liquid'],
|
|
350
|
-
['tracking_code', 'layout/checkout.liquid'],
|
|
351
|
-
];
|
|
304
|
+
const contexts: [string, string][] = [['app', 'app/views/partials/theme-app-extension.liquid']];
|
|
352
305
|
for (const [object, goodPath] of contexts) {
|
|
353
306
|
offenses = await runLiquidCheck(UndefinedObject, `{{ ${object} }}`, goodPath);
|
|
354
307
|
expect(offenses).toHaveLength(0);
|
|
@@ -374,44 +327,12 @@ describe('Module: UndefinedObject', () => {
|
|
|
374
327
|
`;
|
|
375
328
|
|
|
376
329
|
const offenses = await runLiquidCheck(UndefinedObject, sourceCode, 'file.liquid', {
|
|
377
|
-
|
|
330
|
+
platformosDocset: undefined,
|
|
378
331
|
});
|
|
379
332
|
|
|
380
333
|
expect(offenses).toHaveLength(0);
|
|
381
334
|
});
|
|
382
335
|
|
|
383
|
-
it('should not report an offense when object is defined with @param in a block file', async () => {
|
|
384
|
-
const sourceCode = `
|
|
385
|
-
{% doc %}
|
|
386
|
-
@param {string} text
|
|
387
|
-
{% enddoc %}
|
|
388
|
-
|
|
389
|
-
{{ text }}
|
|
390
|
-
`;
|
|
391
|
-
|
|
392
|
-
const filePath = 'blocks/my-custom-block.liquid';
|
|
393
|
-
const offenses = await runLiquidCheck(UndefinedObject, sourceCode, filePath);
|
|
394
|
-
|
|
395
|
-
expect(offenses).toHaveLength(0);
|
|
396
|
-
});
|
|
397
|
-
|
|
398
|
-
it('should report an offense when an undefined object is used alongside @param in a block file', async () => {
|
|
399
|
-
const sourceCode = `
|
|
400
|
-
{% doc %}
|
|
401
|
-
@param {string} text
|
|
402
|
-
{% enddoc %}
|
|
403
|
-
|
|
404
|
-
{{ text }}
|
|
405
|
-
{{ undefined_variable }}
|
|
406
|
-
`;
|
|
407
|
-
|
|
408
|
-
const filePath = 'blocks/my-custom-block.liquid';
|
|
409
|
-
const offenses = await runLiquidCheck(UndefinedObject, sourceCode, filePath);
|
|
410
|
-
|
|
411
|
-
expect(offenses).toHaveLength(1);
|
|
412
|
-
expect(offenses[0].message).toBe("Unknown object 'undefined_variable' used.");
|
|
413
|
-
});
|
|
414
|
-
|
|
415
336
|
it('should not report an offense when a self defined variable is defined with a @param tag', async () => {
|
|
416
337
|
const sourceCode = `
|
|
417
338
|
{% doc %}
|
|
@@ -438,33 +359,6 @@ describe('Module: UndefinedObject', () => {
|
|
|
438
359
|
expect(offenses[0].message).toBe("Unknown object 'my_var' used.");
|
|
439
360
|
});
|
|
440
361
|
|
|
441
|
-
it('should not report an offense when using variables inside visible_if statements in a schema tag', async () => {
|
|
442
|
-
const sourceCode = `
|
|
443
|
-
{% schema %}
|
|
444
|
-
{
|
|
445
|
-
"settings": [
|
|
446
|
-
{
|
|
447
|
-
"type": "text",
|
|
448
|
-
"label": "foo",
|
|
449
|
-
"id": "foo",
|
|
450
|
-
}
|
|
451
|
-
{
|
|
452
|
-
"type": "text",
|
|
453
|
-
"label": "bar",
|
|
454
|
-
"id": "bar",
|
|
455
|
-
"visible_if": "{{ block.settings.foo }}",
|
|
456
|
-
}
|
|
457
|
-
]
|
|
458
|
-
}
|
|
459
|
-
{% endschema %}
|
|
460
|
-
`;
|
|
461
|
-
|
|
462
|
-
const offenses = await runLiquidCheck(UndefinedObject, sourceCode);
|
|
463
|
-
|
|
464
|
-
assert(offenses.length == 0);
|
|
465
|
-
expect(offenses).to.be.empty;
|
|
466
|
-
});
|
|
467
|
-
|
|
468
362
|
it('should report an offense when job_id is used inside background block', async () => {
|
|
469
363
|
const sourceCode = `
|
|
470
364
|
{% background job_id %}
|
|
@@ -516,4 +410,31 @@ describe('Module: UndefinedObject', () => {
|
|
|
516
410
|
expect(offenses).toHaveLength(1);
|
|
517
411
|
expect(offenses.map((e) => e.message)).toEqual(["Unknown object 'job_id' used."]);
|
|
518
412
|
});
|
|
413
|
+
|
|
414
|
+
it('should not report an offense when object is defined with a parse_json tag', async () => {
|
|
415
|
+
const sourceCode = `
|
|
416
|
+
{% parse_json groups_data %}
|
|
417
|
+
{ "hello": "world" }
|
|
418
|
+
{% endparse_json %}
|
|
419
|
+
{{ groups_data }}
|
|
420
|
+
`;
|
|
421
|
+
|
|
422
|
+
const offenses = await runLiquidCheck(UndefinedObject, sourceCode);
|
|
423
|
+
|
|
424
|
+
expect(offenses).toHaveLength(0);
|
|
425
|
+
});
|
|
426
|
+
|
|
427
|
+
it('should report an offense when parse_json variable is used before the tag', async () => {
|
|
428
|
+
const sourceCode = `
|
|
429
|
+
{{ groups_data }}
|
|
430
|
+
{% parse_json groups_data %}
|
|
431
|
+
{ "hello": "world" }
|
|
432
|
+
{% endparse_json %}
|
|
433
|
+
`;
|
|
434
|
+
|
|
435
|
+
const offenses = await runLiquidCheck(UndefinedObject, sourceCode);
|
|
436
|
+
|
|
437
|
+
expect(offenses).toHaveLength(1);
|
|
438
|
+
expect(offenses[0].message).toBe("Unknown object 'groups_data' used.");
|
|
439
|
+
});
|
|
519
440
|
});
|
|
@@ -16,10 +16,11 @@ import {
|
|
|
16
16
|
FunctionMarkup,
|
|
17
17
|
LiquidTagHashAssign,
|
|
18
18
|
LiquidTagGraphQL,
|
|
19
|
+
LiquidTagParseJson,
|
|
19
20
|
LiquidTagBackground,
|
|
20
21
|
BackgroundInlineMarkup,
|
|
21
22
|
} from '@platformos/liquid-html-parser';
|
|
22
|
-
import { LiquidCheckDefinition, Severity, SourceCodeType,
|
|
23
|
+
import { LiquidCheckDefinition, Severity, SourceCodeType, PlatformOSDocset } from '../../types';
|
|
23
24
|
import { isError, last } from '../../utils';
|
|
24
25
|
import { isWithinRawTagThatDoesNotParseItsContents } from '../utils';
|
|
25
26
|
|
|
@@ -32,7 +33,7 @@ export const UndefinedObject: LiquidCheckDefinition = {
|
|
|
32
33
|
docs: {
|
|
33
34
|
description: 'This check exists to identify references to undefined Liquid objects.',
|
|
34
35
|
recommended: true,
|
|
35
|
-
url: 'https://
|
|
36
|
+
url: 'https://documentation.platformos.com/developer-guide/platformos-check/checks/undefined-object',
|
|
36
37
|
},
|
|
37
38
|
type: SourceCodeType.LiquidHtml,
|
|
38
39
|
severity: Severity.WARNING,
|
|
@@ -49,11 +50,11 @@ export const UndefinedObject: LiquidCheckDefinition = {
|
|
|
49
50
|
/**
|
|
50
51
|
* Skip this check when definitions for global objects are unavailable.
|
|
51
52
|
*/
|
|
52
|
-
if (!context.
|
|
53
|
+
if (!context.platformosDocset) {
|
|
53
54
|
return {};
|
|
54
55
|
}
|
|
55
56
|
|
|
56
|
-
const
|
|
57
|
+
const platformosDocset = context.platformosDocset;
|
|
57
58
|
const scopedVariables: Map<string, Scope[]> = new Map();
|
|
58
59
|
const fileScopedVariables: Set<string> = new Set();
|
|
59
60
|
const variables: LiquidVariableLookup[] = [];
|
|
@@ -76,7 +77,7 @@ export const UndefinedObject: LiquidCheckDefinition = {
|
|
|
76
77
|
async LiquidTag(node, ancestors) {
|
|
77
78
|
if (isWithinRawTagThatDoesNotParseItsContents(ancestors)) return;
|
|
78
79
|
|
|
79
|
-
if (isLiquidTagAssign(node) || isLiquidTagGraphQL(node)) {
|
|
80
|
+
if (isLiquidTagAssign(node) || isLiquidTagGraphQL(node) || isLiquidTagParseJson(node)) {
|
|
80
81
|
indexVariableScope(node.markup.name, {
|
|
81
82
|
start: node.blockStartPosition.end,
|
|
82
83
|
});
|
|
@@ -99,7 +100,7 @@ export const UndefinedObject: LiquidCheckDefinition = {
|
|
|
99
100
|
* {{ form }}
|
|
100
101
|
* {% endform %}
|
|
101
102
|
*/
|
|
102
|
-
if (
|
|
103
|
+
if (node.name === 'form') {
|
|
103
104
|
indexVariableScope(node.name, {
|
|
104
105
|
start: node.blockStartPosition.end,
|
|
105
106
|
end: node.blockEndPosition?.start,
|
|
@@ -158,6 +159,7 @@ export const UndefinedObject: LiquidCheckDefinition = {
|
|
|
158
159
|
|
|
159
160
|
const parent = last(ancestors);
|
|
160
161
|
if (isLiquidTag(parent) && isLiquidTagCapture(parent)) return;
|
|
162
|
+
if (isLiquidTag(parent) && isLiquidTagParseJson(parent)) return;
|
|
161
163
|
|
|
162
164
|
// Skip the jobId variable in background tag markup - it's being defined, not used
|
|
163
165
|
if (isBackgroundInlineMarkup(parent) && parent.jobId === node) return;
|
|
@@ -166,7 +168,7 @@ export const UndefinedObject: LiquidCheckDefinition = {
|
|
|
166
168
|
},
|
|
167
169
|
|
|
168
170
|
async onCodePathEnd() {
|
|
169
|
-
const objects = await globalObjects(
|
|
171
|
+
const objects = await globalObjects(platformosDocset, relativePath);
|
|
170
172
|
|
|
171
173
|
objects.forEach((obj) => fileScopedVariables.add(obj.name));
|
|
172
174
|
|
|
@@ -192,8 +194,8 @@ export const UndefinedObject: LiquidCheckDefinition = {
|
|
|
192
194
|
},
|
|
193
195
|
};
|
|
194
196
|
|
|
195
|
-
async function globalObjects(
|
|
196
|
-
const objects = await
|
|
197
|
+
async function globalObjects(platformosDocset: PlatformOSDocset, relativePath: string) {
|
|
198
|
+
const objects = await platformosDocset.objects();
|
|
197
199
|
const contextualObjects = getContextualObjects(relativePath);
|
|
198
200
|
|
|
199
201
|
const globalObjects = objects.filter(({ access, name }) => {
|
|
@@ -209,31 +211,6 @@ async function globalObjects(themeDocset: ThemeDocset, relativePath: string) {
|
|
|
209
211
|
}
|
|
210
212
|
|
|
211
213
|
function getContextualObjects(relativePath: string): string[] {
|
|
212
|
-
if (relativePath.startsWith('layout/checkout.liquid')) {
|
|
213
|
-
return [
|
|
214
|
-
'locale',
|
|
215
|
-
'direction',
|
|
216
|
-
'skip_to_content_link',
|
|
217
|
-
'checkout_html_classes',
|
|
218
|
-
'checkout_stylesheets',
|
|
219
|
-
'checkout_scripts',
|
|
220
|
-
'content_for_logo',
|
|
221
|
-
'breadcrumb',
|
|
222
|
-
'order_summary_toggle',
|
|
223
|
-
'content_for_order_summary',
|
|
224
|
-
'alternative_payment_methods',
|
|
225
|
-
'content_for_footer',
|
|
226
|
-
'tracking_code',
|
|
227
|
-
];
|
|
228
|
-
}
|
|
229
|
-
if (relativePath.startsWith('sections/')) {
|
|
230
|
-
return ['section', 'predictive_search', 'recommendations', 'comment'];
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
if (relativePath.startsWith('blocks/')) {
|
|
234
|
-
return ['app', 'section', 'recommendations', 'block'];
|
|
235
|
-
}
|
|
236
|
-
|
|
237
214
|
if (relativePath.includes('views/partials/') || relativePath.includes('/lib/')) {
|
|
238
215
|
return ['app'];
|
|
239
216
|
}
|
|
@@ -300,6 +277,10 @@ function isLiquidTagGraphQL(node: LiquidTag): node is LiquidTagGraphQL {
|
|
|
300
277
|
return node.name === NamedTags.graphql && typeof node.markup !== 'string';
|
|
301
278
|
}
|
|
302
279
|
|
|
280
|
+
function isLiquidTagParseJson(node: LiquidTag): node is LiquidTagParseJson {
|
|
281
|
+
return node.name === NamedTags.parse_json && typeof node.markup !== 'string';
|
|
282
|
+
}
|
|
283
|
+
|
|
303
284
|
function isLiquidForTag(node: LiquidTag): node is LiquidTagFor {
|
|
304
285
|
return node.name === NamedTags.for && typeof node.markup !== 'string';
|
|
305
286
|
}
|
|
@@ -8,7 +8,7 @@ export const UniqueDocParamNames: LiquidCheckDefinition = {
|
|
|
8
8
|
description:
|
|
9
9
|
'This check exists to ensure any parameter names defined in the `doc` tag are unique.',
|
|
10
10
|
recommended: true,
|
|
11
|
-
url: 'https://
|
|
11
|
+
url: 'https://documentation.platformos.com/developer-guide/platformos-check/checks/unique-doc-param-names',
|
|
12
12
|
},
|
|
13
13
|
type: SourceCodeType.LiquidHtml,
|
|
14
14
|
severity: Severity.ERROR,
|
|
@@ -46,13 +46,13 @@ describe('Module: UnknownFilter', () => {
|
|
|
46
46
|
});
|
|
47
47
|
|
|
48
48
|
it('should not report an offense when a known filter is used (1)', async () => {
|
|
49
|
-
const sourceCode = `{{ 'hello' |
|
|
49
|
+
const sourceCode = `{{ 'hello' | parameterize }}`;
|
|
50
50
|
const offenses = await runLiquidCheck(UnknownFilter, sourceCode);
|
|
51
51
|
expect(offenses).toHaveLength(0);
|
|
52
52
|
});
|
|
53
53
|
|
|
54
54
|
it('should not report an offense when a known filter is used (2)', async () => {
|
|
55
|
-
const sourceCode = `{{ 'hello' |
|
|
55
|
+
const sourceCode = `{{ 'hello' | slugify }}`;
|
|
56
56
|
const offenses = await runLiquidCheck(UnknownFilter, sourceCode);
|
|
57
57
|
expect(offenses).toHaveLength(0);
|
|
58
58
|
});
|
|
@@ -7,7 +7,7 @@ export const UnknownFilter: LiquidCheckDefinition = {
|
|
|
7
7
|
name: 'Prevent use of unknown filters',
|
|
8
8
|
docs: {
|
|
9
9
|
description: 'This check is aimed at preventing the use of unknown filters.',
|
|
10
|
-
url: 'https://
|
|
10
|
+
url: 'https://documentation.platformos.com/developer-guide/platformos-check/checks/unknown-filter',
|
|
11
11
|
recommended: true,
|
|
12
12
|
},
|
|
13
13
|
type: SourceCodeType.LiquidHtml,
|
|
@@ -17,13 +17,13 @@ export const UnknownFilter: LiquidCheckDefinition = {
|
|
|
17
17
|
},
|
|
18
18
|
|
|
19
19
|
create(context) {
|
|
20
|
-
if (!context.
|
|
20
|
+
if (!context.platformosDocset) {
|
|
21
21
|
return {};
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
return {
|
|
25
25
|
async LiquidFilter(node) {
|
|
26
|
-
const knownFilters = await context.
|
|
26
|
+
const knownFilters = await context.platformosDocset!.filters();
|
|
27
27
|
|
|
28
28
|
if (!knownFilters.some((filter) => filter.name === node.name)) {
|
|
29
29
|
context.report({
|
|
@@ -56,7 +56,7 @@ export const UnknownProperty: LiquidCheckDefinition = {
|
|
|
56
56
|
let graphqlSchema: string | undefined;
|
|
57
57
|
const getGraphQLSchema = async (): Promise<string | undefined> => {
|
|
58
58
|
if (graphqlSchema === undefined) {
|
|
59
|
-
graphqlSchema = (await context.
|
|
59
|
+
graphqlSchema = (await context.platformosDocset?.graphQL()) ?? undefined;
|
|
60
60
|
}
|
|
61
61
|
return graphqlSchema;
|
|
62
62
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { applySuggestions,
|
|
2
|
+
import { applySuggestions, MockApp, runLiquidCheck } from '../../test';
|
|
3
3
|
import { UnrecognizedRenderPartialArguments } from '.';
|
|
4
4
|
|
|
5
5
|
function check(partial: string, source: string) {
|
|
@@ -113,14 +113,14 @@ describe('Module: UnrecognizedRenderPartialParams', () => {
|
|
|
113
113
|
});
|
|
114
114
|
|
|
115
115
|
it('should report when "with/for" alias syntax is used', async () => {
|
|
116
|
-
const
|
|
116
|
+
const mockApp = {
|
|
117
117
|
'app/views/partials/card.liquid': `
|
|
118
118
|
{% doc %}
|
|
119
119
|
@param {string} title - The title of the card
|
|
120
120
|
{% enddoc %}
|
|
121
121
|
<div>{{ title }}</div>
|
|
122
122
|
`,
|
|
123
|
-
} as
|
|
123
|
+
} as MockApp;
|
|
124
124
|
|
|
125
125
|
let sourceCode = `{% render 'card' with 'my-card' as unknown_param %}`;
|
|
126
126
|
let offenses = await runLiquidCheck(
|
|
@@ -128,7 +128,7 @@ describe('Module: UnrecognizedRenderPartialParams', () => {
|
|
|
128
128
|
sourceCode,
|
|
129
129
|
undefined,
|
|
130
130
|
{},
|
|
131
|
-
|
|
131
|
+
mockApp,
|
|
132
132
|
);
|
|
133
133
|
|
|
134
134
|
expect(offenses).toHaveLength(1);
|
|
@@ -146,7 +146,7 @@ describe('Module: UnrecognizedRenderPartialParams', () => {
|
|
|
146
146
|
sourceCode,
|
|
147
147
|
undefined,
|
|
148
148
|
{},
|
|
149
|
-
|
|
149
|
+
mockApp,
|
|
150
150
|
);
|
|
151
151
|
|
|
152
152
|
expect(offenses).toHaveLength(1);
|
|
@@ -16,7 +16,7 @@ export const UnrecognizedRenderPartialArguments: LiquidCheckDefinition = {
|
|
|
16
16
|
description:
|
|
17
17
|
'This check ensures that no unknown arguments are used when rendering a partial.',
|
|
18
18
|
recommended: true,
|
|
19
|
-
url: 'https://
|
|
19
|
+
url: 'https://documentation.platformos.com/developer-guide/platformos-check/checks/unrecognized-render-partial-arguments',
|
|
20
20
|
},
|
|
21
21
|
type: SourceCodeType.LiquidHtml,
|
|
22
22
|
severity: Severity.WARNING,
|
|
@@ -60,10 +60,7 @@ export const UnrecognizedRenderPartialArguments: LiquidCheckDefinition = {
|
|
|
60
60
|
|
|
61
61
|
if (!partialName) return;
|
|
62
62
|
|
|
63
|
-
const liquidDocParameters = await getLiquidDocParams(
|
|
64
|
-
context,
|
|
65
|
-
`app/views/partials/${partialName}.liquid`,
|
|
66
|
-
);
|
|
63
|
+
const liquidDocParameters = await getLiquidDocParams(context, partialName);
|
|
67
64
|
|
|
68
65
|
if (!liquidDocParameters) return;
|
|
69
66
|
|
|
@@ -84,36 +84,6 @@ describe('Module: UnusedAssign', () => {
|
|
|
84
84
|
expect(offenses).not.to.be.empty;
|
|
85
85
|
});
|
|
86
86
|
|
|
87
|
-
it('should not report unused assigns for things used in a raw-like tag', async () => {
|
|
88
|
-
const tags = ['style'];
|
|
89
|
-
for (const tag of tags) {
|
|
90
|
-
const sourceCode = `
|
|
91
|
-
{% assign usedVar = 1 %}
|
|
92
|
-
{% ${tag} %}
|
|
93
|
-
{{ usedVar }}
|
|
94
|
-
{% end${tag} %}
|
|
95
|
-
`;
|
|
96
|
-
|
|
97
|
-
const offenses = await runLiquidCheck(UnusedAssign, sourceCode);
|
|
98
|
-
expect(offenses).to.be.empty;
|
|
99
|
-
}
|
|
100
|
-
});
|
|
101
|
-
|
|
102
|
-
it('should report unused assigns for things used in raw code that gets stripped away (schema, etc)', async () => {
|
|
103
|
-
const tags = ['schema', 'javascript', 'stylesheet'];
|
|
104
|
-
for (const tag of tags) {
|
|
105
|
-
const sourceCode = `
|
|
106
|
-
{% assign usedVar = 1 %}
|
|
107
|
-
{% ${tag} %}
|
|
108
|
-
{{ usedVar }}
|
|
109
|
-
{% end${tag} %}
|
|
110
|
-
`;
|
|
111
|
-
|
|
112
|
-
const offenses = await runLiquidCheck(UnusedAssign, sourceCode);
|
|
113
|
-
expect(offenses).to.not.be.empty;
|
|
114
|
-
}
|
|
115
|
-
});
|
|
116
|
-
|
|
117
87
|
it('should not report unused assigns for things used in a HTML raw-like tag', async () => {
|
|
118
88
|
const tags = ['style', 'script'];
|
|
119
89
|
for (const tag of tags) {
|
|
@@ -14,9 +14,9 @@ export const UnusedAssign: LiquidCheckDefinition = {
|
|
|
14
14
|
name: 'Prevent unused assigns',
|
|
15
15
|
docs: {
|
|
16
16
|
description:
|
|
17
|
-
'This check exists to prevent bloat
|
|
17
|
+
'This check exists to prevent bloat by surfacing variable definitions that are not used.',
|
|
18
18
|
recommended: true,
|
|
19
|
-
url: 'https://
|
|
19
|
+
url: 'https://documentation.platformos.com/developer-guide/platformos-check/checks/unused-assign',
|
|
20
20
|
},
|
|
21
21
|
type: SourceCodeType.LiquidHtml,
|
|
22
22
|
severity: Severity.WARNING,
|
|
@@ -10,7 +10,7 @@ export const UnusedDocParam: LiquidCheckDefinition = {
|
|
|
10
10
|
description:
|
|
11
11
|
'This check exists to ensure any parameters defined in the `doc` tag are used within the partial.',
|
|
12
12
|
recommended: true,
|
|
13
|
-
url: 'https://
|
|
13
|
+
url: 'https://documentation.platformos.com/developer-guide/platformos-check/checks/unused-doc-param',
|
|
14
14
|
},
|
|
15
15
|
type: SourceCodeType.LiquidHtml,
|
|
16
16
|
severity: Severity.WARNING,
|
package/src/checks/utils.ts
CHANGED
|
@@ -104,7 +104,7 @@ export function isLoopLiquidTag(tag: LiquidTag): tag is LiquidTagFor | LiquidTag
|
|
|
104
104
|
return LoopNamedTags.includes(tag.name as any);
|
|
105
105
|
}
|
|
106
106
|
|
|
107
|
-
const RawTagsThatDoNotParseTheirContents = ['raw'
|
|
107
|
+
const RawTagsThatDoNotParseTheirContents = ['raw'];
|
|
108
108
|
|
|
109
109
|
function isRawTagThatDoesNotParseItsContent(node: LiquidHtmlNode) {
|
|
110
110
|
return (
|
|
@@ -9,7 +9,7 @@ export const ValidDocParamTypes: LiquidCheckDefinition = {
|
|
|
9
9
|
description:
|
|
10
10
|
'This check exists to ensure any parameter types defined in the `doc` tag are valid.',
|
|
11
11
|
recommended: true,
|
|
12
|
-
url: 'https://
|
|
12
|
+
url: 'https://documentation.platformos.com/developer-guide/platformos-check/checks/valid-doc-param-types',
|
|
13
13
|
},
|
|
14
14
|
type: SourceCodeType.LiquidHtml,
|
|
15
15
|
severity: Severity.ERROR,
|
|
@@ -18,14 +18,14 @@ export const ValidDocParamTypes: LiquidCheckDefinition = {
|
|
|
18
18
|
},
|
|
19
19
|
|
|
20
20
|
create(context) {
|
|
21
|
-
if (!context.
|
|
21
|
+
if (!context.platformosDocset) {
|
|
22
22
|
return {};
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
-
// To avoid recalculating valid param types during
|
|
25
|
+
// To avoid recalculating valid param types during platformos-check, constructing
|
|
26
26
|
// the promise beforehand.
|
|
27
27
|
const validParamTypesPromise = context
|
|
28
|
-
.
|
|
28
|
+
.platformosDocset!.liquidDrops()
|
|
29
29
|
.then((entries) => new Set(getValidParamTypes(entries).keys()));
|
|
30
30
|
|
|
31
31
|
return {
|