@macroforge/svelte-language-server 0.1.3

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 (256) hide show
  1. package/README.md +331 -0
  2. package/bin/server.js +5 -0
  3. package/dist/src/importPackage.d.ts +16 -0
  4. package/dist/src/importPackage.js +76 -0
  5. package/dist/src/importPackage.js.map +1 -0
  6. package/dist/src/index.d.ts +3 -0
  7. package/dist/src/index.js +23 -0
  8. package/dist/src/index.js.map +1 -0
  9. package/dist/src/lib/DiagnosticsManager.d.ts +20 -0
  10. package/dist/src/lib/DiagnosticsManager.js +71 -0
  11. package/dist/src/lib/DiagnosticsManager.js.map +1 -0
  12. package/dist/src/lib/FallbackWatcher.d.ts +15 -0
  13. package/dist/src/lib/FallbackWatcher.js +66 -0
  14. package/dist/src/lib/FallbackWatcher.js.map +1 -0
  15. package/dist/src/lib/documentHighlight/wordHighlight.d.ts +3 -0
  16. package/dist/src/lib/documentHighlight/wordHighlight.js +62 -0
  17. package/dist/src/lib/documentHighlight/wordHighlight.js.map +1 -0
  18. package/dist/src/lib/documents/Document.d.ts +63 -0
  19. package/dist/src/lib/documents/Document.js +138 -0
  20. package/dist/src/lib/documents/Document.js.map +1 -0
  21. package/dist/src/lib/documents/DocumentBase.d.ts +65 -0
  22. package/dist/src/lib/documents/DocumentBase.js +69 -0
  23. package/dist/src/lib/documents/DocumentBase.js.map +1 -0
  24. package/dist/src/lib/documents/DocumentManager.d.ts +28 -0
  25. package/dist/src/lib/documents/DocumentManager.js +122 -0
  26. package/dist/src/lib/documents/DocumentManager.js.map +1 -0
  27. package/dist/src/lib/documents/DocumentMapper.d.ts +88 -0
  28. package/dist/src/lib/documents/DocumentMapper.js +258 -0
  29. package/dist/src/lib/documents/DocumentMapper.js.map +1 -0
  30. package/dist/src/lib/documents/configLoader.d.ts +80 -0
  31. package/dist/src/lib/documents/configLoader.js +265 -0
  32. package/dist/src/lib/documents/configLoader.js.map +1 -0
  33. package/dist/src/lib/documents/fileCollection.d.ts +41 -0
  34. package/dist/src/lib/documents/fileCollection.js +87 -0
  35. package/dist/src/lib/documents/fileCollection.js.map +1 -0
  36. package/dist/src/lib/documents/index.d.ts +5 -0
  37. package/dist/src/lib/documents/index.js +22 -0
  38. package/dist/src/lib/documents/index.js.map +1 -0
  39. package/dist/src/lib/documents/parseHtml.d.ts +13 -0
  40. package/dist/src/lib/documents/parseHtml.js +160 -0
  41. package/dist/src/lib/documents/parseHtml.js.map +1 -0
  42. package/dist/src/lib/documents/utils.d.ts +105 -0
  43. package/dist/src/lib/documents/utils.js +410 -0
  44. package/dist/src/lib/documents/utils.js.map +1 -0
  45. package/dist/src/lib/foldingRange/indentFolding.d.ts +26 -0
  46. package/dist/src/lib/foldingRange/indentFolding.js +142 -0
  47. package/dist/src/lib/foldingRange/indentFolding.js.map +1 -0
  48. package/dist/src/lib/semanticToken/semanticTokenLegend.d.ts +33 -0
  49. package/dist/src/lib/semanticToken/semanticTokenLegend.js +37 -0
  50. package/dist/src/lib/semanticToken/semanticTokenLegend.js.map +1 -0
  51. package/dist/src/logger.d.ts +9 -0
  52. package/dist/src/logger.js +28 -0
  53. package/dist/src/logger.js.map +1 -0
  54. package/dist/src/ls-config.d.ts +326 -0
  55. package/dist/src/ls-config.js +386 -0
  56. package/dist/src/ls-config.js.map +1 -0
  57. package/dist/src/plugins/PluginHost.d.ts +68 -0
  58. package/dist/src/plugins/PluginHost.js +447 -0
  59. package/dist/src/plugins/PluginHost.js.map +1 -0
  60. package/dist/src/plugins/css/CSSDocument.d.ts +46 -0
  61. package/dist/src/plugins/css/CSSDocument.js +78 -0
  62. package/dist/src/plugins/css/CSSDocument.js.map +1 -0
  63. package/dist/src/plugins/css/CSSPlugin.d.ts +35 -0
  64. package/dist/src/plugins/css/CSSPlugin.js +407 -0
  65. package/dist/src/plugins/css/CSSPlugin.js.map +1 -0
  66. package/dist/src/plugins/css/FileSystemProvider.d.ts +10 -0
  67. package/dist/src/plugins/css/FileSystemProvider.js +75 -0
  68. package/dist/src/plugins/css/FileSystemProvider.js.map +1 -0
  69. package/dist/src/plugins/css/StyleAttributeDocument.d.ts +41 -0
  70. package/dist/src/plugins/css/StyleAttributeDocument.js +65 -0
  71. package/dist/src/plugins/css/StyleAttributeDocument.js.map +1 -0
  72. package/dist/src/plugins/css/features/getIdClassCompletion.d.ts +19 -0
  73. package/dist/src/plugins/css/features/getIdClassCompletion.js +56 -0
  74. package/dist/src/plugins/css/features/getIdClassCompletion.js.map +1 -0
  75. package/dist/src/plugins/css/features/svelte-selectors.d.ts +2 -0
  76. package/dist/src/plugins/css/features/svelte-selectors.js +18 -0
  77. package/dist/src/plugins/css/features/svelte-selectors.js.map +1 -0
  78. package/dist/src/plugins/css/global-vars.d.ts +16 -0
  79. package/dist/src/plugins/css/global-vars.js +82 -0
  80. package/dist/src/plugins/css/global-vars.js.map +1 -0
  81. package/dist/src/plugins/css/service.d.ts +5 -0
  82. package/dist/src/plugins/css/service.js +66 -0
  83. package/dist/src/plugins/css/service.js.map +1 -0
  84. package/dist/src/plugins/documentContext.d.ts +3 -0
  85. package/dist/src/plugins/documentContext.js +36 -0
  86. package/dist/src/plugins/documentContext.js.map +1 -0
  87. package/dist/src/plugins/html/HTMLPlugin.d.ts +36 -0
  88. package/dist/src/plugins/html/HTMLPlugin.js +363 -0
  89. package/dist/src/plugins/html/HTMLPlugin.js.map +1 -0
  90. package/dist/src/plugins/html/dataProvider.d.ts +1 -0
  91. package/dist/src/plugins/html/dataProvider.js +481 -0
  92. package/dist/src/plugins/html/dataProvider.js.map +1 -0
  93. package/dist/src/plugins/index.d.ts +7 -0
  94. package/dist/src/plugins/index.js +24 -0
  95. package/dist/src/plugins/index.js.map +1 -0
  96. package/dist/src/plugins/interfaces.d.ts +132 -0
  97. package/dist/src/plugins/interfaces.js +3 -0
  98. package/dist/src/plugins/interfaces.js.map +1 -0
  99. package/dist/src/plugins/svelte/SvelteDocument.d.ts +98 -0
  100. package/dist/src/plugins/svelte/SvelteDocument.js +318 -0
  101. package/dist/src/plugins/svelte/SvelteDocument.js.map +1 -0
  102. package/dist/src/plugins/svelte/SveltePlugin.d.ts +24 -0
  103. package/dist/src/plugins/svelte/SveltePlugin.js +306 -0
  104. package/dist/src/plugins/svelte/SveltePlugin.js.map +1 -0
  105. package/dist/src/plugins/svelte/features/SvelteTags.d.ts +28 -0
  106. package/dist/src/plugins/svelte/features/SvelteTags.js +136 -0
  107. package/dist/src/plugins/svelte/features/SvelteTags.js.map +1 -0
  108. package/dist/src/plugins/svelte/features/getCodeActions/getQuickfixes.d.ts +11 -0
  109. package/dist/src/plugins/svelte/features/getCodeActions/getQuickfixes.js +140 -0
  110. package/dist/src/plugins/svelte/features/getCodeActions/getQuickfixes.js.map +1 -0
  111. package/dist/src/plugins/svelte/features/getCodeActions/getRefactorings.d.ts +9 -0
  112. package/dist/src/plugins/svelte/features/getCodeActions/getRefactorings.js +140 -0
  113. package/dist/src/plugins/svelte/features/getCodeActions/getRefactorings.js.map +1 -0
  114. package/dist/src/plugins/svelte/features/getCodeActions/index.d.ts +4 -0
  115. package/dist/src/plugins/svelte/features/getCodeActions/index.js +19 -0
  116. package/dist/src/plugins/svelte/features/getCodeActions/index.js.map +1 -0
  117. package/dist/src/plugins/svelte/features/getCompletions.d.ts +4 -0
  118. package/dist/src/plugins/svelte/features/getCompletions.js +184 -0
  119. package/dist/src/plugins/svelte/features/getCompletions.js.map +1 -0
  120. package/dist/src/plugins/svelte/features/getDiagnostics.d.ts +9 -0
  121. package/dist/src/plugins/svelte/features/getDiagnostics.js +284 -0
  122. package/dist/src/plugins/svelte/features/getDiagnostics.js.map +1 -0
  123. package/dist/src/plugins/svelte/features/getHoverInfo.d.ts +7 -0
  124. package/dist/src/plugins/svelte/features/getHoverInfo.js +93 -0
  125. package/dist/src/plugins/svelte/features/getHoverInfo.js.map +1 -0
  126. package/dist/src/plugins/svelte/features/getModifierData.d.ts +7 -0
  127. package/dist/src/plugins/svelte/features/getModifierData.js +56 -0
  128. package/dist/src/plugins/svelte/features/getModifierData.js.map +1 -0
  129. package/dist/src/plugins/svelte/features/getSelectionRanges.d.ts +3 -0
  130. package/dist/src/plugins/svelte/features/getSelectionRanges.js +46 -0
  131. package/dist/src/plugins/svelte/features/getSelectionRanges.js.map +1 -0
  132. package/dist/src/plugins/svelte/features/utils.d.ts +5 -0
  133. package/dist/src/plugins/svelte/features/utils.js +18 -0
  134. package/dist/src/plugins/svelte/features/utils.js.map +1 -0
  135. package/dist/src/plugins/typescript/ComponentInfoProvider.d.ts +27 -0
  136. package/dist/src/plugins/typescript/ComponentInfoProvider.js +116 -0
  137. package/dist/src/plugins/typescript/ComponentInfoProvider.js.map +1 -0
  138. package/dist/src/plugins/typescript/DocumentMapper.d.ts +10 -0
  139. package/dist/src/plugins/typescript/DocumentMapper.js +25 -0
  140. package/dist/src/plugins/typescript/DocumentMapper.js.map +1 -0
  141. package/dist/src/plugins/typescript/DocumentSnapshot.d.ts +173 -0
  142. package/dist/src/plugins/typescript/DocumentSnapshot.js +623 -0
  143. package/dist/src/plugins/typescript/DocumentSnapshot.js.map +1 -0
  144. package/dist/src/plugins/typescript/LSAndTSDocResolver.d.ts +100 -0
  145. package/dist/src/plugins/typescript/LSAndTSDocResolver.js +301 -0
  146. package/dist/src/plugins/typescript/LSAndTSDocResolver.js.map +1 -0
  147. package/dist/src/plugins/typescript/SnapshotManager.d.ts +59 -0
  148. package/dist/src/plugins/typescript/SnapshotManager.js +238 -0
  149. package/dist/src/plugins/typescript/SnapshotManager.js.map +1 -0
  150. package/dist/src/plugins/typescript/TypeScriptPlugin.d.ts +65 -0
  151. package/dist/src/plugins/typescript/TypeScriptPlugin.js +332 -0
  152. package/dist/src/plugins/typescript/TypeScriptPlugin.js.map +1 -0
  153. package/dist/src/plugins/typescript/features/CallHierarchyProvider.d.ts +24 -0
  154. package/dist/src/plugins/typescript/features/CallHierarchyProvider.js +325 -0
  155. package/dist/src/plugins/typescript/features/CallHierarchyProvider.js.map +1 -0
  156. package/dist/src/plugins/typescript/features/CodeActionsProvider.d.ts +72 -0
  157. package/dist/src/plugins/typescript/features/CodeActionsProvider.js +1030 -0
  158. package/dist/src/plugins/typescript/features/CodeActionsProvider.js.map +1 -0
  159. package/dist/src/plugins/typescript/features/CodeLensProvider.d.ts +28 -0
  160. package/dist/src/plugins/typescript/features/CodeLensProvider.js +205 -0
  161. package/dist/src/plugins/typescript/features/CodeLensProvider.js.map +1 -0
  162. package/dist/src/plugins/typescript/features/CompletionProvider.d.ts +57 -0
  163. package/dist/src/plugins/typescript/features/CompletionProvider.js +791 -0
  164. package/dist/src/plugins/typescript/features/CompletionProvider.js.map +1 -0
  165. package/dist/src/plugins/typescript/features/DiagnosticsProvider.d.ts +36 -0
  166. package/dist/src/plugins/typescript/features/DiagnosticsProvider.js +497 -0
  167. package/dist/src/plugins/typescript/features/DiagnosticsProvider.js.map +1 -0
  168. package/dist/src/plugins/typescript/features/DocumentHighlightProvider.d.ts +17 -0
  169. package/dist/src/plugins/typescript/features/DocumentHighlightProvider.js +211 -0
  170. package/dist/src/plugins/typescript/features/DocumentHighlightProvider.js.map +1 -0
  171. package/dist/src/plugins/typescript/features/FindComponentReferencesProvider.d.ts +9 -0
  172. package/dist/src/plugins/typescript/features/FindComponentReferencesProvider.js +66 -0
  173. package/dist/src/plugins/typescript/features/FindComponentReferencesProvider.js.map +1 -0
  174. package/dist/src/plugins/typescript/features/FindFileReferencesProvider.d.ts +9 -0
  175. package/dist/src/plugins/typescript/features/FindFileReferencesProvider.js +38 -0
  176. package/dist/src/plugins/typescript/features/FindFileReferencesProvider.js.map +1 -0
  177. package/dist/src/plugins/typescript/features/FindReferencesProvider.d.ts +20 -0
  178. package/dist/src/plugins/typescript/features/FindReferencesProvider.js +149 -0
  179. package/dist/src/plugins/typescript/features/FindReferencesProvider.js.map +1 -0
  180. package/dist/src/plugins/typescript/features/FoldingRangeProvider.d.ts +28 -0
  181. package/dist/src/plugins/typescript/features/FoldingRangeProvider.js +247 -0
  182. package/dist/src/plugins/typescript/features/FoldingRangeProvider.js.map +1 -0
  183. package/dist/src/plugins/typescript/features/HoverProvider.d.ts +11 -0
  184. package/dist/src/plugins/typescript/features/HoverProvider.js +75 -0
  185. package/dist/src/plugins/typescript/features/HoverProvider.js.map +1 -0
  186. package/dist/src/plugins/typescript/features/ImplementationProvider.d.ts +9 -0
  187. package/dist/src/plugins/typescript/features/ImplementationProvider.js +47 -0
  188. package/dist/src/plugins/typescript/features/ImplementationProvider.js.map +1 -0
  189. package/dist/src/plugins/typescript/features/InlayHintProvider.d.ts +22 -0
  190. package/dist/src/plugins/typescript/features/InlayHintProvider.js +225 -0
  191. package/dist/src/plugins/typescript/features/InlayHintProvider.js.map +1 -0
  192. package/dist/src/plugins/typescript/features/RenameProvider.d.ts +53 -0
  193. package/dist/src/plugins/typescript/features/RenameProvider.js +423 -0
  194. package/dist/src/plugins/typescript/features/RenameProvider.js.map +1 -0
  195. package/dist/src/plugins/typescript/features/SelectionRangeProvider.d.ts +18 -0
  196. package/dist/src/plugins/typescript/features/SelectionRangeProvider.js +62 -0
  197. package/dist/src/plugins/typescript/features/SelectionRangeProvider.js.map +1 -0
  198. package/dist/src/plugins/typescript/features/SemanticTokensProvider.d.ts +15 -0
  199. package/dist/src/plugins/typescript/features/SemanticTokensProvider.js +116 -0
  200. package/dist/src/plugins/typescript/features/SemanticTokensProvider.js.map +1 -0
  201. package/dist/src/plugins/typescript/features/SignatureHelpProvider.d.ts +22 -0
  202. package/dist/src/plugins/typescript/features/SignatureHelpProvider.js +110 -0
  203. package/dist/src/plugins/typescript/features/SignatureHelpProvider.js.map +1 -0
  204. package/dist/src/plugins/typescript/features/TypeDefinitionProvider.d.ts +9 -0
  205. package/dist/src/plugins/typescript/features/TypeDefinitionProvider.js +35 -0
  206. package/dist/src/plugins/typescript/features/TypeDefinitionProvider.js.map +1 -0
  207. package/dist/src/plugins/typescript/features/UpdateImportsProvider.d.ts +11 -0
  208. package/dist/src/plugins/typescript/features/UpdateImportsProvider.js +109 -0
  209. package/dist/src/plugins/typescript/features/UpdateImportsProvider.js.map +1 -0
  210. package/dist/src/plugins/typescript/features/WorkspaceSymbolProvider.d.ts +25 -0
  211. package/dist/src/plugins/typescript/features/WorkspaceSymbolProvider.js +176 -0
  212. package/dist/src/plugins/typescript/features/WorkspaceSymbolProvider.js.map +1 -0
  213. package/dist/src/plugins/typescript/features/getDirectiveCommentCompletions.d.ts +13 -0
  214. package/dist/src/plugins/typescript/features/getDirectiveCommentCompletions.js +58 -0
  215. package/dist/src/plugins/typescript/features/getDirectiveCommentCompletions.js.map +1 -0
  216. package/dist/src/plugins/typescript/features/getJsDocTemplateCompletion.d.ts +4 -0
  217. package/dist/src/plugins/typescript/features/getJsDocTemplateCompletion.js +57 -0
  218. package/dist/src/plugins/typescript/features/getJsDocTemplateCompletion.js.map +1 -0
  219. package/dist/src/plugins/typescript/features/utils.d.ts +81 -0
  220. package/dist/src/plugins/typescript/features/utils.js +331 -0
  221. package/dist/src/plugins/typescript/features/utils.js.map +1 -0
  222. package/dist/src/plugins/typescript/macroforgeAugmenter.d.ts +23 -0
  223. package/dist/src/plugins/typescript/macroforgeAugmenter.js +41 -0
  224. package/dist/src/plugins/typescript/macroforgeAugmenter.js.map +1 -0
  225. package/dist/src/plugins/typescript/module-loader.d.ts +28 -0
  226. package/dist/src/plugins/typescript/module-loader.js +254 -0
  227. package/dist/src/plugins/typescript/module-loader.js.map +1 -0
  228. package/dist/src/plugins/typescript/previewer.d.ts +7 -0
  229. package/dist/src/plugins/typescript/previewer.js +120 -0
  230. package/dist/src/plugins/typescript/previewer.js.map +1 -0
  231. package/dist/src/plugins/typescript/service.d.ts +105 -0
  232. package/dist/src/plugins/typescript/service.js +1073 -0
  233. package/dist/src/plugins/typescript/service.js.map +1 -0
  234. package/dist/src/plugins/typescript/serviceCache.d.ts +90 -0
  235. package/dist/src/plugins/typescript/serviceCache.js +50 -0
  236. package/dist/src/plugins/typescript/serviceCache.js.map +1 -0
  237. package/dist/src/plugins/typescript/svelte-ast-utils.d.ts +77 -0
  238. package/dist/src/plugins/typescript/svelte-ast-utils.js +100 -0
  239. package/dist/src/plugins/typescript/svelte-ast-utils.js.map +1 -0
  240. package/dist/src/plugins/typescript/svelte-sys.d.ts +9 -0
  241. package/dist/src/plugins/typescript/svelte-sys.js +79 -0
  242. package/dist/src/plugins/typescript/svelte-sys.js.map +1 -0
  243. package/dist/src/plugins/typescript/utils.d.ts +48 -0
  244. package/dist/src/plugins/typescript/utils.js +334 -0
  245. package/dist/src/plugins/typescript/utils.js.map +1 -0
  246. package/dist/src/server.d.ts +19 -0
  247. package/dist/src/server.js +434 -0
  248. package/dist/src/server.js.map +1 -0
  249. package/dist/src/svelte-check.d.ts +65 -0
  250. package/dist/src/svelte-check.js +288 -0
  251. package/dist/src/svelte-check.js.map +1 -0
  252. package/dist/src/utils.d.ts +111 -0
  253. package/dist/src/utils.js +337 -0
  254. package/dist/src/utils.js.map +1 -0
  255. package/dist/tsconfig.tsbuildinfo +1 -0
  256. package/package.json +79 -0
