@platformos/platformos-language-server-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 +20 -0
- package/dist/PropertyShapeInference.d.ts +18 -0
- package/dist/PropertyShapeInference.js +62 -0
- package/dist/PropertyShapeInference.js.map +1 -1
- package/dist/TypeSystem.d.ts +4 -9
- package/dist/TypeSystem.js +246 -390
- package/dist/TypeSystem.js.map +1 -1
- package/dist/codeActions/providers/GenerateDocBlockProvider.d.ts +10 -0
- package/dist/codeActions/providers/GenerateDocBlockProvider.js +39 -0
- package/dist/codeActions/providers/GenerateDocBlockProvider.js.map +1 -0
- package/dist/commands/providers/GenerateDocBlockCommandProvider.d.ts +19 -0
- package/dist/commands/providers/GenerateDocBlockCommandProvider.js +64 -0
- package/dist/commands/providers/GenerateDocBlockCommandProvider.js.map +1 -0
- package/dist/completions/CompletionsProvider.d.ts +6 -10
- package/dist/completions/CompletionsProvider.js +6 -9
- package/dist/completions/CompletionsProvider.js.map +1 -1
- package/dist/completions/params/LiquidCompletionParams.js +6 -17
- package/dist/completions/params/LiquidCompletionParams.js.map +1 -1
- package/dist/completions/providers/ContentForCompletionProvider.js +2 -4
- package/dist/completions/providers/ContentForCompletionProvider.js.map +1 -1
- package/dist/completions/providers/FilterNamedParameterCompletionProvider.d.ts +3 -3
- package/dist/completions/providers/FilterNamedParameterCompletionProvider.js +6 -6
- package/dist/completions/providers/FilterNamedParameterCompletionProvider.js.map +1 -1
- package/dist/completions/providers/LiquidDocParamTypeCompletionProvider.d.ts +3 -3
- package/dist/completions/providers/LiquidDocParamTypeCompletionProvider.js +3 -3
- package/dist/completions/providers/LiquidDocParamTypeCompletionProvider.js.map +1 -1
- package/dist/completions/providers/LiquidTagsCompletionProvider.d.ts +3 -3
- package/dist/completions/providers/LiquidTagsCompletionProvider.js +3 -3
- package/dist/completions/providers/LiquidTagsCompletionProvider.js.map +1 -1
- package/dist/completions/providers/RenderPartialParameterCompletionProvider.js +1 -1
- package/dist/completions/providers/RenderPartialParameterCompletionProvider.js.map +1 -1
- package/dist/completions/providers/index.d.ts +0 -3
- package/dist/completions/providers/index.js +1 -7
- package/dist/completions/providers/index.js.map +1 -1
- package/dist/css/CSSLanguageService.d.ts +19 -5
- package/dist/css/CSSLanguageService.js +77 -63
- package/dist/css/CSSLanguageService.js.map +1 -1
- package/dist/definitions/DefinitionProvider.d.ts +1 -1
- package/dist/definitions/DefinitionProvider.js +1 -3
- package/dist/definitions/DefinitionProvider.js.map +1 -1
- package/dist/diagnostics/offenseToDiagnostic.js +1 -1
- package/dist/diagnostics/offenseToDiagnostic.js.map +1 -1
- package/dist/diagnostics/runChecks.d.ts +3 -5
- package/dist/diagnostics/runChecks.js +12 -64
- package/dist/diagnostics/runChecks.js.map +1 -1
- package/dist/docset/MarkdownRenderer.js +1 -1
- package/dist/docset/MarkdownRenderer.js.map +1 -1
- package/dist/documentLinks/DocumentLinksProvider.d.ts +3 -3
- package/dist/documentLinks/DocumentLinksProvider.js +3 -3
- package/dist/documentLinks/DocumentLinksProvider.js.map +1 -1
- package/dist/documents/DocumentManager.d.ts +4 -5
- package/dist/documents/DocumentManager.js +17 -12
- package/dist/documents/DocumentManager.js.map +1 -1
- package/dist/documents/types.d.ts +16 -3
- package/dist/documents/types.js +3 -3
- package/dist/documents/types.js.map +1 -1
- package/dist/hover/HoverProvider.d.ts +5 -8
- package/dist/hover/HoverProvider.js +8 -14
- package/dist/hover/HoverProvider.js.map +1 -1
- package/dist/hover/providers/LiquidFilterArgumentHoverProvider.d.ts +3 -3
- package/dist/hover/providers/LiquidFilterArgumentHoverProvider.js +3 -3
- package/dist/hover/providers/LiquidFilterArgumentHoverProvider.js.map +1 -1
- package/dist/hover/providers/LiquidFilterHoverProvider.d.ts +3 -3
- package/dist/hover/providers/LiquidFilterHoverProvider.js +3 -3
- package/dist/hover/providers/LiquidFilterHoverProvider.js.map +1 -1
- package/dist/hover/providers/LiquidTagHoverProvider.d.ts +3 -3
- package/dist/hover/providers/LiquidTagHoverProvider.js +3 -3
- package/dist/hover/providers/LiquidTagHoverProvider.js.map +1 -1
- package/dist/hover/providers/RenderPartialHoverProvider.js +1 -1
- package/dist/hover/providers/RenderPartialHoverProvider.js.map +1 -1
- package/dist/hover/providers/RenderPartialParameterHoverProvider.js +1 -1
- package/dist/hover/providers/RenderPartialParameterHoverProvider.js.map +1 -1
- package/dist/hover/providers/TranslationHoverProvider.d.ts +3 -3
- package/dist/hover/providers/TranslationHoverProvider.js +3 -3
- package/dist/hover/providers/TranslationHoverProvider.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js.map +1 -1
- package/dist/internal-types.d.ts +1 -1
- package/dist/json/JSONContributions.d.ts +1 -5
- package/dist/json/JSONContributions.js +4 -36
- package/dist/json/JSONContributions.js.map +1 -1
- package/dist/json/JSONLanguageService.d.ts +4 -12
- package/dist/json/JSONLanguageService.js +17 -80
- package/dist/json/JSONLanguageService.js.map +1 -1
- package/dist/json/test/test-helpers.d.ts +1 -3
- package/dist/json/test/test-helpers.js +3 -19
- package/dist/json/test/test-helpers.js.map +1 -1
- package/dist/json/utils.d.ts +0 -5
- package/dist/json/utils.js +0 -24
- package/dist/json/utils.js.map +1 -1
- package/dist/rename/RenameProvider.d.ts +2 -2
- package/dist/rename/RenameProvider.js +2 -2
- package/dist/rename/RenameProvider.js.map +1 -1
- package/dist/rename/providers/LiquidVariableRenameProvider.d.ts +3 -3
- package/dist/rename/providers/LiquidVariableRenameProvider.js +4 -4
- package/dist/rename/providers/LiquidVariableRenameProvider.js.map +1 -1
- package/dist/renamed/RenameHandler.d.ts +2 -3
- package/dist/renamed/RenameHandler.js +3 -8
- package/dist/renamed/RenameHandler.js.map +1 -1
- package/dist/renamed/handlers/AssetRenameHandler.d.ts +3 -3
- package/dist/renamed/handlers/AssetRenameHandler.js +5 -5
- package/dist/renamed/handlers/AssetRenameHandler.js.map +1 -1
- package/dist/renamed/handlers/PartialRenameHandler.d.ts +3 -3
- package/dist/renamed/handlers/PartialRenameHandler.js +5 -5
- package/dist/renamed/handlers/PartialRenameHandler.js.map +1 -1
- package/dist/renamed/handlers/utils.d.ts +1 -1
- package/dist/server/AppGraphManager.d.ts +32 -0
- package/dist/server/AppGraphManager.js +155 -0
- package/dist/server/AppGraphManager.js.map +1 -0
- package/dist/server/startServer.d.ts +2 -2
- package/dist/server/startServer.js +62 -164
- package/dist/server/startServer.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types.d.ts +33 -54
- package/dist/types.js +21 -26
- package/dist/types.js.map +1 -1
- package/dist/utils/liquidDoc.js +1 -1
- package/dist/utils/liquidDoc.js.map +1 -1
- package/dist/utils/uri.d.ts +2 -9
- package/dist/utils/uri.js +5 -21
- package/dist/utils/uri.js.map +1 -1
- package/package.json +4 -4
- package/src/ClientCapabilities.ts +1 -1
- package/src/PropertyShapeInference.ts +81 -1
- package/src/TypeSystem.spec.ts +206 -449
- package/src/TypeSystem.ts +267 -460
- package/src/codeActions/providers/FixAllProvider.spec.ts +1 -1
- package/src/codeActions/providers/FixProvider.spec.ts +11 -11
- package/src/codeActions/providers/SuggestionProvider.spec.ts +2 -2
- package/src/commands/providers/ApplyFixesProvider.ts +2 -2
- package/src/commands/providers/ApplySuggestionProvider.ts +2 -2
- package/src/commands/providers/RunChecksProvider.ts +2 -2
- package/src/completions/CompletionsProvider.ts +14 -35
- package/src/completions/params/LiquidCompletionParams.spec.ts +0 -9
- package/src/completions/params/LiquidCompletionParams.ts +8 -17
- package/src/completions/params/fix.spec.ts +0 -3
- package/src/completions/providers/FilterCompletionProvider.spec.ts +2 -8
- package/src/completions/providers/FilterNamedParameterCompletionProvider.spec.ts +1 -5
- package/src/completions/providers/FilterNamedParameterCompletionProvider.ts +6 -6
- package/src/completions/providers/HtmlAttributeCompletionProvider.spec.ts +1 -4
- package/src/completions/providers/HtmlAttributeValueCompletionProvider.spec.ts +1 -4
- package/src/completions/providers/HtmlTagCompletionProvider.spec.ts +1 -4
- package/src/completions/providers/LiquidDocParamTypeCompletionProvider.spec.ts +1 -28
- package/src/completions/providers/LiquidDocParamTypeCompletionProvider.ts +3 -3
- package/src/completions/providers/LiquidDocTagCompletionProvider.spec.ts +1 -26
- package/src/completions/providers/LiquidTagsCompletionProvider.spec.ts +4 -18
- package/src/completions/providers/LiquidTagsCompletionProvider.ts +3 -3
- package/src/completions/providers/ObjectAttributeCompletionProvider.spec.ts +2 -31
- package/src/completions/providers/ObjectCompletionProvider.spec.ts +34 -123
- package/src/completions/providers/PartialCompletionProvider.spec.ts +6 -15
- package/src/completions/providers/RenderPartialParameterCompletionProvider.spec.ts +13 -15
- package/src/completions/providers/RenderPartialParameterCompletionProvider.ts +2 -3
- package/src/completions/providers/TranslationCompletionProvider.spec.ts +1 -4
- package/src/completions/providers/TranslationCompletionProvider.ts +3 -3
- package/src/completions/providers/index.ts +0 -3
- package/src/css/CSSLanguageService.ts +97 -81
- package/src/definitions/DefinitionProvider.ts +0 -6
- package/src/definitions/providers/TranslationStringDefinitionProvider.spec.ts +1 -5
- package/src/diagnostics/offenseToDiagnostic.ts +1 -1
- package/src/diagnostics/runChecks.spec.ts +22 -30
- package/src/diagnostics/runChecks.ts +17 -91
- package/src/docset/MarkdownRenderer.ts +1 -1
- package/src/documentLinks/DocumentLinksProvider.ts +10 -10
- package/src/documents/DocumentManager.spec.ts +46 -119
- package/src/documents/DocumentManager.ts +19 -15
- package/src/documents/types.ts +18 -9
- package/src/hover/HoverProvider.ts +9 -21
- package/src/hover/providers/HtmlAttributeHoverProvider.spec.ts +1 -3
- package/src/hover/providers/HtmlAttributeValueHoverProvider.spec.ts +1 -3
- package/src/hover/providers/HtmlTagHoverProvider.spec.ts +1 -3
- package/src/hover/providers/LiquidDocTagHoverProvider.spec.ts +1 -4
- package/src/hover/providers/LiquidFilterArgumentHoverProvider.spec.ts +0 -3
- package/src/hover/providers/LiquidFilterArgumentHoverProvider.ts +3 -3
- package/src/hover/providers/LiquidFilterHoverProvider.spec.ts +0 -3
- package/src/hover/providers/LiquidFilterHoverProvider.ts +3 -3
- package/src/hover/providers/LiquidObjectAttributeHoverProvider.spec.ts +1 -3
- package/src/hover/providers/LiquidObjectHoverProvider.spec.ts +46 -129
- package/src/hover/providers/LiquidTagHoverProvider.spec.ts +0 -3
- package/src/hover/providers/LiquidTagHoverProvider.ts +3 -3
- package/src/hover/providers/RenderPartialHoverProvider.spec.ts +11 -14
- package/src/hover/providers/RenderPartialHoverProvider.ts +1 -5
- package/src/hover/providers/RenderPartialParameterHoverProvider.spec.ts +10 -13
- package/src/hover/providers/RenderPartialParameterHoverProvider.ts +2 -3
- package/src/hover/providers/TranslationHoverProvider.spec.ts +1 -4
- package/src/hover/providers/TranslationHoverProvider.ts +3 -3
- package/src/index.ts +4 -7
- package/src/internal-types.ts +1 -1
- package/src/json/JSONContributions.ts +4 -61
- package/src/json/JSONLanguageService.ts +19 -117
- package/src/json/test/test-helpers.ts +4 -35
- package/src/json/utils.ts +0 -27
- package/src/rename/RenameProvider.ts +4 -4
- package/src/rename/providers/LiquidVariableRenameProvider.spec.ts +5 -5
- package/src/rename/providers/LiquidVariableRenameProvider.ts +6 -6
- package/src/renamed/RenameHandler.ts +4 -9
- package/src/renamed/handlers/AssetRenameHandler.spec.ts +28 -28
- package/src/renamed/handlers/AssetRenameHandler.ts +6 -6
- package/src/renamed/handlers/PartialRenameHandler.spec.ts +9 -9
- package/src/renamed/handlers/PartialRenameHandler.ts +10 -10
- package/src/server/{ThemeGraphManager.ts → AppGraphManager.ts} +21 -90
- package/src/server/safe.ts +1 -1
- package/src/server/startServer.spec.ts +10 -12
- package/src/server/startServer.ts +69 -222
- package/src/test/CompletionItemsAssertion.spec.ts +1 -4
- package/src/types.ts +33 -63
- package/src/utils/debounce.ts +1 -1
- package/src/utils/liquidDoc.ts +6 -6
- package/src/utils/uri.ts +5 -17
- package/src/completions/providers/ContentForBlockTypeCompletionProvider.spec.ts +0 -41
- package/src/completions/providers/ContentForBlockTypeCompletionProvider.ts +0 -42
- package/src/completions/providers/ContentForCompletionProvider.spec.ts +0 -96
- package/src/completions/providers/ContentForCompletionProvider.ts +0 -113
- package/src/completions/providers/ContentForParameterCompletionProvider.spec.ts +0 -362
- package/src/completions/providers/ContentForParameterCompletionProvider.ts +0 -187
- package/src/completions/providers/data/contentForParameterCompletionOptions.ts +0 -9
- package/src/css/CSSLanguageService.spec.ts +0 -159
- package/src/css/test/test-helpers.ts +0 -30
- package/src/definitions/providers/SchemaTranslationStringDefinitionProvider.spec.ts +0 -96
- package/src/definitions/providers/SchemaTranslationStringDefinitionProvider.ts +0 -82
- package/src/hover/providers/ContentForArgumentHoverProvider.spec.ts +0 -76
- package/src/hover/providers/ContentForArgumentHoverProvider.ts +0 -56
- package/src/hover/providers/ContentForTypeHoverProvider.spec.ts +0 -91
- package/src/hover/providers/ContentForTypeHoverProvider.ts +0 -42
- package/src/json/JSONLanguageService.spec.ts +0 -424
- package/src/json/completions/providers/BlockSettingsPropertyCompletionProvider.spec.ts +0 -163
- package/src/json/completions/providers/BlockSettingsPropertyCompletionProvider.ts +0 -121
- package/src/json/completions/providers/BlockTypeCompletionProvider.spec.ts +0 -137
- package/src/json/completions/providers/BlockTypeCompletionProvider.ts +0 -108
- package/src/json/completions/providers/ReferencedBlockTypeCompletionProvider.spec.ts +0 -132
- package/src/json/completions/providers/ReferencedBlockTypeCompletionProvider.ts +0 -120
- package/src/json/completions/providers/SchemaTranslationCompletionProvider.ts +0 -51
- package/src/json/completions/providers/SettingsPropertyCompletionProvider.spec.ts +0 -211
- package/src/json/completions/providers/SettingsPropertyCompletionProvider.ts +0 -75
- package/src/json/documentLinks/DocumentLinksProvider.spec.ts +0 -223
- package/src/json/documentLinks/DocumentLinksProvider.ts +0 -61
- package/src/json/hover/providers/BlockSettingsHoverProvider.spec.ts +0 -292
- package/src/json/hover/providers/BlockSettingsHoverProvider.ts +0 -99
- package/src/json/hover/providers/SchemaTranslationHoverProvider.ts +0 -35
- package/src/json/hover/providers/SettingsHoverProvider.spec.ts +0 -139
- package/src/json/hover/providers/SettingsHoverProvider.ts +0 -79
- package/src/json/schemaSettings.spec.ts +0 -103
- package/src/json/schemaSettings.ts +0 -53
- package/src/plugins/css.ts +0 -12
- package/src/renamed/handlers/BlockRenameHandler.spec.ts +0 -399
- package/src/renamed/handlers/BlockRenameHandler.ts +0 -402
- package/src/renamed/handlers/SectionRenameHandler.spec.ts +0 -321
- package/src/renamed/handlers/SectionRenameHandler.ts +0 -224
- package/src/renamed/handlers/utils.ts +0 -22
- package/src/settings/index.ts +0 -50
package/src/types.ts
CHANGED
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
Config,
|
|
3
|
-
Dependencies as ThemeCheckDependencies,
|
|
4
|
-
} from '@platformos/platformos-check-common';
|
|
1
|
+
import { Config, Dependencies as CheckDependencies } from '@platformos/platformos-check-common';
|
|
5
2
|
import { AbstractFileSystem } from '@platformos/platformos-common';
|
|
6
3
|
import { URI } from 'vscode-languageserver';
|
|
7
4
|
import * as rpc from 'vscode-jsonrpc';
|
|
@@ -10,10 +7,7 @@ import { WithOptional } from './utils';
|
|
|
10
7
|
import { Range } from 'vscode-json-languageservice';
|
|
11
8
|
import { Reference } from '@platformos/platformos-graph';
|
|
12
9
|
|
|
13
|
-
export type Dependencies = WithOptional<
|
|
14
|
-
RequiredDependencies,
|
|
15
|
-
'log' | 'getMetafieldDefinitions' | 'fetchMetafieldDefinitionsForURI'
|
|
16
|
-
>;
|
|
10
|
+
export type Dependencies = WithOptional<RequiredDependencies, 'log'>;
|
|
17
11
|
|
|
18
12
|
export interface RequiredDependencies {
|
|
19
13
|
/**
|
|
@@ -34,25 +28,25 @@ export interface RequiredDependencies {
|
|
|
34
28
|
*
|
|
35
29
|
* @example
|
|
36
30
|
*
|
|
37
|
-
* Here's an example VS Code workspace a
|
|
31
|
+
* Here's an example VS Code workspace a developer could run
|
|
38
32
|
* ```
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
*
|
|
33
|
+
* my-app/
|
|
34
|
+
* .pos
|
|
35
|
+
* app/
|
|
36
|
+
* views/
|
|
37
|
+
* layouts/
|
|
38
|
+
* pages/
|
|
39
|
+
* partials/
|
|
40
|
+
* lib/
|
|
41
|
+
* assets/
|
|
42
|
+
* another-app/
|
|
43
|
+
* .pos
|
|
44
|
+
* app/
|
|
45
|
+
* views/
|
|
46
|
+
* pages/
|
|
53
47
|
* ```
|
|
54
48
|
*
|
|
55
|
-
* In this situation, we have
|
|
49
|
+
* In this situation, we have 2 different "roots."
|
|
56
50
|
*
|
|
57
51
|
* @param uri - a file path
|
|
58
52
|
* @returns {Promise<Config>}
|
|
@@ -61,19 +55,17 @@ export interface RequiredDependencies {
|
|
|
61
55
|
|
|
62
56
|
/**
|
|
63
57
|
* In local environments, the Language Server can download the latest versions
|
|
64
|
-
* of
|
|
65
|
-
*
|
|
66
|
-
* environment.
|
|
58
|
+
* of the platformOS Liquid docset. In the browser, the docset must be
|
|
59
|
+
* precompiled into the bundle at build time.
|
|
67
60
|
*/
|
|
68
|
-
|
|
61
|
+
platformosDocset: NonNullable<CheckDependencies['platformosDocset']>;
|
|
69
62
|
|
|
70
63
|
/**
|
|
71
|
-
* In local environments, the Language Server can download the latest
|
|
72
|
-
*
|
|
73
|
-
*
|
|
74
|
-
* to theme-check instantiation.
|
|
64
|
+
* In local environments, the Language Server can download the latest JSON
|
|
65
|
+
* validation schemas. In browser environments, schemas must be precompiled
|
|
66
|
+
* into validators prior to platformos-check instantiation.
|
|
75
67
|
*/
|
|
76
|
-
jsonValidationSet: NonNullable<
|
|
68
|
+
jsonValidationSet: NonNullable<CheckDependencies['jsonValidationSet']>;
|
|
77
69
|
|
|
78
70
|
/**
|
|
79
71
|
* A file system abstraction that allows the Language Server to read files by URI.
|
|
@@ -85,23 +77,10 @@ export interface RequiredDependencies {
|
|
|
85
77
|
* The browser accepts a custom implementation.
|
|
86
78
|
*/
|
|
87
79
|
fs: AbstractFileSystem;
|
|
88
|
-
|
|
89
|
-
/**
|
|
90
|
-
* In local environments, the Language Server can download the metafield definitions
|
|
91
|
-
* and provide a set of memoized definitions. In other environments, we rely on dynamically
|
|
92
|
-
* fetching the set of metafield definitions every time.
|
|
93
|
-
*/
|
|
94
|
-
getMetafieldDefinitions: ThemeCheckDependencies['getMetafieldDefinitions'];
|
|
95
|
-
|
|
96
|
-
/**
|
|
97
|
-
* Fetch Metafield definitions using the CLI provided the URI of the project root.
|
|
98
|
-
* This should only be used in node environments; not on the browser.
|
|
99
|
-
*/
|
|
100
|
-
fetchMetafieldDefinitionsForURI: (uri: URI) => Promise<void>;
|
|
101
80
|
}
|
|
102
81
|
|
|
103
|
-
export namespace
|
|
104
|
-
export const method = '
|
|
82
|
+
export namespace AppGraphReferenceRequest {
|
|
83
|
+
export const method = 'appGraph/references';
|
|
105
84
|
export const type = new rpc.RequestType<Params, Response, void>(method);
|
|
106
85
|
export interface Params {
|
|
107
86
|
uri: string;
|
|
@@ -111,8 +90,8 @@ export namespace ThemeGraphReferenceRequest {
|
|
|
111
90
|
export type Response = AugmentedReference[];
|
|
112
91
|
}
|
|
113
92
|
|
|
114
|
-
export namespace
|
|
115
|
-
export const method = '
|
|
93
|
+
export namespace AppGraphDependenciesRequest {
|
|
94
|
+
export const method = 'appGraph/dependencies';
|
|
116
95
|
export const type = new rpc.RequestType<Params, Response, void>(method);
|
|
117
96
|
export interface Params {
|
|
118
97
|
uri: string;
|
|
@@ -122,8 +101,8 @@ export namespace ThemeGraphDependenciesRequest {
|
|
|
122
101
|
export type Response = AugmentedReference[];
|
|
123
102
|
}
|
|
124
103
|
|
|
125
|
-
export namespace
|
|
126
|
-
export const method = '
|
|
104
|
+
export namespace AppGraphRootRequest {
|
|
105
|
+
export const method = 'appGraph/rootUri';
|
|
127
106
|
export const type = new rpc.RequestType<Params, Response, void>(method);
|
|
128
107
|
export interface Params {
|
|
129
108
|
uri: string;
|
|
@@ -131,17 +110,8 @@ export namespace ThemeGraphRootRequest {
|
|
|
131
110
|
export type Response = string;
|
|
132
111
|
}
|
|
133
112
|
|
|
134
|
-
export namespace
|
|
135
|
-
export const method = '
|
|
136
|
-
export const type = new rpc.RequestType<Params, Response, void>(method);
|
|
137
|
-
export interface Params {
|
|
138
|
-
uri: string;
|
|
139
|
-
}
|
|
140
|
-
export type Response = string[];
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
export namespace ThemeGraphDidUpdateNotification {
|
|
144
|
-
export const method = 'themeGraph/onDidChangeTree';
|
|
113
|
+
export namespace AppGraphDidUpdateNotification {
|
|
114
|
+
export const method = 'appGraph/onDidChangeTree';
|
|
145
115
|
export const type = new rpc.NotificationType<Params>(method);
|
|
146
116
|
export interface Params {
|
|
147
117
|
uri: string;
|
package/src/utils/debounce.ts
CHANGED
|
@@ -27,7 +27,7 @@ export interface DebouncedFunction<F extends Function> {
|
|
|
27
27
|
* This is useful in cases where you have an "expensive" function that you only want
|
|
28
28
|
* to execute after the user is idle for a little bit.
|
|
29
29
|
*
|
|
30
|
-
* e.g. Run
|
|
30
|
+
* e.g. Run platformos-check after the user has stopped typing for at least 100ms.
|
|
31
31
|
*
|
|
32
32
|
* The debounced function has the same type signature as its argument.
|
|
33
33
|
*
|
package/src/utils/liquidDoc.ts
CHANGED
|
@@ -29,11 +29,11 @@ export function formatLiquidDocTagHandle(label: string, description: string, exa
|
|
|
29
29
|
export const SUPPORTED_LIQUID_DOC_TAG_HANDLES = {
|
|
30
30
|
[SupportedDocTagTypes.Param]: {
|
|
31
31
|
description:
|
|
32
|
-
'Provides information about a parameter for the
|
|
32
|
+
'Provides information about a parameter for the partial.\n' +
|
|
33
33
|
`- The type of parameter is optional and can be ${Object.values(BasicParamTypes)
|
|
34
34
|
.map((type) => `\`${type}\``)
|
|
35
35
|
.join(', ')}\n` +
|
|
36
|
-
` or liquid object that isn't exclusively a global object in our [API Docs](https://
|
|
36
|
+
` or liquid object that isn't exclusively a global object in our [API Docs](https://documentation.platformos.com/api-reference/liquid/platformos-objects)\n` +
|
|
37
37
|
'- An optional parameter is denoted by square brackets around the parameter name\n' +
|
|
38
38
|
'- The description is optional Markdown text',
|
|
39
39
|
example:
|
|
@@ -45,15 +45,15 @@ export const SUPPORTED_LIQUID_DOC_TAG_HANDLES = {
|
|
|
45
45
|
template: `param {$2} $1$0`,
|
|
46
46
|
},
|
|
47
47
|
[SupportedDocTagTypes.Example]: {
|
|
48
|
-
description: 'Provides an example on how to use the
|
|
48
|
+
description: 'Provides an example on how to use the partial.',
|
|
49
49
|
example:
|
|
50
|
-
'{% doc %}\n' + ' @example {% render "
|
|
50
|
+
'{% doc %}\n' + ' @example {% render "partial-name", arg1: "value" %}\n' + '{% enddoc %}\n',
|
|
51
51
|
template: `example $0`,
|
|
52
52
|
},
|
|
53
53
|
[SupportedDocTagTypes.Description]: {
|
|
54
|
-
description: 'Provides information on what the
|
|
54
|
+
description: 'Provides information on what the partial does.',
|
|
55
55
|
example:
|
|
56
|
-
'{% doc %}\n' + ' @description This
|
|
56
|
+
'{% doc %}\n' + ' @description This partial renders a product image.\n' + '{% enddoc %}\n',
|
|
57
57
|
template: `description $0`,
|
|
58
58
|
},
|
|
59
59
|
};
|
package/src/utils/uri.ts
CHANGED
|
@@ -1,22 +1,10 @@
|
|
|
1
1
|
import { path } from '@platformos/platformos-check-common';
|
|
2
|
+
import { isPartial, PlatformOSFileType, getFileType } from '@platformos/platformos-common';
|
|
3
|
+
|
|
4
|
+
export { isPartial };
|
|
2
5
|
|
|
3
6
|
export const partialName = (uri: string) => path.basename(uri, '.liquid');
|
|
4
|
-
export const isPartial = (uri: string) => /\b(partials|lib)(\\|\/)[^\\\/]*\.liquid/.test(uri);
|
|
5
7
|
|
|
6
|
-
// asset urls have their `.liquid
|
|
8
|
+
// asset urls have their `.liquid` removed (if present) and require the other extension
|
|
7
9
|
export const assetName = (uri: string) => path.basename(uri, '.liquid');
|
|
8
|
-
export const isAsset = (uri: string) =>
|
|
9
|
-
|
|
10
|
-
export const blockName = (uri: string) => path.basename(uri, '.liquid');
|
|
11
|
-
export const isBlock = (uri: string) => /\bblocks(\\|\/)[^\\\/]/.test(uri);
|
|
12
|
-
|
|
13
|
-
export const sectionName = (uri: string) => path.basename(uri, '.liquid');
|
|
14
|
-
export const isSection = (uri: string) =>
|
|
15
|
-
/\bsections(\\|\/)[^\\\/]/.test(uri) && /.liquid$/.test(uri);
|
|
16
|
-
|
|
17
|
-
export const sectionGroupName = (uri: string) => path.basename(uri, '.json');
|
|
18
|
-
export const isSectionGroup = (uri: string) =>
|
|
19
|
-
/\bsections(\\|\/)[^\\\/]/.test(uri) && /.json$/.test(uri);
|
|
20
|
-
|
|
21
|
-
export const templateName = (uri: string) => path.basename(uri, '.json');
|
|
22
|
-
export const isTemplate = (uri: string) => /\btemplates(\\|\/)[^\\\/]/.test(uri);
|
|
10
|
+
export const isAsset = (uri: string) => getFileType(uri) === PlatformOSFileType.Asset;
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import { MetafieldDefinitionMap } from '@platformos/platformos-check-common';
|
|
2
|
-
import { beforeEach, describe, expect, it } from 'vitest';
|
|
3
|
-
import { InsertTextFormat } from 'vscode-json-languageservice';
|
|
4
|
-
import { DocumentManager } from '../../documents';
|
|
5
|
-
import { CompletionsProvider } from '../CompletionsProvider';
|
|
6
|
-
|
|
7
|
-
describe('Module: ContentForBlockTypeCompletionProvider', async () => {
|
|
8
|
-
let provider: CompletionsProvider;
|
|
9
|
-
|
|
10
|
-
beforeEach(async () => {
|
|
11
|
-
provider = new CompletionsProvider({
|
|
12
|
-
documentManager: new DocumentManager(),
|
|
13
|
-
themeDocset: {
|
|
14
|
-
graphQL: async () => null,
|
|
15
|
-
filters: async () => [],
|
|
16
|
-
objects: async () => [],
|
|
17
|
-
liquidDrops: async () => [],
|
|
18
|
-
tags: async () => [],
|
|
19
|
-
systemTranslations: async () => ({}),
|
|
20
|
-
},
|
|
21
|
-
getMetafieldDefinitions: async (_rootUri: string) => ({}) as MetafieldDefinitionMap,
|
|
22
|
-
getThemeBlockNames: async (_rootUri: string, _includePrivate: boolean) => [
|
|
23
|
-
'block-1',
|
|
24
|
-
'block-2',
|
|
25
|
-
],
|
|
26
|
-
});
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
it('should complete content_for "block" type parameter ', async () => {
|
|
30
|
-
const expected = ['block-1', 'block-2'].sort();
|
|
31
|
-
await expect(provider).to.complete('{% content_for "block", type: "█" %}', expected);
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
it('should not complete content_for "blocks" type parameter', async () => {
|
|
35
|
-
await expect(provider).to.complete('{% content_for "blocks", type: "█" %}', []);
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
it('should not complete content_for "block" id parameter', async () => {
|
|
39
|
-
await expect(provider).to.complete('{% content_for "block", type: "", id: "█" %}', []);
|
|
40
|
-
});
|
|
41
|
-
});
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { NodeTypes } from '@platformos/liquid-html-parser';
|
|
2
|
-
import { CompletionItem, CompletionItemKind } from 'vscode-languageserver';
|
|
3
|
-
import { LiquidCompletionParams } from '../params';
|
|
4
|
-
import { Provider } from './common';
|
|
5
|
-
|
|
6
|
-
export class ContentForBlockTypeCompletionProvider implements Provider {
|
|
7
|
-
constructor(
|
|
8
|
-
private readonly getThemeBlockNames: (
|
|
9
|
-
rootUri: string,
|
|
10
|
-
includePrivate: boolean,
|
|
11
|
-
) => Promise<string[]>,
|
|
12
|
-
) {}
|
|
13
|
-
|
|
14
|
-
async completions(params: LiquidCompletionParams): Promise<CompletionItem[]> {
|
|
15
|
-
if (!params.completionContext) return [];
|
|
16
|
-
|
|
17
|
-
const { document } = params;
|
|
18
|
-
const doc = document.textDocument;
|
|
19
|
-
const { node, ancestors } = params.completionContext;
|
|
20
|
-
const parentNode = ancestors.at(-1);
|
|
21
|
-
const grandParentNode = ancestors.at(-2);
|
|
22
|
-
|
|
23
|
-
if (
|
|
24
|
-
!node ||
|
|
25
|
-
!parentNode ||
|
|
26
|
-
!grandParentNode ||
|
|
27
|
-
node.type !== NodeTypes.String ||
|
|
28
|
-
parentNode.type !== NodeTypes.NamedArgument ||
|
|
29
|
-
parentNode.name !== 'type' ||
|
|
30
|
-
grandParentNode.type !== NodeTypes.ContentForMarkup ||
|
|
31
|
-
grandParentNode.contentForType.value !== 'block'
|
|
32
|
-
) {
|
|
33
|
-
return [];
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
return (await this.getThemeBlockNames(doc.uri, false)).map((blockName) => ({
|
|
37
|
-
label: blockName,
|
|
38
|
-
kind: CompletionItemKind.EnumMember,
|
|
39
|
-
insertText: blockName,
|
|
40
|
-
}));
|
|
41
|
-
}
|
|
42
|
-
}
|
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
import { MetafieldDefinitionMap } from '@platformos/platformos-check-common';
|
|
2
|
-
import { beforeEach, describe, expect, it } from 'vitest';
|
|
3
|
-
import { InsertTextFormat } from 'vscode-json-languageservice';
|
|
4
|
-
import { DocumentManager } from '../../documents';
|
|
5
|
-
import { CompletionsProvider } from '../CompletionsProvider';
|
|
6
|
-
|
|
7
|
-
describe('Module: ContentForCompletionProvider', async () => {
|
|
8
|
-
let provider: CompletionsProvider;
|
|
9
|
-
|
|
10
|
-
beforeEach(async () => {
|
|
11
|
-
provider = new CompletionsProvider({
|
|
12
|
-
documentManager: new DocumentManager(),
|
|
13
|
-
themeDocset: {
|
|
14
|
-
graphQL: async () => null,
|
|
15
|
-
filters: async () => [],
|
|
16
|
-
objects: async () => [],
|
|
17
|
-
liquidDrops: async () => [],
|
|
18
|
-
tags: async () => [],
|
|
19
|
-
systemTranslations: async () => ({}),
|
|
20
|
-
},
|
|
21
|
-
getMetafieldDefinitions: async (_rootUri: string) => ({}) as MetafieldDefinitionMap,
|
|
22
|
-
});
|
|
23
|
-
});
|
|
24
|
-
|
|
25
|
-
it('should complete content_for block keywords correctly', async () => {
|
|
26
|
-
const expected = ['block', 'blocks'].sort();
|
|
27
|
-
await expect(provider).to.complete('{% content_for "█" %}', expected);
|
|
28
|
-
});
|
|
29
|
-
|
|
30
|
-
describe('when the text being completed does not have extra markup', () => {
|
|
31
|
-
it('should text edit complete content_for block with type & id placeholders', async () => {
|
|
32
|
-
const source = '{% content_for "█" %}';
|
|
33
|
-
await expect(provider).to.complete(
|
|
34
|
-
source,
|
|
35
|
-
expect.arrayContaining([
|
|
36
|
-
expect.objectContaining({
|
|
37
|
-
label: 'block',
|
|
38
|
-
textEdit: expect.applyEdits(source, `{% content_for "block", type: "$1", id: "$2" %}`),
|
|
39
|
-
}),
|
|
40
|
-
]),
|
|
41
|
-
);
|
|
42
|
-
});
|
|
43
|
-
|
|
44
|
-
it('should keep using the quote type used', async () => {
|
|
45
|
-
const source = `{% content_for '█' %}`;
|
|
46
|
-
await expect(provider).to.complete(
|
|
47
|
-
source,
|
|
48
|
-
expect.arrayContaining([
|
|
49
|
-
expect.objectContaining({
|
|
50
|
-
label: 'block',
|
|
51
|
-
textEdit: expect.applyEdits(
|
|
52
|
-
source,
|
|
53
|
-
// single quotes everywhere
|
|
54
|
-
`{% content_for 'block', type: '$1', id: '$2' %}`,
|
|
55
|
-
),
|
|
56
|
-
}),
|
|
57
|
-
]),
|
|
58
|
-
);
|
|
59
|
-
});
|
|
60
|
-
|
|
61
|
-
it('should text edit complete inside the liquid liquid tag', async () => {
|
|
62
|
-
const source = `{% liquid
|
|
63
|
-
content_for "█"
|
|
64
|
-
echo "more content"
|
|
65
|
-
%}`;
|
|
66
|
-
const afterEdit = `{% liquid
|
|
67
|
-
content_for "block", type: "$1", id: "$2"
|
|
68
|
-
echo "more content"
|
|
69
|
-
%}`;
|
|
70
|
-
await expect(provider).to.complete(
|
|
71
|
-
source,
|
|
72
|
-
expect.arrayContaining([
|
|
73
|
-
expect.objectContaining({
|
|
74
|
-
label: 'block',
|
|
75
|
-
textEdit: expect.applyEdits(source, afterEdit),
|
|
76
|
-
}),
|
|
77
|
-
]),
|
|
78
|
-
);
|
|
79
|
-
});
|
|
80
|
-
});
|
|
81
|
-
|
|
82
|
-
describe('when it has extra markup', () => {
|
|
83
|
-
it('should not text edit complete', async () => {
|
|
84
|
-
const source = '{% content_for "█", type: "some-type", id: "some-id" %}';
|
|
85
|
-
await expect(provider).to.complete(
|
|
86
|
-
source,
|
|
87
|
-
expect.arrayContaining([
|
|
88
|
-
expect.objectContaining({
|
|
89
|
-
label: 'block',
|
|
90
|
-
insertTextFormat: InsertTextFormat.PlainText,
|
|
91
|
-
}),
|
|
92
|
-
]),
|
|
93
|
-
);
|
|
94
|
-
});
|
|
95
|
-
});
|
|
96
|
-
});
|
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
import { LiquidString, NodeTypes } from '@platformos/liquid-html-parser';
|
|
2
|
-
import {
|
|
3
|
-
CompletionItem,
|
|
4
|
-
CompletionItemKind,
|
|
5
|
-
InsertTextFormat,
|
|
6
|
-
Range,
|
|
7
|
-
TextEdit,
|
|
8
|
-
} from 'vscode-languageserver';
|
|
9
|
-
import { LiquidCompletionParams } from '../params';
|
|
10
|
-
import { Provider } from './common';
|
|
11
|
-
|
|
12
|
-
export class ContentForCompletionProvider implements Provider {
|
|
13
|
-
constructor() {}
|
|
14
|
-
|
|
15
|
-
async completions(params: LiquidCompletionParams): Promise<CompletionItem[]> {
|
|
16
|
-
if (!params.completionContext) return [];
|
|
17
|
-
|
|
18
|
-
const { document } = params;
|
|
19
|
-
const doc = document.textDocument;
|
|
20
|
-
const { node, ancestors } = params.completionContext;
|
|
21
|
-
const parentNode = ancestors.at(-1);
|
|
22
|
-
|
|
23
|
-
if (
|
|
24
|
-
!node ||
|
|
25
|
-
!parentNode ||
|
|
26
|
-
node.type !== NodeTypes.String ||
|
|
27
|
-
parentNode.type !== NodeTypes.ContentForMarkup
|
|
28
|
-
) {
|
|
29
|
-
return [];
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
const options = [
|
|
33
|
-
{
|
|
34
|
-
keyword: 'block',
|
|
35
|
-
description: 'Renders a static theme block within `sections` or `theme blocks`.\n',
|
|
36
|
-
syntax: "content_for 'block', type: '$1', id: '$2'",
|
|
37
|
-
},
|
|
38
|
-
{
|
|
39
|
-
keyword: 'blocks',
|
|
40
|
-
description: `Renders block elements within sections or other blocks as configured in the JSON template or section groups.
|
|
41
|
-
See [theme blocks](https://shopify.dev/docs/storefronts/themes/architecture/blocks/theme-blocks)
|
|
42
|
-
to see how to create theme blocks that can be used this way.\n`,
|
|
43
|
-
syntax: `content_for 'blocks'`,
|
|
44
|
-
},
|
|
45
|
-
];
|
|
46
|
-
|
|
47
|
-
const partial = node.value;
|
|
48
|
-
const isInLiquidLiquidTag = ancestors.some(
|
|
49
|
-
(node) => node.type === NodeTypes.LiquidTag && node.name === 'liquid',
|
|
50
|
-
);
|
|
51
|
-
const startPosition = node.position.start + 1; // after the quote
|
|
52
|
-
const endPosition = indexOf(
|
|
53
|
-
document.source,
|
|
54
|
-
// We want to maintain trailing whitespace to whatever it was before the completion
|
|
55
|
-
isInLiquidLiquidTag ? / *\n/g : /\s*-?%}/gm,
|
|
56
|
-
startPosition + partial.length,
|
|
57
|
-
);
|
|
58
|
-
const hasMarkup =
|
|
59
|
-
document.source
|
|
60
|
-
.slice(startPosition + partial.length, endPosition)
|
|
61
|
-
.replace(/^['"]/, '')
|
|
62
|
-
.trim() !== '';
|
|
63
|
-
const shouldCompleteSyntax = endPosition !== -1 && !hasMarkup;
|
|
64
|
-
|
|
65
|
-
return options
|
|
66
|
-
.filter(({ keyword }) => keyword.startsWith(partial))
|
|
67
|
-
.map(({ keyword, description, syntax }): CompletionItem => {
|
|
68
|
-
const item: CompletionItem = {
|
|
69
|
-
label: keyword,
|
|
70
|
-
kind: CompletionItemKind.Keyword,
|
|
71
|
-
insertTextFormat: InsertTextFormat.PlainText,
|
|
72
|
-
documentation: {
|
|
73
|
-
kind: 'markdown',
|
|
74
|
-
value: description,
|
|
75
|
-
},
|
|
76
|
-
};
|
|
77
|
-
|
|
78
|
-
if (shouldCompleteSyntax) {
|
|
79
|
-
const snippetText = getSnippetText(node, syntax);
|
|
80
|
-
item.insertTextFormat = InsertTextFormat.Snippet;
|
|
81
|
-
item.textEdit = TextEdit.replace(
|
|
82
|
-
Range.create(doc.positionAt(startPosition), doc.positionAt(endPosition)),
|
|
83
|
-
snippetText,
|
|
84
|
-
);
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
return item;
|
|
88
|
-
});
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
function getSnippetText(node: LiquidString, syntax: string): string {
|
|
93
|
-
// Language clients don't like it when the text edit starts before the word being completed
|
|
94
|
-
// So we make the snippet text start with the word being completed
|
|
95
|
-
return (
|
|
96
|
-
syntax
|
|
97
|
-
.replace(/^content_for '/, '')
|
|
98
|
-
// use the same quote type as the original string everywhere in the snippet
|
|
99
|
-
.replace(node.single ? /"/g : /'/g, node.single ? "'" : '"')
|
|
100
|
-
);
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
/**
|
|
104
|
-
* String.prototype.indexOf does not accept RegExp args...
|
|
105
|
-
* String.prototype.search does not accept fromIndex args...
|
|
106
|
-
*
|
|
107
|
-
* We want both.
|
|
108
|
-
*/
|
|
109
|
-
function indexOf(string: string, searchValue: RegExp, fromIndex: number): number {
|
|
110
|
-
searchValue.lastIndex = fromIndex;
|
|
111
|
-
const match = searchValue.exec(string);
|
|
112
|
-
return match ? match.index : -1;
|
|
113
|
-
}
|