@platformos/platformos-language-server-common 0.0.7 → 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.
Files changed (239) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/PropertyShapeInference.d.ts +18 -0
  3. package/dist/PropertyShapeInference.js +58 -0
  4. package/dist/PropertyShapeInference.js.map +1 -1
  5. package/dist/TypeSystem.d.ts +4 -9
  6. package/dist/TypeSystem.js +234 -388
  7. package/dist/TypeSystem.js.map +1 -1
  8. package/dist/codeActions/providers/GenerateDocBlockProvider.d.ts +10 -0
  9. package/dist/codeActions/providers/GenerateDocBlockProvider.js +39 -0
  10. package/dist/codeActions/providers/GenerateDocBlockProvider.js.map +1 -0
  11. package/dist/commands/providers/GenerateDocBlockCommandProvider.d.ts +19 -0
  12. package/dist/commands/providers/GenerateDocBlockCommandProvider.js +64 -0
  13. package/dist/commands/providers/GenerateDocBlockCommandProvider.js.map +1 -0
  14. package/dist/completions/CompletionsProvider.d.ts +6 -10
  15. package/dist/completions/CompletionsProvider.js +6 -9
  16. package/dist/completions/CompletionsProvider.js.map +1 -1
  17. package/dist/completions/params/LiquidCompletionParams.js +4 -16
  18. package/dist/completions/params/LiquidCompletionParams.js.map +1 -1
  19. package/dist/completions/providers/ContentForCompletionProvider.js +2 -4
  20. package/dist/completions/providers/ContentForCompletionProvider.js.map +1 -1
  21. package/dist/completions/providers/FilterNamedParameterCompletionProvider.d.ts +3 -3
  22. package/dist/completions/providers/FilterNamedParameterCompletionProvider.js +6 -6
  23. package/dist/completions/providers/FilterNamedParameterCompletionProvider.js.map +1 -1
  24. package/dist/completions/providers/LiquidDocParamTypeCompletionProvider.d.ts +3 -3
  25. package/dist/completions/providers/LiquidDocParamTypeCompletionProvider.js +3 -3
  26. package/dist/completions/providers/LiquidDocParamTypeCompletionProvider.js.map +1 -1
  27. package/dist/completions/providers/LiquidTagsCompletionProvider.d.ts +3 -3
  28. package/dist/completions/providers/LiquidTagsCompletionProvider.js +3 -3
  29. package/dist/completions/providers/LiquidTagsCompletionProvider.js.map +1 -1
  30. package/dist/completions/providers/RenderPartialParameterCompletionProvider.js +1 -1
  31. package/dist/completions/providers/RenderPartialParameterCompletionProvider.js.map +1 -1
  32. package/dist/completions/providers/index.d.ts +0 -3
  33. package/dist/completions/providers/index.js +1 -7
  34. package/dist/completions/providers/index.js.map +1 -1
  35. package/dist/css/CSSLanguageService.d.ts +19 -5
  36. package/dist/css/CSSLanguageService.js +77 -63
  37. package/dist/css/CSSLanguageService.js.map +1 -1
  38. package/dist/definitions/DefinitionProvider.d.ts +1 -1
  39. package/dist/definitions/DefinitionProvider.js +1 -3
  40. package/dist/definitions/DefinitionProvider.js.map +1 -1
  41. package/dist/diagnostics/offenseToDiagnostic.js +1 -1
  42. package/dist/diagnostics/offenseToDiagnostic.js.map +1 -1
  43. package/dist/diagnostics/runChecks.d.ts +3 -5
  44. package/dist/diagnostics/runChecks.js +12 -64
  45. package/dist/diagnostics/runChecks.js.map +1 -1
  46. package/dist/docset/MarkdownRenderer.js +1 -1
  47. package/dist/docset/MarkdownRenderer.js.map +1 -1
  48. package/dist/documentLinks/DocumentLinksProvider.d.ts +3 -3
  49. package/dist/documentLinks/DocumentLinksProvider.js +3 -3
  50. package/dist/documentLinks/DocumentLinksProvider.js.map +1 -1
  51. package/dist/documents/DocumentManager.d.ts +4 -5
  52. package/dist/documents/DocumentManager.js +12 -11
  53. package/dist/documents/DocumentManager.js.map +1 -1
  54. package/dist/documents/types.d.ts +16 -3
  55. package/dist/documents/types.js +3 -3
  56. package/dist/documents/types.js.map +1 -1
  57. package/dist/hover/HoverProvider.d.ts +5 -8
  58. package/dist/hover/HoverProvider.js +8 -14
  59. package/dist/hover/HoverProvider.js.map +1 -1
  60. package/dist/hover/providers/LiquidFilterArgumentHoverProvider.d.ts +3 -3
  61. package/dist/hover/providers/LiquidFilterArgumentHoverProvider.js +3 -3
  62. package/dist/hover/providers/LiquidFilterArgumentHoverProvider.js.map +1 -1
  63. package/dist/hover/providers/LiquidFilterHoverProvider.d.ts +3 -3
  64. package/dist/hover/providers/LiquidFilterHoverProvider.js +3 -3
  65. package/dist/hover/providers/LiquidFilterHoverProvider.js.map +1 -1
  66. package/dist/hover/providers/LiquidTagHoverProvider.d.ts +3 -3
  67. package/dist/hover/providers/LiquidTagHoverProvider.js +3 -3
  68. package/dist/hover/providers/LiquidTagHoverProvider.js.map +1 -1
  69. package/dist/hover/providers/RenderPartialHoverProvider.js +1 -1
  70. package/dist/hover/providers/RenderPartialHoverProvider.js.map +1 -1
  71. package/dist/hover/providers/RenderPartialParameterHoverProvider.js +1 -1
  72. package/dist/hover/providers/RenderPartialParameterHoverProvider.js.map +1 -1
  73. package/dist/hover/providers/TranslationHoverProvider.d.ts +3 -3
  74. package/dist/hover/providers/TranslationHoverProvider.js +3 -3
  75. package/dist/hover/providers/TranslationHoverProvider.js.map +1 -1
  76. package/dist/index.d.ts +1 -1
  77. package/dist/index.js.map +1 -1
  78. package/dist/internal-types.d.ts +1 -1
  79. package/dist/json/JSONContributions.d.ts +1 -5
  80. package/dist/json/JSONContributions.js +4 -36
  81. package/dist/json/JSONContributions.js.map +1 -1
  82. package/dist/json/JSONLanguageService.d.ts +4 -12
  83. package/dist/json/JSONLanguageService.js +17 -80
  84. package/dist/json/JSONLanguageService.js.map +1 -1
  85. package/dist/json/test/test-helpers.d.ts +1 -3
  86. package/dist/json/test/test-helpers.js +3 -19
  87. package/dist/json/test/test-helpers.js.map +1 -1
  88. package/dist/json/utils.d.ts +0 -5
  89. package/dist/json/utils.js +0 -24
  90. package/dist/json/utils.js.map +1 -1
  91. package/dist/rename/RenameProvider.d.ts +2 -2
  92. package/dist/rename/RenameProvider.js +2 -2
  93. package/dist/rename/RenameProvider.js.map +1 -1
  94. package/dist/rename/providers/LiquidVariableRenameProvider.d.ts +3 -3
  95. package/dist/rename/providers/LiquidVariableRenameProvider.js +4 -4
  96. package/dist/rename/providers/LiquidVariableRenameProvider.js.map +1 -1
  97. package/dist/renamed/RenameHandler.d.ts +2 -3
  98. package/dist/renamed/RenameHandler.js +3 -8
  99. package/dist/renamed/RenameHandler.js.map +1 -1
  100. package/dist/renamed/handlers/AssetRenameHandler.d.ts +3 -3
  101. package/dist/renamed/handlers/AssetRenameHandler.js +5 -5
  102. package/dist/renamed/handlers/AssetRenameHandler.js.map +1 -1
  103. package/dist/renamed/handlers/PartialRenameHandler.d.ts +3 -3
  104. package/dist/renamed/handlers/PartialRenameHandler.js +5 -5
  105. package/dist/renamed/handlers/PartialRenameHandler.js.map +1 -1
  106. package/dist/renamed/handlers/utils.d.ts +1 -1
  107. package/dist/server/AppGraphManager.d.ts +32 -0
  108. package/dist/server/AppGraphManager.js +155 -0
  109. package/dist/server/AppGraphManager.js.map +1 -0
  110. package/dist/server/startServer.d.ts +2 -2
  111. package/dist/server/startServer.js +62 -164
  112. package/dist/server/startServer.js.map +1 -1
  113. package/dist/tsconfig.tsbuildinfo +1 -1
  114. package/dist/types.d.ts +33 -54
  115. package/dist/types.js +21 -26
  116. package/dist/types.js.map +1 -1
  117. package/dist/utils/liquidDoc.js +1 -1
  118. package/dist/utils/liquidDoc.js.map +1 -1
  119. package/dist/utils/uri.d.ts +0 -8
  120. package/dist/utils/uri.js +1 -17
  121. package/dist/utils/uri.js.map +1 -1
  122. package/package.json +4 -4
  123. package/src/PropertyShapeInference.ts +76 -1
  124. package/src/TypeSystem.spec.ts +188 -450
  125. package/src/TypeSystem.ts +251 -457
  126. package/src/completions/CompletionsProvider.ts +13 -34
  127. package/src/completions/params/LiquidCompletionParams.spec.ts +0 -9
  128. package/src/completions/params/LiquidCompletionParams.ts +4 -14
  129. package/src/completions/params/fix.spec.ts +0 -3
  130. package/src/completions/providers/FilterCompletionProvider.spec.ts +2 -8
  131. package/src/completions/providers/FilterNamedParameterCompletionProvider.spec.ts +1 -5
  132. package/src/completions/providers/FilterNamedParameterCompletionProvider.ts +6 -6
  133. package/src/completions/providers/HtmlAttributeCompletionProvider.spec.ts +1 -4
  134. package/src/completions/providers/HtmlAttributeValueCompletionProvider.spec.ts +1 -4
  135. package/src/completions/providers/HtmlTagCompletionProvider.spec.ts +1 -4
  136. package/src/completions/providers/LiquidDocParamTypeCompletionProvider.spec.ts +1 -28
  137. package/src/completions/providers/LiquidDocParamTypeCompletionProvider.ts +3 -3
  138. package/src/completions/providers/LiquidDocTagCompletionProvider.spec.ts +1 -26
  139. package/src/completions/providers/LiquidTagsCompletionProvider.spec.ts +2 -16
  140. package/src/completions/providers/LiquidTagsCompletionProvider.ts +3 -3
  141. package/src/completions/providers/ObjectAttributeCompletionProvider.spec.ts +2 -31
  142. package/src/completions/providers/ObjectCompletionProvider.spec.ts +34 -123
  143. package/src/completions/providers/PartialCompletionProvider.spec.ts +4 -13
  144. package/src/completions/providers/RenderPartialParameterCompletionProvider.spec.ts +3 -5
  145. package/src/completions/providers/RenderPartialParameterCompletionProvider.ts +0 -1
  146. package/src/completions/providers/TranslationCompletionProvider.spec.ts +1 -4
  147. package/src/completions/providers/index.ts +0 -3
  148. package/src/css/CSSLanguageService.ts +97 -81
  149. package/src/definitions/DefinitionProvider.ts +0 -6
  150. package/src/definitions/providers/TranslationStringDefinitionProvider.spec.ts +1 -5
  151. package/src/diagnostics/offenseToDiagnostic.ts +1 -1
  152. package/src/diagnostics/runChecks.spec.ts +16 -24
  153. package/src/diagnostics/runChecks.ts +17 -91
  154. package/src/docset/MarkdownRenderer.ts +1 -1
  155. package/src/documentLinks/DocumentLinksProvider.ts +3 -3
  156. package/src/documents/DocumentManager.spec.ts +12 -97
  157. package/src/documents/DocumentManager.ts +13 -14
  158. package/src/documents/types.ts +18 -9
  159. package/src/hover/HoverProvider.ts +9 -21
  160. package/src/hover/providers/HtmlAttributeHoverProvider.spec.ts +1 -3
  161. package/src/hover/providers/HtmlAttributeValueHoverProvider.spec.ts +1 -3
  162. package/src/hover/providers/HtmlTagHoverProvider.spec.ts +1 -3
  163. package/src/hover/providers/LiquidDocTagHoverProvider.spec.ts +0 -3
  164. package/src/hover/providers/LiquidFilterArgumentHoverProvider.spec.ts +0 -3
  165. package/src/hover/providers/LiquidFilterArgumentHoverProvider.ts +3 -3
  166. package/src/hover/providers/LiquidFilterHoverProvider.spec.ts +0 -3
  167. package/src/hover/providers/LiquidFilterHoverProvider.ts +3 -3
  168. package/src/hover/providers/LiquidObjectAttributeHoverProvider.spec.ts +1 -3
  169. package/src/hover/providers/LiquidObjectHoverProvider.spec.ts +46 -129
  170. package/src/hover/providers/LiquidTagHoverProvider.spec.ts +0 -3
  171. package/src/hover/providers/LiquidTagHoverProvider.ts +3 -3
  172. package/src/hover/providers/RenderPartialHoverProvider.spec.ts +1 -4
  173. package/src/hover/providers/RenderPartialHoverProvider.ts +1 -5
  174. package/src/hover/providers/RenderPartialParameterHoverProvider.spec.ts +1 -4
  175. package/src/hover/providers/RenderPartialParameterHoverProvider.ts +0 -1
  176. package/src/hover/providers/TranslationHoverProvider.spec.ts +1 -4
  177. package/src/hover/providers/TranslationHoverProvider.ts +3 -3
  178. package/src/index.ts +2 -5
  179. package/src/internal-types.ts +1 -1
  180. package/src/json/JSONContributions.ts +4 -61
  181. package/src/json/JSONLanguageService.ts +19 -117
  182. package/src/json/test/test-helpers.ts +4 -35
  183. package/src/json/utils.ts +0 -27
  184. package/src/rename/RenameProvider.ts +3 -3
  185. package/src/rename/providers/LiquidVariableRenameProvider.spec.ts +4 -4
  186. package/src/rename/providers/LiquidVariableRenameProvider.ts +4 -4
  187. package/src/renamed/RenameHandler.ts +4 -9
  188. package/src/renamed/handlers/AssetRenameHandler.spec.ts +3 -3
  189. package/src/renamed/handlers/AssetRenameHandler.ts +5 -5
  190. package/src/renamed/handlers/PartialRenameHandler.spec.ts +2 -2
  191. package/src/renamed/handlers/PartialRenameHandler.ts +5 -5
  192. package/src/renamed/handlers/utils.ts +1 -1
  193. package/src/server/{ThemeGraphManager.ts → AppGraphManager.ts} +21 -90
  194. package/src/server/startServer.spec.ts +7 -9
  195. package/src/server/startServer.ts +65 -217
  196. package/src/test/CompletionItemsAssertion.spec.ts +1 -4
  197. package/src/types.ts +33 -63
  198. package/src/utils/liquidDoc.ts +1 -1
  199. package/src/utils/uri.ts +0 -14
  200. package/src/completions/providers/ContentForBlockTypeCompletionProvider.spec.ts +0 -41
  201. package/src/completions/providers/ContentForBlockTypeCompletionProvider.ts +0 -42
  202. package/src/completions/providers/ContentForCompletionProvider.spec.ts +0 -96
  203. package/src/completions/providers/ContentForCompletionProvider.ts +0 -113
  204. package/src/completions/providers/ContentForParameterCompletionProvider.spec.ts +0 -362
  205. package/src/completions/providers/ContentForParameterCompletionProvider.ts +0 -187
  206. package/src/completions/providers/data/contentForParameterCompletionOptions.ts +0 -9
  207. package/src/css/CSSLanguageService.spec.ts +0 -159
  208. package/src/css/test/test-helpers.ts +0 -30
  209. package/src/definitions/providers/SchemaTranslationStringDefinitionProvider.spec.ts +0 -96
  210. package/src/definitions/providers/SchemaTranslationStringDefinitionProvider.ts +0 -82
  211. package/src/hover/providers/ContentForArgumentHoverProvider.spec.ts +0 -76
  212. package/src/hover/providers/ContentForArgumentHoverProvider.ts +0 -56
  213. package/src/hover/providers/ContentForTypeHoverProvider.spec.ts +0 -91
  214. package/src/hover/providers/ContentForTypeHoverProvider.ts +0 -42
  215. package/src/json/JSONLanguageService.spec.ts +0 -424
  216. package/src/json/completions/providers/BlockSettingsPropertyCompletionProvider.spec.ts +0 -163
  217. package/src/json/completions/providers/BlockSettingsPropertyCompletionProvider.ts +0 -121
  218. package/src/json/completions/providers/BlockTypeCompletionProvider.spec.ts +0 -137
  219. package/src/json/completions/providers/BlockTypeCompletionProvider.ts +0 -108
  220. package/src/json/completions/providers/ReferencedBlockTypeCompletionProvider.spec.ts +0 -132
  221. package/src/json/completions/providers/ReferencedBlockTypeCompletionProvider.ts +0 -120
  222. package/src/json/completions/providers/SchemaTranslationCompletionProvider.ts +0 -51
  223. package/src/json/completions/providers/SettingsPropertyCompletionProvider.spec.ts +0 -211
  224. package/src/json/completions/providers/SettingsPropertyCompletionProvider.ts +0 -75
  225. package/src/json/documentLinks/DocumentLinksProvider.spec.ts +0 -223
  226. package/src/json/documentLinks/DocumentLinksProvider.ts +0 -61
  227. package/src/json/hover/providers/BlockSettingsHoverProvider.spec.ts +0 -292
  228. package/src/json/hover/providers/BlockSettingsHoverProvider.ts +0 -99
  229. package/src/json/hover/providers/SchemaTranslationHoverProvider.ts +0 -35
  230. package/src/json/hover/providers/SettingsHoverProvider.spec.ts +0 -139
  231. package/src/json/hover/providers/SettingsHoverProvider.ts +0 -79
  232. package/src/json/schemaSettings.spec.ts +0 -103
  233. package/src/json/schemaSettings.ts +0 -53
  234. package/src/plugins/css.ts +0 -12
  235. package/src/renamed/handlers/BlockRenameHandler.spec.ts +0 -399
  236. package/src/renamed/handlers/BlockRenameHandler.ts +0 -402
  237. package/src/renamed/handlers/SectionRenameHandler.spec.ts +0 -321
  238. package/src/renamed/handlers/SectionRenameHandler.ts +0 -224
  239. package/src/settings/index.ts +0 -50
