@platformos/platformos-check-common 0.0.11 → 0.0.13
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 +39 -0
- package/CLAUDE.md +150 -0
- package/dist/AugmentedPlatformOSDocset.js +1 -0
- package/dist/AugmentedPlatformOSDocset.js.map +1 -1
- package/dist/checks/circular-render/index.d.ts +2 -0
- package/dist/checks/circular-render/index.js +164 -0
- package/dist/checks/circular-render/index.js.map +1 -0
- package/dist/checks/deprecated-filter/index.js +15 -0
- package/dist/checks/deprecated-filter/index.js.map +1 -1
- package/dist/checks/duplicate-content-for-arguments/index.js +1 -1
- package/dist/checks/duplicate-content-for-arguments/index.js.map +1 -1
- package/dist/checks/graphql/index.d.ts +1 -0
- package/dist/checks/graphql/index.js +20 -7
- package/dist/checks/graphql/index.js.map +1 -1
- package/dist/checks/index.d.ts +1 -1
- package/dist/checks/index.js +6 -0
- package/dist/checks/index.js.map +1 -1
- package/dist/checks/invalid-hash-assign-target/index.js +4 -3
- package/dist/checks/invalid-hash-assign-target/index.js.map +1 -1
- package/dist/checks/missing-content-for-arguments/index.js +1 -1
- package/dist/checks/missing-content-for-arguments/index.js.map +1 -1
- package/dist/checks/missing-page/index.d.ts +2 -0
- package/dist/checks/missing-page/index.js +73 -0
- package/dist/checks/missing-page/index.js.map +1 -0
- package/dist/checks/missing-partial/index.js +31 -31
- package/dist/checks/missing-partial/index.js.map +1 -1
- package/dist/checks/missing-render-partial-arguments/index.d.ts +2 -0
- package/dist/checks/missing-render-partial-arguments/index.js +37 -0
- package/dist/checks/missing-render-partial-arguments/index.js.map +1 -0
- package/dist/checks/nested-graphql-query/index.d.ts +2 -0
- package/dist/checks/nested-graphql-query/index.js +146 -0
- package/dist/checks/nested-graphql-query/index.js.map +1 -0
- package/dist/checks/pagination-size/index.js +1 -1
- package/dist/checks/pagination-size/index.js.map +1 -1
- package/dist/checks/translation-key-exists/index.js +16 -19
- package/dist/checks/translation-key-exists/index.js.map +1 -1
- package/dist/checks/translation-utils.d.ts +20 -0
- package/dist/checks/translation-utils.js +51 -0
- package/dist/checks/translation-utils.js.map +1 -0
- package/dist/checks/undefined-object/index.js +35 -13
- package/dist/checks/undefined-object/index.js.map +1 -1
- package/dist/checks/unknown-property/index.js +75 -10
- package/dist/checks/unknown-property/index.js.map +1 -1
- package/dist/checks/unknown-property/property-shape.js +14 -1
- package/dist/checks/unknown-property/property-shape.js.map +1 -1
- package/dist/checks/unrecognized-content-for-arguments/index.js +1 -1
- package/dist/checks/unrecognized-content-for-arguments/index.js.map +1 -1
- package/dist/checks/unused-assign/index.js +23 -1
- package/dist/checks/unused-assign/index.js.map +1 -1
- package/dist/checks/unused-translation-key/index.d.ts +4 -0
- package/dist/checks/unused-translation-key/index.js +85 -0
- package/dist/checks/unused-translation-key/index.js.map +1 -0
- package/dist/checks/valid-content-for-argument-types/index.js +1 -1
- package/dist/checks/valid-content-for-argument-types/index.js.map +1 -1
- package/dist/checks/valid-render-partial-argument-types/index.js +2 -1
- package/dist/checks/valid-render-partial-argument-types/index.js.map +1 -1
- package/dist/checks/variable-name/index.js +4 -0
- package/dist/checks/variable-name/index.js.map +1 -1
- package/dist/context-utils.d.ts +2 -1
- package/dist/context-utils.js +31 -1
- package/dist/context-utils.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/frontmatter/index.d.ts +59 -0
- package/dist/frontmatter/index.js +301 -0
- package/dist/frontmatter/index.js.map +1 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -1
- package/dist/liquid-doc/arguments.js +9 -0
- package/dist/liquid-doc/arguments.js.map +1 -1
- package/dist/liquid-doc/utils.d.ts +10 -2
- package/dist/liquid-doc/utils.js +26 -1
- package/dist/liquid-doc/utils.js.map +1 -1
- package/dist/path.d.ts +1 -1
- package/dist/path.js +3 -1
- package/dist/path.js.map +1 -1
- package/dist/to-schema.d.ts +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types.d.ts +8 -1
- package/dist/types.js.map +1 -1
- package/dist/url-helpers.d.ts +55 -0
- package/dist/url-helpers.js +334 -0
- package/dist/url-helpers.js.map +1 -0
- package/dist/utils/block.js.map +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/levenshtein.d.ts +3 -0
- package/dist/utils/levenshtein.js +39 -0
- package/dist/utils/levenshtein.js.map +1 -0
- package/package.json +2 -2
- package/src/AugmentedPlatformOSDocset.ts +1 -0
- package/src/checks/deprecated-filter/index.spec.ts +41 -1
- package/src/checks/deprecated-filter/index.ts +17 -0
- package/src/checks/graphql/index.spec.ts +173 -0
- package/src/checks/graphql/index.ts +21 -10
- package/src/checks/index.ts +6 -0
- package/src/checks/invalid-hash-assign-target/index.spec.ts +26 -0
- package/src/checks/invalid-hash-assign-target/index.ts +6 -4
- package/src/checks/missing-page/index.spec.ts +755 -0
- package/src/checks/missing-page/index.ts +89 -0
- package/src/checks/missing-partial/index.spec.ts +361 -0
- package/src/checks/missing-partial/index.ts +39 -47
- package/src/checks/missing-render-partial-arguments/index.spec.ts +74 -0
- package/src/checks/missing-render-partial-arguments/index.ts +44 -0
- package/src/checks/nested-graphql-query/index.spec.ts +175 -0
- package/src/checks/nested-graphql-query/index.ts +203 -0
- package/src/checks/parser-blocking-script/index.spec.ts +7 -3
- package/src/checks/translation-key-exists/index.spec.ts +79 -2
- package/src/checks/translation-key-exists/index.ts +18 -27
- package/src/checks/translation-utils.ts +63 -0
- package/src/checks/undefined-object/index.spec.ts +153 -19
- package/src/checks/undefined-object/index.ts +43 -19
- package/src/checks/unknown-property/index.spec.ts +133 -0
- package/src/checks/unknown-property/index.ts +84 -10
- package/src/checks/unknown-property/property-shape.ts +15 -1
- package/src/checks/unused-assign/index.spec.ts +75 -1
- package/src/checks/unused-assign/index.ts +26 -1
- package/src/checks/unused-doc-param/index.spec.ts +4 -2
- package/src/checks/valid-doc-param-types/index.spec.ts +1 -1
- package/src/checks/valid-render-partial-argument-types/index.spec.ts +24 -1
- package/src/checks/valid-render-partial-argument-types/index.ts +3 -2
- package/src/checks/variable-name/index.spec.ts +10 -1
- package/src/checks/variable-name/index.ts +5 -0
- package/src/context-utils.ts +33 -1
- package/src/frontmatter/index.ts +344 -0
- package/src/index.ts +6 -0
- package/src/liquid-doc/arguments.ts +9 -0
- package/src/liquid-doc/utils.ts +26 -2
- package/src/path.ts +2 -0
- package/src/types.ts +9 -1
- package/src/url-helpers.spec.ts +241 -0
- package/src/url-helpers.ts +363 -0
- package/src/utils/index.ts +1 -0
- package/src/utils/levenshtein.ts +41 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,44 @@
|
|
|
1
1
|
# @platformos/theme-check-common
|
|
2
2
|
|
|
3
|
+
## 0.0.13
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- **MissingRenderPartialArguments**: Reports an error when required `@param` arguments declared in a partial's LiquidDoc are not provided at the `{% render %}` call site.
|
|
8
|
+
- **NestedGraphQLQuery**: Detects N+1 query patterns — `{% graphql %}` tags inside `{% for %}`/`{% tablerow %}` loops. Also follows `{% function %}` and `{% render %}` calls transitively to detect indirect GraphQL queries. Skips loops wrapped in `{% cache %}` or `{% background %}`.
|
|
9
|
+
- Added **GraphQLFieldCompletionProvider**: Provides completions for GraphQL field names.
|
|
10
|
+
- Added **GraphQLFieldHoverProvider**: Shows hover documentation for GraphQL fields.
|
|
11
|
+
- Added `theme_render_rc` as a new document type, enabling the `{% theme_render_rc %}` tag to resolve partials through configurable `theme_search_paths` defined in `app/config.yml`.
|
|
12
|
+
- **DocumentsLocator**: New `locateWithSearchPaths()` method resolves partials using prioritized search paths, including dynamic paths with `{{ }}` Liquid expressions that expand by enumerating subdirectories.
|
|
13
|
+
- **loadSearchPaths()**: New utility to read and parse `theme_search_paths` from `app/config.yml`.
|
|
14
|
+
- **TranslationKeyExists**: Refactored to load all defined keys (app-level and module-level) in a single pass. Now suggests nearest matching keys using Levenshtein distance when a translation key is not found.
|
|
15
|
+
- Extracted shared translation utilities into `translation-utils.ts` for module discovery and key loading.
|
|
16
|
+
- Added `levenshtein.ts` utility for fuzzy key matching.
|
|
17
|
+
- Added support for `{% try %}...{% catch error %}` — the error variable in catch branches is now correctly registered as defined, preventing false-positive "undefined object" warnings.
|
|
18
|
+
- `null`/`nil` literals are now treated as compatible with any `@param` type, preventing false type-mismatch errors when passing null values to partials.
|
|
19
|
+
- `recursiveReadDirectory` now gracefully handles `ENOENT` errors instead of crashing when a directory doesn't exist.
|
|
20
|
+
- **MissingPartial** check updated to support `theme_render_rc` tag resolution through search paths.
|
|
21
|
+
- Extracted `tryExtractAssignUrl()` helper to deduplicate assign-to-URL resolution logic shared between `MissingPage` check and `buildVariableMap`.
|
|
22
|
+
- Fixed `buildVariableMap` to correctly recurse into block tags (`{% if %}`, `{% for %}`) whose position spans beyond the cursor offset — previously assigns inside such blocks could be missed.
|
|
23
|
+
- **SearchPathsLoader**: Now caches `theme_search_paths` per root URI to avoid re-reading `app/config.yml` on every request. Invalidated when file watchers detect config changes.
|
|
24
|
+
- Immediate cache invalidation on `app/config.yml` save (via `onDidSaveTextDocument`) so go-to-definition doesn't see stale data.
|
|
25
|
+
- Bulk file-watcher threshold extracted to `BULK_PAGE_CHANGE_THRESHOLD` constant.
|
|
26
|
+
- **RouteTable**: Added `routeCount()` method returning total number of route entries.
|
|
27
|
+
- Route table build errors are now properly handled — a failed build resets the cached promise so subsequent attempts can retry.
|
|
28
|
+
- `MissingPartial` check simplified with a shared `reportIfMissing()` helper, reducing code duplication across `RenderMarkup`, `FunctionMarkup`, and `GraphQLMarkup` visitors.
|
|
29
|
+
- AST traversal helpers (`getTraversableChildren`, `getTraversableMarkup`) extracted in `url-helpers.ts`.
|
|
30
|
+
- `MissingPage` check front-loads route table building in `onCodePathStart` instead of lazy-loading per element visit.
|
|
31
|
+
- Updated dependencies
|
|
32
|
+
- @platformos/liquid-html-parser@0.0.12
|
|
33
|
+
|
|
34
|
+
## 0.0.12
|
|
35
|
+
|
|
36
|
+
### Patch Changes
|
|
37
|
+
|
|
38
|
+
- Beta release
|
|
39
|
+
- Updated dependencies
|
|
40
|
+
- @platformos/liquid-html-parser@0.0.11
|
|
41
|
+
|
|
3
42
|
## 0.0.11
|
|
4
43
|
|
|
5
44
|
## 0.0.10
|
package/CLAUDE.md
ADDED
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
# CLAUDE.md
|
|
2
|
+
|
|
3
|
+
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
`@platformos/platformos-check-common` is the runtime-agnostic core of the platformOS linting engine. It defines all check logic, types, the visitor traversal system, the fix/autofix infrastructure, and test utilities. It has no Node.js or browser dependencies — those are in `-node` / `-browser` sibling packages.
|
|
8
|
+
|
|
9
|
+
## Commands
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
# From this directory:
|
|
13
|
+
yarn test # Run all tests (vitest)
|
|
14
|
+
yarn build # tsc -b tsconfig.build.json
|
|
15
|
+
yarn type-check # tsc --noEmit
|
|
16
|
+
|
|
17
|
+
# Run a single test file:
|
|
18
|
+
yarn test src/checks/deprecated-filter/index.spec.ts
|
|
19
|
+
|
|
20
|
+
# Run tests matching a name pattern:
|
|
21
|
+
yarn test --reporter=verbose -t "DeprecatedFilter"
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Architecture
|
|
25
|
+
|
|
26
|
+
### Core pipeline (`src/index.ts`)
|
|
27
|
+
|
|
28
|
+
`check(app, config, dependencies)` is the entry point. It:
|
|
29
|
+
1. Wraps raw `Dependencies` with augmented helpers (file-exists, translations, etc.)
|
|
30
|
+
2. Wraps the raw docset in `AugmentedPlatformOSDocset` (memoized, adds undocumented filters/tags)
|
|
31
|
+
3. Iterates over `SourceCodeType` values (JSON, LiquidHtml, GraphQL, YAML) and runs each applicable `CheckDefinition` against each file via visitors
|
|
32
|
+
|
|
33
|
+
### Source code types (`src/types.ts`)
|
|
34
|
+
|
|
35
|
+
`SourceCodeType` has four values. Their AST types:
|
|
36
|
+
- `LiquidHtml` → `LiquidHtmlNode` (from `@platformos/liquid-html-parser`)
|
|
37
|
+
- `JSON` → `JSONNode` (jsonc-parser wrapper, `src/jsonc/types.ts`)
|
|
38
|
+
- `YAML` → **also `JSONNode`** — YAML is parsed into the same JSONNode AST via `src/yaml/parse.ts`
|
|
39
|
+
- `GraphQL` → `GraphQLDocumentNode` (just `{ type: 'Document', content: string }`)
|
|
40
|
+
|
|
41
|
+
### Check definition pattern
|
|
42
|
+
|
|
43
|
+
Every check exports a `CheckDefinition<SourceCodeType.X>` object:
|
|
44
|
+
|
|
45
|
+
```ts
|
|
46
|
+
export const MyCheck: LiquidCheckDefinition = {
|
|
47
|
+
meta: {
|
|
48
|
+
code: 'MyCheck', // used in config and offenses
|
|
49
|
+
name: '...',
|
|
50
|
+
docs: { description: '...', recommended: true },
|
|
51
|
+
type: SourceCodeType.LiquidHtml,
|
|
52
|
+
severity: Severity.WARNING,
|
|
53
|
+
schema: {}, // configurable settings shape
|
|
54
|
+
targets: [], // ConfigTarget[] or empty = all configs
|
|
55
|
+
},
|
|
56
|
+
create(context) {
|
|
57
|
+
// Called once per file. Return visitor methods as a plain object.
|
|
58
|
+
return {
|
|
59
|
+
async LiquidTag(node, ancestors) { ... },
|
|
60
|
+
async onCodePathEnd(file) { ... },
|
|
61
|
+
};
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
- `context` has: `report()`, `file`, `config`, `settings`, `toUri()`, `toRelativePath()`, `fs`, `platformosDocset`, `getDocDefinition`, `getReferences`, `fileExists`, `fileSize`, `getDefaultLocale`, `getDefaultTranslations`, `getTranslationsForBase`, `validateJSON`
|
|
67
|
+
- `context.report({ message, startIndex, endIndex, fix?, suggest? })` records an offense
|
|
68
|
+
- `fix` is safe auto-fix; `suggest` is manual (multiple options or unsafe)
|
|
69
|
+
- New checks must be registered in `src/checks/index.ts` → `allChecks` array
|
|
70
|
+
|
|
71
|
+
### Visitor system (`src/visitor.ts`)
|
|
72
|
+
|
|
73
|
+
`visit<S, R>(ast, visitor)` walks an AST depth-first and collects return values.
|
|
74
|
+
|
|
75
|
+
For checks the engine calls `visitLiquid` / `visitJSON` which support both entry (`NodeType`) and exit (`NodeType:exit`) visitor methods, plus `onCodePathStart` / `onCodePathEnd` lifecycle hooks.
|
|
76
|
+
|
|
77
|
+
`findCurrentNode(ast, cursorPosition)` — used by LSP for cursor-aware features.
|
|
78
|
+
|
|
79
|
+
### Fix / autofix infrastructure (`src/fixes/`)
|
|
80
|
+
|
|
81
|
+
- `StringCorrector` — for Liquid/YAML: records `replace(start, end, text)` and `remove(start, end)` operations
|
|
82
|
+
- `JSONCorrector` — for JSON: operates on the JSONNode tree
|
|
83
|
+
- `GraphQLCorrector` — for GraphQL
|
|
84
|
+
- `createCorrector(type, source)` — factory returning the right corrector
|
|
85
|
+
- `applyFixToString(source, fix)` — applies collected `FixDescription[]` to a string
|
|
86
|
+
- No YAML autofix: `createCorrector` throws for `SourceCodeType.YAML`
|
|
87
|
+
|
|
88
|
+
### `AugmentedPlatformOSDocset` (`src/AugmentedPlatformOSDocset.ts`)
|
|
89
|
+
|
|
90
|
+
Wraps the raw `PlatformOSDocset` (from dependency injection) with:
|
|
91
|
+
- Memoization on all methods
|
|
92
|
+
- Alias expansion for filters
|
|
93
|
+
- Normalization of inconsistent `deprecated: false` + `deprecation_reason: 'true'` entries
|
|
94
|
+
- Injection of undocumented-but-valid filters/tags
|
|
95
|
+
|
|
96
|
+
### Context utilities (`src/context-utils.ts`)
|
|
97
|
+
|
|
98
|
+
Factory functions for the augmented dependency methods:
|
|
99
|
+
- `makeGetTranslationsForBase(fs, app)` — loads and merges YAML translation files; open editor buffers take precedence over filesystem
|
|
100
|
+
- `makeGetDefaultTranslations(fs, app, rootUri)` — loads `app/translations/en.yml`, strips locale root key
|
|
101
|
+
- `makeGetDefaultLocale(fs, rootUri)` — always returns `'en'`
|
|
102
|
+
|
|
103
|
+
## Testing
|
|
104
|
+
|
|
105
|
+
Tests use **Vitest** with custom matchers defined in `src/test/`.
|
|
106
|
+
|
|
107
|
+
### Test utilities (`src/test/test-helper.ts`)
|
|
108
|
+
|
|
109
|
+
```ts
|
|
110
|
+
import { runLiquidCheck, runJSONCheck, runYAMLCheck, check } from '../../test';
|
|
111
|
+
|
|
112
|
+
// Run a single check on one file:
|
|
113
|
+
const offenses = await runLiquidCheck(MyCheck, '{{ x | unknown }}', 'file.liquid', mockDependencies);
|
|
114
|
+
|
|
115
|
+
// Run recommended checks on a whole mock app:
|
|
116
|
+
const offenses = await check({ 'app/views/partials/foo.liquid': '...' });
|
|
117
|
+
|
|
118
|
+
// Apply the auto-fix suggestion:
|
|
119
|
+
const result = applySuggestions(sourceCode, offenses[0]);
|
|
120
|
+
|
|
121
|
+
// Show highlighted source ranges for offenses:
|
|
122
|
+
const highlighted = highlightedOffenses({ 'file.liquid': sourceCode }, offenses);
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
`MockApp` is `Record<relativePath, source>`. `MockFileSystem` provides the `AbstractFileSystem` implementation backed by the same object.
|
|
126
|
+
|
|
127
|
+
### Custom matchers
|
|
128
|
+
|
|
129
|
+
- `expect(offenses).containOffense('message string')` — checks by message
|
|
130
|
+
- `expect(offenses).containOffense({ check: 'Code', severity: Severity.WARNING })` — checks by subset of keys
|
|
131
|
+
- Chai-based (legacy): `.to.offer.fix()`, `.to.suggest()`
|
|
132
|
+
|
|
133
|
+
### Test setup (`src/test/test-setup.ts`)
|
|
134
|
+
|
|
135
|
+
Loaded automatically by vitest (see root `vitest.config.ts`). Registers the custom matchers. New tests should use `expect.extend` / `containOffense` style, not chai.
|
|
136
|
+
|
|
137
|
+
## Key types to know
|
|
138
|
+
|
|
139
|
+
| Type | Purpose |
|
|
140
|
+
|------|---------|
|
|
141
|
+
| `App` | `SourceCode[]` — the full set of files to check |
|
|
142
|
+
| `SourceCode<T>` | `{ uri, type, source, ast, version? }` |
|
|
143
|
+
| `CheckDefinition<T>` | Static descriptor with `meta` + `create` factory |
|
|
144
|
+
| `Check<T>` | Visitor object returned by `create()` |
|
|
145
|
+
| `Context<T, S>` | Passed to `create()`; includes `report()` and all deps |
|
|
146
|
+
| `Offense` | Recorded problem: `{ check, message, uri, severity, start, end, fix?, suggest? }` |
|
|
147
|
+
| `Problem<T>` | Argument to `context.report()` |
|
|
148
|
+
| `Dependencies` | Injectable services (`fs`, `platformosDocset`, etc.) |
|
|
149
|
+
| `AugmentedDependencies` | Extends `Dependencies` with derived helpers |
|
|
150
|
+
| `PlatformOSDocset` | `filters()`, `objects()`, `tags()`, `graphQL()` |
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AugmentedPlatformOSDocset.js","sourceRoot":"","sources":["../src/AugmentedPlatformOSDocset.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AugmentedPlatformOSDocset.js","sourceRoot":"","sources":["../src/AugmentedPlatformOSDocset.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CircularRender = void 0;
|
|
4
|
+
const liquid_html_parser_1 = require("@platformos/liquid-html-parser");
|
|
5
|
+
const types_1 = require("../../types");
|
|
6
|
+
const platformos_common_1 = require("@platformos/platformos-common");
|
|
7
|
+
const vscode_uri_1 = require("vscode-uri");
|
|
8
|
+
const MAX_DEPTH = 50;
|
|
9
|
+
// Module-level cache: URI -> partial references extracted from that file.
|
|
10
|
+
// Shared across all files in a check run to avoid re-parsing.
|
|
11
|
+
const parseCacheMap = new WeakMap();
|
|
12
|
+
function getParseCache(context) {
|
|
13
|
+
if (!parseCacheMap.has(context.fs)) {
|
|
14
|
+
parseCacheMap.set(context.fs, new Map());
|
|
15
|
+
}
|
|
16
|
+
return parseCacheMap.get(context.fs);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Extract partial references (render/function/include) from a Liquid source string.
|
|
20
|
+
* Returns an empty array on parse errors.
|
|
21
|
+
*/
|
|
22
|
+
function extractPartialRefs(source) {
|
|
23
|
+
let ast;
|
|
24
|
+
try {
|
|
25
|
+
ast = (0, liquid_html_parser_1.toLiquidHtmlAST)(source);
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
return [];
|
|
29
|
+
}
|
|
30
|
+
const refs = [];
|
|
31
|
+
const stack = [ast];
|
|
32
|
+
while (stack.length > 0) {
|
|
33
|
+
const node = stack.pop();
|
|
34
|
+
if (!node || typeof node !== 'object')
|
|
35
|
+
continue;
|
|
36
|
+
if (node.type === liquid_html_parser_1.NodeTypes.LiquidTag &&
|
|
37
|
+
node.markup &&
|
|
38
|
+
typeof node.markup === 'object' &&
|
|
39
|
+
(node.markup.type === liquid_html_parser_1.NodeTypes.RenderMarkup ||
|
|
40
|
+
node.markup.type === liquid_html_parser_1.NodeTypes.FunctionMarkup) &&
|
|
41
|
+
node.markup.partial &&
|
|
42
|
+
node.markup.partial.type !== liquid_html_parser_1.NodeTypes.VariableLookup) {
|
|
43
|
+
refs.push({
|
|
44
|
+
name: node.markup.partial.value,
|
|
45
|
+
documentType: node.name || 'render',
|
|
46
|
+
startIndex: node.markup.partial.position.start,
|
|
47
|
+
endIndex: node.markup.partial.position.end,
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
// Traverse children (skip circular references like parentNode, prev, next)
|
|
51
|
+
for (const key of Object.keys(node)) {
|
|
52
|
+
if (liquid_html_parser_1.nonTraversableProperties.has(key))
|
|
53
|
+
continue;
|
|
54
|
+
const value = node[key];
|
|
55
|
+
if (Array.isArray(value)) {
|
|
56
|
+
for (const child of value) {
|
|
57
|
+
if (child && typeof child === 'object') {
|
|
58
|
+
stack.push(child);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
else if (value && typeof value === 'object' && value.type) {
|
|
63
|
+
stack.push(value);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return refs;
|
|
68
|
+
}
|
|
69
|
+
exports.CircularRender = {
|
|
70
|
+
meta: {
|
|
71
|
+
code: 'CircularRender',
|
|
72
|
+
name: 'Prevent circular renders',
|
|
73
|
+
docs: {
|
|
74
|
+
description: 'Reports circular render/function/include chains that would cause infinite loops at runtime.',
|
|
75
|
+
recommended: true,
|
|
76
|
+
url: 'https://documentation.platformos.com/developer-guide/platformos-check/checks/circular-render',
|
|
77
|
+
},
|
|
78
|
+
type: types_1.SourceCodeType.LiquidHtml,
|
|
79
|
+
severity: types_1.Severity.ERROR,
|
|
80
|
+
schema: {},
|
|
81
|
+
targets: [],
|
|
82
|
+
},
|
|
83
|
+
create(context) {
|
|
84
|
+
const locator = new platformos_common_1.DocumentsLocator(context.fs);
|
|
85
|
+
const rootUri = vscode_uri_1.URI.parse(context.config.rootUri);
|
|
86
|
+
const parseCache = getParseCache(context);
|
|
87
|
+
const collectedRefs = [];
|
|
88
|
+
return {
|
|
89
|
+
async RenderMarkup(node, ancestors) {
|
|
90
|
+
if (node.partial.type === liquid_html_parser_1.NodeTypes.VariableLookup)
|
|
91
|
+
return;
|
|
92
|
+
const parent = ancestors.at(-1);
|
|
93
|
+
const documentType = parent?.name === 'include' ? 'include' : 'render';
|
|
94
|
+
collectedRefs.push({
|
|
95
|
+
name: node.partial.value,
|
|
96
|
+
documentType,
|
|
97
|
+
startIndex: node.partial.position.start,
|
|
98
|
+
endIndex: node.partial.position.end,
|
|
99
|
+
});
|
|
100
|
+
},
|
|
101
|
+
async FunctionMarkup(node) {
|
|
102
|
+
if (node.partial.type === liquid_html_parser_1.NodeTypes.VariableLookup)
|
|
103
|
+
return;
|
|
104
|
+
collectedRefs.push({
|
|
105
|
+
name: node.partial.value,
|
|
106
|
+
documentType: 'function',
|
|
107
|
+
startIndex: node.partial.position.start,
|
|
108
|
+
endIndex: node.partial.position.end,
|
|
109
|
+
});
|
|
110
|
+
},
|
|
111
|
+
async onCodePathEnd() {
|
|
112
|
+
const fileUri = context.file.uri;
|
|
113
|
+
for (const ref of collectedRefs) {
|
|
114
|
+
const cycle = await findCycle(locator, rootUri, context.fs, parseCache, fileUri, ref.name, ref.documentType, [fileUri], 0);
|
|
115
|
+
if (cycle) {
|
|
116
|
+
const cyclePath = cycle
|
|
117
|
+
.map((u) => {
|
|
118
|
+
const parts = u.split('/');
|
|
119
|
+
return parts.slice(-2).join('/');
|
|
120
|
+
})
|
|
121
|
+
.join(' -> ');
|
|
122
|
+
context.report({
|
|
123
|
+
message: `Circular render detected: ${cyclePath}. This will cause an infinite loop at runtime.`,
|
|
124
|
+
startIndex: ref.startIndex,
|
|
125
|
+
endIndex: ref.endIndex,
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
},
|
|
130
|
+
};
|
|
131
|
+
},
|
|
132
|
+
};
|
|
133
|
+
async function findCycle(locator, rootUri, fs, parseCache, originUri, partialName, documentType, path, depth) {
|
|
134
|
+
if (depth >= MAX_DEPTH)
|
|
135
|
+
return null;
|
|
136
|
+
const uri = await locator.locate(rootUri, documentType, partialName);
|
|
137
|
+
if (!uri)
|
|
138
|
+
return null;
|
|
139
|
+
if (uri === originUri) {
|
|
140
|
+
return [...path, uri];
|
|
141
|
+
}
|
|
142
|
+
if (path.includes(uri)) {
|
|
143
|
+
// This is a cycle, but it doesn't include the origin file — skip it
|
|
144
|
+
return null;
|
|
145
|
+
}
|
|
146
|
+
let refs = parseCache.get(uri);
|
|
147
|
+
if (!refs) {
|
|
148
|
+
try {
|
|
149
|
+
const source = await fs.readFile(uri);
|
|
150
|
+
refs = extractPartialRefs(source);
|
|
151
|
+
}
|
|
152
|
+
catch {
|
|
153
|
+
refs = [];
|
|
154
|
+
}
|
|
155
|
+
parseCache.set(uri, refs);
|
|
156
|
+
}
|
|
157
|
+
for (const dep of refs) {
|
|
158
|
+
const cycle = await findCycle(locator, rootUri, fs, parseCache, originUri, dep.name, dep.documentType, [...path, uri], depth + 1);
|
|
159
|
+
if (cycle)
|
|
160
|
+
return cycle;
|
|
161
|
+
}
|
|
162
|
+
return null;
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/checks/circular-render/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -33,10 +33,25 @@ exports.DeprecatedFilter = {
|
|
|
33
33
|
const recommendedFilterName = findRecommendedAlternative(deprecatedFilter);
|
|
34
34
|
const recommendedFilter = filters.find((f) => f.name === recommendedFilterName);
|
|
35
35
|
const message = deprecatedFilterMessage(deprecatedFilter, recommendedFilter);
|
|
36
|
+
const filterText = node.source.slice(node.position.start, node.position.end);
|
|
37
|
+
const afterPipeIdx = filterText.indexOf('|') + 1;
|
|
38
|
+
const nameIdx = afterPipeIdx + filterText.slice(afterPipeIdx).indexOf(deprecatedFilter.name);
|
|
39
|
+
const filterNameStart = node.position.start + nameIdx;
|
|
40
|
+
const filterNameEnd = filterNameStart + deprecatedFilter.name.length;
|
|
36
41
|
context.report({
|
|
37
42
|
message,
|
|
38
43
|
startIndex: node.position.start + 1,
|
|
39
44
|
endIndex: node.position.end,
|
|
45
|
+
suggest: recommendedFilter
|
|
46
|
+
? [
|
|
47
|
+
{
|
|
48
|
+
message: `Replace '${deprecatedFilter.name}' with '${recommendedFilter.name}'`,
|
|
49
|
+
fix: (corrector) => {
|
|
50
|
+
corrector.replace(filterNameStart, filterNameEnd, recommendedFilter.name);
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
]
|
|
54
|
+
: undefined,
|
|
40
55
|
});
|
|
41
56
|
},
|
|
42
57
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/checks/deprecated-filter/index.ts"],"names":[],"mappings":";;;AACA,uCAA2F;AAE9E,QAAA,gBAAgB,GAA0B;IACrD,IAAI,EAAE;QACJ,IAAI,EAAE,kBAAkB;QACxB,OAAO,EAAE,CAAC,mBAAmB,CAAC;QAC9B,IAAI,EAAE,mBAAmB;QACzB,IAAI,EAAE;YACJ,WAAW,EAAE,uCAAuC;YACpD,GAAG,EAAE,gGAAgG;YACrG,WAAW,EAAE,IAAI;SAClB;QACD,IAAI,EAAE,sBAAc,CAAC,UAAU;QAC/B,QAAQ,EAAE,gBAAQ,CAAC,OAAO;QAC1B,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,EAAE;KACZ;IAED,MAAM,CAAC,OAAO;QACZ,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAC9B,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,OAAO;YACL,YAAY,EAAE,KAAK,EAAE,IAAkB,EAAE,EAAE;gBACzC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,gBAAiB,CAAC,OAAO,EAAE,CAAC;gBAE1D,MAAM,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;oBAC1C,OAAO,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC;gBAC9C,CAAC,CAAC,CAAC;gBAEH,IAAI,CAAC,gBAAgB,EAAE,CAAC;oBACtB,OAAO;gBACT,CAAC;gBAED,MAAM,qBAAqB,GAAG,0BAA0B,CAAC,gBAAgB,CAAC,CAAC;gBAC3E,MAAM,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,qBAAqB,CAAC,CAAC;gBAEhF,MAAM,OAAO,GAAG,uBAAuB,CAAC,gBAAgB,EAAE,iBAAiB,CAAC,CAAC;gBAE7E,OAAO,CAAC,MAAM,CAAC;oBACb,OAAO;oBACP,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC;oBACnC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/checks/deprecated-filter/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,7 +10,7 @@ exports.DuplicateContentForArguments = {
|
|
|
10
10
|
docs: {
|
|
11
11
|
description: 'This check ensures that no duplicate argument names are provided when rendering a static block.',
|
|
12
12
|
recommended: true,
|
|
13
|
-
url: 'https://
|
|
13
|
+
url: 'https://shopify.dev/docs/storefronts/themes/tools/theme-check/checks/duplicate-content-for-arguments',
|
|
14
14
|
},
|
|
15
15
|
type: types_1.SourceCodeType.LiquidHtml,
|
|
16
16
|
severity: types_1.Severity.WARNING,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/checks/duplicate-content-for-arguments/index.ts"],"names":[],"mappings":";;;AAAA,uCAA8E;AAE9E,0DAAoF;AAEvE,QAAA,4BAA4B,GAA0B;IACjE,IAAI,EAAE;QACJ,IAAI,EAAE,8BAA8B;QACpC,IAAI,EAAE,gCAAgC;QACtC,IAAI,EAAE;YACJ,WAAW,EACT,iGAAiG;YACnG,WAAW,EAAE,IAAI;YACjB,GAAG,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/checks/duplicate-content-for-arguments/index.ts"],"names":[],"mappings":";;;AAAA,uCAA8E;AAE9E,0DAAoF;AAEvE,QAAA,4BAA4B,GAA0B;IACjE,IAAI,EAAE;QACJ,IAAI,EAAE,8BAA8B;QACpC,IAAI,EAAE,gCAAgC;QACtC,IAAI,EAAE;YACJ,WAAW,EACT,iGAAiG;YACnG,WAAW,EAAE,IAAI;YACjB,GAAG,EAAE,sGAAsG;SAC5G;QACD,IAAI,EAAE,sBAAc,CAAC,UAAU;QAC/B,QAAQ,EAAE,gBAAQ,CAAC,OAAO;QAC1B,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,EAAE;KACZ;IAED,MAAM,CAAC,OAAO;QACZ,OAAO;YACL,KAAK,CAAC,gBAAgB,CAAC,IAAsB;gBAC3C,MAAM,SAAS,GAAG,IAAA,wBAAY,EAAC,IAAI,CAAC,CAAC;gBAErC,IAAI,CAAC,SAAS;oBAAE,OAAO;gBAEvB,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAU,CAAC;gBAC9C,MAAM,aAAa,GAA0B,EAAE,CAAC;gBAEhD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;oBAC9B,IAAI,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;wBACxC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBAC5B,CAAC;oBAED,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACtC,CAAC;gBAED,IAAA,oCAAwB,EAAC,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;YACpE,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC"}
|
|
@@ -1,19 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.GraphQLCheck = void 0;
|
|
4
|
+
exports.lineToRange = lineToRange;
|
|
4
5
|
const types_1 = require("../../types");
|
|
5
6
|
const language_1 = require("graphql/language");
|
|
6
7
|
const graphql_1 = require("graphql");
|
|
7
8
|
function lineToRange(text, line) {
|
|
8
9
|
const lines = text.split(/\r?\n/);
|
|
9
|
-
|
|
10
|
-
return [0, text.length];
|
|
11
|
-
}
|
|
10
|
+
const clampedLine = Math.max(1, Math.min(line, lines.length));
|
|
12
11
|
let start = 0;
|
|
13
|
-
for (let i = 0; i <
|
|
12
|
+
for (let i = 0; i < clampedLine - 1; i++) {
|
|
14
13
|
start += lines[i].length + 1;
|
|
15
14
|
}
|
|
16
|
-
const end = start + lines[
|
|
15
|
+
const end = start + lines[clampedLine - 1].length;
|
|
17
16
|
return [start, end];
|
|
18
17
|
}
|
|
19
18
|
exports.GraphQLCheck = {
|
|
@@ -37,10 +36,24 @@ exports.GraphQLCheck = {
|
|
|
37
36
|
return;
|
|
38
37
|
}
|
|
39
38
|
const graphQLSchema = (0, graphql_1.buildSchema)(graphQLSchemaString);
|
|
40
|
-
|
|
39
|
+
let document;
|
|
40
|
+
try {
|
|
41
|
+
document = (0, language_1.parse)(content);
|
|
42
|
+
}
|
|
43
|
+
catch (e) {
|
|
44
|
+
if (e instanceof graphql_1.GraphQLError) {
|
|
45
|
+
const [start, end] = lineToRange(content, e.locations?.[0]?.line ?? 1);
|
|
46
|
+
context.report({
|
|
47
|
+
message: e.message,
|
|
48
|
+
startIndex: start,
|
|
49
|
+
endIndex: end,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
41
54
|
const errors = (0, graphql_1.validate)(graphQLSchema, document);
|
|
42
55
|
errors.forEach((error) => {
|
|
43
|
-
const [start, end] = lineToRange(content, error.locations?.[0]
|
|
56
|
+
const [start, end] = lineToRange(content, error.locations?.[0]?.line ?? 0);
|
|
44
57
|
context.report({
|
|
45
58
|
message: error.message,
|
|
46
59
|
startIndex: start,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/checks/graphql/index.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/checks/graphql/index.ts"],"names":[],"mappings":"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"}
|
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 | YAMLCheckDefinition | GraphQLCheckDefinition)[];
|
package/dist/checks/index.js
CHANGED
|
@@ -32,6 +32,9 @@ const graphql_1 = require("./graphql");
|
|
|
32
32
|
const unknown_property_1 = require("./unknown-property");
|
|
33
33
|
const invalid_hash_assign_target_1 = require("./invalid-hash-assign-target");
|
|
34
34
|
const duplicate_function_arguments_1 = require("./duplicate-function-arguments");
|
|
35
|
+
const missing_render_partial_arguments_1 = require("./missing-render-partial-arguments");
|
|
36
|
+
const nested_graphql_query_1 = require("./nested-graphql-query");
|
|
37
|
+
const missing_page_1 = require("./missing-page");
|
|
35
38
|
exports.allChecks = [
|
|
36
39
|
deprecated_filter_1.DeprecatedFilter,
|
|
37
40
|
deprecated_tag_1.DeprecatedTag,
|
|
@@ -63,6 +66,9 @@ exports.allChecks = [
|
|
|
63
66
|
graphql_1.GraphQLCheck,
|
|
64
67
|
unknown_property_1.UnknownProperty,
|
|
65
68
|
invalid_hash_assign_target_1.InvalidHashAssignTarget,
|
|
69
|
+
missing_render_partial_arguments_1.MissingRenderPartialArguments,
|
|
70
|
+
nested_graphql_query_1.NestedGraphQLQuery,
|
|
71
|
+
missing_page_1.MissingPage,
|
|
66
72
|
];
|
|
67
73
|
/**
|
|
68
74
|
* 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,uDAAwD;AACxD,2DAA4D;AAC5D,uCAAyC;AACzC,yDAAqD;AACrD,6EAAuE;AACvE,iFAA4E;
|
|
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,uDAAwD;AACxD,2DAA4D;AAC5D,uCAAyC;AACzC,yDAAqD;AACrD,6EAAuE;AACvE,iFAA4E;AAC5E,yFAAmF;AACnF,iEAA4D;AAC5D,iDAA6C;AAEhC,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,qCAAmB;IACnB,yCAAqB;IACrB,sBAAY;IACZ,kCAAe;IACf,oDAAuB;IACvB,gEAA6B;IAC7B,yCAAkB;IAClB,0BAAW;CACZ,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"}
|
|
@@ -190,11 +190,12 @@ exports.InvalidHashAssignTarget = {
|
|
|
190
190
|
// {% function result = 'path' %}
|
|
191
191
|
if (node.name === liquid_html_parser_1.NamedTags.function && typeof node.markup !== 'string') {
|
|
192
192
|
const markup = node.markup;
|
|
193
|
-
|
|
194
|
-
|
|
193
|
+
const varName = markup.name.name;
|
|
194
|
+
if (varName) {
|
|
195
|
+
closeTypeRange(varName, node.position.start);
|
|
195
196
|
// Function returns are untyped unless we can infer them
|
|
196
197
|
variableTypes.push({
|
|
197
|
-
name:
|
|
198
|
+
name: varName,
|
|
198
199
|
type: 'untyped',
|
|
199
200
|
range: [node.position.end],
|
|
200
201
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/checks/invalid-hash-assign-target/index.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/checks/invalid-hash-assign-target/index.ts"],"names":[],"mappings":";;;AAAA,uEAUwC;AACxC,uCAA8E;AAC9E,uCAAsC;AAUzB,QAAA,uBAAuB,GAA0B;IAC5D,IAAI,EAAE;QACJ,IAAI,EAAE,yBAAyB;QAC/B,IAAI,EAAE,4BAA4B;QAClC,IAAI,EAAE;YACJ,WAAW,EACT,0HAA0H;YAC5H,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,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;QAC7B,IAAI,IAAA,eAAO,EAAC,GAAG,CAAC;YAAE,OAAO,EAAE,CAAC;QAE5B,uBAAuB;QACvB,MAAM,aAAa,GAAwB,EAAE,CAAC;QAE9C,qEAAqE;QACrE,MAAM,cAAc,GAAG,CAAC,YAAoB,EAAE,WAAmB,EAAE,EAAE;YACnE,KAAK,IAAI,CAAC,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBACnD,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;oBACtF,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;oBACxC,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QAEF,8DAA8D;QAC9D,MAAM,gBAAgB,GAAG,CAAC,YAAoB,EAAE,QAAgB,EAA4B,EAAE;YAC5F,IAAI,MAAgC,CAAC;YAErC,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;gBAClC,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY;oBAAE,SAAS;gBAC1C,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;gBACjC,IAAI,QAAQ,IAAI,KAAK;oBAAE,SAAS;gBAChC,IAAI,GAAG,IAAI,QAAQ,GAAG,GAAG;oBAAE,SAAS;gBACpC,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC;YACtB,CAAC;YAED,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC;QAEF,8DAA8D;QAC9D,MAAM,iBAAiB,GAAG,CAAC,QAAwB,EAAgB,EAAE;YACnE,qCAAqC;YACrC,IAAI,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpD,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBAEjE,8BAA8B;gBAC9B,IAAI,UAAU,CAAC,IAAI,KAAK,YAAY,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;oBACtE,OAAO,QAAQ,CAAC;gBAClB,CAAC;gBAED,8BAA8B;gBAC9B,IACE,UAAU,CAAC,IAAI,KAAK,MAAM;oBAC1B,UAAU,CAAC,IAAI,KAAK,KAAK;oBACzB,UAAU,CAAC,IAAI,KAAK,MAAM;oBAC1B,UAAU,CAAC,IAAI,KAAK,OAAO;oBAC3B,UAAU,CAAC,IAAI,KAAK,OAAO;oBAC3B,UAAU,CAAC,IAAI,KAAK,MAAM;oBAC1B,UAAU,CAAC,IAAI,KAAK,OAAO;oBAC3B,UAAU,CAAC,IAAI,KAAK,OAAO;oBAC3B,UAAU,CAAC,IAAI,KAAK,YAAY;oBAChC,UAAU,CAAC,IAAI,KAAK,QAAQ,EAC5B,CAAC;oBACD,OAAO,QAAQ,CAAC;gBAClB,CAAC;gBAED,8BAA8B;gBAC9B,IACE,UAAU,CAAC,IAAI,KAAK,QAAQ;oBAC5B,UAAU,CAAC,IAAI,KAAK,SAAS;oBAC7B,UAAU,CAAC,IAAI,KAAK,YAAY;oBAChC,UAAU,CAAC,IAAI,KAAK,UAAU;oBAC9B,UAAU,CAAC,IAAI,KAAK,QAAQ;oBAC5B,UAAU,CAAC,IAAI,KAAK,OAAO;oBAC3B,UAAU,CAAC,IAAI,KAAK,YAAY;oBAChC,UAAU,CAAC,IAAI,KAAK,gBAAgB;oBACpC,UAAU,CAAC,IAAI,KAAK,UAAU;oBAC9B,UAAU,CAAC,IAAI,KAAK,eAAe;oBACnC,UAAU,CAAC,IAAI,KAAK,SAAS;oBAC7B,UAAU,CAAC,IAAI,KAAK,eAAe;oBACnC,UAAU,CAAC,IAAI,KAAK,QAAQ;oBAC5B,UAAU,CAAC,IAAI,KAAK,cAAc;oBAClC,UAAU,CAAC,IAAI,KAAK,OAAO;oBAC3B,UAAU,CAAC,IAAI,KAAK,OAAO;oBAC3B,UAAU,CAAC,IAAI,KAAK,MAAM;oBAC1B,UAAU,CAAC,IAAI,KAAK,MAAM,EAC1B,CAAC;oBACD,OAAO,QAAQ,CAAC;gBAClB,CAAC;gBAED,6BAA6B;gBAC7B,IACE,UAAU,CAAC,IAAI,KAAK,OAAO;oBAC3B,UAAU,CAAC,IAAI,KAAK,MAAM;oBAC1B,UAAU,CAAC,IAAI,KAAK,cAAc;oBAClC,UAAU,CAAC,IAAI,KAAK,SAAS;oBAC7B,UAAU,CAAC,IAAI,KAAK,MAAM;oBAC1B,UAAU,CAAC,IAAI,KAAK,SAAS;oBAC7B,UAAU,CAAC,IAAI,KAAK,QAAQ;oBAC5B,UAAU,CAAC,IAAI,KAAK,KAAK;oBACzB,UAAU,CAAC,IAAI,KAAK,OAAO,EAC3B,CAAC;oBACD,OAAO,OAAO,CAAC;gBACjB,CAAC;YACH,CAAC;YAED,+BAA+B;YAC/B,MAAM,IAAI,GAAG,QAAQ,CAAC,UAAU,CAAC;YACjC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;gBAClB,KAAK,8BAAS,CAAC,MAAM;oBACnB,OAAO,QAAQ,CAAC;gBAClB,KAAK,8BAAS,CAAC,MAAM;oBACnB,OAAO,QAAQ,CAAC;gBAClB,KAAK,8BAAS,CAAC,aAAa;oBAC1B,iCAAiC;oBACjC,IAAI,IAAI,CAAC,OAAO,KAAK,MAAM,IAAI,IAAI,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;wBACxD,OAAO,SAAS,CAAC;oBACnB,CAAC;oBACD,OAAO,SAAS,CAAC;gBACnB,KAAK,8BAAS,CAAC,KAAK;oBAClB,OAAO,OAAO,CAAC;gBACjB,KAAK,8BAAS,CAAC,iBAAiB;oBAC9B,OAAO,SAAS,CAAC;gBACnB;oBACE,OAAO,SAAS,CAAC;YACrB,CAAC;QACH,CAAC,CAAC;QAEF,OAAO;YACL,KAAK,CAAC,SAAS,CAAC,IAAe;gBAC7B,yBAAyB;gBACzB,IAAI,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;oBAE3B,2DAA2D;oBAC3D,cAAc,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;oBAEjD,MAAM,YAAY,GAAG,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBACrD,aAAa,CAAC,IAAI,CAAC;wBACjB,IAAI,EAAE,MAAM,CAAC,IAAI;wBACjB,IAAI,EAAE,YAAY;wBAClB,KAAK,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;qBAC3B,CAAC,CAAC;gBACL,CAAC;gBAED,wCAAwC;gBACxC,IACE,CAAC,IAAI,CAAC,IAAI,KAAK,8BAAS,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,8BAAS,CAAC,SAAS,CAAC;oBACxE,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ;oBAC/B,IAAI,CAAC,MAAM,CAAC,IAAI,EAChB,CAAC;oBACD,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;oBACtD,aAAa,CAAC,IAAI,CAAC;wBACjB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;wBACtB,IAAI,EAAE,QAAQ;wBACd,KAAK,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;qBAC3B,CAAC,CAAC;gBACL,CAAC;gBAED,qCAAqC;gBACrC,IAAI,IAAI,CAAC,IAAI,KAAK,8BAAS,CAAC,OAAO,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;oBACvE,MAAM,YAAY,GAAI,IAAI,CAAC,MAA4B,CAAC,IAAI,CAAC;oBAC7D,IAAI,YAAY,EAAE,CAAC;wBACjB,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;wBAClD,aAAa,CAAC,IAAI,CAAC;4BACjB,IAAI,EAAE,YAAY;4BAClB,IAAI,EAAE,QAAQ;4BACd,KAAK,EAAE,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;yBACzD,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;gBAED,2CAA2C;gBAC3C,IAAI,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC/B,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;oBACtC,IAAI,YAAY,EAAE,CAAC;wBACjB,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;wBAClD,aAAa,CAAC,IAAI,CAAC;4BACjB,IAAI,EAAE,YAAY;4BAClB,IAAI,EAAE,QAAQ;4BACd,KAAK,EAAE,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;yBACzD,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;gBAED,2EAA2E;gBAC3E,IAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;oBAC3B,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC;oBACjC,IAAI,YAAY,EAAE,CAAC;wBACjB,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;wBAClD,aAAa,CAAC,IAAI,CAAC;4BACjB,IAAI,EAAE,YAAY;4BAClB,IAAI,EAAE,QAAQ;4BACd,KAAK,EAAE,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;yBACzD,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;gBAED,iCAAiC;gBACjC,IAAI,IAAI,CAAC,IAAI,KAAK,8BAAS,CAAC,QAAQ,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;oBACxE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAwB,CAAC;oBAC7C,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;oBACjC,IAAI,OAAO,EAAE,CAAC;wBACZ,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;wBAC7C,wDAAwD;wBACxD,aAAa,CAAC,IAAI,CAAC;4BACjB,IAAI,EAAE,OAAO;4BACb,IAAI,EAAE,SAAS;4BACf,KAAK,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;yBAC3B,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;gBAED,2DAA2D;gBAC3D,IAAI,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC;oBAChC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;oBAC3B,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;oBAExC,IAAI,YAAY,EAAE,CAAC;wBACjB,MAAM,YAAY,GAAG,gBAAgB,CAAC,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;wBAEzE,6CAA6C;wBAC7C,IACE,YAAY,KAAK,QAAQ;4BACzB,YAAY,KAAK,QAAQ;4BACzB,YAAY,KAAK,SAAS,EAC1B,CAAC;4BACD,OAAO,CAAC,MAAM,CAAC;gCACb,OAAO,EAAE,8BAA8B,YAAY,gBAAgB,YAAY,iDAAiD;gCAChI,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK;gCACxC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG;6BACrC,CAAC,CAAC;wBACL,CAAC;6BAAM,IAAI,YAAY,KAAK,OAAO,EAAE,CAAC;4BACpC,OAAO,CAAC,MAAM,CAAC;gCACb,OAAO,EAAE,8BAA8B,YAAY,oEAAoE;gCACvH,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK;gCACxC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG;6BACrC,CAAC,CAAC;wBACL,CAAC;wBAED,sDAAsD;wBACtD,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;wBAClD,aAAa,CAAC,IAAI,CAAC;4BACjB,IAAI,EAAE,YAAY;4BAClB,IAAI,EAAE,QAAQ;4BACd,KAAK,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;yBAC3B,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,cAAc;AACd,SAAS,iBAAiB,CACxB,IAAe;IAEf,OAAO,IAAI,CAAC,IAAI,KAAK,8BAAS,CAAC,MAAM,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC;AAC3E,CAAC;AAED,SAAS,oBAAoB,CAC3B,IAAe;IAEf,OAAO,IAAI,CAAC,IAAI,KAAK,8BAAS,CAAC,UAAU,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC;AAC/E,CAAC;AAED,SAAS,kBAAkB,CACzB,IAAe;IAEf,OAAO,IAAI,CAAC,IAAI,KAAK,8BAAS,CAAC,OAAO,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC;AAC5E,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAe;IAC5C,OAAO,IAAI,CAAC,IAAI,KAAK,8BAAS,CAAC,WAAW,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC;AAChF,CAAC"}
|
|
@@ -10,7 +10,7 @@ exports.MissingContentForArguments = {
|
|
|
10
10
|
docs: {
|
|
11
11
|
description: 'This check ensures that all required arguments are provided when rendering a static block.',
|
|
12
12
|
recommended: true,
|
|
13
|
-
url: 'https://
|
|
13
|
+
url: 'https://shopify.dev/docs/storefronts/themes/tools/theme-check/checks/missing-content-for-arguments',
|
|
14
14
|
},
|
|
15
15
|
type: types_1.SourceCodeType.LiquidHtml,
|
|
16
16
|
severity: types_1.Severity.WARNING,
|