@platformos/platformos-language-server-common 0.0.6 → 0.0.8
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 +58 -0
- package/dist/PropertyShapeInference.js.map +1 -1
- package/dist/TypeSystem.d.ts +4 -9
- package/dist/TypeSystem.js +234 -388
- package/dist/TypeSystem.js.map +1 -1
- 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 +4 -16
- 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/FilterCompletionProvider.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/TranslationCompletionProvider.js +1 -1
- package/dist/completions/providers/TranslationCompletionProvider.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/documentHighlights/providers/HtmlTagNameDocumentHighlightsProvider.d.ts +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 +12 -11
- 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/formatting/OnTypeFormattingProvider.d.ts +1 -1
- package/dist/formatting/providers/HtmlElementAutoclosingOnTypeFormattingProvider.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/linkedEditingRanges/providers/HtmlTagNameLinkedRangesProvider.d.ts +1 -1
- package/dist/progress.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/Configuration.js.map +1 -1
- 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 +0 -8
- package/dist/utils/uri.js +1 -17
- package/dist/utils/uri.js.map +1 -1
- package/package.json +9 -9
- package/src/PropertyShapeInference.ts +76 -1
- package/src/TypeSystem.spec.ts +187 -452
- package/src/TypeSystem.ts +253 -459
- package/src/completions/CompletionsProvider.ts +13 -34
- package/src/completions/params/LiquidCompletionParams.spec.ts +0 -9
- package/src/completions/params/LiquidCompletionParams.ts +4 -14
- package/src/completions/params/fix.spec.ts +0 -3
- package/src/completions/providers/FilterCompletionProvider.spec.ts +2 -8
- package/src/completions/providers/FilterCompletionProvider.ts +6 -6
- 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 +2 -16
- 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 +4 -13
- package/src/completions/providers/RenderPartialParameterCompletionProvider.spec.ts +3 -5
- package/src/completions/providers/RenderPartialParameterCompletionProvider.ts +0 -1
- package/src/completions/providers/TranslationCompletionProvider.spec.ts +1 -4
- package/src/completions/providers/TranslationCompletionProvider.ts +1 -1
- 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 +16 -24
- package/src/diagnostics/runChecks.ts +17 -91
- package/src/docset/MarkdownRenderer.ts +1 -1
- package/src/documentLinks/DocumentLinksProvider.ts +3 -3
- package/src/documents/DocumentManager.spec.ts +12 -97
- package/src/documents/DocumentManager.ts +13 -14
- package/src/documents/types.ts +18 -9
- package/src/formatting/providers/HtmlElementAutoclosingOnTypeFormattingProvider.ts +1 -3
- 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 +0 -3
- 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 +1 -4
- package/src/hover/providers/RenderPartialHoverProvider.ts +1 -5
- package/src/hover/providers/RenderPartialParameterHoverProvider.spec.ts +1 -4
- package/src/hover/providers/RenderPartialParameterHoverProvider.ts +0 -1
- package/src/hover/providers/TranslationHoverProvider.spec.ts +1 -4
- package/src/hover/providers/TranslationHoverProvider.ts +3 -3
- package/src/index.ts +2 -5
- 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/progress.ts +4 -1
- package/src/rename/RenameProvider.ts +3 -3
- package/src/rename/providers/LiquidVariableRenameProvider.spec.ts +4 -4
- package/src/rename/providers/LiquidVariableRenameProvider.ts +4 -4
- package/src/renamed/RenameHandler.ts +4 -9
- package/src/renamed/handlers/AssetRenameHandler.spec.ts +3 -3
- package/src/renamed/handlers/AssetRenameHandler.ts +5 -5
- package/src/renamed/handlers/PartialRenameHandler.spec.ts +2 -2
- package/src/renamed/handlers/PartialRenameHandler.ts +5 -5
- package/src/renamed/handlers/utils.ts +1 -1
- package/src/server/{ThemeGraphManager.ts → AppGraphManager.ts} +21 -90
- package/src/server/Configuration.ts +4 -1
- package/src/server/startServer.spec.ts +7 -9
- package/src/server/startServer.ts +65 -217
- package/src/test/CompletionItemsAssertion.spec.ts +1 -4
- package/src/types.ts +33 -63
- package/src/utils/liquidDoc.ts +1 -1
- package/src/utils/uri.ts +0 -14
- 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 -161
- 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/settings/index.ts +0 -50
|
@@ -1,424 +0,0 @@
|
|
|
1
|
-
import { Mode, Translations } from '@platformos/platformos-check-common';
|
|
2
|
-
import { assert, beforeEach, describe, expect, it } from 'vitest';
|
|
3
|
-
import { DocumentManager } from '../documents';
|
|
4
|
-
import { JSONLanguageService } from './JSONLanguageService';
|
|
5
|
-
import { getRequestParams, isCompletionList } from './test/test-helpers';
|
|
6
|
-
|
|
7
|
-
const simplifiedSectionSchema = JSON.stringify({
|
|
8
|
-
$schema: 'http://json-schema.org/draft-07/schema#',
|
|
9
|
-
type: 'object',
|
|
10
|
-
additionalProperties: false,
|
|
11
|
-
properties: {
|
|
12
|
-
name: {
|
|
13
|
-
type: 'string',
|
|
14
|
-
description: 'The section title shown in the theme editor',
|
|
15
|
-
},
|
|
16
|
-
class: {
|
|
17
|
-
type: 'string',
|
|
18
|
-
description: 'Additional CSS class for the section',
|
|
19
|
-
},
|
|
20
|
-
disabled_on: {
|
|
21
|
-
type: 'string',
|
|
22
|
-
},
|
|
23
|
-
},
|
|
24
|
-
});
|
|
25
|
-
|
|
26
|
-
const simplifiedTaeBlockSchema = JSON.stringify({
|
|
27
|
-
$schema: 'http://json-schema.org/draft-07/schema#',
|
|
28
|
-
type: 'object',
|
|
29
|
-
additionalProperties: false,
|
|
30
|
-
properties: {
|
|
31
|
-
name: {
|
|
32
|
-
type: 'string',
|
|
33
|
-
description: 'The section title shown in the theme editor',
|
|
34
|
-
},
|
|
35
|
-
class: {
|
|
36
|
-
type: 'string',
|
|
37
|
-
description: 'Additional CSS class for the section',
|
|
38
|
-
},
|
|
39
|
-
javascript: {
|
|
40
|
-
type: 'string',
|
|
41
|
-
description: 'Haha this one is different',
|
|
42
|
-
},
|
|
43
|
-
},
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
const simplifiedTranslationSchema = JSON.stringify({
|
|
47
|
-
$schema: 'https://json-schema.org/draft/2020-12/schema',
|
|
48
|
-
type: 'object',
|
|
49
|
-
additionalProperties: {
|
|
50
|
-
oneOf: [
|
|
51
|
-
{
|
|
52
|
-
type: 'string',
|
|
53
|
-
},
|
|
54
|
-
{
|
|
55
|
-
$ref: '#/$defs/pluralizedString',
|
|
56
|
-
},
|
|
57
|
-
{
|
|
58
|
-
$ref: '#',
|
|
59
|
-
},
|
|
60
|
-
],
|
|
61
|
-
},
|
|
62
|
-
$defs: {
|
|
63
|
-
pluralizedString: {
|
|
64
|
-
type: 'object',
|
|
65
|
-
properties: {
|
|
66
|
-
one: {
|
|
67
|
-
type: 'string',
|
|
68
|
-
description: 'Translation for the singular form',
|
|
69
|
-
},
|
|
70
|
-
other: {
|
|
71
|
-
type: 'string',
|
|
72
|
-
description: 'Translation for the plural form',
|
|
73
|
-
},
|
|
74
|
-
},
|
|
75
|
-
additionalProperties: false,
|
|
76
|
-
description: 'An object representing a pluralized translation string',
|
|
77
|
-
},
|
|
78
|
-
},
|
|
79
|
-
});
|
|
80
|
-
|
|
81
|
-
describe('Module: JSONLanguageService', () => {
|
|
82
|
-
let jsonLanguageService: JSONLanguageService;
|
|
83
|
-
let documentManager: DocumentManager;
|
|
84
|
-
let schemaTranslations: Translations;
|
|
85
|
-
|
|
86
|
-
beforeEach(async () => {
|
|
87
|
-
schemaTranslations = {};
|
|
88
|
-
documentManager = new DocumentManager(
|
|
89
|
-
undefined,
|
|
90
|
-
undefined,
|
|
91
|
-
undefined,
|
|
92
|
-
async () => 'theme', // theme schema
|
|
93
|
-
async () => false, // invalid
|
|
94
|
-
);
|
|
95
|
-
jsonLanguageService = new JSONLanguageService(
|
|
96
|
-
documentManager,
|
|
97
|
-
{
|
|
98
|
-
schemas: async (mode: Mode) => [
|
|
99
|
-
{
|
|
100
|
-
uri: 'https://shopify.dev/section-schema.json',
|
|
101
|
-
schema: simplifiedSectionSchema,
|
|
102
|
-
fileMatch: ['**/sections/*.liquid'],
|
|
103
|
-
},
|
|
104
|
-
{
|
|
105
|
-
uri: 'https://shopify.dev/translation-schema.json',
|
|
106
|
-
schema: simplifiedTranslationSchema,
|
|
107
|
-
fileMatch: ['**/locales/*.json'],
|
|
108
|
-
},
|
|
109
|
-
{
|
|
110
|
-
uri:
|
|
111
|
-
mode === 'theme'
|
|
112
|
-
? 'https://shopify.dev/block-schema.json'
|
|
113
|
-
: 'https://shopify.dev/block-tae-schema.json',
|
|
114
|
-
schema: mode === 'theme' ? simplifiedSectionSchema : simplifiedTaeBlockSchema,
|
|
115
|
-
fileMatch: ['**/blocks/*.liquid'],
|
|
116
|
-
},
|
|
117
|
-
],
|
|
118
|
-
},
|
|
119
|
-
() => Promise.resolve(schemaTranslations),
|
|
120
|
-
(uri: string) => Promise.resolve(uri.includes('tae') ? 'app' : 'theme'),
|
|
121
|
-
() => Promise.resolve([]),
|
|
122
|
-
async () => undefined,
|
|
123
|
-
async () => 'file:///test-root',
|
|
124
|
-
);
|
|
125
|
-
|
|
126
|
-
await jsonLanguageService.setup({
|
|
127
|
-
textDocument: {
|
|
128
|
-
completion: {
|
|
129
|
-
contextSupport: true,
|
|
130
|
-
completionItem: {
|
|
131
|
-
snippetSupport: true,
|
|
132
|
-
commitCharactersSupport: true,
|
|
133
|
-
documentationFormat: ['markdown'],
|
|
134
|
-
deprecatedSupport: true,
|
|
135
|
-
preselectSupport: true,
|
|
136
|
-
},
|
|
137
|
-
},
|
|
138
|
-
},
|
|
139
|
-
});
|
|
140
|
-
});
|
|
141
|
-
|
|
142
|
-
describe('completions', () => {
|
|
143
|
-
it('should return section JSON schema completions in a section file {% schema %}', async () => {
|
|
144
|
-
const params = getRequestParams(
|
|
145
|
-
documentManager,
|
|
146
|
-
'sections/section.liquid',
|
|
147
|
-
`
|
|
148
|
-
<div>hello world</div>
|
|
149
|
-
{% schema %}
|
|
150
|
-
{
|
|
151
|
-
"name": "My section",
|
|
152
|
-
"█"
|
|
153
|
-
}
|
|
154
|
-
{% endschema %}
|
|
155
|
-
`,
|
|
156
|
-
);
|
|
157
|
-
|
|
158
|
-
const completions = await jsonLanguageService.completions(params);
|
|
159
|
-
assert(isCompletionList(completions));
|
|
160
|
-
expect(completions.items).to.have.lengthOf(2);
|
|
161
|
-
expect(completions.items[0].label).to.equal('class');
|
|
162
|
-
expect(completions.items[0].documentation).to.equal('Additional CSS class for the section');
|
|
163
|
-
});
|
|
164
|
-
|
|
165
|
-
it('should return translation key completions in a theme translation file', async () => {
|
|
166
|
-
const paths = [
|
|
167
|
-
'locales/en.default.json',
|
|
168
|
-
'locales/en.default.schema.json',
|
|
169
|
-
'locales/fr.json',
|
|
170
|
-
'locales/fr.schema.json',
|
|
171
|
-
];
|
|
172
|
-
for (const path of paths) {
|
|
173
|
-
const params = getRequestParams(
|
|
174
|
-
documentManager,
|
|
175
|
-
path,
|
|
176
|
-
`
|
|
177
|
-
{
|
|
178
|
-
"general": {
|
|
179
|
-
"hello": {
|
|
180
|
-
"other": "hey folks",
|
|
181
|
-
"█"
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
`,
|
|
186
|
-
);
|
|
187
|
-
const completions = await jsonLanguageService.completions(params);
|
|
188
|
-
assert(isCompletionList(completions));
|
|
189
|
-
expect(completions.items).to.have.lengthOf(1);
|
|
190
|
-
expect(completions.items[0].label).to.equal('one');
|
|
191
|
-
expect(completions.items[0].documentation).to.eql('Translation for the singular form');
|
|
192
|
-
}
|
|
193
|
-
});
|
|
194
|
-
|
|
195
|
-
it('should be possible to offer theme app extension completions in app contexts, and theme completions in theme contexts for blocks', async () => {
|
|
196
|
-
const testContexts: [Mode, string, string[]][] = [
|
|
197
|
-
['theme', 'theme/blocks/block.liquid', ['class', 'disabled_on']],
|
|
198
|
-
['app', 'tae/blocks/block.liquid', ['class', 'javascript']],
|
|
199
|
-
];
|
|
200
|
-
for (const [mode, path, expectedRecommendations] of testContexts) {
|
|
201
|
-
const params = getRequestParams(
|
|
202
|
-
documentManager,
|
|
203
|
-
path,
|
|
204
|
-
`
|
|
205
|
-
<div>hello world</div>
|
|
206
|
-
{% schema %}
|
|
207
|
-
{
|
|
208
|
-
"name": "My section",
|
|
209
|
-
"█"
|
|
210
|
-
}
|
|
211
|
-
{% endschema %}
|
|
212
|
-
`,
|
|
213
|
-
);
|
|
214
|
-
|
|
215
|
-
const completions = await jsonLanguageService.completions(params);
|
|
216
|
-
assert(isCompletionList(completions));
|
|
217
|
-
expect(completions.items).to.have.lengthOf(expectedRecommendations.length);
|
|
218
|
-
expect(completions.items).toEqual(
|
|
219
|
-
expectedRecommendations.map((recommendation) =>
|
|
220
|
-
expect.objectContaining({ label: recommendation }),
|
|
221
|
-
),
|
|
222
|
-
);
|
|
223
|
-
}
|
|
224
|
-
});
|
|
225
|
-
|
|
226
|
-
it('should complete t:translations', async () => {
|
|
227
|
-
schemaTranslations = {
|
|
228
|
-
general: {
|
|
229
|
-
hello: 'hello world',
|
|
230
|
-
hi: 'hi world',
|
|
231
|
-
},
|
|
232
|
-
};
|
|
233
|
-
|
|
234
|
-
const params = getRequestParams(
|
|
235
|
-
documentManager,
|
|
236
|
-
'sections/section.liquid',
|
|
237
|
-
`
|
|
238
|
-
<div>hello world</div>
|
|
239
|
-
{% schema %}
|
|
240
|
-
{
|
|
241
|
-
"name": "t:█"
|
|
242
|
-
}
|
|
243
|
-
{% endschema %}
|
|
244
|
-
`,
|
|
245
|
-
);
|
|
246
|
-
|
|
247
|
-
const completions = await jsonLanguageService.completions(params);
|
|
248
|
-
assert(isCompletionList(completions));
|
|
249
|
-
expect(completions.items).to.have.lengthOf(2);
|
|
250
|
-
expect(completions.items[0].label).to.equal('t:general.hello');
|
|
251
|
-
expect(completions.items[0].documentation).to.eql({
|
|
252
|
-
kind: 'markdown',
|
|
253
|
-
value: 'hello world',
|
|
254
|
-
});
|
|
255
|
-
});
|
|
256
|
-
});
|
|
257
|
-
|
|
258
|
-
describe('hover', () => {
|
|
259
|
-
it('should return the translation value of a t:translation', async () => {
|
|
260
|
-
schemaTranslations = {
|
|
261
|
-
general: {
|
|
262
|
-
hello: 'hello world',
|
|
263
|
-
},
|
|
264
|
-
};
|
|
265
|
-
const params = getRequestParams(
|
|
266
|
-
documentManager,
|
|
267
|
-
'sections/section.liquid',
|
|
268
|
-
`
|
|
269
|
-
<div>hello world</div>
|
|
270
|
-
{% schema %}
|
|
271
|
-
{
|
|
272
|
-
"name": "t:general.hello█"
|
|
273
|
-
}
|
|
274
|
-
{% endschema %}
|
|
275
|
-
`,
|
|
276
|
-
);
|
|
277
|
-
const hover = await jsonLanguageService.hover(params);
|
|
278
|
-
assert(hover !== null);
|
|
279
|
-
expect(hover.contents).to.eql(['hello world']);
|
|
280
|
-
});
|
|
281
|
-
|
|
282
|
-
it('should return the path of a translation key in a theme translation file', async () => {
|
|
283
|
-
const paths = ['locales/en.default.json', 'locales/fr.json'];
|
|
284
|
-
for (const path of paths) {
|
|
285
|
-
const params = getRequestParams(
|
|
286
|
-
documentManager,
|
|
287
|
-
path,
|
|
288
|
-
`
|
|
289
|
-
{
|
|
290
|
-
"general": {
|
|
291
|
-
"hello█": "world"
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
`,
|
|
295
|
-
);
|
|
296
|
-
const hover = await jsonLanguageService.hover(params);
|
|
297
|
-
assert(hover !== null);
|
|
298
|
-
expect(hover.contents).to.eql([{ language: 'liquid', value: `{{ 'general.hello' | t }}` }]);
|
|
299
|
-
}
|
|
300
|
-
});
|
|
301
|
-
|
|
302
|
-
it('should return add interpolated variables to the hover', async () => {
|
|
303
|
-
const paths = ['locales/en.default.json', 'locales/fr.json'];
|
|
304
|
-
for (const path of paths) {
|
|
305
|
-
const params = getRequestParams(
|
|
306
|
-
documentManager,
|
|
307
|
-
path,
|
|
308
|
-
`
|
|
309
|
-
{
|
|
310
|
-
"general": {
|
|
311
|
-
"hello█": " {{ var1 }} world {{ var2 }}"
|
|
312
|
-
}
|
|
313
|
-
}
|
|
314
|
-
`,
|
|
315
|
-
);
|
|
316
|
-
const hover = await jsonLanguageService.hover(params);
|
|
317
|
-
assert(hover !== null);
|
|
318
|
-
expect(hover.contents).to.eql([
|
|
319
|
-
{ language: 'liquid', value: `{{ 'general.hello' | t: var1: var1, var2: var2 }}` },
|
|
320
|
-
]);
|
|
321
|
-
}
|
|
322
|
-
});
|
|
323
|
-
|
|
324
|
-
it('should return translation group hover for non-leaf nodes', async () => {
|
|
325
|
-
const paths = ['locales/en.default.json', 'locales/fr.json'];
|
|
326
|
-
for (const path of paths) {
|
|
327
|
-
const params = getRequestParams(
|
|
328
|
-
documentManager,
|
|
329
|
-
path,
|
|
330
|
-
`
|
|
331
|
-
{
|
|
332
|
-
"general█": {
|
|
333
|
-
"hello": " {{ var1 }} world {{ var2 }}"
|
|
334
|
-
}
|
|
335
|
-
}
|
|
336
|
-
`,
|
|
337
|
-
);
|
|
338
|
-
const hover = await jsonLanguageService.hover(params);
|
|
339
|
-
assert(hover !== null);
|
|
340
|
-
expect(hover.contents).to.eql([`Translation group: general`]);
|
|
341
|
-
}
|
|
342
|
-
});
|
|
343
|
-
|
|
344
|
-
it('should return the parent translation key for pluralized translations', async () => {
|
|
345
|
-
const paths = ['locales/en.default.json', 'locales/fr.json'];
|
|
346
|
-
for (const path of paths) {
|
|
347
|
-
const params = getRequestParams(
|
|
348
|
-
documentManager,
|
|
349
|
-
path,
|
|
350
|
-
`
|
|
351
|
-
{
|
|
352
|
-
"general": {
|
|
353
|
-
"one█": " {{ var1 }} world"
|
|
354
|
-
}
|
|
355
|
-
}
|
|
356
|
-
`,
|
|
357
|
-
);
|
|
358
|
-
const hover = await jsonLanguageService.hover(params);
|
|
359
|
-
assert(hover !== null);
|
|
360
|
-
expect(hover.contents).to.eql([
|
|
361
|
-
{ language: 'liquid', value: `{{ 'general' | t: var1: var1 }}` },
|
|
362
|
-
]);
|
|
363
|
-
}
|
|
364
|
-
});
|
|
365
|
-
|
|
366
|
-
it('should return the t:path of a translation key in a schema translation file', async () => {
|
|
367
|
-
const paths = ['locales/en.default.schema.json', 'locales/fr.schema.json'];
|
|
368
|
-
for (const path of paths) {
|
|
369
|
-
const params = getRequestParams(
|
|
370
|
-
documentManager,
|
|
371
|
-
path,
|
|
372
|
-
`
|
|
373
|
-
{
|
|
374
|
-
"general": {
|
|
375
|
-
"hello█": "world"
|
|
376
|
-
}
|
|
377
|
-
}
|
|
378
|
-
`,
|
|
379
|
-
);
|
|
380
|
-
const hover = await jsonLanguageService.hover(params);
|
|
381
|
-
assert(hover !== null);
|
|
382
|
-
expect(hover.contents).to.eql([{ language: 'json', value: `"t:general.hello"` }]);
|
|
383
|
-
}
|
|
384
|
-
});
|
|
385
|
-
});
|
|
386
|
-
|
|
387
|
-
describe('isValidSchema', () => {
|
|
388
|
-
it('should return true for a valid schema', async () => {
|
|
389
|
-
const params = getRequestParams(
|
|
390
|
-
documentManager,
|
|
391
|
-
'sections/section.liquid',
|
|
392
|
-
`
|
|
393
|
-
<div>hello world</div>
|
|
394
|
-
{% schema %}
|
|
395
|
-
{ "name": "hello world" }
|
|
396
|
-
{% endschema %}
|
|
397
|
-
`,
|
|
398
|
-
);
|
|
399
|
-
const isValid = await jsonLanguageService.isValidSchema(
|
|
400
|
-
params.textDocument.uri,
|
|
401
|
-
'{ "name": "hello world" }',
|
|
402
|
-
);
|
|
403
|
-
expect(isValid).to.be.true;
|
|
404
|
-
});
|
|
405
|
-
|
|
406
|
-
it('should return false for an invalid schema', async () => {
|
|
407
|
-
const params = getRequestParams(
|
|
408
|
-
documentManager,
|
|
409
|
-
'sections/section.liquid',
|
|
410
|
-
`
|
|
411
|
-
<div>hello world</div>
|
|
412
|
-
{% schema %}
|
|
413
|
-
{ "invalid": true }
|
|
414
|
-
{% endschema %}
|
|
415
|
-
`,
|
|
416
|
-
);
|
|
417
|
-
const isValid = await jsonLanguageService.isValidSchema(
|
|
418
|
-
params.textDocument.uri,
|
|
419
|
-
'{ "invalid": true }',
|
|
420
|
-
);
|
|
421
|
-
expect(isValid).to.be.false;
|
|
422
|
-
});
|
|
423
|
-
});
|
|
424
|
-
});
|
|
@@ -1,163 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, assert, beforeEach } from 'vitest';
|
|
2
|
-
import { JSONLanguageService } from '../../JSONLanguageService';
|
|
3
|
-
import { DocumentManager } from '../../../documents';
|
|
4
|
-
import {
|
|
5
|
-
getRequestParams,
|
|
6
|
-
isCompletionList,
|
|
7
|
-
mockJSONLanguageService,
|
|
8
|
-
} from '../../test/test-helpers';
|
|
9
|
-
|
|
10
|
-
describe('Unit: BlockSettingsPropertyCompletionProvider', () => {
|
|
11
|
-
const rootUri = 'file:///root/';
|
|
12
|
-
let jsonLanguageService: JSONLanguageService;
|
|
13
|
-
let documentManager: DocumentManager;
|
|
14
|
-
|
|
15
|
-
beforeEach(async () => {
|
|
16
|
-
documentManager = new DocumentManager(
|
|
17
|
-
undefined, // don't need a fs
|
|
18
|
-
undefined, // don't need a connection
|
|
19
|
-
undefined, // don't need client capabilities
|
|
20
|
-
async () => 'theme', // 'theme' mode
|
|
21
|
-
async () => false, // schema is invalid for tests
|
|
22
|
-
);
|
|
23
|
-
jsonLanguageService = mockJSONLanguageService(
|
|
24
|
-
rootUri,
|
|
25
|
-
documentManager,
|
|
26
|
-
async (_uri: string) => ({
|
|
27
|
-
general: {
|
|
28
|
-
fake: 'Fake Setting',
|
|
29
|
-
},
|
|
30
|
-
}),
|
|
31
|
-
);
|
|
32
|
-
|
|
33
|
-
await jsonLanguageService.setup({
|
|
34
|
-
textDocument: {
|
|
35
|
-
completion: {
|
|
36
|
-
contextSupport: true,
|
|
37
|
-
completionItem: {
|
|
38
|
-
snippetSupport: true,
|
|
39
|
-
commitCharactersSupport: true,
|
|
40
|
-
documentationFormat: ['markdown'],
|
|
41
|
-
deprecatedSupport: true,
|
|
42
|
-
preselectSupport: true,
|
|
43
|
-
},
|
|
44
|
-
},
|
|
45
|
-
},
|
|
46
|
-
});
|
|
47
|
-
});
|
|
48
|
-
|
|
49
|
-
describe('section file with valid schema', () => {
|
|
50
|
-
const tests = [
|
|
51
|
-
{
|
|
52
|
-
label: 'presets',
|
|
53
|
-
schemaTemplate: (referencedBlock: object) => {
|
|
54
|
-
return {
|
|
55
|
-
presets: [
|
|
56
|
-
{
|
|
57
|
-
blocks: [referencedBlock],
|
|
58
|
-
},
|
|
59
|
-
],
|
|
60
|
-
};
|
|
61
|
-
},
|
|
62
|
-
},
|
|
63
|
-
{
|
|
64
|
-
label: 'default',
|
|
65
|
-
schemaTemplate: (referencedBlock: object) => {
|
|
66
|
-
return {
|
|
67
|
-
default: {
|
|
68
|
-
blocks: [referencedBlock],
|
|
69
|
-
},
|
|
70
|
-
};
|
|
71
|
-
},
|
|
72
|
-
},
|
|
73
|
-
];
|
|
74
|
-
|
|
75
|
-
for (const test of tests) {
|
|
76
|
-
describe(`${test.label} block settings`, () => {
|
|
77
|
-
beforeEach(() => {
|
|
78
|
-
const testBlockSchema = {
|
|
79
|
-
settings: [
|
|
80
|
-
{ id: 'custom-setting', label: 'Custom Setting' },
|
|
81
|
-
{ id: 'fake-setting', label: 't:general.fake' },
|
|
82
|
-
{ id: 'no-label' },
|
|
83
|
-
{ nope: 'no-id' },
|
|
84
|
-
],
|
|
85
|
-
};
|
|
86
|
-
documentManager.open(`${rootUri}/blocks/test-block.liquid`, toSource(testBlockSchema), 1);
|
|
87
|
-
documentManager.open(`${rootUri}/blocks/no-settings-block.liquid`, toSource({}), 1);
|
|
88
|
-
});
|
|
89
|
-
|
|
90
|
-
it(`completes ${test.label} block settings property when settings exist`, async () => {
|
|
91
|
-
const schema = {
|
|
92
|
-
...test.schemaTemplate({
|
|
93
|
-
type: 'test-block',
|
|
94
|
-
settings: {
|
|
95
|
-
'█': '',
|
|
96
|
-
},
|
|
97
|
-
}),
|
|
98
|
-
};
|
|
99
|
-
const params = getRequestParams(
|
|
100
|
-
documentManager,
|
|
101
|
-
'sections/section.liquid',
|
|
102
|
-
toSource(schema),
|
|
103
|
-
);
|
|
104
|
-
const completions = await jsonLanguageService.completions(params);
|
|
105
|
-
|
|
106
|
-
assert(isCompletionList(completions));
|
|
107
|
-
expect(completions.items).to.have.lengthOf(3);
|
|
108
|
-
expect(completions.items).toContainEqual(
|
|
109
|
-
expect.objectContaining({
|
|
110
|
-
insertText: `"custom-setting"`,
|
|
111
|
-
documentation: expect.objectContaining({
|
|
112
|
-
value: 'Custom Setting',
|
|
113
|
-
}),
|
|
114
|
-
}),
|
|
115
|
-
);
|
|
116
|
-
expect(completions.items).toContainEqual(
|
|
117
|
-
expect.objectContaining({
|
|
118
|
-
insertText: `"fake-setting"`,
|
|
119
|
-
documentation: expect.objectContaining({
|
|
120
|
-
value: 'Fake Setting',
|
|
121
|
-
}),
|
|
122
|
-
}),
|
|
123
|
-
);
|
|
124
|
-
expect(completions.items).toContainEqual(
|
|
125
|
-
expect.objectContaining({
|
|
126
|
-
insertText: `"no-label"`,
|
|
127
|
-
documentation: expect.objectContaining({
|
|
128
|
-
value: '',
|
|
129
|
-
}),
|
|
130
|
-
}),
|
|
131
|
-
);
|
|
132
|
-
});
|
|
133
|
-
|
|
134
|
-
it(`offers no suggestions for ${test.label} block settings property when there are no settings`, async () => {
|
|
135
|
-
const schema = {
|
|
136
|
-
...test.schemaTemplate({
|
|
137
|
-
type: 'no-settings-block',
|
|
138
|
-
settings: {
|
|
139
|
-
'█': '',
|
|
140
|
-
},
|
|
141
|
-
}),
|
|
142
|
-
};
|
|
143
|
-
const source = `
|
|
144
|
-
{% schema %}
|
|
145
|
-
${JSON.stringify(schema)}
|
|
146
|
-
{% endschema %}
|
|
147
|
-
`;
|
|
148
|
-
const params = getRequestParams(documentManager, 'sections/section.liquid', source);
|
|
149
|
-
const completions = await jsonLanguageService.completions(params);
|
|
150
|
-
|
|
151
|
-
assert(isCompletionList(completions));
|
|
152
|
-
expect(completions.items).to.have.lengthOf(0);
|
|
153
|
-
});
|
|
154
|
-
});
|
|
155
|
-
}
|
|
156
|
-
});
|
|
157
|
-
});
|
|
158
|
-
|
|
159
|
-
function toSource(schema: object) {
|
|
160
|
-
return `{% schema %}
|
|
161
|
-
${JSON.stringify(schema)}
|
|
162
|
-
{% endschema %}`;
|
|
163
|
-
}
|
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
import { JSONPath } from 'vscode-json-languageservice';
|
|
2
|
-
import { GetThemeBlockSchema } from '../../JSONContributions';
|
|
3
|
-
import { RequestContext } from '../../RequestContext';
|
|
4
|
-
import { JSONCompletionItem, JSONCompletionProvider } from '../JSONCompletionProvider';
|
|
5
|
-
import { isBlockFile, isSectionFile } from '../../utils';
|
|
6
|
-
import { deepGet, isError, SourceCodeType } from '@platformos/platformos-check-common';
|
|
7
|
-
import { isSectionOrBlockSchema } from './BlockTypeCompletionProvider';
|
|
8
|
-
import { GetTranslationsForURI } from '../../../translations';
|
|
9
|
-
import { getSectionBlockByName, schemaSettingsPropertyCompletionItems } from '../../schemaSettings';
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* The BlockSettingsPropertyCompletionProvider offers value completions of the
|
|
13
|
-
* `presets.[].(recursive blocks.[]).settings` keys and `defaults.blocks.[].settings` keys inside
|
|
14
|
-
* `{% schema %}` tags.
|
|
15
|
-
*
|
|
16
|
-
* @example
|
|
17
|
-
* {% schema %}
|
|
18
|
-
* {
|
|
19
|
-
* "presets": [
|
|
20
|
-
* {
|
|
21
|
-
* "blocks": [
|
|
22
|
-
* {
|
|
23
|
-
* "type": "block-type",
|
|
24
|
-
* "settings": {
|
|
25
|
-
* "█"
|
|
26
|
-
* }
|
|
27
|
-
* },
|
|
28
|
-
* ]
|
|
29
|
-
* },
|
|
30
|
-
* ],
|
|
31
|
-
* "default": {
|
|
32
|
-
* "blocks": [
|
|
33
|
-
* {
|
|
34
|
-
* "type": "block-type",
|
|
35
|
-
* "settings": {
|
|
36
|
-
* "█"
|
|
37
|
-
* }
|
|
38
|
-
* },
|
|
39
|
-
* ]
|
|
40
|
-
* }
|
|
41
|
-
* }
|
|
42
|
-
* {% endschema %}
|
|
43
|
-
*/
|
|
44
|
-
export class BlockSettingsPropertyCompletionProvider implements JSONCompletionProvider {
|
|
45
|
-
constructor(
|
|
46
|
-
private getDefaultSchemaTranslations: GetTranslationsForURI,
|
|
47
|
-
private getThemeBlockSchema: GetThemeBlockSchema,
|
|
48
|
-
) {}
|
|
49
|
-
|
|
50
|
-
async completeProperty(context: RequestContext, path: JSONPath): Promise<JSONCompletionItem[]> {
|
|
51
|
-
const { doc } = context;
|
|
52
|
-
|
|
53
|
-
if (doc.type !== SourceCodeType.LiquidHtml) return [];
|
|
54
|
-
|
|
55
|
-
// section files can have schemas with `presets` and `default`
|
|
56
|
-
// block files can have schemas with `presets` only
|
|
57
|
-
if (
|
|
58
|
-
!(
|
|
59
|
-
isSectionFile(doc.uri) &&
|
|
60
|
-
(isPresetsBlocksSettingsPath(path) || isDefaultBlocksSettingsPath(path))
|
|
61
|
-
) &&
|
|
62
|
-
!(isBlockFile(doc.uri) && isPresetsBlocksSettingsPath(path))
|
|
63
|
-
) {
|
|
64
|
-
return [];
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
const schema = await doc.getSchema();
|
|
68
|
-
|
|
69
|
-
if (!schema || !isSectionOrBlockSchema(schema) || isError(schema.parsed)) {
|
|
70
|
-
return [];
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
const blockType: string = deepGet(schema.parsed, [...path.slice(0, -1), 'type']);
|
|
74
|
-
|
|
75
|
-
if (!blockType) {
|
|
76
|
-
return [];
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
const translations = await this.getDefaultSchemaTranslations(doc.textDocument.uri);
|
|
80
|
-
|
|
81
|
-
const localBlock = getSectionBlockByName(schema.parsed, blockType);
|
|
82
|
-
|
|
83
|
-
if (localBlock) {
|
|
84
|
-
if (localBlock.settings) {
|
|
85
|
-
return schemaSettingsPropertyCompletionItems(localBlock.settings, translations);
|
|
86
|
-
}
|
|
87
|
-
} else {
|
|
88
|
-
const blockOriginSchema = await this.getThemeBlockSchema(doc.uri, blockType);
|
|
89
|
-
|
|
90
|
-
if (
|
|
91
|
-
!blockOriginSchema ||
|
|
92
|
-
isError(blockOriginSchema.parsed) ||
|
|
93
|
-
!isSectionOrBlockSchema(blockOriginSchema)
|
|
94
|
-
) {
|
|
95
|
-
return [];
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
if (
|
|
99
|
-
!blockOriginSchema.parsed?.settings ||
|
|
100
|
-
!Array.isArray(blockOriginSchema.parsed?.settings)
|
|
101
|
-
) {
|
|
102
|
-
return [];
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
return schemaSettingsPropertyCompletionItems(blockOriginSchema.parsed.settings, translations);
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
return [];
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
// `blocks` can be nested within other `blocks`
|
|
113
|
-
// We need to ensure the last leg of the path is { "blocks": [{ "settings": { "█" } }] }
|
|
114
|
-
function isPresetsBlocksSettingsPath(path: JSONPath) {
|
|
115
|
-
return path.at(0) === 'presets' && path.at(-3) === 'blocks' && path.at(-1) === 'settings';
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
// `blocks` inside `default` can't be nested within other `blocks`
|
|
119
|
-
function isDefaultBlocksSettingsPath(path: JSONPath) {
|
|
120
|
-
return path.at(0) === 'default' && path.at(1) === 'blocks' && path.at(3) === 'settings';
|
|
121
|
-
}
|