@@ -1,15 +1,9 @@
1
- import { LiquidRawTag, NodeTypes } from '@platformos/liquid-html-parser';
2
1
  import {
3
2
  IsValidSchema,
4
3
  JsonValidationSet,
5
- Mode,
6
- Modes,
7
4
  SchemaDefinition,
8
5
  SourceCodeType,
9
- findCurrentNode,
10
6
  isValid,
11
- toJSONAST,
12
- visit,
13
7
  } from '@platformos/platformos-check-common';
14
8
  import { JSONDocument, LanguageService, getLanguageService } from 'vscode-json-languageservice';
15
9
  import {
@@ -24,21 +18,12 @@ import {
24
18
  } from 'vscode-languageserver';
25
19
  import { TextDocument } from 'vscode-languageserver-textdocument';
26
20
  import { DocumentManager } from '../documents';
27
- import { GetTranslationsForURI } from '../translations';
28
- import { JSONContributions, GetThemeBlockNames, GetThemeBlockSchema } from './JSONContributions';
29
- import { createJSONDocumentLinksVisitor } from './documentLinks/DocumentLinksProvider';
30
- import { URI } from 'vscode-uri';
31
- import { FindThemeRootURI } from '../internal-types';
21
+ import { JSONContributions } from './JSONContributions';
32
22
 
33
23
  export class JSONLanguageService {
34
- // We index by Mode here because I don't want to reconfigure the service depending on the URI.
35
- // This is because you may be in a "app" context in one folder, and in a "theme" context in another one.
36
- // Because theme app extensions and themes do not share a common JSON schema for blocks/*.liquid files,
37
- // we need to do this switch on mode here to figure out which language service we will use to power
38
- // completions/hover. The mode comes from the theme check config.
39
- private services: Record<Mode, LanguageService | null>;
40
-
41
- // One record for all modes since collisions on URIs should point to the same schema
24
+ private service: LanguageService | null = null;
25
+
26
+ // One record for all schemas since collisions on URIs should point to the same schema
42
27
  private schemas: Record<string, SchemaDefinition>;
43
28
 
44
29
  // Setup state
@@ -48,13 +33,7 @@ export class JSONLanguageService {
48
33
  constructor(
49
34
  private documentManager: DocumentManager,
50
35
  private jsonValidationSet: JsonValidationSet,
51
- private getDefaultSchemaTranslations: GetTranslationsForURI,
52
- private getModeForURI: (uri: string) => Promise<Mode>,
53
- private getThemeBlockNames: GetThemeBlockNames,
54
- private getThemeBlockSchema: GetThemeBlockSchema,
55
- private findThemeRootURI: FindThemeRootURI,
56
36
  ) {
57
- this.services = Object.fromEntries(Modes.map((mode) => [mode, null])) as typeof this.services;
58
37
  this.schemas = {};
59
38
  this.initialized = new Promise((resolve) => {
60
39
  this.initialize = resolve;
@@ -62,14 +41,12 @@ export class JSONLanguageService {
62
41
  }
63
42
 
64
43
  async setup(clientCapabilities: LSPClientCapabilities) {
65
- const promises = Modes.map(async (mode) => {
66
- const schemas = await this.jsonValidationSet.schemas(mode);
67
- for (const schema of schemas) {
68
- this.schemas[schema.uri] = schema;
69
- }
70
-
71
- if (!schemas.length) return;
44
+ const schemas = await this.jsonValidationSet.schemas();
45
+ for (const schema of schemas) {
46
+ this.schemas[schema.uri] = schema;
47
+ }
72
48
 
49
+ if (schemas.length) {
73
50
  const service = getLanguageService({
74
51
  clientCapabilities,
75
52
 
@@ -86,14 +63,7 @@ export class JSONLanguageService {
86
63
  },
87
64
  },
88
65
 
89
- contributions: [
90
- new JSONContributions(
91
- this.documentManager,
92
- this.getDefaultSchemaTranslations,
93
- this.getThemeBlockNames,
94
- this.getThemeBlockSchema,
95
- ),
96
- ],
66
+ contributions: [new JSONContributions(this.documentManager)],
97
67
  });
98
68
 
99
69
  service.configure({
@@ -106,17 +76,15 @@ export class JSONLanguageService {
106
76
  })),
107
77
  });
108
78
 
109
- this.services[mode] = service;
110
- });
79
+ this.service = service;
80
+ }
111
81
 
112
- await Promise.all(promises);
113
82
  this.initialize();
114
83
  }
115
84
 
116
85
  async completions(params: CompletionParams): Promise<null | CompletionList | CompletionItem[]> {
117
86
  await this.initialized;
118
- const mode = await this.getModeForURI(params.textDocument.uri);
119
- const service = this.services[mode];
87
+ const service = this.service;
120
88
  if (!service) return null;
121
89
  const documents = this.getDocuments(params, service);
122
90
  if (!documents) return null;
@@ -126,8 +94,7 @@ export class JSONLanguageService {
126
94
 
127
95
  async hover(params: HoverParams): Promise<Hover | null> {
128
96
  await this.initialized;
129
- const mode = await this.getModeForURI(params.textDocument.uri);
130
- const service = this.services[mode];
97
+ const service = this.service;
131
98
  if (!service) return null;
132
99
  const documents = this.getDocuments(params, service);
133
100
  if (!documents) return null;
@@ -135,52 +102,13 @@ export class JSONLanguageService {
135
102
  return service.doHover(jsonTextDocument, params.position, jsonDocument);
136
103
  }
137
104
 
138
- async documentLinks(params: DocumentLinkParams): Promise<DocumentLink[]> {
139
- await this.initialized;
140
- const rootUri = await this.findThemeRootURI(params.textDocument.uri);
141
- if (!rootUri) return [];
142
-
143
- const document = this.documentManager.get(params.textDocument.uri);
144
- if (!document) return [];
145
-
146
- switch (document.type) {
147
- case SourceCodeType.JSON: {
148
- if (document.ast instanceof Error) return [];
149
- const visitor = await createJSONDocumentLinksVisitor(
150
- document.textDocument,
151
- URI.parse(rootUri),
152
- );
153
- return visit(document.ast, visitor);
154
- }
155
-
156
- case SourceCodeType.LiquidHtml: {
157
- if (document.ast instanceof Error) return [];
158
- const textDocument = document.textDocument;
159
- const links: DocumentLink[] = [];
160
-
161
- const schema = await document.getSchema();
162
- if (schema && !(schema.ast instanceof Error)) {
163
- const visitor = await createJSONDocumentLinksVisitor(
164
- textDocument,
165
- URI.parse(rootUri),
166
- schema.offset,
167
- );
168
- const schemaLinks = await visit(schema.ast, visitor);
169
- links.push(...schemaLinks);
170
- }
171
-
172
- return links;
173
- }
174
-
175
- default:
176
- return [];
177
- }
105
+ async documentLinks(_params: DocumentLinkParams): Promise<DocumentLink[]> {
106
+ return [];
178
107
  }
179
108
 
180
109
  public isValidSchema = async (uri: string, jsonString: string) => {
181
110
  await this.initialized;
182
- const mode = await this.getModeForURI(uri);
183
- const service = this.services[mode];
111
+ const service = this.service;
184
112
  if (!service) return false;
185
113
  return isValid(service, uri, jsonString);
186
114
  };
@@ -194,40 +122,14 @@ export class JSONLanguageService {
194
122
 
195
123
  switch (document.type) {
196
124
  case SourceCodeType.GraphQL:
125
+ case SourceCodeType.LiquidHtml:
126
+ case SourceCodeType.YAML:
197
127
  return null;
198
128
  case SourceCodeType.JSON: {
199
129
  const jsonTextDocument = document.textDocument;
200
130
  const jsonDocument = service.parseJSONDocument(jsonTextDocument);
201
131
  return [jsonTextDocument, jsonDocument];
202
132
  }
203
-
204
- case SourceCodeType.LiquidHtml: {
205
- if (document.ast instanceof Error) return null;
206
- const textDocument = document.textDocument;
207
- const offset = textDocument.offsetAt(params.position);
208
- const [_, ancestors] = findCurrentNode(document.ast, offset);
209
- const schema = ancestors.find(
210
- (node): node is LiquidRawTag =>
211
- node.type === NodeTypes.LiquidRawTag && node.name === 'schema',
212
- );
213
- if (!schema) return null;
214
-
215
- const schemaLineNumber = textDocument.positionAt(schema.blockStartPosition.end).line;
216
- // Hacking away "same line numbers" here by prefixing the file with newlines
217
- // This way params.position will be at the same line number in this fake jsonTextDocument
218
- // Which means that the completions will be at the same line number in the Liquid document
219
- const jsonString =
220
- Array(schemaLineNumber).fill('\n').join('') +
221
- schema.source.slice(schema.blockStartPosition.end, schema.blockEndPosition.start);
222
- const jsonTextDocument = TextDocument.create(
223
- textDocument.uri,
224
- 'json',
225
- textDocument.version,
226
- jsonString,
227
- );
228
- const jsonDocument = service.parseJSONDocument(jsonTextDocument);
229
- return [jsonTextDocument, jsonDocument];
230
- }
231
133
  }
232
134
  }
233
135
 
@@ -5,10 +5,7 @@ import {
5
5
  HoverParams,
6
6
  } from 'vscode-languageserver-protocol';
7
7
  import { DocumentManager } from '../../documents';
8
- import { GetThemeBlockNames } from '../JSONContributions';
9
8
  import { JSONLanguageService } from '../JSONLanguageService';
10
- import { SourceCodeType } from '@platformos/platformos-check-common';
11
- import { GetTranslationsForURI } from '../../translations';
12
9
 
13
10
  export function getRequestParams(
14
11
  documentManager: DocumentManager,
@@ -33,36 +30,8 @@ export function isCompletionList(
33
30
  return completions !== null && !Array.isArray(completions);
34
31
  }
35
32
 
36
- export function mockJSONLanguageService(
37
- rootUri: string,
38
- documentManager: DocumentManager,
39
- getDefaultSchemaTranslations: GetTranslationsForURI = async () => ({}),
40
- getThemeBlockNames: GetThemeBlockNames = async () => [],
41
- ) {
42
- return new JSONLanguageService(
43
- documentManager,
44
- {
45
- schemas: async () => [
46
- {
47
- uri: 'https://shopify.dev/block-schema.json',
48
- schema: JSON.stringify({
49
- $schema: 'http://json-schema.org/draft-07/schema#',
50
- }),
51
- fileMatch: ['**/{blocks,sections}/*.liquid'],
52
- },
53
- ],
54
- },
55
- getDefaultSchemaTranslations,
56
- async () => 'theme',
57
- getThemeBlockNames,
58
- async (_uri: string, name: string) => {
59
- const blockUri = `${rootUri}/blocks/${name}.liquid`;
60
- const doc = documentManager.get(blockUri);
61
- if (!doc || doc.type !== SourceCodeType.LiquidHtml) {
62
- return;
63
- }
64
- return doc.getSchema();
65
- },
66
- async () => rootUri,
67
- );
33
+ export function mockJSONLanguageService(_rootUri: string, documentManager: DocumentManager) {
34
+ return new JSONLanguageService(documentManager, {
35
+ schemas: async () => [],
36
+ });
68
37
  }
package/src/json/utils.ts CHANGED
@@ -1,30 +1,3 @@
1
- import { LiquidHtmlNode, LiquidRawTag } from '@platformos/liquid-html-parser';
2
- import { SourceCodeType, visit, Visitor } from '@platformos/platformos-check-common';
3
-
4
1
  export function fileMatch(uri: string, patterns: RegExp[]): boolean {
5
2
  return patterns.some((pattern) => pattern.test(uri));
6
3
  }
7
-
8
- export function isSectionFile(uri: string): boolean {
9
- return /\/sections\/[^/]*\.liquid$/.test(uri);
10
- }
11
-
12
- export function isBlockFile(uri: string): boolean {
13
- return /\/blocks\/[^/]*\.liquid$/.test(uri);
14
- }
15
-
16
- export function isSectionOrBlockFile(uri: string): boolean {
17
- return isSectionFile(uri) || isBlockFile(uri);
18
- }
19
-
20
- export async function findSchemaNode(ast: LiquidHtmlNode): Promise<LiquidRawTag | undefined> {
21
- const nodes = await visit(ast, {
22
- async LiquidRawTag(node) {
23
- if (node.name === 'schema') {
24
- return node;
25
- }
26
- },
27
- } as Visitor<SourceCodeType.LiquidHtml, LiquidRawTag>);
28
-
29
- return nodes[0];
30
- }
@@ -14,7 +14,7 @@ import { HtmlTagNameRenameProvider } from './providers/HtmlTagNameRenameProvider
14
14
  import { LiquidVariableRenameProvider } from './providers/LiquidVariableRenameProvider';
15
15
  import { Connection } from 'vscode-languageserver';
16
16
  import { ClientCapabilities } from '../ClientCapabilities';
17
- import { FindThemeRootURI } from '../internal-types';
17
+ import { FindAppRootURI } from '../internal-types';
18
18
 
19
19
  /**
20
20
  * RenameProvider is responsible for providing rename support for the theme language server.
@@ -28,7 +28,7 @@ export class RenameProvider {
28
28
  connection: Connection,
29
29
  clientCapabilities: ClientCapabilities,
30
30
  private documentManager: DocumentManager,
31
- findThemeRootURI: FindThemeRootURI,
31
+ findAppRootURI: FindAppRootURI,
32
32
  ) {
33
33
  this.providers = [
34
34
  new HtmlTagNameRenameProvider(documentManager),
@@ -36,7 +36,7 @@ export class RenameProvider {
36
36
  connection,
37
37
  clientCapabilities,
38
38
  documentManager,
39
- findThemeRootURI,
39
+ findAppRootURI,
40
40
  ),
41
41
  ];
42
42
  }
@@ -10,7 +10,7 @@ const mockRoot = 'file:';
10
10
 
11
11
  describe('LiquidVariableRenameProvider', () => {
12
12
  const textDocumentUri = `${mockRoot}///app/views/partials/example-partial.liquid`;
13
- const findThemeRootURI = async () => mockRoot;
13
+ const findAppRootURI = async () => mockRoot;
14
14
 
15
15
  let capabilities: ClientCapabilities;
16
16
  let connection: MockConnection;
@@ -39,7 +39,7 @@ describe('LiquidVariableRenameProvider', () => {
39
39
 
40
40
  beforeEach(() => {
41
41
  documentManager = new DocumentManager();
42
- provider = new RenameProvider(connection, capabilities, documentManager, findThemeRootURI);
42
+ provider = new RenameProvider(connection, capabilities, documentManager, findAppRootURI);
43
43
 
44
44
  textDocument = TextDocument.create(textDocumentUri, 'liquid', 1, documentSource);
45
45
  documentManager.open(textDocument.uri, documentSource, 1);
@@ -198,7 +198,7 @@ describe('LiquidVariableRenameProvider', () => {
198
198
 
199
199
  beforeEach(() => {
200
200
  documentManager = new DocumentManager();
201
- provider = new RenameProvider(connection, capabilities, documentManager, findThemeRootURI);
201
+ provider = new RenameProvider(connection, capabilities, documentManager, findAppRootURI);
202
202
  });
203
203
 
204
204
  ['for', 'tablerow'].forEach((tag) => {
@@ -371,7 +371,7 @@ describe('LiquidVariableRenameProvider', () => {
371
371
  );
372
372
 
373
373
  documentManager = new DocumentManager();
374
- provider = new RenameProvider(connection, capabilities, documentManager, findThemeRootURI);
374
+ provider = new RenameProvider(connection, capabilities, documentManager, findAppRootURI);
375
375
 
376
376
  documentManager.open(textDocumentUri, textDocument.getText(), 1);
377
377
  });
@@ -30,7 +30,7 @@ import {
30
30
  import { TextDocument } from 'vscode-languageserver-textdocument';
31
31
  import { ClientCapabilities } from '../../ClientCapabilities';
32
32
  import { AugmentedLiquidSourceCode, DocumentManager, isLiquidSourceCode } from '../../documents';
33
- import { FindThemeRootURI } from '../../internal-types';
33
+ import { FindAppRootURI } from '../../internal-types';
34
34
  import { partialName } from '../../utils/uri';
35
35
  import { BaseRenameProvider } from '../BaseRenameProvider';
36
36
 
@@ -39,7 +39,7 @@ export class LiquidVariableRenameProvider implements BaseRenameProvider {
39
39
  private connection: Connection,
40
40
  private clientCapabilities: ClientCapabilities,
41
41
  private documentManager: DocumentManager,
42
- private findThemeRootURI: FindThemeRootURI,
42
+ private findAppRootURI: FindAppRootURI,
43
43
  ) {}
44
44
 
45
45
  async prepare(
@@ -74,7 +74,7 @@ export class LiquidVariableRenameProvider implements BaseRenameProvider {
74
74
  params: RenameParams,
75
75
  ): Promise<null | WorkspaceEdit> {
76
76
  const document = this.documentManager.get(params.textDocument.uri);
77
- const rootUri = await this.findThemeRootURI(params.textDocument.uri);
77
+ const rootUri = await this.findAppRootURI(params.textDocument.uri);
78
78
  const textDocument = document?.textDocument;
79
79
 
80
80
  if (!rootUri || !textDocument || !node || !ancestors) return null;
@@ -104,7 +104,7 @@ export class LiquidVariableRenameProvider implements BaseRenameProvider {
104
104
  });
105
105
 
106
106
  if (this.clientCapabilities.hasApplyEditSupport && liquidDocParamUpdated) {
107
- const themeFiles = this.documentManager.theme(rootUri, true);
107
+ const themeFiles = this.documentManager.app(rootUri, true);
108
108
  const liquidSourceCodes = themeFiles.filter(isLiquidSourceCode);
109
109
  const name = partialName(params.textDocument.uri);
110
110
 
@@ -2,11 +2,9 @@ import { Connection } from 'vscode-languageserver';
2
2
  import { RenameFilesParams } from 'vscode-languageserver-protocol';
3
3
  import { ClientCapabilities } from '../ClientCapabilities';
4
4
  import { DocumentManager } from '../documents';
5
- import { FindThemeRootURI } from '../internal-types';
5
+ import { FindAppRootURI } from '../internal-types';
6
6
  import { BaseRenameHandler } from './BaseRenameHandler';
7
7
  import { AssetRenameHandler } from './handlers/AssetRenameHandler';
8
- import { BlockRenameHandler } from './handlers/BlockRenameHandler';
9
- import { SectionRenameHandler } from './handlers/SectionRenameHandler';
10
8
  import { PartialRenameHandler } from './handlers/PartialRenameHandler';
11
9
 
12
10
  /**
@@ -15,7 +13,6 @@ import { PartialRenameHandler } from './handlers/PartialRenameHandler';
15
13
  * Stuff we'll handle:
16
14
  * - When a partial is renamed, then we'll change all the render calls
17
15
  * - When an asset is renamed, then we'll change the asset_url calls
18
- * - etc.
19
16
  */
20
17
  export class RenameHandler {
21
18
  private handlers: BaseRenameHandler[];
@@ -23,13 +20,11 @@ export class RenameHandler {
23
20
  connection: Connection,
24
21
  capabilities: ClientCapabilities,
25
22
  documentManager: DocumentManager,
26
- findThemeRootURI: FindThemeRootURI,
23
+ findAppRootURI: FindAppRootURI,
27
24
  ) {
28
25
  this.handlers = [
29
- new PartialRenameHandler(documentManager, connection, capabilities, findThemeRootURI),
30
- new AssetRenameHandler(documentManager, connection, capabilities, findThemeRootURI),
31
- new BlockRenameHandler(documentManager, connection, capabilities, findThemeRootURI),
32
- new SectionRenameHandler(documentManager, connection, capabilities, findThemeRootURI),
26
+ new PartialRenameHandler(documentManager, connection, capabilities, findAppRootURI),
27
+ new AssetRenameHandler(documentManager, connection, capabilities, findAppRootURI),
33
28
  ];
34
29
  }
35
30
 
@@ -10,7 +10,7 @@ import { RenameHandler } from '../RenameHandler';
10
10
 
11
11
  describe('Module: AssetRenameHandler', () => {
12
12
  const mockRoot = 'mock-fs:';
13
- const findThemeRootURI = async () => mockRoot;
13
+ const findAppRootURI = async () => mockRoot;
14
14
  let capabilities: ClientCapabilities;
15
15
  let documentManager: DocumentManager;
16
16
  let handler: RenameHandler;
@@ -29,7 +29,7 @@ describe('Module: AssetRenameHandler', () => {
29
29
  mockRoot,
30
30
  );
31
31
  documentManager = new DocumentManager(fs);
32
- handler = new RenameHandler(connection, capabilities, documentManager, findThemeRootURI);
32
+ handler = new RenameHandler(connection, capabilities, documentManager, findAppRootURI);
33
33
  });
34
34
 
35
35
  describe('when the client does not support workspace/applyEdit', () => {
@@ -182,7 +182,7 @@ describe('Module: AssetRenameHandler', () => {
182
182
  'mock-fs:',
183
183
  );
184
184
  documentManager = new DocumentManager(fs);
185
- handler = new RenameHandler(connection, capabilities, documentManager, findThemeRootURI);
185
+ handler = new RenameHandler(connection, capabilities, documentManager, findAppRootURI);
186
186
 
187
187
  await handler.onDidRenameFiles({
188
188
  files: [
@@ -12,7 +12,7 @@ import { ClientCapabilities } from '../../ClientCapabilities';
12
12
  import { DocumentManager, isLiquidSourceCode } from '../../documents';
13
13
  import { assetName, isAsset } from '../../utils/uri';
14
14
  import { BaseRenameHandler } from '../BaseRenameHandler';
15
- import { FindThemeRootURI } from '../../internal-types';
15
+ import { FindAppRootURI } from '../../internal-types';
16
16
 
17
17
  /**
18
18
  * The AssetRenameHandler will handle asset renames.
@@ -31,7 +31,7 @@ export class AssetRenameHandler implements BaseRenameHandler {
31
31
  private documentManager: DocumentManager,
32
32
  private connection: Connection,
33
33
  private capabilities: ClientCapabilities,
34
- private findThemeRootURI: FindThemeRootURI,
34
+ private findAppRootURI: FindAppRootURI,
35
35
  ) {}
36
36
 
37
37
  async onDidRenameFiles(params: RenameFilesParams): Promise<void> {
@@ -44,11 +44,11 @@ export class AssetRenameHandler implements BaseRenameHandler {
44
44
  // Only preload if you have something to do (folder renames are not supported)
45
45
  if (relevantRenames.length !== 1) return;
46
46
  const rename = relevantRenames[0];
47
- const rootUri = await this.findThemeRootURI(path.dirname(params.files[0].oldUri));
47
+ const rootUri = await this.findAppRootURI(path.dirname(params.files[0].oldUri));
48
48
  if (!rootUri) return;
49
49
  await this.documentManager.preload(rootUri);
50
- const theme = this.documentManager.theme(rootUri, true);
51
- const liquidSourceCodes = theme.filter(isLiquidSourceCode);
50
+ const app = this.documentManager.app(rootUri, true);
51
+ const liquidSourceCodes = app.filter(isLiquidSourceCode);
52
52
 
53
53
  const oldAssetName = assetName(rename.oldUri);
54
54
  const newAssetName = assetName(rename.newUri);
@@ -9,7 +9,7 @@ import { RenameHandler } from '../RenameHandler';
9
9
 
10
10
  describe('Module: PartialRenameHandler', () => {
11
11
  const mockRoot = 'mock-fs:';
12
- const findThemeRootURI = async () => mockRoot;
12
+ const findAppRootURI = async () => mockRoot;
13
13
  let capabilities: ClientCapabilities;
14
14
  let documentManager: DocumentManager;
15
15
  let handler: RenameHandler;
@@ -29,7 +29,7 @@ describe('Module: PartialRenameHandler', () => {
29
29
  mockRoot,
30
30
  );
31
31
  documentManager = new DocumentManager(fs);
32
- handler = new RenameHandler(connection, capabilities, documentManager, findThemeRootURI);
32
+ handler = new RenameHandler(connection, capabilities, documentManager, findAppRootURI);
33
33
  });
34
34
 
35
35
  describe('when the client does not support workspace/applyEdit', () => {
@@ -12,7 +12,7 @@ import { ClientCapabilities } from '../../ClientCapabilities';
12
12
  import { DocumentManager, isLiquidSourceCode } from '../../documents';
13
13
  import { isPartial, partialName } from '../../utils/uri';
14
14
  import { BaseRenameHandler } from '../BaseRenameHandler';
15
- import { FindThemeRootURI } from '../../internal-types';
15
+ import { FindAppRootURI } from '../../internal-types';
16
16
 
17
17
  /**
18
18
  * The PartialRenameHandler will handle partial renames.
@@ -31,7 +31,7 @@ export class PartialRenameHandler implements BaseRenameHandler {
31
31
  private documentManager: DocumentManager,
32
32
  private connection: Connection,
33
33
  private capabilities: ClientCapabilities,
34
- private findThemeRootURI: FindThemeRootURI,
34
+ private findAppRootURI: FindAppRootURI,
35
35
  ) {}
36
36
 
37
37
  async onDidRenameFiles(params: RenameFilesParams): Promise<void> {
@@ -43,11 +43,11 @@ export class PartialRenameHandler implements BaseRenameHandler {
43
43
  // Only preload if you have something to do (folder renames are not supported)
44
44
  if (relevantRenames.length !== 1) return;
45
45
  const rename = relevantRenames[0];
46
- const rootUri = await this.findThemeRootURI(path.dirname(params.files[0].oldUri));
46
+ const rootUri = await this.findAppRootURI(path.dirname(params.files[0].oldUri));
47
47
  if (!rootUri) return;
48
48
  await this.documentManager.preload(rootUri);
49
- const theme = this.documentManager.theme(rootUri, true);
50
- const liquidSourceCodes = theme.filter(isLiquidSourceCode);
49
+ const app = this.documentManager.app(rootUri, true);
50
+ const liquidSourceCodes = app.filter(isLiquidSourceCode);
51
51
  const oldPartialName = partialName(rename.oldUri);
52
52
  const newPartialName = partialName(rename.newUri);
53
53
  const editLabel = `Rename partial '${oldPartialName}' to '${newPartialName}'`;
@@ -1,4 +1,4 @@
1
- import { Template } from '@platformos/platformos-check-common';
1
+ import { Template } from '@platformos/platformos-check-common/dist/types/schemas';
2
2
 
3
3
  // this is very very optimistic...
4
4
  export function isValidTemplate(parsed: unknown): parsed is Template.Template {