@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,306 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SveltePlugin = void 0;
4
+ const path_1 = require("path");
5
+ const vscode_languageserver_1 = require("vscode-languageserver");
6
+ const importPackage_1 = require("../../importPackage");
7
+ const logger_1 = require("../../logger");
8
+ const utils_1 = require("../../utils");
9
+ const getCodeActions_1 = require("./features/getCodeActions");
10
+ const getCompletions_1 = require("./features/getCompletions");
11
+ const getDiagnostics_1 = require("./features/getDiagnostics");
12
+ const getHoverInfo_1 = require("./features/getHoverInfo");
13
+ const getSelectionRanges_1 = require("./features/getSelectionRanges");
14
+ const SvelteDocument_1 = require("./SvelteDocument");
15
+ class SveltePlugin {
16
+ constructor(configManager) {
17
+ this.configManager = configManager;
18
+ this.__name = 'svelte';
19
+ this.docManager = new Map();
20
+ }
21
+ async getCodeLens(document) {
22
+ if (!this.featureEnabled('runesLegacyModeCodeLens'))
23
+ return null;
24
+ if (!document.isSvelte5)
25
+ return null;
26
+ const doc = await this.getSvelteDoc(document);
27
+ try {
28
+ const result = await doc.getCompiled();
29
+ // @ts-ignore
30
+ const runes = result.metadata.runes;
31
+ return [
32
+ {
33
+ range: {
34
+ start: { line: 0, character: 0 },
35
+ end: { line: 0, character: 0 }
36
+ },
37
+ command: {
38
+ title: runes ? 'Runes mode' : 'Legacy mode',
39
+ command: 'svelte.openLink',
40
+ arguments: ['https://svelte.dev/docs/svelte/legacy-overview']
41
+ }
42
+ }
43
+ ];
44
+ }
45
+ catch (e) {
46
+ // show an empty code lens in case of a compilation error to prevent code from jumping around
47
+ return [
48
+ {
49
+ range: {
50
+ start: { line: 0, character: 0 },
51
+ end: { line: 0, character: 0 }
52
+ },
53
+ command: {
54
+ title: '',
55
+ command: ''
56
+ }
57
+ }
58
+ ];
59
+ }
60
+ }
61
+ async getDiagnostics(document, cancellationToken) {
62
+ if (!this.featureEnabled('diagnostics') || !this.configManager.getIsTrusted()) {
63
+ return [];
64
+ }
65
+ return (0, getDiagnostics_1.getDiagnostics)(document, await this.getSvelteDoc(document), this.configManager.getConfig().svelte.compilerWarnings, cancellationToken);
66
+ }
67
+ async getCompiledResult(document) {
68
+ try {
69
+ const svelteDoc = await this.getSvelteDoc(document);
70
+ const options = { generate: 'dom' }; // 'client' in Svelte 5
71
+ // @ts-ignore Svelte 5 only; we gotta write it like this else Svelte 4 fails on unknown key
72
+ if (document.config?.compilerOptions?.experimental) {
73
+ // @ts-ignore Svelte 5 only
74
+ options.experimental = document.config.compilerOptions.experimental;
75
+ }
76
+ return await svelteDoc.getCompiledWith(options);
77
+ }
78
+ catch (error) {
79
+ return null;
80
+ }
81
+ }
82
+ async formatDocument(document, options) {
83
+ if (!this.featureEnabled('format')) {
84
+ return [];
85
+ }
86
+ const filePath = document.getFilePath();
87
+ /**
88
+ * Prettier v2 can't use v3 plugins and vice versa. Therefore, we need to check
89
+ * which version of prettier is used in the workspace and import the correct
90
+ * version of the Svelte plugin. If user uses Prettier < 3 and has no Svelte plugin
91
+ * then fall back to our built-in versions which are both v3 and compatible with
92
+ * each other.
93
+ */
94
+ const importFittingPrettier = async () => {
95
+ const getConfig = async (p) => {
96
+ // Try resolving the config through prettier and fall back to possible editor config
97
+ return this.configManager.getMergedPrettierConfig(await p.resolveConfig(filePath, { editorconfig: true }),
98
+ // Be defensive here because IDEs other than VSCode might not have these settings
99
+ options && {
100
+ tabWidth: options.tabSize,
101
+ useTabs: !options.insertSpaces
102
+ });
103
+ };
104
+ const prettier1 = (0, importPackage_1.importPrettier)(filePath);
105
+ const config1 = await getConfig(prettier1);
106
+ const resolvedPlugins1 = resolvePlugins(config1.plugins);
107
+ const pluginLoaded = await hasSveltePluginLoaded(prettier1, resolvedPlugins1);
108
+ if (Number(prettier1.version[0]) >= 3 || pluginLoaded) {
109
+ // plugin loaded, or referenced in user config as a plugin, or same version as our fallback version -> ok
110
+ return {
111
+ prettier: prettier1,
112
+ config: config1,
113
+ isFallback: false,
114
+ resolvedPlugins: resolvedPlugins1
115
+ };
116
+ }
117
+ // User either only has Plugin or incompatible Prettier major version installed or none
118
+ // -> load our fallback version
119
+ const prettier2 = (0, importPackage_1.importPrettier)(__dirname);
120
+ const config2 = await getConfig(prettier2);
121
+ const resolvedPlugins2 = resolvePlugins(config2.plugins);
122
+ return {
123
+ prettier: prettier2,
124
+ config: config2,
125
+ isFallback: true,
126
+ resolvedPlugins: resolvedPlugins2
127
+ };
128
+ };
129
+ const { prettier, config, isFallback, resolvedPlugins } = await importFittingPrettier();
130
+ // If user has prettier-plugin-svelte 1.x, then remove `options` from the sort
131
+ // order or else it will throw a config error (`options` was not present back then).
132
+ if (config?.svelteSortOrder &&
133
+ (0, importPackage_1.getPackageInfo)('prettier-plugin-svelte', filePath)?.version.major < 2) {
134
+ config.svelteSortOrder = config.svelteSortOrder
135
+ .replace('-options', '')
136
+ .replace('options-', '');
137
+ }
138
+ // If user has prettier-plugin-svelte 3.x, then add `options` from the sort
139
+ // order or else it will throw a config error (now required).
140
+ if (config?.svelteSortOrder &&
141
+ !config.svelteSortOrder.includes('options') &&
142
+ config.svelteSortOrder !== 'none' &&
143
+ (0, importPackage_1.getPackageInfo)('prettier-plugin-svelte', filePath)?.version.major >= 3) {
144
+ config.svelteSortOrder = 'options-' + config.svelteSortOrder;
145
+ }
146
+ // Take .prettierignore into account
147
+ const fileInfo = await prettier.getFileInfo(filePath, {
148
+ ignorePath: this.configManager.getPrettierConfig()?.ignorePath ?? '.prettierignore',
149
+ // Sapper places stuff within src/node_modules, we want to format that, too
150
+ withNodeModules: true
151
+ });
152
+ if (fileInfo.ignored) {
153
+ logger_1.Logger.debug('File is ignored, formatting skipped');
154
+ return [];
155
+ }
156
+ if (isFallback || !(await hasSveltePluginLoaded(prettier, resolvedPlugins))) {
157
+ // If the user uses Svelte 5 but doesn't have prettier installed, we need to provide
158
+ // the compiler path to the plugin so it can use its parser method; else it will crash.
159
+ const svelteCompilerInfo = (0, importPackage_1.getPackageInfo)('svelte', filePath);
160
+ if (svelteCompilerInfo.version.major >= 5) {
161
+ config.svelte5CompilerPath = svelteCompilerInfo.path + '/compiler';
162
+ }
163
+ }
164
+ // Prettier v3 format is async, v2 is not
165
+ const formattedCode = await prettier.format(document.getText(), {
166
+ ...config,
167
+ plugins: Array.from(new Set([...resolvedPlugins, ...(await getSveltePlugin(resolvedPlugins))])),
168
+ parser: 'svelte'
169
+ });
170
+ return document.getText() === formattedCode
171
+ ? []
172
+ : [
173
+ vscode_languageserver_1.TextEdit.replace(vscode_languageserver_1.Range.create(document.positionAt(0), document.positionAt(document.getTextLength())), formattedCode)
174
+ ];
175
+ async function getSveltePlugin(plugins = []) {
176
+ // Only provide our version of the svelte plugin if the user doesn't have one in
177
+ // the workspace already. If we did it, Prettier would - for some reason - use
178
+ // the workspace version for parsing and the extension version for printing,
179
+ // which could crash if the contract of the parser output changed.
180
+ return !isFallback && (await hasSveltePluginLoaded(prettier, plugins))
181
+ ? []
182
+ : [require.resolve('prettier-plugin-svelte')];
183
+ }
184
+ async function hasSveltePluginLoaded(p, plugins = []) {
185
+ if (plugins.some(SveltePlugin.isPrettierPluginSvelte))
186
+ return true;
187
+ if (Number(p.version[0]) >= 3)
188
+ return false; // Prettier version 3 has removed the "search plugins" feature
189
+ // Prettier v3 getSupportInfo is async, v2 is not
190
+ const info = await p.getSupportInfo();
191
+ return info.languages.some((l) => l.name === 'svelte');
192
+ }
193
+ function resolvePlugins(plugins) {
194
+ return (plugins ?? []).map(resolvePlugin).filter(utils_1.isNotNullOrUndefined);
195
+ }
196
+ function resolvePlugin(plugin) {
197
+ // https://github.com/prettier/prettier-vscode/blob/160b0e92d88fa19003dce2745d5ab8c67e886a04/src/ModuleResolver.ts#L373
198
+ if (typeof plugin != 'string' || (0, path_1.isAbsolute)(plugin) || plugin.startsWith('.')) {
199
+ return plugin;
200
+ }
201
+ try {
202
+ return require.resolve(plugin, {
203
+ paths: [filePath]
204
+ });
205
+ }
206
+ catch (error) {
207
+ logger_1.Logger.error(`failed to resolve plugin ${plugin} with error:\n`, error);
208
+ }
209
+ }
210
+ }
211
+ static isPrettierPluginSvelte(plugin) {
212
+ if (typeof plugin === 'string') {
213
+ return plugin.includes('prettier-plugin-svelte');
214
+ }
215
+ return !!plugin?.languages?.find((l) => l.name === 'svelte');
216
+ }
217
+ async getCompletions(document, position, _, cancellationToken) {
218
+ if (!this.featureEnabled('completions')) {
219
+ return null;
220
+ }
221
+ const svelteDoc = await this.getSvelteDoc(document);
222
+ if (cancellationToken?.isCancellationRequested) {
223
+ return null;
224
+ }
225
+ return (0, getCompletions_1.getCompletions)(document, svelteDoc, position);
226
+ }
227
+ async doHover(document, position) {
228
+ if (!this.featureEnabled('hover')) {
229
+ return null;
230
+ }
231
+ return (0, getHoverInfo_1.getHoverInfo)(document, await this.getSvelteDoc(document), position);
232
+ }
233
+ async getCodeActions(document, range, context, cancellationToken) {
234
+ if (!this.featureEnabled('codeActions')) {
235
+ return [];
236
+ }
237
+ const svelteDoc = await this.getSvelteDoc(document);
238
+ if (cancellationToken?.isCancellationRequested) {
239
+ return [];
240
+ }
241
+ try {
242
+ return (0, getCodeActions_1.getCodeActions)(svelteDoc, range, context);
243
+ }
244
+ catch (error) {
245
+ return [];
246
+ }
247
+ }
248
+ async executeCommand(document, command, args) {
249
+ if (command === 'migrate_to_svelte_5') {
250
+ return this.migrate(document);
251
+ }
252
+ if (!this.featureEnabled('codeActions')) {
253
+ return null;
254
+ }
255
+ const svelteDoc = await this.getSvelteDoc(document);
256
+ try {
257
+ return (0, getCodeActions_1.executeCommand)(svelteDoc, command, args);
258
+ }
259
+ catch (error) {
260
+ return null;
261
+ }
262
+ }
263
+ migrate(document) {
264
+ try {
265
+ const compiler = document.compiler;
266
+ if (!compiler.migrate) {
267
+ return 'Your installed Svelte version does not support migration';
268
+ }
269
+ const migrated = compiler.migrate(document.getText(), {
270
+ filename: document.getFilePath() ?? undefined
271
+ });
272
+ return {
273
+ changes: {
274
+ [document.uri]: [
275
+ vscode_languageserver_1.TextEdit.replace(vscode_languageserver_1.Range.create(document.positionAt(0), document.positionAt(document.getTextLength())), migrated.code)
276
+ ]
277
+ }
278
+ };
279
+ }
280
+ catch (error) {
281
+ logger_1.Logger.error('Failed to migrate Svelte file', error);
282
+ return error?.message ?? 'Failed to migrate Svelte file';
283
+ }
284
+ }
285
+ async getSelectionRange(document, position) {
286
+ if (!this.featureEnabled('selectionRange')) {
287
+ return null;
288
+ }
289
+ const svelteDoc = await this.getSvelteDoc(document);
290
+ return (0, getSelectionRanges_1.getSelectionRange)(svelteDoc, position);
291
+ }
292
+ featureEnabled(feature) {
293
+ return (this.configManager.enabled('svelte.enable') &&
294
+ this.configManager.enabled(`svelte.${feature}.enable`));
295
+ }
296
+ async getSvelteDoc(document) {
297
+ let svelteDoc = this.docManager.get(document);
298
+ if (!svelteDoc || svelteDoc.version !== document.version) {
299
+ svelteDoc = new SvelteDocument_1.SvelteDocument(document);
300
+ this.docManager.set(document, svelteDoc);
301
+ }
302
+ return svelteDoc;
303
+ }
304
+ }
305
+ exports.SveltePlugin = SveltePlugin;
306
+ //# sourceMappingURL=SveltePlugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SveltePlugin.js","sourceRoot":"","sources":["../../../../src/plugins/svelte/SveltePlugin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import { SvelteDocument } from '../SvelteDocument';
2
+ /**
3
+ * Special svelte syntax tags that do template logic.
4
+ */
5
+ export type SvelteLogicTag = 'each' | 'if' | 'await' | 'key' | 'snippet';
6
+ /**
7
+ * Special svelte syntax tags.
8
+ */
9
+ export type SvelteTag = SvelteLogicTag | 'html' | 'debug' | 'const' | 'render' | 'attach';
10
+ /**
11
+ * For each tag, a documentation in markdown format.
12
+ */
13
+ export declare const documentation: {
14
+ await: string;
15
+ each: string;
16
+ if: string;
17
+ key: string;
18
+ snippet: string;
19
+ render: string;
20
+ html: string;
21
+ debug: string;
22
+ const: string;
23
+ attach: string;
24
+ };
25
+ /**
26
+ * Get the last tag that is opened but not closed.
27
+ */
28
+ export declare function getLatestOpeningTag(svelteDoc: SvelteDocument, offset: number): SvelteLogicTag | null;
@@ -0,0 +1,136 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.documentation = void 0;
4
+ exports.getLatestOpeningTag = getLatestOpeningTag;
5
+ /**
6
+ * For each tag, a documentation in markdown format.
7
+ */
8
+ exports.documentation = {
9
+ await: `\`{#await ...}\`\\
10
+ Await blocks allow you to branch on the three possible states of a Promise — pending, ` +
11
+ `fulfilled or rejected.
12
+ #### Usage:
13
+ \`{#await expression}...{:then name}...{:catch name}...{/await}\`\\
14
+ \`{#await expression}...{:then name}...{/await}\`\\
15
+ \`{#await expression then name}...{/await}\`\\
16
+ \\
17
+ https://svelte.dev/docs/svelte/await
18
+ `,
19
+ each: `\`{#each ...}\`\\
20
+ Iterating over lists of values can be done with an each block.
21
+ #### Usage:
22
+ \`{#each expression as name}...{/each}\`\\
23
+ \`{#each expression as name, index}...{/each}\`\\
24
+ \`{#each expression as name, index (key)}...{/each}\`\\
25
+ \`{#each expression as name}...{:else}...{/each}\`\\
26
+ \\
27
+ https://svelte.dev/docs/svelte/each
28
+ `,
29
+ if: `\`{#if ...}\`\\
30
+ Content that is conditionally rendered can be wrapped in an if block.
31
+ #### Usage:
32
+ \`{#if expression}...{/if}\`\\
33
+ \`{#if expression}...{:else if expression}...{/if}\`\\
34
+ \`{#if expression}...{:else}...{/if}\`\\
35
+ \\
36
+ https://svelte.dev/docs/svelte/if
37
+ `,
38
+ key: `\`{#key expression}...{/key}\`\\
39
+ Key blocks destroy and recreate their contents when the value of an expression changes.\\
40
+ This is useful if you want an element to play its transition whenever a value changes.\\
41
+ When used around components, this will cause them to be reinstantiated and reinitialised.
42
+ #### Usage:
43
+ \`{#key expression}...{/key}\`\\
44
+ \\
45
+ https://svelte.dev/docs/svelte/key
46
+ `,
47
+ snippet: `\`{#snippet identifier(parameter)}...{/snippet}\`\\
48
+ Snippets allow you to create reusable UI blocks you can render with the {@render ...} tag.
49
+ They also function as slot props for components.
50
+ #### Usage:
51
+ \`{#snippet identifier(parameter)}...{/snippet}\`\\
52
+ \\
53
+ https://svelte.dev/docs/svelte/snippet
54
+ `,
55
+ render: `\`{@render ...}\`\\
56
+ Renders a snippet with the given parameters.
57
+ #### Usage:
58
+ \`{@render identifier(parameter)}\`\\
59
+ \\
60
+ https://svelte.dev/docs/svelte/@render
61
+ `,
62
+ html: `\`{@html ...}\`\\
63
+ In a text expression, characters like < and > are escaped; however, ` +
64
+ `with HTML expressions, they're not.
65
+ The expression should be valid standalone HTML.
66
+ #### Caution
67
+ Svelte does not sanitize expressions before injecting HTML.
68
+ If the data comes from an untrusted source, you must sanitize it, ` +
69
+ `or you are exposing your users to an XSS vulnerability.
70
+ #### Usage:
71
+ \`{@html expression}\`\\
72
+ \\
73
+ https://svelte.dev/docs/svelte/@html
74
+ `,
75
+ debug: `\`{@debug ...}\`\\
76
+ Offers an alternative to \`console.log(...)\`.
77
+ It logs the values of specific variables whenever they change, ` +
78
+ `and pauses code execution if you have devtools open.
79
+ It accepts a comma-separated list of variable names (not arbitrary expressions).
80
+ #### Usage:
81
+ \`{@debug}\`
82
+ \`{@debug var1, var2, ..., varN}\`\\
83
+ \\
84
+ https://svelte.dev/docs/svelte/@debug
85
+ `,
86
+ const: `\`{@const ...}\`\\
87
+ Defines a local constant\\
88
+ #### Usage:
89
+ \`{@const a = b + c}\`\\
90
+ \\
91
+ https://svelte.dev/docs/svelte/@const
92
+ `,
93
+ attach: `\`{@attach ...}\`\\
94
+ Defines an attachment that is attached to an element or component\\
95
+ #### Usage:
96
+ \`<div {@attach (node) => {...}}></div>\`\\
97
+ \`<Component {@attach namedAttachment} />\`\\
98
+ \\
99
+ https://svelte.dev/docs/svelte/@attach
100
+ `
101
+ };
102
+ /**
103
+ * Get the last tag that is opened but not closed.
104
+ */
105
+ function getLatestOpeningTag(svelteDoc, offset) {
106
+ // Only use content up to the position and strip out html comments
107
+ const content = svelteDoc
108
+ .getText()
109
+ .substring(0, offset)
110
+ .replace(/<!--(.*?)-->/g, '');
111
+ const lastIdxs = [
112
+ idxOfLastOpeningTag(content, 'each'),
113
+ idxOfLastOpeningTag(content, 'if'),
114
+ idxOfLastOpeningTag(content, 'await'),
115
+ idxOfLastOpeningTag(content, 'key'),
116
+ idxOfLastOpeningTag(content, 'snippet')
117
+ ];
118
+ const lastIdx = lastIdxs.sort((i1, i2) => i2.lastIdx - i1.lastIdx);
119
+ return lastIdx[0].lastIdx === -1 ? null : lastIdx[0].tag;
120
+ }
121
+ /**
122
+ * Get the last tag and its index that is opened but not closed.
123
+ */
124
+ function idxOfLastOpeningTag(content, tag) {
125
+ const nrOfEndingTags = content.match(new RegExp(`{\\s*/${tag}`, 'g'))?.length ?? 0;
126
+ let lastIdx = -1;
127
+ let nrOfOpeningTags = 0;
128
+ let match;
129
+ const regexp = new RegExp(`{\\s*#${tag}`, 'g');
130
+ while ((match = regexp.exec(content)) != null) {
131
+ nrOfOpeningTags += 1;
132
+ lastIdx = match.index;
133
+ }
134
+ return { lastIdx: nrOfOpeningTags <= nrOfEndingTags ? -1 : lastIdx, tag };
135
+ }
136
+ //# sourceMappingURL=SvelteTags.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SvelteTags.js","sourceRoot":"","sources":["../../../../../src/plugins/svelte/features/SvelteTags.ts"],"names":[],"mappings":";;;AAoHA,kDAkBC;AA1HD;;GAEG;AACU,QAAA,aAAa,GAAG;IACzB,KAAK,EACD;uFAC+E;QAC/E;;;;;;;CAOP;IACG,IAAI,EAAE;;;;;;;;;CAST;IACG,EAAE,EAAE;;;;;;;;CAQP;IACG,GAAG,EAAE;;;;;;;;CAQR;IACG,OAAO,EAAE;;;;;;;CAOZ;IACG,MAAM,EAAE;;;;;;CAMX;IACG,IAAI,EACA;qEAC6D;QAC7D;;;;mEAI2D;QAC3D;;;;;CAKP;IACG,KAAK,EACD;;gEAEwD;QACxD;;;;;;;CAOP;IACG,KAAK,EAAE;;;;;;CAMV;IACG,MAAM,EAAE;;;;;;;CAOX;CACA,CAAC;AAEF;;GAEG;AACH,SAAgB,mBAAmB,CAC/B,SAAyB,EACzB,MAAc;IAEd,kEAAkE;IAClE,MAAM,OAAO,GAAG,SAAS;SACpB,OAAO,EAAE;SACT,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC;SACpB,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;IAClC,MAAM,QAAQ,GAAG;QACb,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC;QACpC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC;QAClC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC;QACrC,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC;QACnC,mBAAmB,CAAC,OAAO,EAAE,SAAS,CAAC;KAC1C,CAAC;IACF,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC;IACnE,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AAC7D,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAAC,OAAe,EAAE,GAAmB;IAC7D,MAAM,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,SAAS,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC;IAEnF,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC;IACjB,IAAI,eAAe,GAAG,CAAC,CAAC;IACxB,IAAI,KAA6B,CAAC;IAClC,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,SAAS,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC;IAC/C,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;QAC5C,eAAe,IAAI,CAAC,CAAC;QACrB,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC;IAC1B,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,eAAe,IAAI,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC;AAC9E,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { CodeAction, Diagnostic } from 'vscode-languageserver';
2
+ import { SvelteDocument } from '../../SvelteDocument';
3
+ /**
4
+ * Get applicable quick fixes.
5
+ */
6
+ export declare function getQuickfixActions(svelteDoc: SvelteDocument, svelteDiagnostics: Diagnostic[]): Promise<CodeAction[]>;
7
+ /**
8
+ * Whether or not the given diagnostic can be ignored via a
9
+ * <!-- svelte-ignore <code> -->
10
+ */
11
+ export declare function isIgnorableSvelteDiagnostic(diagnostic: Diagnostic): boolean | "" | 0 | undefined;
@@ -0,0 +1,140 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getQuickfixActions = getQuickfixActions;
4
+ exports.isIgnorableSvelteDiagnostic = isIgnorableSvelteDiagnostic;
5
+ const estree_walker_1 = require("estree-walker");
6
+ const os_1 = require("os");
7
+ const vscode_languageserver_1 = require("vscode-languageserver");
8
+ const documents_1 = require("../../../../lib/documents");
9
+ const utils_1 = require("../../../../utils");
10
+ /**
11
+ * Get applicable quick fixes.
12
+ */
13
+ async function getQuickfixActions(svelteDoc, svelteDiagnostics) {
14
+ const textDocument = vscode_languageserver_1.OptionalVersionedTextDocumentIdentifier.create((0, utils_1.pathToUrl)(svelteDoc.getFilePath()), null);
15
+ const { ast } = await svelteDoc.getCompiled();
16
+ const transpiled = await svelteDoc.getTranspiled();
17
+ const content = transpiled.getText();
18
+ const lineOffsets = (0, documents_1.getLineOffsets)(content);
19
+ const codeActions = [];
20
+ for (const diagnostic of svelteDiagnostics) {
21
+ codeActions.push(...(await createQuickfixActions(textDocument, transpiled, content, lineOffsets, ast, diagnostic)));
22
+ }
23
+ return codeActions;
24
+ }
25
+ async function createQuickfixActions(textDocument, transpiled, content, lineOffsets, ast, diagnostic) {
26
+ const { range: { start, end } } = diagnostic;
27
+ const generatedStart = transpiled.getGeneratedPosition(start);
28
+ const generatedEnd = transpiled.getGeneratedPosition(end);
29
+ const diagnosticStartOffset = (0, documents_1.offsetAt)(generatedStart, content, lineOffsets);
30
+ const diagnosticEndOffset = (0, documents_1.offsetAt)(generatedEnd, content, lineOffsets);
31
+ const offsetRange = {
32
+ pos: diagnosticStartOffset,
33
+ end: diagnosticEndOffset
34
+ };
35
+ const { html, instance, module } = ast;
36
+ const tree = [html, instance, module].find((part) => {
37
+ return (part?.start != null &&
38
+ offsetRange.pos >= part.start &&
39
+ part?.end != null &&
40
+ offsetRange.pos <= part.end &&
41
+ part?.end != null &&
42
+ offsetRange.end <= part.end &&
43
+ part?.start != null &&
44
+ offsetRange.end >= part.start);
45
+ });
46
+ const node = findTagForRange(tree, offsetRange, tree === html);
47
+ const codeActions = [];
48
+ if (diagnostic.code == 'security-anchor-rel-noreferrer') {
49
+ codeActions.push(createSvelteAnchorMissingAttributeQuickfixAction(textDocument, transpiled, content, lineOffsets, node));
50
+ }
51
+ codeActions.push(createSvelteIgnoreQuickfixAction(textDocument, transpiled, content, lineOffsets, node, diagnostic, tree === html));
52
+ return codeActions;
53
+ }
54
+ function createSvelteAnchorMissingAttributeQuickfixAction(textDocument, transpiled, content, lineOffsets, node) {
55
+ // Assert non-null because the node target attribute is required for 'security-anchor-rel-noreferrer'
56
+ const targetAttribute = node.attributes.find((i) => i.name == 'target');
57
+ const relAttribute = node.attributes.find((i) => i.name == 'rel');
58
+ const codeActionTextEdit = relAttribute
59
+ ? vscode_languageserver_1.TextEdit.insert((0, documents_1.positionAt)(relAttribute.end - 1, content, lineOffsets), ' noreferrer')
60
+ : vscode_languageserver_1.TextEdit.insert((0, documents_1.positionAt)(targetAttribute.end, content, lineOffsets), ' rel="noreferrer"');
61
+ return vscode_languageserver_1.CodeAction.create('(svelte) Add missing attribute rel="noreferrer"', {
62
+ documentChanges: [
63
+ vscode_languageserver_1.TextDocumentEdit.create(textDocument, [
64
+ (0, documents_1.mapObjWithRangeToOriginal)(transpiled, codeActionTextEdit)
65
+ ])
66
+ ]
67
+ }, vscode_languageserver_1.CodeActionKind.QuickFix);
68
+ }
69
+ function createSvelteIgnoreQuickfixAction(textDocument, transpiled, content, lineOffsets, node, diagnostic, isHtml) {
70
+ return vscode_languageserver_1.CodeAction.create(getCodeActionTitle(diagnostic), {
71
+ documentChanges: [
72
+ vscode_languageserver_1.TextDocumentEdit.create(textDocument, [
73
+ getSvelteIgnoreEdit(transpiled, content, lineOffsets, node, diagnostic, isHtml)
74
+ ])
75
+ ]
76
+ }, vscode_languageserver_1.CodeActionKind.QuickFix);
77
+ }
78
+ function getCodeActionTitle(diagnostic) {
79
+ // make it distinguishable with eslint's code action
80
+ return `(svelte) Disable ${diagnostic.code} for this line`;
81
+ }
82
+ /**
83
+ * Whether or not the given diagnostic can be ignored via a
84
+ * <!-- svelte-ignore <code> -->
85
+ */
86
+ function isIgnorableSvelteDiagnostic(diagnostic) {
87
+ const { source, severity, code } = diagnostic;
88
+ return (code &&
89
+ !nonIgnorableWarnings.includes(code) &&
90
+ source === 'svelte' &&
91
+ severity !== vscode_languageserver_1.DiagnosticSeverity.Error);
92
+ }
93
+ const nonIgnorableWarnings = [
94
+ 'missing-custom-element-compile-options',
95
+ 'unused-export-let',
96
+ 'css-unused-selector'
97
+ ];
98
+ function getSvelteIgnoreEdit(transpiled, content, lineOffsets, node, diagnostic, isHtml) {
99
+ const { code } = diagnostic;
100
+ const nodeStartPosition = (0, documents_1.positionAt)(node.start, content, lineOffsets);
101
+ const nodeLineStart = (0, documents_1.offsetAt)({
102
+ line: nodeStartPosition.line,
103
+ character: 0
104
+ }, content, lineOffsets);
105
+ const afterStartLineStart = content.slice(nodeLineStart);
106
+ const indent = (0, utils_1.getIndent)(afterStartLineStart);
107
+ // TODO: Make all code action's new line consistent
108
+ let ignore = `${indent}// svelte-ignore ${code}${os_1.EOL}${indent}`;
109
+ if (isHtml) {
110
+ ignore = `${indent}<!-- svelte-ignore ${code} -->${os_1.EOL}`;
111
+ }
112
+ const position = vscode_languageserver_1.Position.create(nodeStartPosition.line, 0);
113
+ return (0, documents_1.mapObjWithRangeToOriginal)(transpiled, vscode_languageserver_1.TextEdit.insert(position, ignore));
114
+ }
115
+ const elementOrComponent = ['Component', 'Element', 'InlineComponent'];
116
+ function findTagForRange(ast, range, isHtml) {
117
+ let nearest = ast;
118
+ (0, estree_walker_1.walk)(ast, {
119
+ enter(node, parent) {
120
+ if (isHtml) {
121
+ const { type } = node;
122
+ const isBlock = 'block' in node || node.type.toLowerCase().includes('block');
123
+ const isFragment = type === 'Fragment';
124
+ const keepLooking = isFragment || elementOrComponent.includes(type) || isBlock;
125
+ if (!keepLooking) {
126
+ this.skip();
127
+ return;
128
+ }
129
+ }
130
+ if (within(node, range) && parent === nearest) {
131
+ nearest = node;
132
+ }
133
+ }
134
+ });
135
+ return nearest;
136
+ }
137
+ function within(node, range) {
138
+ return node.end >= range.end && node.start <= range.pos;
139
+ }
140
+ //# sourceMappingURL=getQuickfixes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getQuickfixes.js","sourceRoot":"","sources":["../../../../../../src/plugins/svelte/features/getCodeActions/getQuickfixes.ts"],"names":[],"mappings":"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"}