@@ -0,0 +1,410 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.extractScriptTags = extractScriptTags;
37
+ exports.extractStyleTag = extractStyleTag;
38
+ exports.extractTemplateTag = extractTemplateTag;
39
+ exports.positionAt = positionAt;
40
+ exports.offsetAt = offsetAt;
41
+ exports.getLineOffsets = getLineOffsets;
42
+ exports.isInTag = isInTag;
43
+ exports.isRangeInTag = isRangeInTag;
44
+ exports.getTextInRange = getTextInRange;
45
+ exports.getLineAtPosition = getLineAtPosition;
46
+ exports.isAtEndOfLine = isAtEndOfLine;
47
+ exports.updateRelativeImport = updateRelativeImport;
48
+ exports.getNodeIfIsInComponentStartTag = getNodeIfIsInComponentStartTag;
49
+ exports.getNodeIfIsInHTMLStartTag = getNodeIfIsInHTMLStartTag;
50
+ exports.getNodeIfIsInStartTag = getNodeIfIsInStartTag;
51
+ exports.isInHTMLTagRange = isInHTMLTagRange;
52
+ exports.getWordRangeAt = getWordRangeAt;
53
+ exports.getWordAt = getWordAt;
54
+ exports.toRange = toRange;
55
+ exports.getLangAttribute = getLangAttribute;
56
+ exports.isInsideMoustacheTag = isInsideMoustacheTag;
57
+ exports.inStyleOrScript = inStyleOrScript;
58
+ const utils_1 = require("../../utils");
59
+ const vscode_languageserver_1 = require("vscode-languageserver");
60
+ const path = __importStar(require("path"));
61
+ const parseHtml_1 = require("./parseHtml");
62
+ function parseAttributes(rawAttrs) {
63
+ const attrs = {};
64
+ if (!rawAttrs) {
65
+ return attrs;
66
+ }
67
+ Object.keys(rawAttrs).forEach((attrName) => {
68
+ const attrValue = rawAttrs[attrName];
69
+ attrs[attrName] = attrValue === null ? attrName : removeOuterQuotes(attrValue);
70
+ });
71
+ return attrs;
72
+ function removeOuterQuotes(attrValue) {
73
+ if ((attrValue.startsWith('"') && attrValue.endsWith('"')) ||
74
+ (attrValue.startsWith("'") && attrValue.endsWith("'"))) {
75
+ return attrValue.slice(1, attrValue.length - 1);
76
+ }
77
+ return attrValue;
78
+ }
79
+ }
80
+ const regexIf = new RegExp('{\\s*#if\\s.*?}', 'gms');
81
+ const regexIfEnd = new RegExp('{\\s*/if}', 'gms');
82
+ const regexEach = new RegExp('{\\s*#each\\s.*?}', 'gms');
83
+ const regexEachEnd = new RegExp('{\\s*/each}', 'gms');
84
+ const regexAwait = new RegExp('{\\s*#await\\s.*?}', 'gms');
85
+ const regexAwaitEnd = new RegExp('{\\s*/await}', 'gms');
86
+ const regexHtml = new RegExp('{\\s*@html\\s.*?', 'gms');
87
+ /**
88
+ * Extracts a tag (style or script) from the given text
89
+ * and returns its start, end and the attributes on that tag.
90
+ * @param text text content to extract tag from
91
+ * @param tag the tag to extract
92
+ */
93
+ function extractTags(text, tag, html) {
94
+ const rootNodes = html?.roots || (0, parseHtml_1.parseHtml)(text).roots;
95
+ const matchedNodes = rootNodes
96
+ .filter((node) => node.tag === tag)
97
+ .filter((tag) => {
98
+ return isNotInsideControlFlowTag(tag) && isNotInsideHtmlTag(tag);
99
+ });
100
+ return matchedNodes.map(transformToTagInfo);
101
+ /**
102
+ * For every match AFTER the tag do a search for `{/X`.
103
+ * If that is BEFORE `{#X`, we are inside a moustache tag.
104
+ */
105
+ function isNotInsideControlFlowTag(tag) {
106
+ const tagIndex = rootNodes.indexOf(tag);
107
+ // Quick check: if the tag has nothing before it, it can't be inside a control flow tag
108
+ // This also works around a case where the tag is treated as under a control flow tag when vscode-html-languageservice parses something wrong
109
+ if (tagIndex === 0) {
110
+ const startContent = text.substring(0, tag.start);
111
+ if (startContent.trim() === '') {
112
+ return true;
113
+ }
114
+ }
115
+ const nodes = rootNodes.slice(tagIndex);
116
+ const rootContentAfterTag = nodes
117
+ .map((node, idx) => {
118
+ const start = node.startTagEnd ? node.end : node.start + (node.tag?.length || 0);
119
+ return text.substring(start, nodes[idx + 1]?.start);
120
+ })
121
+ .join('');
122
+ return ![
123
+ [regexIf, regexIfEnd],
124
+ [regexEach, regexEachEnd],
125
+ [regexAwait, regexAwaitEnd]
126
+ ].some((pair) => {
127
+ pair[0].lastIndex = 0;
128
+ pair[1].lastIndex = 0;
129
+ const start = pair[0].exec(rootContentAfterTag);
130
+ const end = pair[1].exec(rootContentAfterTag);
131
+ return (end?.index ?? text.length) < (start?.index ?? text.length);
132
+ });
133
+ }
134
+ /**
135
+ * For every match BEFORE the tag do a search for `{@html`.
136
+ * If that is BEFORE `}`, we are inside a moustache tag.
137
+ */
138
+ function isNotInsideHtmlTag(tag) {
139
+ const nodes = rootNodes.slice(0, rootNodes.indexOf(tag));
140
+ const rootContentBeforeTag = [{ start: 0, end: 0 }, ...nodes]
141
+ .map((node, idx) => {
142
+ return text.substring(node.end, nodes[idx]?.start);
143
+ })
144
+ .join('');
145
+ return !((0, utils_1.regexLastIndexOf)(rootContentBeforeTag, regexHtml) >
146
+ rootContentBeforeTag.lastIndexOf('}'));
147
+ }
148
+ function transformToTagInfo(matchedNode) {
149
+ const start = matchedNode.startTagEnd ?? matchedNode.start;
150
+ const end = matchedNode.endTagStart ?? matchedNode.end;
151
+ const startPos = positionAt(start, text);
152
+ const endPos = positionAt(end, text);
153
+ const container = {
154
+ start: matchedNode.start,
155
+ end: matchedNode.end
156
+ };
157
+ const content = text.substring(start, end);
158
+ return {
159
+ content,
160
+ attributes: parseAttributes(matchedNode.attributes),
161
+ start,
162
+ end,
163
+ startPos,
164
+ endPos,
165
+ container
166
+ };
167
+ }
168
+ }
169
+ function extractScriptTags(source, html) {
170
+ const scripts = extractTags(source, 'script', html);
171
+ if (!scripts.length) {
172
+ return null;
173
+ }
174
+ const script = scripts.find((s) => s.attributes['context'] !== 'module' && !('module' in s.attributes));
175
+ const moduleScript = scripts.find((s) => s.attributes['context'] === 'module' || 'module' in s.attributes);
176
+ return { script, moduleScript };
177
+ }
178
+ function extractStyleTag(source, html) {
179
+ const styles = extractTags(source, 'style', html);
180
+ if (!styles.length) {
181
+ return null;
182
+ }
183
+ // There can only be one style tag
184
+ return styles[0];
185
+ }
186
+ function extractTemplateTag(source, html) {
187
+ const templates = extractTags(source, 'template', html);
188
+ if (!templates.length) {
189
+ return null;
190
+ }
191
+ // There should only be one style tag
192
+ return templates[0];
193
+ }
194
+ /**
195
+ * Get the line and character based on the offset
196
+ * @param offset The index of the position
197
+ * @param text The text for which the position should be retrived
198
+ * @param lineOffsets number Array with offsets for each line. Computed if not given
199
+ */
200
+ function positionAt(offset, text, lineOffsets = getLineOffsets(text)) {
201
+ offset = (0, utils_1.clamp)(offset, 0, text.length);
202
+ let low = 0;
203
+ let high = lineOffsets.length;
204
+ if (high === 0) {
205
+ return vscode_languageserver_1.Position.create(0, offset);
206
+ }
207
+ while (low <= high) {
208
+ const mid = Math.floor((low + high) / 2);
209
+ const lineOffset = lineOffsets[mid];
210
+ if (lineOffset === offset) {
211
+ return vscode_languageserver_1.Position.create(mid, 0);
212
+ }
213
+ else if (offset > lineOffset) {
214
+ low = mid + 1;
215
+ }
216
+ else {
217
+ high = mid - 1;
218
+ }
219
+ }
220
+ // low is the least x for which the line offset is larger than the current offset
221
+ // or array.length if no line offset is larger than the current offset
222
+ const line = low - 1;
223
+ return vscode_languageserver_1.Position.create(line, offset - lineOffsets[line]);
224
+ }
225
+ /**
226
+ * Get the offset of the line and character position
227
+ * @param position Line and character position
228
+ * @param text The text for which the offset should be retrived
229
+ * @param lineOffsets number Array with offsets for each line. Computed if not given
230
+ */
231
+ function offsetAt(position, text, lineOffsets = getLineOffsets(text)) {
232
+ if (position.line >= lineOffsets.length) {
233
+ return text.length;
234
+ }
235
+ else if (position.line < 0) {
236
+ return 0;
237
+ }
238
+ const lineOffset = lineOffsets[position.line];
239
+ const nextLineOffset = position.line + 1 < lineOffsets.length ? lineOffsets[position.line + 1] : text.length;
240
+ return (0, utils_1.clamp)(nextLineOffset, lineOffset, lineOffset + position.character);
241
+ }
242
+ function getLineOffsets(text) {
243
+ const lineOffsets = [];
244
+ let isLineStart = true;
245
+ for (let i = 0; i < text.length; i++) {
246
+ if (isLineStart) {
247
+ lineOffsets.push(i);
248
+ isLineStart = false;
249
+ }
250
+ const ch = text.charAt(i);
251
+ isLineStart = ch === '\r' || ch === '\n';
252
+ if (ch === '\r' && i + 1 < text.length && text.charAt(i + 1) === '\n') {
253
+ i++;
254
+ }
255
+ }
256
+ if (isLineStart && text.length > 0) {
257
+ lineOffsets.push(text.length);
258
+ }
259
+ return lineOffsets;
260
+ }
261
+ function isInTag(position, tagInfo) {
262
+ return !!tagInfo && (0, utils_1.isInRange)(vscode_languageserver_1.Range.create(tagInfo.startPos, tagInfo.endPos), position);
263
+ }
264
+ function isRangeInTag(range, tagInfo) {
265
+ return isInTag(range.start, tagInfo) && isInTag(range.end, tagInfo);
266
+ }
267
+ function getTextInRange(range, text) {
268
+ return text.substring(offsetAt(range.start, text), offsetAt(range.end, text));
269
+ }
270
+ function getLineAtPosition(position, text) {
271
+ return text.substring(offsetAt({ line: position.line, character: 0 }, text), offsetAt({ line: position.line, character: Number.MAX_VALUE }, text));
272
+ }
273
+ /**
274
+ * Assumption: Is called with a line. A line does only contain line break characters
275
+ * at its end.
276
+ */
277
+ function isAtEndOfLine(line, offset) {
278
+ return [undefined, '\r', '\n'].includes(line[offset]);
279
+ }
280
+ /**
281
+ * Updates a relative import
282
+ *
283
+ * @param oldPath Old absolute path
284
+ * @param newPath New absolute path
285
+ * @param relativeImportPath Import relative to the old path
286
+ */
287
+ function updateRelativeImport(oldPath, newPath, relativeImportPath) {
288
+ let newImportPath = path
289
+ .join(path.relative(newPath, oldPath), relativeImportPath)
290
+ .replace(/\\/g, '/');
291
+ if (!newImportPath.startsWith('.')) {
292
+ newImportPath = './' + newImportPath;
293
+ }
294
+ return newImportPath;
295
+ }
296
+ /**
297
+ * Returns the node if offset is inside a component's starttag
298
+ */
299
+ function getNodeIfIsInComponentStartTag(html, document, offset) {
300
+ const node = html.findNodeAt(offset);
301
+ if (!!node.tag &&
302
+ (node.tag[0] === node.tag[0].toUpperCase() ||
303
+ (document.isSvelte5 && node.tag.includes('.'))) &&
304
+ (!node.startTagEnd || offset < node.startTagEnd)) {
305
+ return node;
306
+ }
307
+ }
308
+ /**
309
+ * Returns the node if offset is inside a HTML starttag
310
+ */
311
+ function getNodeIfIsInHTMLStartTag(html, offset) {
312
+ const node = html.findNodeAt(offset);
313
+ if (!!node.tag &&
314
+ node.tag[0] === node.tag[0].toLowerCase() &&
315
+ (!node.startTagEnd || offset < node.startTagEnd)) {
316
+ return node;
317
+ }
318
+ }
319
+ /**
320
+ * Returns the node if offset is inside a starttag (HTML or component)
321
+ */
322
+ function getNodeIfIsInStartTag(html, offset) {
323
+ const node = html.findNodeAt(offset);
324
+ if (!!node.tag && (!node.startTagEnd || offset < node.startTagEnd)) {
325
+ return node;
326
+ }
327
+ }
328
+ /**
329
+ * Returns `true` if `offset` is a html tag and within the name of the start tag or end tag
330
+ */
331
+ function isInHTMLTagRange(html, offset) {
332
+ const node = html.findNodeAt(offset);
333
+ return (!!node.tag &&
334
+ node.tag[0] === node.tag[0].toLowerCase() &&
335
+ (node.start + node.tag.length + 1 >= offset ||
336
+ (!!node.endTagStart && node.endTagStart <= offset)));
337
+ }
338
+ /**
339
+ * Gets word range at position.
340
+ * Delimiter is by default a whitespace, but can be adjusted.
341
+ */
342
+ function getWordRangeAt(str, pos, delimiterRegex = { left: /\S+$/, right: /\s/ }) {
343
+ let start = str.slice(0, pos).search(delimiterRegex.left);
344
+ if (start < 0) {
345
+ start = pos;
346
+ }
347
+ let end = str.slice(pos).search(delimiterRegex.right);
348
+ if (end < 0) {
349
+ end = str.length;
350
+ }
351
+ else {
352
+ end = end + pos;
353
+ }
354
+ return { start, end };
355
+ }
356
+ /**
357
+ * Gets word at position.
358
+ * Delimiter is by default a whitespace, but can be adjusted.
359
+ */
360
+ function getWordAt(str, pos, delimiterRegex = { left: /\S+$/, right: /\s/ }) {
361
+ const { start, end } = getWordRangeAt(str, pos, delimiterRegex);
362
+ return str.slice(start, end);
363
+ }
364
+ function toRange(str, start, end) {
365
+ if (typeof str === 'string') {
366
+ return vscode_languageserver_1.Range.create(positionAt(start, str), positionAt(end, str));
367
+ }
368
+ return vscode_languageserver_1.Range.create(str.positionAt(start), str.positionAt(end));
369
+ }
370
+ /**
371
+ * Returns the language from the given tags, return the first from which a language is found.
372
+ * Searches inside lang and type and removes leading 'text/'
373
+ */
374
+ function getLangAttribute(...tags) {
375
+ const tag = tags.find((tag) => tag?.attributes.lang || tag?.attributes.type);
376
+ if (!tag) {
377
+ return null;
378
+ }
379
+ const attribute = tag.attributes.lang || tag.attributes.type;
380
+ if (!attribute) {
381
+ return null;
382
+ }
383
+ return attribute.replace(/^text\//, '');
384
+ }
385
+ /**
386
+ * Checks whether given position is inside a moustache tag (which includes control flow tags)
387
+ * using a simple bracket matching heuristic which might fail under conditions like
388
+ * `{#if {a: true}.a}`
389
+ */
390
+ function isInsideMoustacheTag(html, tagStart, position) {
391
+ if (tagStart === null) {
392
+ // Not inside <tag ... >
393
+ const charactersBeforePosition = html.substring(0, position);
394
+ return (Math.max(
395
+ // TODO make this just check for '{'?
396
+ // Theoretically, someone could do {a < b} in a simple moustache tag
397
+ charactersBeforePosition.lastIndexOf('{#'), charactersBeforePosition.lastIndexOf('{:'), charactersBeforePosition.lastIndexOf('{@')) > charactersBeforePosition.lastIndexOf('}'));
398
+ }
399
+ else {
400
+ // Inside <tag ... >
401
+ const charactersInNode = html.substring(tagStart, position);
402
+ return charactersInNode.lastIndexOf('{') > charactersInNode.lastIndexOf('}');
403
+ }
404
+ }
405
+ function inStyleOrScript(document, position) {
406
+ return (isInTag(position, document.styleInfo) ||
407
+ isInTag(position, document.scriptInfo) ||
408
+ isInTag(position, document.moduleScriptInfo));
409
+ }
410
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/lib/documents/utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { FoldingRange } from 'vscode-languageserver-types';
2
+ import { Document, TagInformation } from '../documents';
3
+ /**
4
+ *
5
+ * 1. check tab and space counts for lines
6
+ * 2. if there're mixing space and tab guess the tabSize otherwise we only need to compare the numbers of spaces or tabs between lines.
7
+ */
8
+ export declare function indentBasedFoldingRangeForTag(document: Document, tag: TagInformation): FoldingRange[];
9
+ export interface LineRange {
10
+ startLine: number;
11
+ endLine: number;
12
+ }
13
+ export declare function indentBasedFoldingRange({ document, ranges, skipFold }: {
14
+ document: Document;
15
+ ranges?: LineRange[] | undefined;
16
+ skipFold?: (startLine: number, startLineContent: string) => boolean;
17
+ }): FoldingRange[];
18
+ /**
19
+ *
20
+ * The indentation guessing is based on the indentation difference between lines.
21
+ * And if the count equals, then the one used more often takes priority.
22
+ */
23
+ export declare function guessTabSize(nonEmptyLines: Array<{
24
+ spaceCount: number;
25
+ tabCount: number;
26
+ }>): number;
@@ -0,0 +1,142 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.indentBasedFoldingRangeForTag = indentBasedFoldingRangeForTag;
4
+ exports.indentBasedFoldingRange = indentBasedFoldingRange;
5
+ exports.guessTabSize = guessTabSize;
6
+ const lodash_1 = require("lodash");
7
+ /**
8
+ *
9
+ * 1. check tab and space counts for lines
10
+ * 2. if there're mixing space and tab guess the tabSize otherwise we only need to compare the numbers of spaces or tabs between lines.
11
+ */
12
+ function indentBasedFoldingRangeForTag(document, tag) {
13
+ if (tag.startPos.line === tag.endPos.line) {
14
+ return [];
15
+ }
16
+ const startLine = tag.startPos.line + 1;
17
+ const endLine = tag.endPos.line - 1;
18
+ if (startLine > endLine || startLine === endLine) {
19
+ return [];
20
+ }
21
+ return indentBasedFoldingRange({ document, ranges: [{ startLine, endLine }] });
22
+ }
23
+ function indentBasedFoldingRange({ document, ranges, skipFold }) {
24
+ const text = document.getText();
25
+ const lines = text.split(/\r?\n/);
26
+ const indents = lines
27
+ .map((line, index) => ({
28
+ ...collectIndents(line),
29
+ index
30
+ }))
31
+ .filter((line) => !line.empty);
32
+ const tabs = (0, lodash_1.sum)(indents.map((l) => l.tabCount));
33
+ const spaces = (0, lodash_1.sum)(indents.map((l) => l.spaceCount));
34
+ const tabSize = tabs && spaces ? guessTabSize(indents) : 4;
35
+ let currentIndent;
36
+ const result = [];
37
+ const unfinishedFolds = new Map();
38
+ ranges ??= [{ startLine: 0, endLine: lines.length - 1 }];
39
+ let rangeIndex = 0;
40
+ let range = ranges[rangeIndex++];
41
+ if (!range) {
42
+ return [];
43
+ }
44
+ for (const indentInfo of indents) {
45
+ if (indentInfo.index < range.startLine || indentInfo.empty) {
46
+ continue;
47
+ }
48
+ if (indentInfo.index > range.endLine) {
49
+ for (const fold of unfinishedFolds.values()) {
50
+ fold.endLine = range.endLine;
51
+ }
52
+ range = ranges[rangeIndex++];
53
+ if (!range) {
54
+ break;
55
+ }
56
+ }
57
+ const lineIndent = indentInfo.tabCount * tabSize + indentInfo.spaceCount;
58
+ currentIndent ??= lineIndent;
59
+ if (lineIndent > currentIndent) {
60
+ const startLine = indentInfo.index - 1;
61
+ if (!skipFold?.(startLine, lines[startLine])) {
62
+ const fold = { startLine, endLine: indentInfo.index };
63
+ unfinishedFolds.set(currentIndent, fold);
64
+ result.push(fold);
65
+ }
66
+ currentIndent = lineIndent;
67
+ }
68
+ if (lineIndent < currentIndent) {
69
+ const last = unfinishedFolds.get(lineIndent);
70
+ unfinishedFolds.delete(lineIndent);
71
+ if (last) {
72
+ last.endLine = Math.max(last.endLine, indentInfo.index - 1);
73
+ }
74
+ currentIndent = lineIndent;
75
+ }
76
+ }
77
+ return result;
78
+ }
79
+ function collectIndents(line) {
80
+ let tabCount = 0;
81
+ let spaceCount = 0;
82
+ let empty = true;
83
+ for (let index = 0; index < line.length; index++) {
84
+ const char = line[index];
85
+ if (char === '\t') {
86
+ tabCount++;
87
+ }
88
+ else if (char === ' ') {
89
+ spaceCount++;
90
+ }
91
+ else {
92
+ empty = false;
93
+ break;
94
+ }
95
+ }
96
+ return { tabCount, spaceCount, empty };
97
+ }
98
+ /**
99
+ *
100
+ * The indentation guessing is based on the indentation difference between lines.
101
+ * And if the count equals, then the one used more often takes priority.
102
+ */
103
+ function guessTabSize(nonEmptyLines) {
104
+ // simplified version of
105
+ // https://github.com/microsoft/vscode/blob/559e9beea981b47ffd76d90158ccccafef663324/src/vs/editor/common/model/indentationGuesser.ts#L106
106
+ if (nonEmptyLines.length === 1) {
107
+ return 4;
108
+ }
109
+ const guessingTabSize = [2, 4, 6, 8, 3, 5, 7];
110
+ const MAX_GUESS = 8;
111
+ const matchCounts = new Map();
112
+ for (let index = 0; index < nonEmptyLines.length; index++) {
113
+ const line = nonEmptyLines[index];
114
+ const previousLine = nonEmptyLines[index - 1] ?? { spaceCount: 0, tabCount: 0 };
115
+ const spaceDiff = Math.abs(line.spaceCount - previousLine.spaceCount);
116
+ const tabDiff = Math.abs(line.tabCount - previousLine.tabCount);
117
+ const diff = tabDiff === 0 ? spaceDiff : spaceDiff % tabDiff === 0 ? spaceDiff / tabDiff : 0;
118
+ if (diff === 0 || diff > MAX_GUESS) {
119
+ continue;
120
+ }
121
+ for (const guess of guessingTabSize) {
122
+ if (diff === guess) {
123
+ matchCounts.set(guess, (matchCounts.get(guess) ?? 0) + 1);
124
+ }
125
+ }
126
+ }
127
+ let max = 0;
128
+ let tabSize;
129
+ for (const [size, count] of matchCounts) {
130
+ max = Math.max(max, count);
131
+ if (max === count) {
132
+ tabSize = size;
133
+ }
134
+ }
135
+ const match4 = matchCounts.get(4);
136
+ const match2 = matchCounts.get(2);
137
+ if (tabSize === 4 && match4 && match4 > 0 && match2 && match2 > 0 && match2 >= match4 / 2) {
138
+ tabSize = 2;
139
+ }
140
+ return tabSize ?? 4;
141
+ }
142
+ //# sourceMappingURL=indentFolding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indentFolding.js","sourceRoot":"","sources":["../../../../src/lib/foldingRange/indentFolding.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import { SemanticTokensLegend } from 'vscode-languageserver';
2
+ /**
3
+ * extended from https://github.com/microsoft/TypeScript/blob/35c8df04ad959224fad9037e340c1e50f0540a49/src/services/classifier2020.ts#L9
4
+ * so that we don't have to map it into our own legend
5
+ */
6
+ export declare const enum TokenType {
7
+ class = 0,
8
+ enum = 1,
9
+ interface = 2,
10
+ namespace = 3,
11
+ typeParameter = 4,
12
+ type = 5,
13
+ parameter = 6,
14
+ variable = 7,
15
+ enumMember = 8,
16
+ property = 9,
17
+ function = 10,
18
+ member = 11,
19
+ event = 12
20
+ }
21
+ /**
22
+ * adopted from https://github.com/microsoft/TypeScript/blob/35c8df04ad959224fad9037e340c1e50f0540a49/src/services/classifier2020.ts#L13
23
+ * so that we don't have to map it into our own legend
24
+ */
25
+ export declare const enum TokenModifier {
26
+ declaration = 0,
27
+ static = 1,
28
+ async = 2,
29
+ readonly = 3,
30
+ defaultLibrary = 4,
31
+ local = 5
32
+ }
33
+ export declare function getSemanticTokenLegends(): SemanticTokensLegend;