@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.
Files changed (249) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/dist/PropertyShapeInference.d.ts +18 -0
  3. package/dist/PropertyShapeInference.js +62 -0
  4. package/dist/PropertyShapeInference.js.map +1 -1
  5. package/dist/TypeSystem.d.ts +4 -9
  6. package/dist/TypeSystem.js +246 -390
  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 +6 -17
  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 +17 -12
  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 +2 -9
  120. package/dist/utils/uri.js +5 -21
  121. package/dist/utils/uri.js.map +1 -1
  122. package/package.json +4 -4
  123. package/src/ClientCapabilities.ts +1 -1
  124. package/src/PropertyShapeInference.ts +81 -1
  125. package/src/TypeSystem.spec.ts +206 -449
  126. package/src/TypeSystem.ts +267 -460
  127. package/src/codeActions/providers/FixAllProvider.spec.ts +1 -1
  128. package/src/codeActions/providers/FixProvider.spec.ts +11 -11
  129. package/src/codeActions/providers/SuggestionProvider.spec.ts +2 -2
  130. package/src/commands/providers/ApplyFixesProvider.ts +2 -2
  131. package/src/commands/providers/ApplySuggestionProvider.ts +2 -2
  132. package/src/commands/providers/RunChecksProvider.ts +2 -2
  133. package/src/completions/CompletionsProvider.ts +14 -35
  134. package/src/completions/params/LiquidCompletionParams.spec.ts +0 -9
  135. package/src/completions/params/LiquidCompletionParams.ts +8 -17
  136. package/src/completions/params/fix.spec.ts +0 -3
  137. package/src/completions/providers/FilterCompletionProvider.spec.ts +2 -8
  138. package/src/completions/providers/FilterNamedParameterCompletionProvider.spec.ts +1 -5
  139. package/src/completions/providers/FilterNamedParameterCompletionProvider.ts +6 -6
  140. package/src/completions/providers/HtmlAttributeCompletionProvider.spec.ts +1 -4
  141. package/src/completions/providers/HtmlAttributeValueCompletionProvider.spec.ts +1 -4
  142. package/src/completions/providers/HtmlTagCompletionProvider.spec.ts +1 -4
  143. package/src/completions/providers/LiquidDocParamTypeCompletionProvider.spec.ts +1 -28
  144. package/src/completions/providers/LiquidDocParamTypeCompletionProvider.ts +3 -3
  145. package/src/completions/providers/LiquidDocTagCompletionProvider.spec.ts +1 -26
  146. package/src/completions/providers/LiquidTagsCompletionProvider.spec.ts +4 -18
  147. package/src/completions/providers/LiquidTagsCompletionProvider.ts +3 -3
  148. package/src/completions/providers/ObjectAttributeCompletionProvider.spec.ts +2 -31
  149. package/src/completions/providers/ObjectCompletionProvider.spec.ts +34 -123
  150. package/src/completions/providers/PartialCompletionProvider.spec.ts +6 -15
  151. package/src/completions/providers/RenderPartialParameterCompletionProvider.spec.ts +13 -15
  152. package/src/completions/providers/RenderPartialParameterCompletionProvider.ts +2 -3
  153. package/src/completions/providers/TranslationCompletionProvider.spec.ts +1 -4
  154. package/src/completions/providers/TranslationCompletionProvider.ts +3 -3
  155. package/src/completions/providers/index.ts +0 -3
  156. package/src/css/CSSLanguageService.ts +97 -81
  157. package/src/definitions/DefinitionProvider.ts +0 -6
  158. package/src/definitions/providers/TranslationStringDefinitionProvider.spec.ts +1 -5
  159. package/src/diagnostics/offenseToDiagnostic.ts +1 -1
  160. package/src/diagnostics/runChecks.spec.ts +22 -30
  161. package/src/diagnostics/runChecks.ts +17 -91
  162. package/src/docset/MarkdownRenderer.ts +1 -1
  163. package/src/documentLinks/DocumentLinksProvider.ts +10 -10
  164. package/src/documents/DocumentManager.spec.ts +46 -119
  165. package/src/documents/DocumentManager.ts +19 -15
  166. package/src/documents/types.ts +18 -9
  167. package/src/hover/HoverProvider.ts +9 -21
  168. package/src/hover/providers/HtmlAttributeHoverProvider.spec.ts +1 -3
  169. package/src/hover/providers/HtmlAttributeValueHoverProvider.spec.ts +1 -3
  170. package/src/hover/providers/HtmlTagHoverProvider.spec.ts +1 -3
  171. package/src/hover/providers/LiquidDocTagHoverProvider.spec.ts +1 -4
  172. package/src/hover/providers/LiquidFilterArgumentHoverProvider.spec.ts +0 -3
  173. package/src/hover/providers/LiquidFilterArgumentHoverProvider.ts +3 -3
  174. package/src/hover/providers/LiquidFilterHoverProvider.spec.ts +0 -3
  175. package/src/hover/providers/LiquidFilterHoverProvider.ts +3 -3
  176. package/src/hover/providers/LiquidObjectAttributeHoverProvider.spec.ts +1 -3
  177. package/src/hover/providers/LiquidObjectHoverProvider.spec.ts +46 -129
  178. package/src/hover/providers/LiquidTagHoverProvider.spec.ts +0 -3
  179. package/src/hover/providers/LiquidTagHoverProvider.ts +3 -3
  180. package/src/hover/providers/RenderPartialHoverProvider.spec.ts +11 -14
  181. package/src/hover/providers/RenderPartialHoverProvider.ts +1 -5
  182. package/src/hover/providers/RenderPartialParameterHoverProvider.spec.ts +10 -13
  183. package/src/hover/providers/RenderPartialParameterHoverProvider.ts +2 -3
  184. package/src/hover/providers/TranslationHoverProvider.spec.ts +1 -4
  185. package/src/hover/providers/TranslationHoverProvider.ts +3 -3
  186. package/src/index.ts +4 -7
  187. package/src/internal-types.ts +1 -1
  188. package/src/json/JSONContributions.ts +4 -61
  189. package/src/json/JSONLanguageService.ts +19 -117
  190. package/src/json/test/test-helpers.ts +4 -35
  191. package/src/json/utils.ts +0 -27
  192. package/src/rename/RenameProvider.ts +4 -4
  193. package/src/rename/providers/LiquidVariableRenameProvider.spec.ts +5 -5
  194. package/src/rename/providers/LiquidVariableRenameProvider.ts +6 -6
  195. package/src/renamed/RenameHandler.ts +4 -9
  196. package/src/renamed/handlers/AssetRenameHandler.spec.ts +28 -28
  197. package/src/renamed/handlers/AssetRenameHandler.ts +6 -6
  198. package/src/renamed/handlers/PartialRenameHandler.spec.ts +9 -9
  199. package/src/renamed/handlers/PartialRenameHandler.ts +10 -10
  200. package/src/server/{ThemeGraphManager.ts → AppGraphManager.ts} +21 -90
  201. package/src/server/safe.ts +1 -1
  202. package/src/server/startServer.spec.ts +10 -12
  203. package/src/server/startServer.ts +69 -222
  204. package/src/test/CompletionItemsAssertion.spec.ts +1 -4
  205. package/src/types.ts +33 -63
  206. package/src/utils/debounce.ts +1 -1
  207. package/src/utils/liquidDoc.ts +6 -6
  208. package/src/utils/uri.ts +5 -17
  209. package/src/completions/providers/ContentForBlockTypeCompletionProvider.spec.ts +0 -41
  210. package/src/completions/providers/ContentForBlockTypeCompletionProvider.ts +0 -42
  211. package/src/completions/providers/ContentForCompletionProvider.spec.ts +0 -96
  212. package/src/completions/providers/ContentForCompletionProvider.ts +0 -113
  213. package/src/completions/providers/ContentForParameterCompletionProvider.spec.ts +0 -362
  214. package/src/completions/providers/ContentForParameterCompletionProvider.ts +0 -187
  215. package/src/completions/providers/data/contentForParameterCompletionOptions.ts +0 -9
  216. package/src/css/CSSLanguageService.spec.ts +0 -159
  217. package/src/css/test/test-helpers.ts +0 -30
  218. package/src/definitions/providers/SchemaTranslationStringDefinitionProvider.spec.ts +0 -96
  219. package/src/definitions/providers/SchemaTranslationStringDefinitionProvider.ts +0 -82
  220. package/src/hover/providers/ContentForArgumentHoverProvider.spec.ts +0 -76
  221. package/src/hover/providers/ContentForArgumentHoverProvider.ts +0 -56
  222. package/src/hover/providers/ContentForTypeHoverProvider.spec.ts +0 -91
  223. package/src/hover/providers/ContentForTypeHoverProvider.ts +0 -42
  224. package/src/json/JSONLanguageService.spec.ts +0 -424
  225. package/src/json/completions/providers/BlockSettingsPropertyCompletionProvider.spec.ts +0 -163
  226. package/src/json/completions/providers/BlockSettingsPropertyCompletionProvider.ts +0 -121
  227. package/src/json/completions/providers/BlockTypeCompletionProvider.spec.ts +0 -137
  228. package/src/json/completions/providers/BlockTypeCompletionProvider.ts +0 -108
  229. package/src/json/completions/providers/ReferencedBlockTypeCompletionProvider.spec.ts +0 -132
  230. package/src/json/completions/providers/ReferencedBlockTypeCompletionProvider.ts +0 -120
  231. package/src/json/completions/providers/SchemaTranslationCompletionProvider.ts +0 -51
  232. package/src/json/completions/providers/SettingsPropertyCompletionProvider.spec.ts +0 -211
  233. package/src/json/completions/providers/SettingsPropertyCompletionProvider.ts +0 -75
  234. package/src/json/documentLinks/DocumentLinksProvider.spec.ts +0 -223
  235. package/src/json/documentLinks/DocumentLinksProvider.ts +0 -61
  236. package/src/json/hover/providers/BlockSettingsHoverProvider.spec.ts +0 -292
  237. package/src/json/hover/providers/BlockSettingsHoverProvider.ts +0 -99
  238. package/src/json/hover/providers/SchemaTranslationHoverProvider.ts +0 -35
  239. package/src/json/hover/providers/SettingsHoverProvider.spec.ts +0 -139
  240. package/src/json/hover/providers/SettingsHoverProvider.ts +0 -79
  241. package/src/json/schemaSettings.spec.ts +0 -103
  242. package/src/json/schemaSettings.ts +0 -53
  243. package/src/plugins/css.ts +0 -12
  244. package/src/renamed/handlers/BlockRenameHandler.spec.ts +0 -399
  245. package/src/renamed/handlers/BlockRenameHandler.ts +0 -402
  246. package/src/renamed/handlers/SectionRenameHandler.spec.ts +0 -321
  247. package/src/renamed/handlers/SectionRenameHandler.ts +0 -224
  248. package/src/renamed/handlers/utils.ts +0 -22
  249. package/src/settings/index.ts +0 -50
