@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
@@ -1,17 +1,11 @@
1
1
  import {
2
- AugmentedThemeDocset,
2
+ AugmentedPlatformOSDocset,
3
3
  DocDefinition,
4
4
  findRoot as findConfigFileRoot,
5
5
  isError,
6
6
  makeFileExists,
7
7
  makeGetDefaultLocaleFileUri,
8
- makeGetDefaultSchemaLocaleFileUri,
9
- makeGetDefaultSchemaTranslations,
10
- makeGetDefaultTranslations,
11
- makeGetMetafieldDefinitions,
12
8
  memoize,
13
- MetafieldDefinitionMap,
14
- parseJSON,
15
9
  path,
16
10
  SourceCodeType,
17
11
  UriString,
@@ -24,14 +18,12 @@ import {
24
18
  InitializeResult,
25
19
  ShowDocumentRequest,
26
20
  TextDocumentSyncKind,
27
- WorkspaceFolder,
28
21
  } from 'vscode-languageserver';
29
22
  import { ClientCapabilities } from '../ClientCapabilities';
30
23
  import { CodeActionKinds, CodeActionsProvider } from '../codeActions';
31
24
  import { Commands, ExecuteCommandProvider } from '../commands';
32
25
  import { CompletionsProvider } from '../completions';
33
26
  import { GetPartialNamesForURI } from '../completions/providers/PartialCompletionProvider';
34
- import { CSSLanguageService } from '../css/CSSLanguageService';
35
27
  import { DefinitionProvider } from '../definitions/DefinitionProvider';
36
28
  import { DiagnosticsManager, makeRunChecks } from '../diagnostics';
37
29
  import { DocumentHighlightsProvider } from '../documentHighlights/DocumentHighlightsProvider';
@@ -39,6 +31,7 @@ import { DocumentLinksProvider } from '../documentLinks';
39
31
  import { AugmentedJsonSourceCode, DocumentManager } from '../documents';
40
32
  import { OnTypeFormattingProvider } from '../formatting';
41
33
  import { HoverProvider } from '../hover';
34
+ import { CSSLanguageService } from '../css/CSSLanguageService';
42
35
  import { JSONLanguageService } from '../json/JSONLanguageService';
43
36
  import { LinkedEditingRangesProvider } from '../linkedEditingRanges/LinkedEditingRangesProvider';
44
37
  import { RenameProvider } from '../rename/RenameProvider';
@@ -46,17 +39,16 @@ import { RenameHandler } from '../renamed/RenameHandler';
46
39
  import { GetTranslationsForURI } from '../translations';
47
40
  import {
48
41
  Dependencies,
49
- ThemeGraphDeadCodeRequest,
50
- ThemeGraphDependenciesRequest,
51
- ThemeGraphReferenceRequest,
52
- ThemeGraphRootRequest,
42
+ AppGraphDependenciesRequest,
43
+ AppGraphReferenceRequest,
44
+ AppGraphRootRequest,
53
45
  } from '../types';
54
46
  import { debounce } from '../utils';
55
47
  import { VERSION } from '../version';
56
48
  import { CachedFileSystem } from './CachedFileSystem';
57
49
  import { Configuration, INCLUDE_FILES_FROM_DISK } from './Configuration';
58
50
  import { safe } from './safe';
59
- import { ThemeGraphManager } from './ThemeGraphManager';
51
+ import { AppGraphManager } from './AppGraphManager';
60
52
  import { DocumentsLocator } from '@platformos/platformos-common';
61
53
  import { relative } from '@platformos/platformos-check-common/src/path';
62
54
  import { URI } from 'vscode-uri';
@@ -84,7 +76,7 @@ const hasUnsupportedDocument = (params: any) => {
84
76
  * This code runs in node and the browser, it can't talk to the file system
85
77
  * or make requests. Stuff like that should be injected.
86
78
  *
87
- * In browser, theme-check-js wants these things:
79
+ * In browser, platformos-check-js wants these things:
88
80
  * - fileExists(path)
89
81
  * - defaultTranslations
90
82
  *
@@ -97,8 +89,7 @@ export function startServer(
97
89
  loadConfig: injectedLoadConfig,
98
90
  log = defaultLogger,
99
91
  jsonValidationSet,
100
- themeDocset: remoteThemeDocset,
101
- fetchMetafieldDefinitionsForURI,
92
+ platformosDocset: remotePlatformOSDocset,
102
93
  }: Dependencies,
103
94
  ) {
104
95
  const fs = new CachedFileSystem(injectedFs);
@@ -111,21 +102,15 @@ export function startServer(
111
102
  fs,
112
103
  connection,
113
104
  clientCapabilities,
114
- getModeForURI,
115
105
  isValidSchema,
116
106
  );
117
- const themeGraphManager = new ThemeGraphManager(
118
- connection,
119
- documentManager,
120
- fs,
121
- findThemeRootURI,
122
- );
107
+ const appGraphManager = new AppGraphManager(connection, documentManager, fs, findAppRootURI);
123
108
  const diagnosticsManager = new DiagnosticsManager(connection);
124
109
  const documentsLocator = new DocumentsLocator(fs);
125
110
  const translationProvider = new TranslationProvider(fs);
126
111
  const documentLinksProvider = new DocumentLinksProvider(
127
112
  documentManager,
128
- findThemeRootURI,
113
+ findAppRootURI,
129
114
  documentsLocator,
130
115
  translationProvider,
131
116
  );
@@ -150,87 +135,50 @@ export function startServer(
150
135
  connection,
151
136
  clientCapabilities,
152
137
  documentManager,
153
- findThemeRootURI,
138
+ findAppRootURI,
154
139
  );
155
140
  const renameHandler = new RenameHandler(
156
141
  connection,
157
142
  clientCapabilities,
158
143
  documentManager,
159
- findThemeRootURI,
144
+ findAppRootURI,
160
145
  );
161
146
 
162
- async function findThemeRootURI(uri: string): Promise<string | null> {
147
+ async function findAppRootURI(uri: string): Promise<string | null> {
163
148
  const rootUri = await findConfigFileRoot(uri, fileExists);
164
149
  if (!rootUri) return null;
165
150
  const config = await loadConfig(rootUri, fs);
166
151
  return config.rootUri;
167
152
  }
168
153
 
169
- const getMetafieldDefinitionsForRootUri = memoize(
170
- makeGetMetafieldDefinitions(fs),
171
- (rootUri) => rootUri,
172
- );
173
-
174
- const getMetafieldDefinitions: NonNullable<Dependencies['getMetafieldDefinitions']> = async (
175
- uri: string,
176
- ) => {
177
- const rootUri = await findThemeRootURI(uri);
178
- if (!rootUri) {
179
- return {} as MetafieldDefinitionMap;
180
- }
181
-
182
- return getMetafieldDefinitionsForRootUri(rootUri);
183
- };
184
-
185
154
  // These are augmented here so that the caching is maintained over different runs.
186
- const themeDocset = new AugmentedThemeDocset(remoteThemeDocset);
187
- const cssLanguageService = new CSSLanguageService(documentManager);
155
+ const platformosDocset = new AugmentedPlatformOSDocset(remotePlatformOSDocset);
188
156
  const runChecks = debounce(
189
157
  makeRunChecks(documentManager, diagnosticsManager, {
190
158
  fs,
191
159
  loadConfig,
192
- themeDocset,
160
+ platformosDocset,
193
161
  jsonValidationSet,
194
- getMetafieldDefinitions,
195
- cssLanguageService,
196
- themeGraphManager,
162
+ appGraphManager,
197
163
  includeFilesFromDisk: () => configuration[INCLUDE_FILES_FROM_DISK],
198
164
  }),
199
165
  100,
200
166
  );
201
167
 
202
- const getTranslationsForURI: GetTranslationsForURI = async (uri) => {
203
- const rootURI = await findThemeRootURI(uri);
204
- if (!rootURI) return {};
205
-
206
- const theme = documentManager.theme(rootURI, configuration[INCLUDE_FILES_FROM_DISK]);
207
- const getDefaultTranslations = makeGetDefaultTranslations(fs, theme, rootURI);
208
- const [defaultTranslations, shopifyTranslations] = await Promise.all([
209
- getDefaultTranslations(),
210
- themeDocset.systemTranslations(),
211
- ]);
212
-
213
- return { ...shopifyTranslations, ...defaultTranslations };
214
- };
215
-
216
- const getSchemaTranslationsForURI: GetTranslationsForURI = async (uri) => {
217
- const rootURI = await findThemeRootURI(uri);
218
- if (!rootURI) return {};
219
-
220
- const theme = documentManager.theme(rootURI, configuration[INCLUDE_FILES_FROM_DISK]);
221
- const getDefaultSchemaTranslations = makeGetDefaultSchemaTranslations(fs, theme, rootURI);
222
- return getDefaultSchemaTranslations();
223
- };
168
+ // In platformOS, there are no built-in system translations. User-defined translations
169
+ // are resolved via TranslationProvider at the point of lookup.
170
+ const getTranslationsForURI: GetTranslationsForURI = async (_uri) => ({});
224
171
 
225
172
  const getDocDefinitionForURI = async (
226
173
  uri: UriString,
227
- category: 'app/views/partials' | 'blocks',
228
174
  name: string,
229
175
  ): Promise<DocDefinition | undefined> => {
230
- const rootUri = await findThemeRootURI(uri);
176
+ const rootUri = await findAppRootURI(uri);
231
177
  if (!rootUri) return undefined;
232
178
 
233
- const fileUri = path.join(rootUri, category, `${name}.liquid`);
179
+ const fileUri = await documentsLocator.locate(URI.parse(rootUri), 'render', name);
180
+ if (!fileUri) return undefined;
181
+
234
182
  const file = documentManager.get(fileUri);
235
183
 
236
184
  if (!file || file.type !== SourceCodeType.LiquidHtml || isError(file.ast)) {
@@ -242,7 +190,7 @@ export function startServer(
242
190
 
243
191
  const getPartialNamesForURI: GetPartialNamesForURI = safe(
244
192
  async (uri: string, partial: string, type: string | undefined) => {
245
- const rootUri = await findThemeRootURI(uri);
193
+ const rootUri = await findAppRootURI(uri);
246
194
  if (!rootUri) return [];
247
195
 
248
196
  return await documentsLocator.list(URI.parse(rootUri), type, partial);
@@ -250,52 +198,6 @@ export function startServer(
250
198
  [],
251
199
  );
252
200
 
253
- const getThemeSettingsSchemaForURI = safe(async (uri: string) => {
254
- const rootUri = await findThemeRootURI(uri);
255
- if (!rootUri) return [];
256
-
257
- const settingsSchemaUri = path.join(rootUri, 'config', 'settings_schema.json');
258
- const contents = await fs.readFile(settingsSchemaUri);
259
- const json = parseJSON(contents);
260
- if (isError(json) || !Array.isArray(json)) {
261
- throw new Error('Settings JSON file not in correct format');
262
- }
263
- return json;
264
- }, []);
265
-
266
- async function getModeForURI(uri: string) {
267
- const rootUri = await findConfigFileRoot(uri, fileExists);
268
- if (!rootUri) return 'theme';
269
- const config = await loadConfig(rootUri, fs);
270
- return config.context;
271
- }
272
-
273
- const getThemeBlockNames = safe(async (uri: string, includePrivate: boolean) => {
274
- const rootUri = await findThemeRootURI(uri);
275
- if (!rootUri) return [];
276
-
277
- const blocks = await fs.readDirectory(path.join(rootUri, 'blocks'));
278
- const blockNames = blocks.map(([uri]) => path.basename(uri, '.liquid'));
279
-
280
- if (includePrivate) {
281
- return blockNames;
282
- }
283
-
284
- return blockNames.filter((blockName) => !blockName.startsWith('_'));
285
- }, []);
286
-
287
- async function getThemeBlockSchema(uri: string, name: string) {
288
- const rootUri = await findThemeRootURI(uri);
289
- if (!rootUri) return;
290
-
291
- const blockUri = path.join(rootUri, 'blocks', `${name}.liquid`);
292
- const doc = documentManager.get(blockUri);
293
- if (!doc || doc.type !== SourceCodeType.LiquidHtml) {
294
- return;
295
- }
296
- return doc.getSchema();
297
- }
298
-
299
201
  // Defined as a function to solve a circular dependency (doc manager & json
300
202
  // lang service both need each other)
301
203
  async function isValidSchema(uri: string, jsonString: string) {
@@ -304,7 +206,7 @@ export function startServer(
304
206
 
305
207
  const getDefaultLocaleFileUri = makeGetDefaultLocaleFileUri(fs);
306
208
  async function getDefaultLocaleSourceCode(uri: string) {
307
- const rootUri = await findThemeRootURI(uri);
209
+ const rootUri = await findAppRootURI(uri);
308
210
  if (!rootUri) return null;
309
211
 
310
212
  const defaultLocaleFileUri = await getDefaultLocaleFileUri(rootUri);
@@ -313,43 +215,19 @@ export function startServer(
313
215
  return (documentManager.get(defaultLocaleFileUri) as AugmentedJsonSourceCode) ?? null;
314
216
  }
315
217
 
316
- const getDefaultSchemaLocaleFileUri = makeGetDefaultSchemaLocaleFileUri(fs);
317
- async function getDefaultSchemaLocaleSourceCode(uri: string) {
318
- const rootUri = await findThemeRootURI(uri);
319
- if (!rootUri) return null;
320
-
321
- const defaultLocaleFileUri = await getDefaultSchemaLocaleFileUri(rootUri);
322
- if (!defaultLocaleFileUri) return null;
323
-
324
- return (documentManager.get(defaultLocaleFileUri) as AugmentedJsonSourceCode) ?? null;
325
- }
326
- const definitionsProvider = new DefinitionProvider(
327
- documentManager,
328
- getDefaultLocaleSourceCode,
329
- getDefaultSchemaLocaleSourceCode,
330
- );
331
- const jsonLanguageService = new JSONLanguageService(
332
- documentManager,
333
- jsonValidationSet,
334
- getSchemaTranslationsForURI,
335
- getModeForURI,
336
- getThemeBlockNames,
337
- getThemeBlockSchema,
338
- findThemeRootURI,
339
- );
218
+ const definitionsProvider = new DefinitionProvider(documentManager, getDefaultLocaleSourceCode);
219
+ const jsonLanguageService = new JSONLanguageService(documentManager, jsonValidationSet);
220
+ const cssLanguageService = new CSSLanguageService(documentManager);
340
221
  const completionsProvider = new CompletionsProvider({
341
222
  documentManager,
342
- themeDocset,
223
+ platformosDocset,
343
224
  getTranslationsForURI,
344
225
  getPartialNamesForURI,
345
- getThemeSettingsSchemaForURI,
346
226
  log,
347
- getThemeBlockNames,
348
- getMetafieldDefinitions,
349
227
  getDocDefinitionForURI,
350
228
  fs,
351
229
  documentsLocator,
352
- findThemeRootURI,
230
+ findAppRootURI,
353
231
  notifyUnableToInferProperties: (variableName: string) => {
354
232
  connection.window.showInformationMessage(
355
233
  `Unable to infer properties for '${variableName}'. Property completion is only supported for variables from parse_json, to_hash, or graphql.`,
@@ -358,13 +236,11 @@ export function startServer(
358
236
  });
359
237
  const hoverProvider = new HoverProvider(
360
238
  documentManager,
361
- themeDocset,
239
+ platformosDocset,
362
240
  translationProvider,
363
- getMetafieldDefinitions,
364
241
  getTranslationsForURI,
365
- getThemeSettingsSchemaForURI,
366
242
  getDocDefinitionForURI,
367
- findThemeRootURI,
243
+ findAppRootURI,
368
244
  );
369
245
 
370
246
  const executeCommandProvider = new ExecuteCommandProvider(
@@ -375,22 +251,10 @@ export function startServer(
375
251
  connection,
376
252
  );
377
253
 
378
- const fetchMetafieldDefinitionsForWorkspaceFolders = async (folders: WorkspaceFolder[]) => {
379
- if (!fetchMetafieldDefinitionsForURI) return;
380
-
381
- for (let folder of folders) {
382
- const mode = await getModeForURI(folder.uri);
383
-
384
- if (mode === 'theme') {
385
- fetchMetafieldDefinitionsForURI(folder.uri);
386
- }
387
- }
388
- };
389
-
390
254
  connection.onInitialize((params) => {
391
255
  clientCapabilities.setup(params.capabilities, params.initializationOptions);
392
- cssLanguageService.setup(params.capabilities);
393
256
  jsonLanguageService.setup(params.capabilities);
257
+ cssLanguageService.setup(params.capabilities);
394
258
  configuration.setup();
395
259
 
396
260
  const fileOperationRegistrationOptions: FileOperationRegistrationOptions = {
@@ -452,7 +316,7 @@ export function startServer(
452
316
  },
453
317
  },
454
318
  serverInfo: {
455
- name: 'theme-language-server',
319
+ name: 'platformos-language-server',
456
320
  version: VERSION,
457
321
  },
458
322
  };
@@ -475,20 +339,11 @@ export function startServer(
475
339
  {
476
340
  globPattern: '**/*.graphql',
477
341
  },
342
+ {
343
+ globPattern: '**/*.css',
344
+ },
478
345
  ],
479
346
  });
480
-
481
- if (clientCapabilities.hasWorkspaceFoldersSupport) {
482
- connection.workspace.getWorkspaceFolders().then(async (folders) => {
483
- if (!folders) return;
484
-
485
- fetchMetafieldDefinitionsForWorkspaceFolders(folders);
486
- });
487
-
488
- connection.workspace.onDidChangeWorkspaceFolders(async (params) => {
489
- fetchMetafieldDefinitionsForWorkspaceFolders(params.added);
490
- });
491
- }
492
347
  });
493
348
 
494
349
  connection.onDidChangeConfiguration((_params) => {
@@ -498,25 +353,28 @@ export function startServer(
498
353
  connection.onDidOpenTextDocument(async (params) => {
499
354
  if (hasUnsupportedDocument(params)) return;
500
355
  const { uri, text, version } = params.textDocument;
356
+ if (uri.endsWith('.css')) {
357
+ cssLanguageService.open(uri, text, version);
358
+ return;
359
+ }
501
360
  documentManager.open(uri, text, version);
502
361
  if (await configuration.shouldCheckOnOpen()) {
503
362
  runChecks([uri]);
504
363
  }
505
364
 
506
- // The objective at the time of writing this is to make {Asset,Snippet}Rename
365
+ // The objective at the time of writing this is to make {Asset,Partial}Rename
507
366
  // fast when you eventually need it.
508
367
  //
509
368
  // I'm choosing the textDocument/didOpen notification as a hook because
510
369
  // I'm not sure we have a better solution than this. Yes we have the
511
370
  // initialize request with the workspace folders, but you might have opened
512
- // an app folder. The root of a theme app extension would probably be
513
- // at ${workspaceRoot}/extensions/${appExtensionName}. It'd be hard to
514
- // figure out from the initialize request params.
371
+ // an app folder. It'd be hard to figure out the root from the
372
+ // initialize request params alone.
515
373
  //
516
374
  // If we open a file that we know is liquid, then we can kind of guarantee
517
- // we'll find a theme root and we'll preload that.
375
+ // we'll find an app root and we'll preload that.
518
376
  if (await configuration.shouldPreloadOnBoot()) {
519
- const rootUri = await findThemeRootURI(uri);
377
+ const rootUri = await findAppRootURI(uri);
520
378
  if (rootUri) {
521
379
  documentManager.preload(rootUri);
522
380
  }
@@ -526,6 +384,10 @@ export function startServer(
526
384
  connection.onDidChangeTextDocument(async (params) => {
527
385
  if (hasUnsupportedDocument(params)) return;
528
386
  const { uri, version } = params.textDocument;
387
+ if (uri.endsWith('.css')) {
388
+ cssLanguageService.change(uri, params.contentChanges[0].text, version);
389
+ return;
390
+ }
529
391
  documentManager.change(uri, params.contentChanges[0].text, version);
530
392
  if (await configuration.shouldCheckOnChange()) {
531
393
  runChecks([uri]);
@@ -546,6 +408,10 @@ export function startServer(
546
408
  connection.onDidCloseTextDocument((params) => {
547
409
  if (hasUnsupportedDocument(params)) return;
548
410
  const { uri } = params.textDocument;
411
+ if (uri.endsWith('.css')) {
412
+ cssLanguageService.close(uri);
413
+ return;
414
+ }
549
415
  documentManager.close(uri);
550
416
  diagnosticsManager.clear(uri);
551
417
  });
@@ -637,13 +503,12 @@ export function startServer(
637
503
  fs.stat.invalidate(oldUri);
638
504
  fs.stat.invalidate(newUri);
639
505
 
640
- themeGraphManager.rename(oldUri, newUri);
506
+ appGraphManager.rename(oldUri, newUri);
641
507
  }
642
508
 
643
- // We should complete refactors before running theme check
644
509
  await renameHandler.onDidRenameFiles(params);
645
510
 
646
- // MissingAssets/MissingSnippet should be rerun when a file is deleted
511
+ // MissingAssets/MissingPartial should be rerun when a file is deleted
647
512
  // since the file rename might cause an error.
648
513
  runChecks.force(triggerUris);
649
514
  });
@@ -659,7 +524,6 @@ export function startServer(
659
524
  *
660
525
  * Not redundant for operations that happen outside of the editor
661
526
  * - git pull, checkout, reset, stash pop, etc.
662
- * - shopify theme metafields pull
663
527
  * - etc.
664
528
  *
665
529
  * It always runs and onDid* will never fire without a corresponding onDidChangeWatchedFiles.
@@ -672,8 +536,8 @@ export function startServer(
672
536
  const triggerUris = params.changes.map((change) => change.uri);
673
537
  const updates: Promise<any>[] = [];
674
538
  for (const change of params.changes) {
675
- // Theme Check config changes should clear the config cache
676
- if (change.uri.endsWith('.theme-check.yml')) {
539
+ // App Check config changes should clear the config cache
540
+ if (change.uri.endsWith('.platformos-check.yml')) {
677
541
  loadConfig.clearCache();
678
542
  continue;
679
543
  }
@@ -690,7 +554,7 @@ export function startServer(
690
554
  fs.readDirectory.invalidate(path.dirname(change.uri));
691
555
  fs.readFile.invalidate(change.uri);
692
556
  fs.stat.invalidate(change.uri);
693
- themeGraphManager.create(change.uri);
557
+ appGraphManager.create(change.uri);
694
558
  // If a file is created under out feet, we update its contents.
695
559
  updates.push(documentManager.changeFromDisk(change.uri));
696
560
  break;
@@ -699,7 +563,7 @@ export function startServer(
699
563
  // A changed file invalidates readFile and stat (but not readDirectory)
700
564
  fs.readFile.invalidate(change.uri);
701
565
  fs.stat.invalidate(change.uri);
702
- themeGraphManager.change(change.uri);
566
+ appGraphManager.change(change.uri);
703
567
  // If the file is not open, we update its contents in the doc manager
704
568
  // If it is open, then we don't need to update it because the document manager
705
569
  // will have the version from the editor.
@@ -713,60 +577,43 @@ export function startServer(
713
577
  fs.readDirectory.invalidate(path.dirname(change.uri));
714
578
  fs.readFile.invalidate(change.uri);
715
579
  fs.stat.invalidate(change.uri);
716
- themeGraphManager.delete(change.uri);
580
+ appGraphManager.delete(change.uri);
717
581
  // If a file is deleted, it's removed from the document manager
718
582
  documentManager.delete(change.uri);
719
583
  break;
720
584
  }
721
585
 
722
- if (change.uri.endsWith('metafields.json')) {
723
- updates.push(
724
- findThemeRootURI(change.uri).then((rootUri) => {
725
- if (rootUri) {
726
- getMetafieldDefinitionsForRootUri.invalidate(rootUri);
727
- }
728
- }),
729
- );
730
- }
586
+ // metafields.json support removed
731
587
  }
732
588
 
733
589
  await Promise.all(updates);
734
590
 
735
- // MissingAssets/MissingSnippet should be rerun when a file is deleted
591
+ // MissingAssets/MissingPartial should be rerun when a file is deleted
736
592
  // since an error might be introduced (and vice versa).
737
593
  runChecks.force(triggerUris);
738
594
  });
739
595
 
740
- connection.onRequest(ThemeGraphReferenceRequest.type, async (params) => {
596
+ connection.onRequest(AppGraphReferenceRequest.type, async (params) => {
741
597
  if (hasUnsupportedDocument(params)) return [];
742
598
  const { uri, offset, includeIndirect } = params;
743
- return themeGraphManager.getReferences(uri, offset, { includeIndirect }).catch((_) => []);
599
+ return appGraphManager.getReferences(uri, offset, { includeIndirect }).catch((_) => []);
744
600
  });
745
601
 
746
- connection.onRequest(ThemeGraphDependenciesRequest.type, async (params) => {
602
+ connection.onRequest(AppGraphDependenciesRequest.type, async (params) => {
747
603
  if (hasUnsupportedDocument(params)) return [];
748
604
  const { uri, offset, includeIndirect } = params;
749
- return themeGraphManager.getDependencies(uri, offset, { includeIndirect }).catch((_) => []);
605
+ return appGraphManager.getDependencies(uri, offset, { includeIndirect }).catch((_) => []);
750
606
  });
751
607
 
752
- connection.onRequest(ThemeGraphRootRequest.type, async (params) => {
608
+ connection.onRequest(AppGraphRootRequest.type, async (params) => {
753
609
  if (hasUnsupportedDocument(params)) return '';
754
610
  const { uri } = params;
755
- const rootUri = await findThemeRootURI(uri).catch((_) => undefined);
611
+ const rootUri = await findAppRootURI(uri).catch((_) => undefined);
756
612
  if (!rootUri || path.dirname(rootUri) === rootUri) {
757
613
  console.error(uri);
758
614
  }
759
615
  return rootUri;
760
616
  });
761
617
 
762
- connection.onRequest(ThemeGraphDeadCodeRequest.type, async (params) => {
763
- if (hasUnsupportedDocument(params)) return [];
764
- const { uri } = params;
765
- const rootUri = await findThemeRootURI(uri);
766
- if (!rootUri) return [];
767
- const deadFiles = await themeGraphManager.deadCode(rootUri);
768
- return deadFiles;
769
- });
770
-
771
618
  connection.listen();
772
619
  }
@@ -1,7 +1,6 @@
1
1
  import { expect, describe, it, beforeEach } from 'vitest';
2
2
  import { CompletionsProvider } from '../completions';
3
3
  import { DocumentManager } from '../documents';
4
- import { MetafieldDefinitionMap } from '@platformos/platformos-check-common';
5
4
 
6
5
  describe('Module: CompletionItemsAssertion', () => {
7
6
  let provider: CompletionsProvider;
@@ -11,15 +10,13 @@ describe('Module: CompletionItemsAssertion', () => {
11
10
  documentManager = new DocumentManager();
12
11
  provider = new CompletionsProvider({
13
12
  documentManager,
14
- themeDocset: {
13
+ platformosDocset: {
15
14
  graphQL: async () => null,
16
15
  filters: async () => [],
17
16
  objects: async () => [],
18
17
  liquidDrops: async () => [],
19
18
  tags: async () => [{ name: 'render' }],
20
- systemTranslations: async () => ({}),
21
19
  },
22
- getMetafieldDefinitions: async (_rootUri: string) => ({}) as MetafieldDefinitionMap,
23
20
  });
24
21
  });
25
22