@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,7 +1,7 @@
1
1
  import { describe, beforeEach, it, expect } from 'vitest';
2
2
  import { DocumentManager } from '../../documents';
3
3
  import { HoverProvider } from '../HoverProvider';
4
- import { MetafieldDefinitionMap, ObjectEntry } from '@platformos/platformos-check-common';
4
+ import { ObjectEntry } from '@platformos/platformos-check-common';
5
5
  import { TranslationProvider } from '@platformos/platformos-common';
6
6
  import { MockFileSystem } from '@platformos/platformos-check-common/src/test';
7
7
 
@@ -11,29 +11,36 @@ describe('Module: LiquidObjectHoverProvider', async () => {
11
11
  beforeEach(async () => {
12
12
  const _objects: ObjectEntry[] = [
13
13
  {
14
- name: 'product',
15
- description: 'product description',
14
+ name: 'context',
15
+ description: 'context description',
16
+ access: { global: true, parents: [], template: [] },
16
17
  return_type: [],
17
18
  properties: [
18
19
  {
19
- name: 'featured_image',
20
- return_type: [{ type: 'image', name: '' }],
20
+ name: 'posts',
21
+ return_type: [{ type: 'array', array_value: 'post' }],
21
22
  },
22
23
  {
23
- name: 'title',
24
- return_type: [{ type: 'string', name: '' }],
24
+ name: 'current_user',
25
+ return_type: [{ type: 'current_user', name: '' }],
25
26
  },
26
- { name: 'metafields' },
27
27
  ],
28
28
  },
29
29
  {
30
- name: 'all_products',
31
- return_type: [{ type: 'array', array_value: 'product' }],
32
- },
33
- {
34
- name: 'paginate',
35
- access: { global: false, parents: [], template: [] },
30
+ name: 'post',
31
+ description: 'post description',
36
32
  return_type: [],
33
+ properties: [
34
+ {
35
+ name: 'thumbnail',
36
+ return_type: [{ type: 'image', name: '' }],
37
+ },
38
+ {
39
+ name: 'title',
40
+ return_type: [{ type: 'string', name: '' }],
41
+ },
42
+ { name: 'metadata' },
43
+ ],
37
44
  },
38
45
  {
39
46
  name: 'forloop',
@@ -50,46 +57,10 @@ describe('Module: LiquidObjectHoverProvider', async () => {
50
57
  description: 'image description',
51
58
  access: { global: false, parents: [], template: [] },
52
59
  },
53
- {
54
- name: 'section',
55
- access: { global: false, parents: [], template: [] },
56
- },
57
- {
58
- name: 'block',
59
- access: { global: false, parents: [], template: [] },
60
- },
61
60
  {
62
61
  name: 'app',
63
62
  access: { global: false, parents: [], template: [] },
64
63
  },
65
- {
66
- name: 'predictive_search',
67
- access: { global: false, parents: [], template: [] },
68
- },
69
- {
70
- name: 'recommendations',
71
- access: { global: false, parents: [], template: [] },
72
- },
73
- {
74
- name: 'metafield',
75
- access: {
76
- global: false,
77
- template: [],
78
- parents: [],
79
- },
80
- properties: [
81
- {
82
- name: 'type',
83
- description: 'the type of the metafield',
84
- return_type: [{ type: 'string', name: '' }],
85
- },
86
- {
87
- name: 'value',
88
- description: 'the value of the metafield',
89
- return_type: [{ type: 'untyped', name: '' }],
90
- },
91
- ],
92
- },
93
64
  ];
94
65
 
95
66
  provider = new HoverProvider(
@@ -100,80 +71,41 @@ describe('Module: LiquidObjectHoverProvider', async () => {
100
71
  objects: async () => _objects,
101
72
  liquidDrops: async () => _objects,
102
73
  tags: async () => [],
103
- systemTranslations: async () => ({}),
104
74
  },
105
75
  new TranslationProvider(new MockFileSystem({})),
106
- async (_uri: string) => {
107
- return {
108
- article: [],
109
- blog: [],
110
- collection: [],
111
- company: [],
112
- company_location: [],
113
- location: [],
114
- market: [],
115
- order: [],
116
- page: [],
117
- product: [
118
- {
119
- key: 'color',
120
- name: 'color',
121
- namespace: 'custom',
122
- description: 'the color of the product',
123
- type: {
124
- category: 'COLOR',
125
- name: 'color',
126
- },
127
- },
128
- ],
129
- variant: [],
130
- shop: [],
131
- } as MetafieldDefinitionMap;
132
- },
133
76
  );
134
77
  });
135
78
 
136
- it('should return the hover description of the object', async () => {
79
+ it('should return the hover description of the global object', async () => {
137
80
  const contexts = [
138
- '{{ product }}',
139
- '{{ product█ }}',
140
- '{% echo product█ %}',
141
- '{% liquid\n echo product█ %}',
142
- '{% assign x = product %}{{ x█ }}',
143
- '{% for x in all_products %}{{ x█ }}{% endfor %}',
144
- '{% assign x = all_products[0] %}{{ x█ }}',
145
- '{% assign x█ = all_products[0] %}',
146
- // '{% for x█ in all_products %}{{ x }}{% endfor %}', // not supported yet...
81
+ '{{ context }}',
82
+ '{{ context█ }}',
83
+ '{% echo context█ %}',
84
+ '{% liquid\n echo context█ %}',
85
+ '{% assign x = context %}{{ x█ }}',
147
86
  ];
148
87
  for (const context of contexts) {
149
- await expect(provider).to.hover(context, expect.stringContaining('product description'));
150
- await expect(provider).to.hover(context, expect.stringMatching(/##* \w+: `product`/));
88
+ await expect(provider).to.hover(context, expect.stringContaining('context description'));
89
+ await expect(provider).to.hover(context, expect.stringMatching(/##* \w+: `context`/));
151
90
  }
152
91
  });
153
92
 
154
- it('should support paginate inside paginate tags', async () => {
155
- const context = `
156
- {% paginate all_products by 5 %}
157
- {{ paginate█ }}
158
- {% endpaginate %}
159
- `;
160
- await expect(provider).to.hover(context, expect.stringMatching(/##* paginate: `paginate`/));
161
- await expect(provider).to.hover('{{ paginate█ }}', null);
162
- });
163
-
164
- it('should support form inside form tags', async () => {
165
- const context = `
166
- {% form all_products by 5 %}
167
- {{ form█ }}
168
- {% endform %}
169
- `;
170
- await expect(provider).to.hover(context, expect.stringMatching(/##* form: `form`/));
171
- await expect(provider).to.hover('{{ form█ }}', null);
93
+ it('should return the hover description of an array item object', async () => {
94
+ const contexts = [
95
+ '{% for x in context.posts %}{{ x█ }}{% endfor %}',
96
+ '{% assign x = context.posts[0] %}{{ x█ }}',
97
+ '{% assign x█ = context.posts[0] %}',
98
+ // '{% for x█ in context.posts %}{{ x }}{% endfor %}', // not supported yet...
99
+ ];
100
+ for (const context of contexts) {
101
+ await expect(provider).to.hover(context, expect.stringContaining('post description'));
102
+ await expect(provider).to.hover(context, expect.stringMatching(/##* \w+: `post`/));
103
+ }
172
104
  });
173
105
 
174
106
  it('should support forloop inside for tags', async () => {
175
107
  const context = `
176
- {% for p in all_products %}
108
+ {% for p in context.posts %}
177
109
  {{ forloop█ }}
178
110
  {% endfor %}
179
111
  `;
@@ -183,7 +115,7 @@ describe('Module: LiquidObjectHoverProvider', async () => {
183
115
 
184
116
  it('should support tablerowloop inside tablerow tags', async () => {
185
117
  const context = `
186
- {% tablerow p in all_products %}
118
+ {% tablerow p in context.posts %}
187
119
  {{ tablerowloop█ }}
188
120
  {% endtablerow %}
189
121
  `;
@@ -220,12 +152,8 @@ describe('Module: LiquidObjectHoverProvider', async () => {
220
152
 
221
153
  it('should support contextual objects by relative path', async () => {
222
154
  const contexts: [string, string][] = [
223
- ['section', 'sections/my-section.liquid'],
224
- ['block', 'blocks/my-block.liquid'],
225
- ['predictive_search', 'sections/predictive-search.liquid'],
226
- ['recommendations', 'sections/recommendations.liquid'],
227
- ['app', 'blocks/recommendations.liquid'],
228
155
  ['app', 'app/views/partials/recommendations.liquid'],
156
+ ['app', 'app/lib/helpers/my-helper.liquid'],
229
157
  ];
230
158
  for (const [object, relativePath] of contexts) {
231
159
  const source = `{{ ${object}█ }}`;
@@ -237,38 +165,27 @@ describe('Module: LiquidObjectHoverProvider', async () => {
237
165
  }
238
166
  });
239
167
 
240
- it('should support metafields', async () => {
241
- await expect(provider).to.hover(
242
- '{{ product.metafields.custom█ }}',
243
- '### custom: `product_metafield_custom`',
244
- );
245
- await expect(provider).to.hover(
246
- '{{ product.metafields.custom.color█ }}',
247
- '### color: `metafield_color`\nthe color of the product',
248
- );
249
- });
250
-
251
168
  it('should return null when hovering over an undefined variable', async () => {
252
169
  await expect(provider).to.hover(`{{ unknown█ }}`, null);
253
170
  });
254
171
 
255
172
  it('should return something if the thing is knowingly untyped', async () => {
256
173
  await expect(provider).to.hover(
257
- `{% assign src = product.featured_image.src %}{{ src█ }}`,
174
+ `{% assign src = context.posts[0].thumbnail.src %}{{ src█ }}`,
258
175
  `### src: \`untyped\``,
259
176
  );
260
177
  });
261
178
 
262
179
  it('should still return null when hovering over an unknown variable out of scope', async () => {
263
180
  await expect(provider).to.hover(
264
- `{% for p in all_products %}
181
+ `{% for p in context.posts %}
265
182
  {{ forloop█ }}
266
183
  {% endfor %}
267
184
  {{ forloop }}`,
268
185
  expect.stringMatching(/##* forloop: `forloop`/),
269
186
  );
270
187
  await expect(provider).to.hover(
271
- `{% for p in all_products %}
188
+ `{% for p in context.posts %}
272
189
  {{ forloop }}
273
190
  {% endfor %}
274
191
  {{ forloop█ }}`,
@@ -1,7 +1,6 @@
1
1
  import { describe, beforeEach, it, expect } from 'vitest';
2
2
  import { DocumentManager } from '../../documents';
3
3
  import { HoverProvider } from '../HoverProvider';
4
- import { MetafieldDefinitionMap } from '@platformos/platformos-check-common';
5
4
  import { TranslationProvider } from '@platformos/platformos-common';
6
5
  import { MockFileSystem } from '@platformos/platformos-check-common/src/test';
7
6
 
@@ -20,10 +19,8 @@ describe('Module: LiquidTagHoverProvider', async () => {
20
19
  { name: 'if', description: 'if statement description' },
21
20
  { name: 'echo', description: 'echo description' },
22
21
  ],
23
- systemTranslations: async () => ({}),
24
22
  },
25
23
  new TranslationProvider(new MockFileSystem({})),
26
- async (_rootUri: string) => ({}) as MetafieldDefinitionMap,
27
24
  );
28
25
  });
29
26
 
@@ -1,11 +1,11 @@
1
1
  import { NodeTypes } from '@platformos/liquid-html-parser';
2
- import { LiquidHtmlNode, ThemeDocset } from '@platformos/platformos-check-common';
2
+ import { LiquidHtmlNode, PlatformOSDocset } from '@platformos/platformos-check-common';
3
3
  import { Hover } from 'vscode-languageserver';
4
4
  import { render } from '../../docset';
5
5
  import { BaseHoverProvider } from '../BaseHoverProvider';
6
6
 
7
7
  export class LiquidTagHoverProvider implements BaseHoverProvider {
8
- constructor(public themeDocset: ThemeDocset) {}
8
+ constructor(public platformosDocset: PlatformOSDocset) {}
9
9
 
10
10
  async hover(currentNode: LiquidHtmlNode): Promise<Hover | null> {
11
11
  if (
@@ -17,7 +17,7 @@ export class LiquidTagHoverProvider implements BaseHoverProvider {
17
17
  }
18
18
 
19
19
  const name = currentNode.name;
20
- const entries = await this.themeDocset.tags();
20
+ const entries = await this.platformosDocset.tags();
21
21
  const entry = entries.find((entry) => entry.name === name);
22
22
  if (!entry) {
23
23
  return null;
@@ -1,7 +1,7 @@
1
1
  import { describe, it, expect } from 'vitest';
2
2
  import { DocumentManager } from '../../documents';
3
3
  import { HoverProvider } from '../HoverProvider';
4
- import { MetafieldDefinitionMap } from '@platformos/platformos-check-common';
4
+
5
5
  import { GetDocDefinitionForURI, DocDefinition } from '@platformos/platformos-check-common';
6
6
  import { TranslationProvider } from '@platformos/platformos-common';
7
7
  import { MockFileSystem } from '@platformos/platformos-check-common/src/test';
@@ -74,12 +74,9 @@ const createProvider = (getSnippetDefinition: GetDocDefinitionForURI) => {
74
74
  objects: async () => [],
75
75
  liquidDrops: async () => [],
76
76
  tags: async () => [],
77
- systemTranslations: async () => ({}),
78
77
  },
79
78
  new TranslationProvider(new MockFileSystem({})),
80
- async (_rootUri: string) => ({}) as MetafieldDefinitionMap,
81
79
  async () => ({}),
82
- async () => [],
83
80
  getSnippetDefinition,
84
81
  );
85
82
  };
@@ -22,11 +22,7 @@ export class RenderPartialHoverProvider implements BaseHoverProvider {
22
22
  }
23
23
 
24
24
  const partialName = currentNode.value;
25
- const docDefinition = await this.getDocDefinitionForURI(
26
- params.textDocument.uri,
27
- 'app/views/partials',
28
- partialName,
29
- );
25
+ const docDefinition = await this.getDocDefinitionForURI(params.textDocument.uri, partialName);
30
26
 
31
27
  return {
32
28
  contents: {
@@ -1,7 +1,7 @@
1
1
  import { describe, beforeEach, it, expect } from 'vitest';
2
2
  import { DocumentManager } from '../../documents';
3
3
  import { HoverProvider } from '../HoverProvider';
4
- import { MetafieldDefinitionMap } from '@platformos/platformos-check-common';
4
+
5
5
  import { GetDocDefinitionForURI, DocDefinition } from '@platformos/platformos-check-common';
6
6
  import { TranslationProvider } from '@platformos/platformos-common';
7
7
  import { MockFileSystem } from '@platformos/platformos-check-common/src/test';
@@ -59,12 +59,9 @@ const createProvider = (getSnippetDefinition: GetDocDefinitionForURI) => {
59
59
  objects: async () => [],
60
60
  liquidDrops: async () => [],
61
61
  tags: async () => [],
62
- systemTranslations: async () => ({}),
63
62
  },
64
63
  new TranslationProvider(new MockFileSystem({})),
65
- async (_rootUri: string) => ({}) as MetafieldDefinitionMap,
66
64
  async () => ({}),
67
- async () => [],
68
65
  getSnippetDefinition,
69
66
  );
70
67
  };
@@ -24,7 +24,6 @@ export class RenderPartialParameterHoverProvider implements BaseHoverProvider {
24
24
 
25
25
  const docDefinition = await this.getDocDefinitionForURI(
26
26
  params.textDocument.uri,
27
- 'app/views/partials',
28
27
  parentNode.snippet.value,
29
28
  );
30
29
 
@@ -1,7 +1,7 @@
1
1
  import { describe, beforeEach, it, expect } from 'vitest';
2
2
  import { DocumentManager } from '../../documents';
3
3
  import { HoverProvider } from '../HoverProvider';
4
- import { MetafieldDefinitionMap } from '@platformos/platformos-check-common';
4
+
5
5
  import { TranslationProvider } from '@platformos/platformos-common';
6
6
  import { MockFileSystem } from '@platformos/platformos-check-common/src/test';
7
7
 
@@ -17,7 +17,6 @@ describe('Module: TranslationHoverProvider', async () => {
17
17
  objects: async () => [],
18
18
  liquidDrops: async () => [],
19
19
  tags: async () => [],
20
- systemTranslations: async () => ({}),
21
20
  },
22
21
  new TranslationProvider(
23
22
  new MockFileSystem({
@@ -32,8 +31,6 @@ describe('Module: TranslationHoverProvider', async () => {
32
31
  `,
33
32
  }),
34
33
  ),
35
- async (_rootUri: string) => ({}) as MetafieldDefinitionMap,
36
- undefined,
37
34
  undefined,
38
35
  undefined,
39
36
  async () => '.',
@@ -6,13 +6,13 @@ import { renderTranslation } from '../../translations';
6
6
  import { BaseHoverProvider } from '../BaseHoverProvider';
7
7
  import { TranslationProvider } from '@platformos/platformos-common';
8
8
  import { URI } from 'vscode-uri';
9
- import { FindThemeRootURI } from '../../../src/internal-types';
9
+ import { FindAppRootURI } from '../../../src/internal-types';
10
10
 
11
11
  export class TranslationHoverProvider implements BaseHoverProvider {
12
12
  constructor(
13
13
  public documentManager: DocumentManager,
14
14
  private translationProvider: TranslationProvider,
15
- private findThemeRootURI: FindThemeRootURI,
15
+ private findAppRootURI: FindAppRootURI,
16
16
  ) {}
17
17
 
18
18
  async hover(
@@ -33,7 +33,7 @@ export class TranslationHoverProvider implements BaseHoverProvider {
33
33
  return null;
34
34
  }
35
35
 
36
- const root = await this.findThemeRootURI(params.textDocument.uri);
36
+ const root = await this.findAppRootURI(params.textDocument.uri);
37
37
  if (!root) {
38
38
  return null;
39
39
  }
package/src/index.ts CHANGED
@@ -11,13 +11,10 @@ export * from './types';
11
11
  export { visit } from '@platformos/platformos-check-common';
12
12
  export {
13
13
  Reference,
14
- ThemeGraph,
14
+ AppGraph,
15
15
  SerializableEdge,
16
16
  SerializableNode,
17
- ThemeModule,
18
- CssModule,
19
- JsonModule,
20
- JavaScriptModule,
17
+ AppModule,
21
18
  LiquidModule,
22
19
  } from '@platformos/platformos-graph';
23
20
  export { debounce, memo, parseJSON, ArgumentTypes } from './utils';
@@ -1 +1 @@
1
- export type FindThemeRootURI = (uri: string) => Promise<string | null>;
1
+ export type FindAppRootURI = (uri: string) => Promise<string | null>;
@@ -1,10 +1,3 @@
1
- import {
2
- AppBlockSchema,
3
- parseJSON,
4
- SectionSchema,
5
- SourceCodeType,
6
- ThemeBlockSchema,
7
- } from '@platformos/platformos-check-common';
8
1
  import {
9
2
  CompletionsCollector,
10
3
  JSONPath,
@@ -12,30 +5,14 @@ import {
12
5
  MarkedString,
13
6
  } from 'vscode-json-languageservice';
14
7
  import { AugmentedSourceCode, DocumentManager } from '../documents';
15
- import { GetTranslationsForURI } from '../translations';
16
8
  import { JSONCompletionProvider } from './completions/JSONCompletionProvider';
17
- import { BlockTypeCompletionProvider } from './completions/providers/BlockTypeCompletionProvider';
18
- import { ReferencedBlockTypeCompletionProvider } from './completions/providers/ReferencedBlockTypeCompletionProvider';
19
- import { SchemaTranslationsCompletionProvider } from './completions/providers/SchemaTranslationCompletionProvider';
20
9
  import { JSONHoverProvider } from './hover/JSONHoverProvider';
21
- import { SchemaTranslationHoverProvider } from './hover/providers/SchemaTranslationHoverProvider';
22
10
  import { TranslationPathHoverProvider } from './hover/providers/TranslationPathHoverProvider';
23
11
  import { RequestContext } from './RequestContext';
24
- import { findSchemaNode } from './utils';
25
- import { SettingsPropertyCompletionProvider } from './completions/providers/SettingsPropertyCompletionProvider';
26
- import { SettingsHoverProvider } from './hover/providers/SettingsHoverProvider';
27
- import { BlockSettingsPropertyCompletionProvider } from './completions/providers/BlockSettingsPropertyCompletionProvider';
28
- import { BlockSettingsHoverProvider } from './hover/providers/BlockSettingsHoverProvider';
29
12
 
30
13
  /** The getInfoContribution API will only fallback if we return undefined synchronously */
31
14
  const SKIP_CONTRIBUTION = undefined as any;
32
15
 
33
- export type GetThemeBlockSchema = (
34
- uri: string,
35
- name: string,
36
- ) => Promise<SectionSchema | ThemeBlockSchema | AppBlockSchema | undefined>;
37
- export type GetThemeBlockNames = (uri: string, includePrivate: boolean) => Promise<string[]>;
38
-
39
16
  /**
40
17
  * I'm not a fan of how json-languageservice does its feature contributions. It's too different
41
18
  * from everything else we do in here.
@@ -47,28 +24,9 @@ export class JSONContributions implements JSONWorkerContribution {
47
24
  private hoverProviders: JSONHoverProvider[];
48
25
  private completionProviders: JSONCompletionProvider[];
49
26
 
50
- constructor(
51
- private documentManager: DocumentManager,
52
- getDefaultSchemaTranslations: GetTranslationsForURI,
53
- getThemeBlockNames: GetThemeBlockNames,
54
- getThemeBlockSchema: GetThemeBlockSchema,
55
- ) {
56
- this.hoverProviders = [
57
- new TranslationPathHoverProvider(),
58
- new SchemaTranslationHoverProvider(getDefaultSchemaTranslations),
59
- new SettingsHoverProvider(getDefaultSchemaTranslations),
60
- new BlockSettingsHoverProvider(getDefaultSchemaTranslations, getThemeBlockSchema),
61
- ];
62
- this.completionProviders = [
63
- new SchemaTranslationsCompletionProvider(getDefaultSchemaTranslations),
64
- new BlockTypeCompletionProvider(getThemeBlockNames),
65
- new ReferencedBlockTypeCompletionProvider(getThemeBlockNames, getThemeBlockSchema),
66
- new BlockSettingsPropertyCompletionProvider(
67
- getDefaultSchemaTranslations,
68
- getThemeBlockSchema,
69
- ),
70
- new SettingsPropertyCompletionProvider(getDefaultSchemaTranslations),
71
- ];
27
+ constructor(private documentManager: DocumentManager) {
28
+ this.hoverProviders = [new TranslationPathHoverProvider()];
29
+ this.completionProviders = [];
72
30
  }
73
31
 
74
32
  async getInfoContribution(uri: string, location: JSONPath): Promise<MarkedString[]> {
@@ -130,21 +88,6 @@ export class JSONContributions implements JSONWorkerContribution {
130
88
  async collectDefaultCompletions(_uri: string, _result: CompletionsCollector): Promise<void> {}
131
89
 
132
90
  private async getContext(doc: AugmentedSourceCode): Promise<RequestContext> {
133
- const context: RequestContext = {
134
- doc,
135
- };
136
-
137
- if (doc.type === SourceCodeType.LiquidHtml && !(doc.ast instanceof Error)) {
138
- const schema = await findSchemaNode(doc.ast);
139
- if (!schema) return SKIP_CONTRIBUTION;
140
- const jsonString = schema?.source.slice(
141
- schema.blockStartPosition.end,
142
- schema.blockEndPosition.start,
143
- );
144
- context.schema = schema;
145
- context.parsed = parseJSON(jsonString);
146
- }
147
-
148
- return context;
91
+ return { doc };
149
92
  }
150
93
  }