@@ -6,11 +6,11 @@ import { filePathSupportsLiquidDoc } from '@platformos/platformos-check-common';
6
6
  import {
7
7
  getValidParamTypes,
8
8
  SupportedDocTagTypes,
9
- ThemeDocset,
9
+ PlatformOSDocset,
10
10
  } from '@platformos/platformos-check-common';
11
11
 
12
12
  export class LiquidDocParamTypeCompletionProvider implements Provider {
13
- constructor(private readonly themeDocset: ThemeDocset) {}
13
+ constructor(private readonly platformosDocset: PlatformOSDocset) {}
14
14
 
15
15
  async completions(params: LiquidCompletionParams): Promise<CompletionItem[]> {
16
16
  if (!params.completionContext) return [];
@@ -44,7 +44,7 @@ export class LiquidDocParamTypeCompletionProvider implements Provider {
44
44
  return [];
45
45
  }
46
46
 
47
- const liquidDrops = await this.themeDocset.liquidDrops();
47
+ const liquidDrops = await this.platformosDocset.liquidDrops();
48
48
 
49
49
  return Array.from(getValidParamTypes(liquidDrops)).map(([label, description]) => {
50
50
  const documentation = description
@@ -1,7 +1,6 @@
1
1
  import { describe, beforeEach, it, expect } from 'vitest';
2
2
  import { CompletionsProvider } from '../CompletionsProvider';
3
3
  import { DocumentManager } from '../../documents';
4
- import { MetafieldDefinitionMap } from '@platformos/platformos-check-common';
5
4
 
6
5
  describe('Module: LiquidDocTagCompletionProvider', async () => {
7
6
  let provider: CompletionsProvider;
@@ -9,15 +8,13 @@ describe('Module: LiquidDocTagCompletionProvider', async () => {
9
8
  beforeEach(async () => {
10
9
  provider = new CompletionsProvider({
11
10
  documentManager: new DocumentManager(),
12
- themeDocset: {
11
+ platformosDocset: {
13
12
  graphQL: async () => null,
14
13
  filters: async () => [],
15
14
  objects: async () => [],
16
15
  liquidDrops: async () => [],
17
16
  tags: async () => [],
18
- systemTranslations: async () => ({}),
19
17
  },
20
- getMetafieldDefinitions: async (_rootUri: string) => ({}) as MetafieldDefinitionMap,
21
18
  });
22
19
  });
23
20
 
@@ -32,13 +29,6 @@ describe('Module: LiquidDocTagCompletionProvider', async () => {
32
29
  );
33
30
  });
34
31
 
35
- it('offers completions within liquid doc tag for blocks', async () => {
36
- await expect(provider).to.complete(
37
- { source: `{% doc %} @█`, relativePath: 'file://blocks/file.liquid' },
38
- ['param', 'example', 'description'],
39
- );
40
- });
41
-
42
32
  it("does not offer completion if it doesn't start with @", async () => {
43
33
  await expect(provider).to.complete(
44
34
  { source: `{% doc %} █`, relativePath: 'file://app/views/partials/file.liquid' },
@@ -53,21 +43,6 @@ describe('Module: LiquidDocTagCompletionProvider', async () => {
53
43
  );
54
44
  });
55
45
 
56
- it('does not offer completion if it is not a snippet file or block', async () => {
57
- await expect(provider).to.complete(
58
- { source: `{% doc %} @█`, relativePath: 'file://sections/file.liquid' },
59
- [],
60
- );
61
- await expect(provider).to.complete(
62
- { source: `{% doc %} @█`, relativePath: 'file://templates/file.liquid' },
63
- [],
64
- );
65
- await expect(provider).to.complete(
66
- { source: `{% doc %} @█`, relativePath: 'file://layout/file.liquid' },
67
- [],
68
- );
69
- });
70
-
71
46
  describe('nodes that accept free-form text', () => {
72
47
  it('offers completions when @ is at the start of a new line following an implicit description', async () => {
73
48
  await expect(provider).to.complete(
@@ -1,7 +1,7 @@
1
1
  import { describe, beforeEach, it, expect } from 'vitest';
2
2
  import { DocumentManager } from '../../documents';
3
3
  import { CompletionsProvider } from '../CompletionsProvider';
4
- import { MetafieldDefinitionMap, TagEntry } from '@platformos/platformos-check-common';
4
+ import { TagEntry } from '@platformos/platformos-check-common';
5
5
  import { InsertTextFormat, InsertTextMode, TextEdit } from 'vscode-languageserver-protocol';
6
6
 
7
7
  const caseSyntax = `{% case variable %}
@@ -38,8 +38,8 @@ endcase`;
38
38
  export const tags: TagEntry[] = [
39
39
  {
40
40
  name: 'render',
41
- syntax: "{% render 'snippet' %}",
42
- syntax_keywords: [{ keyword: 'snippet', description: '...' }],
41
+ syntax: "{% render 'partial' %}",
42
+ syntax_keywords: [{ keyword: 'partial', description: '...' }],
43
43
  },
44
44
  {
45
45
  name: 'for',
@@ -83,15 +83,13 @@ describe('Module: LiquidTagsCompletionProvider', async () => {
83
83
  beforeEach(async () => {
84
84
  provider = new CompletionsProvider({
85
85
  documentManager: new DocumentManager(),
86
- themeDocset: {
86
+ platformosDocset: {
87
87
  graphQL: async () => null,
88
88
  filters: async () => [],
89
89
  objects: async () => [],
90
90
  liquidDrops: async () => [],
91
91
  tags: async () => tags,
92
- systemTranslations: async () => ({}),
93
92
  },
94
- getMetafieldDefinitions: async (_rootUri: string) => ({}) as MetafieldDefinitionMap,
95
93
  });
96
94
  });
97
95
 
@@ -109,9 +107,6 @@ describe('Module: LiquidTagsCompletionProvider', async () => {
109
107
  await expect(provider).to.complete('{% comment %} hello there {% end', ['endcomment']);
110
108
  await expect(provider).to.complete('{% if cond %} hello {% else %} then {% end', ['endif']);
111
109
  await expect(provider).to.complete('{% for i in (1..3) %}{% end', ['endfor']);
112
- await expect(provider).to.complete('{% javascript %} console.log("hi") {% end', [
113
- 'endjavascript',
114
- ]);
115
110
  await expect(provider).to.complete('{% form "cart", cart %} ... {% end', ['endform']);
116
111
  });
117
112
 
@@ -138,10 +133,6 @@ describe('Module: LiquidTagsCompletionProvider', async () => {
138
133
  'endif',
139
134
  ]);
140
135
  await expect(provider).to.complete('{% for i in (1..3) %}{% e', ['echo', 'endfor']);
141
- await expect(provider).to.complete('{% javascript %} console.log("hi") {% e', [
142
- 'echo',
143
- 'endjavascript',
144
- ]);
145
136
  await expect(provider).to.complete('{% form "cart", cart %} ... {% e', ['echo', 'endform']);
146
137
  });
147
138
 
@@ -149,7 +140,6 @@ describe('Module: LiquidTagsCompletionProvider', async () => {
149
140
  await expect(provider).to.complete('{% comment %} hello there {% endz', []);
150
141
  await expect(provider).to.complete('{% if cond %} hello {% else %} then {% endz', []);
151
142
  await expect(provider).to.complete('{% for i in (1..3) %}{% endz', []);
152
- await expect(provider).to.complete('{% javascript %} console.log("hi") {% endz', []);
153
143
  await expect(provider).to.complete('{% form "cart", cart %} ... {% endz', []);
154
144
  });
155
145
 
@@ -165,10 +155,6 @@ describe('Module: LiquidTagsCompletionProvider', async () => {
165
155
  allTags.concat('endif'),
166
156
  );
167
157
  await expect(provider).to.complete('{% for i in (1..3) %}{% ', allTags.concat('endfor'));
168
- await expect(provider).to.complete(
169
- '{% javascript %} console.log("hi") {% ',
170
- allTags.concat('endjavascript'),
171
- );
172
158
  await expect(provider).to.complete(
173
159
  '{% form "cart", cart %} ... {% ',
174
160
  allTags.concat('endform'),
@@ -7,7 +7,7 @@ import {
7
7
  NodeTypes,
8
8
  RAW_TAGS,
9
9
  } from '@platformos/liquid-html-parser';
10
- import { TagEntry, ThemeDocset } from '@platformos/platformos-check-common';
10
+ import { TagEntry, PlatformOSDocset } from '@platformos/platformos-check-common';
11
11
  import {
12
12
  CompletionItem,
13
13
  CompletionItemKind,
@@ -23,7 +23,7 @@ import { CURSOR, LiquidCompletionParams } from '../params';
23
23
  import { Provider, createCompletionItem, sortByName } from './common';
24
24
 
25
25
  export class LiquidTagsCompletionProvider implements Provider {
26
- constructor(private readonly themeDocset: ThemeDocset) {}
26
+ constructor(private readonly platformosDocset: PlatformOSDocset) {}
27
27
 
28
28
  async completions(params: LiquidCompletionParams): Promise<CompletionItem[]> {
29
29
  if (!params.completionContext) return [];
@@ -39,7 +39,7 @@ export class LiquidTagsCompletionProvider implements Provider {
39
39
 
40
40
  const partial = node.name.replace(CURSOR, '');
41
41
  const blockParent = findParentNode(partial, ancestors);
42
- const tags = await this.themeDocset.tags();
42
+ const tags = await this.platformosDocset.tags();
43
43
  return tags
44
44
  .filter(({ name }) => name.startsWith(partial))
45
45
  .sort(sortByName)
@@ -2,12 +2,10 @@ import { describe, beforeEach, it, expect, vi } from 'vitest';
2
2
  import { CompletionItemKind } from 'vscode-languageserver';
3
3
  import { DocumentManager } from '../../documents';
4
4
  import { CompletionsProvider } from '../CompletionsProvider';
5
- import { SettingsSchemaJSONFile } from '../../settings';
6
- import { MetafieldDefinitionMap, ObjectEntry } from '@platformos/platformos-check-common';
5
+ import { ObjectEntry } from '@platformos/platformos-check-common';
7
6
 
8
7
  describe('Module: ObjectAttributeCompletionProvider', async () => {
9
8
  let provider: CompletionsProvider;
10
- let settingsProvider: any;
11
9
 
12
10
  beforeEach(async () => {
13
11
  const _objects: ObjectEntry[] = [
@@ -62,10 +60,9 @@ describe('Module: ObjectAttributeCompletionProvider', async () => {
62
60
  },
63
61
  ];
64
62
 
65
- settingsProvider = vi.fn().mockResolvedValue([]);
66
63
  provider = new CompletionsProvider({
67
64
  documentManager: new DocumentManager(),
68
- themeDocset: {
65
+ platformosDocset: {
69
66
  graphQL: async () => null,
70
67
  filters: async () => [
71
68
  { name: 'split', return_type: [{ type: 'array', array_value: 'string' }] },
@@ -75,10 +72,7 @@ describe('Module: ObjectAttributeCompletionProvider', async () => {
75
72
  objects: async () => _objects,
76
73
  liquidDrops: async () => _objects,
77
74
  tags: async () => [],
78
- systemTranslations: async () => ({}),
79
75
  },
80
- getThemeSettingsSchemaForURI: settingsProvider,
81
- getMetafieldDefinitions: async (_rootUri: string) => ({}) as MetafieldDefinitionMap,
82
76
  });
83
77
  });
84
78
 
@@ -498,27 +492,4 @@ describe('Module: ObjectAttributeCompletionProvider', async () => {
498
492
  await expect(provider).to.complete(source, ['deep']);
499
493
  });
500
494
  });
501
-
502
- describe('Case: global settings', () => {
503
- it('should complete basic settings by id as expected', async () => {
504
- const settings: SettingsSchemaJSONFile = [
505
- {
506
- name: 'Category',
507
- settings: [
508
- {
509
- type: 'product',
510
- id: 'my_product_setting',
511
- label: 'Product',
512
- },
513
- ],
514
- },
515
- ];
516
- settingsProvider.mockResolvedValue(settings);
517
-
518
- const source = `
519
- {{ settings.█ }}
520
- `;
521
- await expect(provider).to.complete(source, ['my_product_setting']);
522
- });
523
- });
524
495
  });
@@ -1,33 +1,24 @@
1
1
  import { describe, beforeEach, it, expect } from 'vitest';
2
2
  import { DocumentManager } from '../../documents';
3
3
  import { CompletionsProvider } from '../CompletionsProvider';
4
- import { MetafieldDefinitionMap, ObjectEntry } from '@platformos/platformos-check-common';
4
+ import { ObjectEntry } from '@platformos/platformos-check-common';
5
5
 
6
6
  describe('Module: ObjectCompletionProvider', async () => {
7
7
  let provider: CompletionsProvider;
8
8
 
9
9
  beforeEach(async () => {
10
10
  const _objects: ObjectEntry[] = [
11
- { name: 'all_products' },
12
- { name: 'global' },
13
- {
14
- name: 'section',
15
- access: {
16
- global: false,
17
- template: [],
18
- parents: [],
19
- },
20
- },
21
11
  {
22
- name: 'block',
23
- access: {
24
- global: false,
25
- template: [],
26
- parents: [],
27
- },
12
+ name: 'context',
13
+ access: { global: true, parents: [], template: [] },
14
+ properties: [
15
+ { name: 'current_user', return_type: [{ type: 'current_user', name: '' }] },
16
+ { name: 'params', return_type: [{ type: 'untyped', name: '' }] },
17
+ ],
28
18
  },
19
+ { name: 'global' },
29
20
  {
30
- name: 'predictive_search',
21
+ name: 'form',
31
22
  access: {
32
23
  global: false,
33
24
  template: [],
@@ -35,7 +26,7 @@ describe('Module: ObjectCompletionProvider', async () => {
35
26
  },
36
27
  },
37
28
  {
38
- name: 'recommendations',
29
+ name: 'app',
39
30
  access: {
40
31
  global: false,
41
32
  template: [],
@@ -43,107 +34,43 @@ describe('Module: ObjectCompletionProvider', async () => {
43
34
  },
44
35
  },
45
36
  {
46
- name: 'product',
47
- properties: [
48
- {
49
- name: 'metafields',
50
- },
51
- ],
52
- },
53
- {
54
- name: 'metafield',
55
- access: {
56
- global: false,
57
- template: [],
58
- parents: [],
59
- },
60
- properties: [
61
- {
62
- name: 'type',
63
- description: 'the type of the metafield',
64
- return_type: [{ type: 'string', name: '' }],
65
- },
66
- {
67
- name: 'value',
68
- description: 'the value of the metafield',
69
- return_type: [{ type: 'untyped', name: '' }],
70
- },
71
- ],
37
+ name: 'current_user',
38
+ access: { global: false, parents: [], template: [] },
39
+ properties: [{ name: 'name' }, { name: 'email' }],
72
40
  },
73
41
  ];
74
42
 
75
43
  provider = new CompletionsProvider({
76
44
  documentManager: new DocumentManager(),
77
- themeDocset: {
45
+ platformosDocset: {
78
46
  graphQL: async () => null,
79
47
  filters: async () => [],
80
48
  objects: async () => _objects,
81
49
  liquidDrops: async () => _objects,
82
50
  tags: async () => [],
83
- systemTranslations: async () => ({}),
84
- },
85
- getMetafieldDefinitions: async (_rootUri: string) => {
86
- return {
87
- article: [],
88
- blog: [],
89
- collection: [],
90
- company: [],
91
- company_location: [],
92
- location: [],
93
- market: [],
94
- order: [],
95
- page: [],
96
- product: [
97
- {
98
- key: 'color',
99
- name: 'color',
100
- namespace: 'custom',
101
- description: 'the color of the product',
102
- type: {
103
- category: 'COLOR',
104
- name: 'color',
105
- },
106
- },
107
- ],
108
- variant: [],
109
- shop: [],
110
- } as MetafieldDefinitionMap;
111
51
  },
112
52
  });
113
53
  });
114
54
 
115
55
  it('should complete variable lookups', async () => {
116
56
  const contexts = [
117
- `{{ a█`,
118
- `{% echo a█ %}`,
119
- `{% assign x = a█ %}`,
120
- `{% for a in a█ %}`,
121
- `{% for a in b reversed limit: a█ %}`,
122
- `{% paginate b by a█ %}`,
123
- `{% paginate b by col, window_size: a█ %}`,
124
- `{% if a█ %}`,
125
- `{% if a > a█ %}`,
126
- `{% if a > b or a%}`,
127
- `{% if a > b or c > a%}`,
128
- `{% elsif a > a%}`,
129
- `{% when a%}`,
130
- `{% when a, a%}`,
131
- `{% cycle a█ %}`,
132
- `{% cycle 'foo', a█ %}`,
133
- `{% cycle 'foo': a█ %}`,
134
- `{% render 'snip', var: a█ %}`,
135
- `{% render 'snip' for a█ as item %}`,
136
- `{% render 'snip' with a█ as name %}`,
137
- `{% for x in (1..a█) %}`,
138
- // `{% paginate a█ by 50 %}`,
139
- `<a-{{ a█ }}`,
140
- `<a data-{{ a█ }}`,
141
- `<a data={{ a█ }}`,
142
- `<a data="{{ a█ }}"`,
143
- `<a data='x{{ a█ }}'`,
57
+ `{{ c█`,
58
+ `{% echo c█ %}`,
59
+ `{% assign x = c█ %}`,
60
+ `{% for a in c█ %}`,
61
+ `{% for a in b reversed limit: c█ %}`,
62
+ `{% if c█ %}`,
63
+ `{% if a > c█ %}`,
64
+ `{% if a > b or c█ %}`,
65
+ `{% for x in (1..c) %}`,
66
+ `<a-{{ c█ }}`,
67
+ `<a data-{{ c█ }}`,
68
+ `<a data={{ c█ }}`,
69
+ `<a data="{{ c█ }}"`,
70
+ `<a data='x{{ c█ }}'`,
144
71
  ];
145
72
  await Promise.all(
146
- contexts.map((context) => expect(provider, context).to.complete(context, ['all_products'])),
73
+ contexts.map((context) => expect(provider, context).to.complete(context, ['context'])),
147
74
  );
148
75
  });
149
76
 
@@ -154,8 +81,6 @@ describe('Module: ObjectCompletionProvider', async () => {
154
81
  `{% assign x = █ %}`,
155
82
  `{% for a in █ %}`,
156
83
  `{% for a in b reversed limit: █ %}`,
157
- `{% paginate b by █ %}`,
158
- `{% paginate b by col, window_size: █ %}`,
159
84
  `{% if █ %}`,
160
85
  `{% if a > █ %}`,
161
86
  `{% if a > b or █ %}`,
@@ -170,7 +95,6 @@ describe('Module: ObjectCompletionProvider', async () => {
170
95
  `{% render 'snip' for █ as item %}`,
171
96
  `{% render 'snip' with █ as name %}`,
172
97
  `{% for x in (1..█) %}`,
173
- // `{% paginate █ by 50 %}`,
174
98
  `<a-{{ █ }}`,
175
99
  `<a data-{{ █ }}`,
176
100
  `<a data={{ █ }}`,
@@ -180,17 +104,15 @@ describe('Module: ObjectCompletionProvider', async () => {
180
104
 
181
105
  await Promise.all(
182
106
  contexts.map((context) =>
183
- expect(provider, context).to.complete(context, ['all_products', 'global', 'product']),
107
+ expect(provider, context).to.complete(context, ['context', 'global']),
184
108
  ),
185
109
  );
186
110
  });
187
111
 
188
112
  it('should complete contextual variables', async () => {
189
113
  const contexts: [string, string][] = [
190
- ['{% paginate all_products by 5 %}{{ pagi█ }}{% endpaginate %}', 'paginate'],
191
- ['{% form "cart" %}{{ for█ }}{% endform %}', 'form'],
192
- ['{% for p in all_products %}{{ for█ }}{% endfor %}', 'forloop'],
193
- ['{% tablerow p in all_products %}{{ tablerow█ }}{% endtablerow %}', 'tablerowloop'],
114
+ ['{% for p in context.posts %}{{ for█ }}{% endfor %}', 'forloop'],
115
+ ['{% tablerow p in context.posts %}{{ tablerow█ }}{% endtablerow %}', 'tablerowloop'],
194
116
  ['{% layout non█ %}', 'none'],
195
117
  ['{% increment var %}{{ var█ }}', 'var'],
196
118
  ['{% decrement var %}{{ var█ }}', 'var'],
@@ -205,10 +127,8 @@ describe('Module: ObjectCompletionProvider', async () => {
205
127
 
206
128
  it('should complete relative-path-dependent contextual variables', async () => {
207
129
  const contexts: [string, string][] = [
208
- ['section', 'sections/main-product.liquid'],
209
- ['block', 'blocks/my-block.liquid'],
210
- ['predictive_search', 'sections/predictive-search.liquid'],
211
- ['recommendations', 'sections/recommendations.liquid'],
130
+ ['app', 'app/views/partials/my-partial.liquid'],
131
+ ['app', 'app/lib/helpers/my-helper.liquid'],
212
132
  ];
213
133
  for (const [object, relativePath] of contexts) {
214
134
  const source = `{{ ${object}█ }}`;
@@ -220,13 +140,4 @@ describe('Module: ObjectCompletionProvider', async () => {
220
140
  it('should not complete anything if there is nothing to complete', async () => {
221
141
  await expect(provider).to.complete('{% assign x = "█" %}', []);
222
142
  });
223
-
224
- it('should complete metafields defined by getMetafieldDefinitions', async () => {
225
- await expect(provider).to.complete('{% echo product.metafields.█ %}', ['custom']);
226
- await expect(provider).to.complete('{% echo product.metafields.custom.█ %}', ['color']);
227
- await expect(provider).to.complete('{% echo product.metafields.custom.color.█ %}', [
228
- 'type',
229
- 'value',
230
- ]);
231
- });
232
143
  });
@@ -1,29 +1,26 @@
1
1
  import { describe, beforeEach, it, expect } from 'vitest';
2
2
  import { DocumentManager } from '../../documents';
3
3
  import { CompletionsProvider } from '../CompletionsProvider';
4
- import { MetafieldDefinitionMap } from '@platformos/platformos-check-common';
5
4
 
6
- describe('Module: RenderSnippetCompletionProvider', async () => {
5
+ describe('Module: RenderPartialCompletionProvider', async () => {
7
6
  let provider: CompletionsProvider;
8
7
 
9
8
  beforeEach(async () => {
10
9
  provider = new CompletionsProvider({
11
10
  documentManager: new DocumentManager(),
12
- themeDocset: {
11
+ platformosDocset: {
13
12
  graphQL: async () => null,
14
13
  filters: async () => [],
15
14
  objects: async () => [],
16
15
  liquidDrops: async () => [],
17
16
  tags: async () => [],
18
- systemTranslations: async () => ({}),
19
17
  },
20
18
  getTranslationsForURI: async (_) => ({}),
21
19
  getPartialNamesForURI: async (_) => ['product-card', 'image'],
22
- getMetafieldDefinitions: async (_rootUri: string) => ({}) as MetafieldDefinitionMap,
23
20
  });
24
21
  });
25
22
 
26
- it('should complete snippets correctly', async () => {
23
+ it('should complete partials correctly', async () => {
27
24
  await expect(provider).to.complete('{% render "', ['product-card', 'image']);
28
25
  });
29
26
  });
@@ -32,13 +29,12 @@ describe('Module: PartialCompletionProvider with paths', async () => {
32
29
  it('should complete module paths - /modules/user/commands/test', async () => {
33
30
  const provider = new CompletionsProvider({
34
31
  documentManager: new DocumentManager(),
35
- themeDocset: {
32
+ platformosDocset: {
36
33
  graphQL: async () => null,
37
34
  filters: async () => [],
38
35
  objects: async () => [],
39
36
  liquidDrops: async () => [],
40
37
  tags: async () => [],
41
- systemTranslations: async () => ({}),
42
38
  },
43
39
  getTranslationsForURI: async (_) => ({}),
44
40
  getPartialNamesForURI: async (_uri, partial, _tag) => {
@@ -47,7 +43,6 @@ describe('Module: PartialCompletionProvider with paths', async () => {
47
43
  }
48
44
  return [];
49
45
  },
50
- getMetafieldDefinitions: async (_rootUri: string) => ({}) as MetafieldDefinitionMap,
51
46
  });
52
47
 
53
48
  await expect(provider).to.complete('{% render "/modules/user/commands', ['test']);
@@ -56,13 +51,12 @@ describe('Module: PartialCompletionProvider with paths', async () => {
56
51
  it('should complete root commands path - /commands/test2', async () => {
57
52
  const provider = new CompletionsProvider({
58
53
  documentManager: new DocumentManager(),
59
- themeDocset: {
54
+ platformosDocset: {
60
55
  graphQL: async () => null,
61
56
  filters: async () => [],
62
57
  objects: async () => [],
63
58
  liquidDrops: async () => [],
64
59
  tags: async () => [],
65
- systemTranslations: async () => ({}),
66
60
  },
67
61
  getTranslationsForURI: async (_) => ({}),
68
62
  getPartialNamesForURI: async (_uri, partial, _tag) => {
@@ -71,7 +65,6 @@ describe('Module: PartialCompletionProvider with paths', async () => {
71
65
  }
72
66
  return [];
73
67
  },
74
- getMetafieldDefinitions: async (_rootUri: string) => ({}) as MetafieldDefinitionMap,
75
68
  });
76
69
 
77
70
  await expect(provider).to.complete('{% render "/commands', ['test2']);
@@ -80,13 +73,12 @@ describe('Module: PartialCompletionProvider with paths', async () => {
80
73
  it('should complete multiple files in directory', async () => {
81
74
  const provider = new CompletionsProvider({
82
75
  documentManager: new DocumentManager(),
83
- themeDocset: {
76
+ platformosDocset: {
84
77
  graphQL: async () => null,
85
78
  filters: async () => [],
86
79
  objects: async () => [],
87
80
  liquidDrops: async () => [],
88
81
  tags: async () => [],
89
- systemTranslations: async () => ({}),
90
82
  },
91
83
  getTranslationsForURI: async (_) => ({}),
92
84
  getPartialNamesForURI: async (_uri, partial, _tag) => {
@@ -95,7 +87,6 @@ describe('Module: PartialCompletionProvider with paths', async () => {
95
87
  }
96
88
  return [];
97
89
  },
98
- getMetafieldDefinitions: async (_rootUri: string) => ({}) as MetafieldDefinitionMap,
99
90
  });
100
91
 
101
92
  await expect(provider).to.complete('{% render "/modules/user/commands', [
@@ -1,14 +1,14 @@
1
1
  import { describe, beforeEach, it, expect } from 'vitest';
2
2
  import { CompletionsProvider } from '../CompletionsProvider';
3
3
  import { DocumentManager } from '../../documents';
4
- import { MetafieldDefinitionMap, DocDefinition } from '@platformos/platformos-check-common';
4
+ import { DocDefinition } from '@platformos/platformos-check-common';
5
5
 
6
- const uri = 'file:///snippets/product-card.liquid';
6
+ const uri = 'file:///app/views/partials/product-card.liquid';
7
7
 
8
- describe('Module: RenderSnippetParameterCompletionProvider', async () => {
8
+ describe('Module: RenderPartialParameterCompletionProvider', async () => {
9
9
  let provider: CompletionsProvider;
10
- const mockSnippetName = 'product-card';
11
- const mockSnippetDefinition: DocDefinition = {
10
+ const mockPartialName = 'product-card';
11
+ const mockPartialDefinition: DocDefinition = {
12
12
  uri,
13
13
  liquidDoc: {
14
14
  parameters: [
@@ -54,25 +54,23 @@ describe('Module: RenderSnippetParameterCompletionProvider', async () => {
54
54
  beforeEach(async () => {
55
55
  provider = new CompletionsProvider({
56
56
  documentManager: new DocumentManager(),
57
- themeDocset: {
57
+ platformosDocset: {
58
58
  graphQL: async () => null,
59
59
  filters: async () => [],
60
60
  objects: async () => [],
61
61
  liquidDrops: async () => [],
62
62
  tags: async () => [],
63
- systemTranslations: async () => ({}),
64
63
  },
65
- getMetafieldDefinitions: async (_rootUri: string) => ({}) as MetafieldDefinitionMap,
66
- getDocDefinitionForURI: async (_uri, _type, snippetName) => {
67
- if (mockSnippetName === snippetName) {
68
- return mockSnippetDefinition;
64
+ getDocDefinitionForURI: async (_uri, partialName) => {
65
+ if (mockPartialName === partialName) {
66
+ return mockPartialDefinition;
69
67
  }
70
68
  },
71
69
  });
72
70
  });
73
71
 
74
72
  it("provide completion options that doesn't already exist in render tag", async () => {
75
- await expect(provider).to.complete(`{% render '${mockSnippetName}', █ %}`, [
73
+ await expect(provider).to.complete(`{% render '${mockPartialName}', █ %}`, [
76
74
  'title',
77
75
  'border-radius',
78
76
  'no-type',
@@ -80,12 +78,12 @@ describe('Module: RenderSnippetParameterCompletionProvider', async () => {
80
78
  'no-type-or-description',
81
79
  ]);
82
80
  await expect(provider).to.complete(
83
- `{% render '${mockSnippetName}', title: 'foo', border-radius: 5, █ %}`,
81
+ `{% render '${mockPartialName}', title: 'foo', border-radius: 5, █ %}`,
84
82
  ['no-type', 'no-description', 'no-type-or-description'],
85
83
  );
86
84
  });
87
85
 
88
- it('does not provide completion options if the snippet does not exist', async () => {
89
- await expect(provider).to.complete(`{% render 'fake-snippet', █ %}`, []);
86
+ it('does not provide completion options if the partial does not exist', async () => {
87
+ await expect(provider).to.complete(`{% render 'fake-partial', █ %}`, []);
90
88
  });
91
89
  });