@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.
- package/README.md +331 -0
- package/bin/server.js +5 -0
- package/dist/src/importPackage.d.ts +16 -0
- package/dist/src/importPackage.js +76 -0
- package/dist/src/importPackage.js.map +1 -0
- package/dist/src/index.d.ts +3 -0
- package/dist/src/index.js +23 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/lib/DiagnosticsManager.d.ts +20 -0
- package/dist/src/lib/DiagnosticsManager.js +71 -0
- package/dist/src/lib/DiagnosticsManager.js.map +1 -0
- package/dist/src/lib/FallbackWatcher.d.ts +15 -0
- package/dist/src/lib/FallbackWatcher.js +66 -0
- package/dist/src/lib/FallbackWatcher.js.map +1 -0
- package/dist/src/lib/documentHighlight/wordHighlight.d.ts +3 -0
- package/dist/src/lib/documentHighlight/wordHighlight.js +62 -0
- package/dist/src/lib/documentHighlight/wordHighlight.js.map +1 -0
- package/dist/src/lib/documents/Document.d.ts +63 -0
- package/dist/src/lib/documents/Document.js +138 -0
- package/dist/src/lib/documents/Document.js.map +1 -0
- package/dist/src/lib/documents/DocumentBase.d.ts +65 -0
- package/dist/src/lib/documents/DocumentBase.js +69 -0
- package/dist/src/lib/documents/DocumentBase.js.map +1 -0
- package/dist/src/lib/documents/DocumentManager.d.ts +28 -0
- package/dist/src/lib/documents/DocumentManager.js +122 -0
- package/dist/src/lib/documents/DocumentManager.js.map +1 -0
- package/dist/src/lib/documents/DocumentMapper.d.ts +88 -0
- package/dist/src/lib/documents/DocumentMapper.js +258 -0
- package/dist/src/lib/documents/DocumentMapper.js.map +1 -0
- package/dist/src/lib/documents/configLoader.d.ts +80 -0
- package/dist/src/lib/documents/configLoader.js +265 -0
- package/dist/src/lib/documents/configLoader.js.map +1 -0
- package/dist/src/lib/documents/fileCollection.d.ts +41 -0
- package/dist/src/lib/documents/fileCollection.js +87 -0
- package/dist/src/lib/documents/fileCollection.js.map +1 -0
- package/dist/src/lib/documents/index.d.ts +5 -0
- package/dist/src/lib/documents/index.js +22 -0
- package/dist/src/lib/documents/index.js.map +1 -0
- package/dist/src/lib/documents/parseHtml.d.ts +13 -0
- package/dist/src/lib/documents/parseHtml.js +160 -0
- package/dist/src/lib/documents/parseHtml.js.map +1 -0
- package/dist/src/lib/documents/utils.d.ts +105 -0
- package/dist/src/lib/documents/utils.js +410 -0
- package/dist/src/lib/documents/utils.js.map +1 -0
- package/dist/src/lib/foldingRange/indentFolding.d.ts +26 -0
- package/dist/src/lib/foldingRange/indentFolding.js +142 -0
- package/dist/src/lib/foldingRange/indentFolding.js.map +1 -0
- package/dist/src/lib/semanticToken/semanticTokenLegend.d.ts +33 -0
- package/dist/src/lib/semanticToken/semanticTokenLegend.js +37 -0
- package/dist/src/lib/semanticToken/semanticTokenLegend.js.map +1 -0
- package/dist/src/logger.d.ts +9 -0
- package/dist/src/logger.js +28 -0
- package/dist/src/logger.js.map +1 -0
- package/dist/src/ls-config.d.ts +326 -0
- package/dist/src/ls-config.js +386 -0
- package/dist/src/ls-config.js.map +1 -0
- package/dist/src/plugins/PluginHost.d.ts +68 -0
- package/dist/src/plugins/PluginHost.js +447 -0
- package/dist/src/plugins/PluginHost.js.map +1 -0
- package/dist/src/plugins/css/CSSDocument.d.ts +46 -0
- package/dist/src/plugins/css/CSSDocument.js +78 -0
- package/dist/src/plugins/css/CSSDocument.js.map +1 -0
- package/dist/src/plugins/css/CSSPlugin.d.ts +35 -0
- package/dist/src/plugins/css/CSSPlugin.js +407 -0
- package/dist/src/plugins/css/CSSPlugin.js.map +1 -0
- package/dist/src/plugins/css/FileSystemProvider.d.ts +10 -0
- package/dist/src/plugins/css/FileSystemProvider.js +75 -0
- package/dist/src/plugins/css/FileSystemProvider.js.map +1 -0
- package/dist/src/plugins/css/StyleAttributeDocument.d.ts +41 -0
- package/dist/src/plugins/css/StyleAttributeDocument.js +65 -0
- package/dist/src/plugins/css/StyleAttributeDocument.js.map +1 -0
- package/dist/src/plugins/css/features/getIdClassCompletion.d.ts +19 -0
- package/dist/src/plugins/css/features/getIdClassCompletion.js +56 -0
- package/dist/src/plugins/css/features/getIdClassCompletion.js.map +1 -0
- package/dist/src/plugins/css/features/svelte-selectors.d.ts +2 -0
- package/dist/src/plugins/css/features/svelte-selectors.js +18 -0
- package/dist/src/plugins/css/features/svelte-selectors.js.map +1 -0
- package/dist/src/plugins/css/global-vars.d.ts +16 -0
- package/dist/src/plugins/css/global-vars.js +82 -0
- package/dist/src/plugins/css/global-vars.js.map +1 -0
- package/dist/src/plugins/css/service.d.ts +5 -0
- package/dist/src/plugins/css/service.js +66 -0
- package/dist/src/plugins/css/service.js.map +1 -0
- package/dist/src/plugins/documentContext.d.ts +3 -0
- package/dist/src/plugins/documentContext.js +36 -0
- package/dist/src/plugins/documentContext.js.map +1 -0
- package/dist/src/plugins/html/HTMLPlugin.d.ts +36 -0
- package/dist/src/plugins/html/HTMLPlugin.js +363 -0
- package/dist/src/plugins/html/HTMLPlugin.js.map +1 -0
- package/dist/src/plugins/html/dataProvider.d.ts +1 -0
- package/dist/src/plugins/html/dataProvider.js +481 -0
- package/dist/src/plugins/html/dataProvider.js.map +1 -0
- package/dist/src/plugins/index.d.ts +7 -0
- package/dist/src/plugins/index.js +24 -0
- package/dist/src/plugins/index.js.map +1 -0
- package/dist/src/plugins/interfaces.d.ts +132 -0
- package/dist/src/plugins/interfaces.js +3 -0
- package/dist/src/plugins/interfaces.js.map +1 -0
- package/dist/src/plugins/svelte/SvelteDocument.d.ts +98 -0
- package/dist/src/plugins/svelte/SvelteDocument.js +318 -0
- package/dist/src/plugins/svelte/SvelteDocument.js.map +1 -0
- package/dist/src/plugins/svelte/SveltePlugin.d.ts +24 -0
- package/dist/src/plugins/svelte/SveltePlugin.js +306 -0
- package/dist/src/plugins/svelte/SveltePlugin.js.map +1 -0
- package/dist/src/plugins/svelte/features/SvelteTags.d.ts +28 -0
- package/dist/src/plugins/svelte/features/SvelteTags.js +136 -0
- package/dist/src/plugins/svelte/features/SvelteTags.js.map +1 -0
- package/dist/src/plugins/svelte/features/getCodeActions/getQuickfixes.d.ts +11 -0
- package/dist/src/plugins/svelte/features/getCodeActions/getQuickfixes.js +140 -0
- package/dist/src/plugins/svelte/features/getCodeActions/getQuickfixes.js.map +1 -0
- package/dist/src/plugins/svelte/features/getCodeActions/getRefactorings.d.ts +9 -0
- package/dist/src/plugins/svelte/features/getCodeActions/getRefactorings.js +140 -0
- package/dist/src/plugins/svelte/features/getCodeActions/getRefactorings.js.map +1 -0
- package/dist/src/plugins/svelte/features/getCodeActions/index.d.ts +4 -0
- package/dist/src/plugins/svelte/features/getCodeActions/index.js +19 -0
- package/dist/src/plugins/svelte/features/getCodeActions/index.js.map +1 -0
- package/dist/src/plugins/svelte/features/getCompletions.d.ts +4 -0
- package/dist/src/plugins/svelte/features/getCompletions.js +184 -0
- package/dist/src/plugins/svelte/features/getCompletions.js.map +1 -0
- package/dist/src/plugins/svelte/features/getDiagnostics.d.ts +9 -0
- package/dist/src/plugins/svelte/features/getDiagnostics.js +284 -0
- package/dist/src/plugins/svelte/features/getDiagnostics.js.map +1 -0
- package/dist/src/plugins/svelte/features/getHoverInfo.d.ts +7 -0
- package/dist/src/plugins/svelte/features/getHoverInfo.js +93 -0
- package/dist/src/plugins/svelte/features/getHoverInfo.js.map +1 -0
- package/dist/src/plugins/svelte/features/getModifierData.d.ts +7 -0
- package/dist/src/plugins/svelte/features/getModifierData.js +56 -0
- package/dist/src/plugins/svelte/features/getModifierData.js.map +1 -0
- package/dist/src/plugins/svelte/features/getSelectionRanges.d.ts +3 -0
- package/dist/src/plugins/svelte/features/getSelectionRanges.js +46 -0
- package/dist/src/plugins/svelte/features/getSelectionRanges.js.map +1 -0
- package/dist/src/plugins/svelte/features/utils.d.ts +5 -0
- package/dist/src/plugins/svelte/features/utils.js +18 -0
- package/dist/src/plugins/svelte/features/utils.js.map +1 -0
- package/dist/src/plugins/typescript/ComponentInfoProvider.d.ts +27 -0
- package/dist/src/plugins/typescript/ComponentInfoProvider.js +116 -0
- package/dist/src/plugins/typescript/ComponentInfoProvider.js.map +1 -0
- package/dist/src/plugins/typescript/DocumentMapper.d.ts +10 -0
- package/dist/src/plugins/typescript/DocumentMapper.js +25 -0
- package/dist/src/plugins/typescript/DocumentMapper.js.map +1 -0
- package/dist/src/plugins/typescript/DocumentSnapshot.d.ts +173 -0
- package/dist/src/plugins/typescript/DocumentSnapshot.js +623 -0
- package/dist/src/plugins/typescript/DocumentSnapshot.js.map +1 -0
- package/dist/src/plugins/typescript/LSAndTSDocResolver.d.ts +100 -0
- package/dist/src/plugins/typescript/LSAndTSDocResolver.js +301 -0
- package/dist/src/plugins/typescript/LSAndTSDocResolver.js.map +1 -0
- package/dist/src/plugins/typescript/SnapshotManager.d.ts +59 -0
- package/dist/src/plugins/typescript/SnapshotManager.js +238 -0
- package/dist/src/plugins/typescript/SnapshotManager.js.map +1 -0
- package/dist/src/plugins/typescript/TypeScriptPlugin.d.ts +65 -0
- package/dist/src/plugins/typescript/TypeScriptPlugin.js +332 -0
- package/dist/src/plugins/typescript/TypeScriptPlugin.js.map +1 -0
- package/dist/src/plugins/typescript/features/CallHierarchyProvider.d.ts +24 -0
- package/dist/src/plugins/typescript/features/CallHierarchyProvider.js +325 -0
- package/dist/src/plugins/typescript/features/CallHierarchyProvider.js.map +1 -0
- package/dist/src/plugins/typescript/features/CodeActionsProvider.d.ts +72 -0
- package/dist/src/plugins/typescript/features/CodeActionsProvider.js +1030 -0
- package/dist/src/plugins/typescript/features/CodeActionsProvider.js.map +1 -0
- package/dist/src/plugins/typescript/features/CodeLensProvider.d.ts +28 -0
- package/dist/src/plugins/typescript/features/CodeLensProvider.js +205 -0
- package/dist/src/plugins/typescript/features/CodeLensProvider.js.map +1 -0
- package/dist/src/plugins/typescript/features/CompletionProvider.d.ts +57 -0
- package/dist/src/plugins/typescript/features/CompletionProvider.js +791 -0
- package/dist/src/plugins/typescript/features/CompletionProvider.js.map +1 -0
- package/dist/src/plugins/typescript/features/DiagnosticsProvider.d.ts +36 -0
- package/dist/src/plugins/typescript/features/DiagnosticsProvider.js +497 -0
- package/dist/src/plugins/typescript/features/DiagnosticsProvider.js.map +1 -0
- package/dist/src/plugins/typescript/features/DocumentHighlightProvider.d.ts +17 -0
- package/dist/src/plugins/typescript/features/DocumentHighlightProvider.js +211 -0
- package/dist/src/plugins/typescript/features/DocumentHighlightProvider.js.map +1 -0
- package/dist/src/plugins/typescript/features/FindComponentReferencesProvider.d.ts +9 -0
- package/dist/src/plugins/typescript/features/FindComponentReferencesProvider.js +66 -0
- package/dist/src/plugins/typescript/features/FindComponentReferencesProvider.js.map +1 -0
- package/dist/src/plugins/typescript/features/FindFileReferencesProvider.d.ts +9 -0
- package/dist/src/plugins/typescript/features/FindFileReferencesProvider.js +38 -0
- package/dist/src/plugins/typescript/features/FindFileReferencesProvider.js.map +1 -0
- package/dist/src/plugins/typescript/features/FindReferencesProvider.d.ts +20 -0
- package/dist/src/plugins/typescript/features/FindReferencesProvider.js +149 -0
- package/dist/src/plugins/typescript/features/FindReferencesProvider.js.map +1 -0
- package/dist/src/plugins/typescript/features/FoldingRangeProvider.d.ts +28 -0
- package/dist/src/plugins/typescript/features/FoldingRangeProvider.js +247 -0
- package/dist/src/plugins/typescript/features/FoldingRangeProvider.js.map +1 -0
- package/dist/src/plugins/typescript/features/HoverProvider.d.ts +11 -0
- package/dist/src/plugins/typescript/features/HoverProvider.js +75 -0
- package/dist/src/plugins/typescript/features/HoverProvider.js.map +1 -0
- package/dist/src/plugins/typescript/features/ImplementationProvider.d.ts +9 -0
- package/dist/src/plugins/typescript/features/ImplementationProvider.js +47 -0
- package/dist/src/plugins/typescript/features/ImplementationProvider.js.map +1 -0
- package/dist/src/plugins/typescript/features/InlayHintProvider.d.ts +22 -0
- package/dist/src/plugins/typescript/features/InlayHintProvider.js +225 -0
- package/dist/src/plugins/typescript/features/InlayHintProvider.js.map +1 -0
- package/dist/src/plugins/typescript/features/RenameProvider.d.ts +53 -0
- package/dist/src/plugins/typescript/features/RenameProvider.js +423 -0
- package/dist/src/plugins/typescript/features/RenameProvider.js.map +1 -0
- package/dist/src/plugins/typescript/features/SelectionRangeProvider.d.ts +18 -0
- package/dist/src/plugins/typescript/features/SelectionRangeProvider.js +62 -0
- package/dist/src/plugins/typescript/features/SelectionRangeProvider.js.map +1 -0
- package/dist/src/plugins/typescript/features/SemanticTokensProvider.d.ts +15 -0
- package/dist/src/plugins/typescript/features/SemanticTokensProvider.js +116 -0
- package/dist/src/plugins/typescript/features/SemanticTokensProvider.js.map +1 -0
- package/dist/src/plugins/typescript/features/SignatureHelpProvider.d.ts +22 -0
- package/dist/src/plugins/typescript/features/SignatureHelpProvider.js +110 -0
- package/dist/src/plugins/typescript/features/SignatureHelpProvider.js.map +1 -0
- package/dist/src/plugins/typescript/features/TypeDefinitionProvider.d.ts +9 -0
- package/dist/src/plugins/typescript/features/TypeDefinitionProvider.js +35 -0
- package/dist/src/plugins/typescript/features/TypeDefinitionProvider.js.map +1 -0
- package/dist/src/plugins/typescript/features/UpdateImportsProvider.d.ts +11 -0
- package/dist/src/plugins/typescript/features/UpdateImportsProvider.js +109 -0
- package/dist/src/plugins/typescript/features/UpdateImportsProvider.js.map +1 -0
- package/dist/src/plugins/typescript/features/WorkspaceSymbolProvider.d.ts +25 -0
- package/dist/src/plugins/typescript/features/WorkspaceSymbolProvider.js +176 -0
- package/dist/src/plugins/typescript/features/WorkspaceSymbolProvider.js.map +1 -0
- package/dist/src/plugins/typescript/features/getDirectiveCommentCompletions.d.ts +13 -0
- package/dist/src/plugins/typescript/features/getDirectiveCommentCompletions.js +58 -0
- package/dist/src/plugins/typescript/features/getDirectiveCommentCompletions.js.map +1 -0
- package/dist/src/plugins/typescript/features/getJsDocTemplateCompletion.d.ts +4 -0
- package/dist/src/plugins/typescript/features/getJsDocTemplateCompletion.js +57 -0
- package/dist/src/plugins/typescript/features/getJsDocTemplateCompletion.js.map +1 -0
- package/dist/src/plugins/typescript/features/utils.d.ts +81 -0
- package/dist/src/plugins/typescript/features/utils.js +331 -0
- package/dist/src/plugins/typescript/features/utils.js.map +1 -0
- package/dist/src/plugins/typescript/macroforgeAugmenter.d.ts +23 -0
- package/dist/src/plugins/typescript/macroforgeAugmenter.js +41 -0
- package/dist/src/plugins/typescript/macroforgeAugmenter.js.map +1 -0
- package/dist/src/plugins/typescript/module-loader.d.ts +28 -0
- package/dist/src/plugins/typescript/module-loader.js +254 -0
- package/dist/src/plugins/typescript/module-loader.js.map +1 -0
- package/dist/src/plugins/typescript/previewer.d.ts +7 -0
- package/dist/src/plugins/typescript/previewer.js +120 -0
- package/dist/src/plugins/typescript/previewer.js.map +1 -0
- package/dist/src/plugins/typescript/service.d.ts +105 -0
- package/dist/src/plugins/typescript/service.js +1073 -0
- package/dist/src/plugins/typescript/service.js.map +1 -0
- package/dist/src/plugins/typescript/serviceCache.d.ts +90 -0
- package/dist/src/plugins/typescript/serviceCache.js +50 -0
- package/dist/src/plugins/typescript/serviceCache.js.map +1 -0
- package/dist/src/plugins/typescript/svelte-ast-utils.d.ts +77 -0
- package/dist/src/plugins/typescript/svelte-ast-utils.js +100 -0
- package/dist/src/plugins/typescript/svelte-ast-utils.js.map +1 -0
- package/dist/src/plugins/typescript/svelte-sys.d.ts +9 -0
- package/dist/src/plugins/typescript/svelte-sys.js +79 -0
- package/dist/src/plugins/typescript/svelte-sys.js.map +1 -0
- package/dist/src/plugins/typescript/utils.d.ts +48 -0
- package/dist/src/plugins/typescript/utils.js +334 -0
- package/dist/src/plugins/typescript/utils.js.map +1 -0
- package/dist/src/server.d.ts +19 -0
- package/dist/src/server.js +434 -0
- package/dist/src/server.js.map +1 -0
- package/dist/src/svelte-check.d.ts +65 -0
- package/dist/src/svelte-check.js +288 -0
- package/dist/src/svelte-check.js.map +1 -0
- package/dist/src/utils.d.ts +111 -0
- package/dist/src/utils.js +337 -0
- package/dist/src/utils.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- 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;
|