@mirascript/monaco 0.1.44 → 0.1.45
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/dist/basic/index.js +2 -2
- package/dist/basic/tokens-provider.d.ts.map +1 -1
- package/dist/{chunk-QENEDDTR.js → chunk-LZVIYOSD.js} +8 -3
- package/dist/chunk-LZVIYOSD.js.map +6 -0
- package/dist/{chunk-B45DYEY5.js → chunk-NAOKM25O.js} +2 -2
- package/dist/chunk-NAOKM25O.js.map +6 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/lsp/compile-result.d.ts +3 -6
- package/dist/lsp/compile-result.d.ts.map +1 -1
- package/dist/lsp/diagnostics.d.ts.map +1 -1
- package/dist/lsp/index.d.ts +22 -1
- package/dist/lsp/index.d.ts.map +1 -1
- package/dist/lsp/index.js +149 -85
- package/dist/lsp/index.js.map +1 -1
- package/dist/lsp/providers/base.d.ts +4 -0
- package/dist/lsp/providers/base.d.ts.map +1 -1
- package/dist/lsp/providers/completion-item-provider.d.ts.map +1 -1
- package/dist/lsp/providers/definition-reference-provider.d.ts +3 -2
- package/dist/lsp/providers/definition-reference-provider.d.ts.map +1 -1
- package/dist/lsp/providers/hover-provider.d.ts.map +1 -1
- package/dist/lsp/providers/semantic-tokens-provider.d.ts.map +1 -1
- package/dist/lsp/utils.d.ts.map +1 -1
- package/dist/lsp/worker-helper.d.ts.map +1 -1
- package/package.json +6 -6
- package/src/basic/tokens-provider.ts +6 -1
- package/src/index.ts +3 -1
- package/src/lsp/compile-result.ts +8 -5
- package/src/lsp/diagnostics.ts +10 -18
- package/src/lsp/index.ts +71 -36
- package/src/lsp/providers/base.ts +6 -0
- package/src/lsp/providers/code-lens-provider.ts +1 -1
- package/src/lsp/providers/completion-item-provider.ts +44 -11
- package/src/lsp/providers/definition-reference-provider.ts +9 -10
- package/src/lsp/providers/hover-provider.ts +5 -0
- package/src/lsp/providers/semantic-tokens-provider.ts +7 -0
- package/src/lsp/utils.ts +17 -10
- package/src/lsp/worker-helper.ts +1 -0
- package/src/monaco-api.js +1 -1
- package/dist/chunk-B45DYEY5.js.map +0 -6
- package/dist/chunk-QENEDDTR.js.map +0 -6
package/dist/lsp/index.js
CHANGED
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
REG_ORDINAL_FULL,
|
|
9
9
|
RESERVED_KEYWORDS,
|
|
10
10
|
isKeyword
|
|
11
|
-
} from "../chunk-
|
|
11
|
+
} from "../chunk-LZVIYOSD.js";
|
|
12
12
|
import {
|
|
13
13
|
Emitter,
|
|
14
14
|
MarkerSeverity,
|
|
@@ -18,7 +18,7 @@ import {
|
|
|
18
18
|
Uri,
|
|
19
19
|
editor,
|
|
20
20
|
languages
|
|
21
|
-
} from "../chunk-
|
|
21
|
+
} from "../chunk-NAOKM25O.js";
|
|
22
22
|
|
|
23
23
|
// src/lsp/providers/base.ts
|
|
24
24
|
import { DefaultVmContext } from "@mirascript/mirascript/subtle";
|
|
@@ -49,11 +49,12 @@ import {
|
|
|
49
49
|
parseDiagnostics,
|
|
50
50
|
DiagnosticCode
|
|
51
51
|
} from "@mirascript/mirascript/subtle";
|
|
52
|
-
var LocalFunctionType = [DiagnosticCode.LocalFunction];
|
|
53
52
|
var LocalVariableType = [
|
|
54
53
|
DiagnosticCode.LocalMutable,
|
|
55
54
|
DiagnosticCode.LocalImmutable,
|
|
56
|
-
DiagnosticCode.LocalConst
|
|
55
|
+
DiagnosticCode.LocalConst,
|
|
56
|
+
DiagnosticCode.LocalFunction,
|
|
57
|
+
DiagnosticCode.LocalModule
|
|
57
58
|
];
|
|
58
59
|
var ParameterExplicitType = [
|
|
59
60
|
DiagnosticCode.ParameterMutable,
|
|
@@ -77,7 +78,7 @@ var ParameterPlaceholderType = [
|
|
|
77
78
|
...ParameterPatternType,
|
|
78
79
|
...ParameterItType
|
|
79
80
|
];
|
|
80
|
-
var LocalDefinitionType = [...LocalVariableType, ...
|
|
81
|
+
var LocalDefinitionType = [...LocalVariableType, ...ParameterDefinitionType];
|
|
81
82
|
var CompileResult = class {
|
|
82
83
|
constructor(cacheKey, version, source, result) {
|
|
83
84
|
this.cacheKey = cacheKey;
|
|
@@ -407,7 +408,7 @@ var CompileResult = class {
|
|
|
407
408
|
};
|
|
408
409
|
|
|
409
410
|
// src/lsp/diagnostics.ts
|
|
410
|
-
import { DiagnosticCode as DiagnosticCode3, getDiagnosticMessage } from "@mirascript/mirascript/subtle";
|
|
411
|
+
import { DiagnosticCode as DiagnosticCode3, getDiagnosticMessage, formatDiagnosticMessage } from "@mirascript/mirascript/subtle";
|
|
411
412
|
|
|
412
413
|
// src/lsp/utils.ts
|
|
413
414
|
import { DiagnosticCode as DiagnosticCode2 } from "@mirascript/constants";
|
|
@@ -745,25 +746,33 @@ function valueDoc(name, value, type, parent) {
|
|
|
745
746
|
prefix = `${name}: `;
|
|
746
747
|
}
|
|
747
748
|
if (isVmModule(value)) {
|
|
748
|
-
const doc = `模块 \`${value.name}\``;
|
|
749
749
|
let script;
|
|
750
750
|
if (type === "declare") {
|
|
751
751
|
const exports = value.keys();
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
752
|
+
if (!exports.length) {
|
|
753
|
+
script = `mod ${value.name} { }`;
|
|
754
|
+
} else {
|
|
755
|
+
script = `mod ${value.name} {
|
|
756
|
+
`;
|
|
757
|
+
for (const k of exports) {
|
|
758
|
+
const v = value.get(k);
|
|
759
|
+
const vDoc = valueDoc(k, v, "declare", value);
|
|
760
|
+
const code = [...docComment(vDoc.doc), "pub " + vDoc.script];
|
|
761
|
+
const lines = code.flatMap((line) => line.split("\n"));
|
|
762
|
+
for (const line of lines) {
|
|
763
|
+
script += line ? " " + line + "\n" : "\n";
|
|
764
|
+
}
|
|
765
|
+
script += "\n";
|
|
766
|
+
}
|
|
767
|
+
script = script.trimEnd() + "\n}";
|
|
768
|
+
}
|
|
760
769
|
} else {
|
|
761
|
-
script = `
|
|
770
|
+
script = `mod ${value.name}`;
|
|
762
771
|
if (value.name !== name) {
|
|
763
772
|
script = `${prefix}${script}`;
|
|
764
773
|
}
|
|
765
774
|
}
|
|
766
|
-
return { script, doc:
|
|
775
|
+
return { script, doc: [`模块 \`${value.name}\``] };
|
|
767
776
|
}
|
|
768
777
|
let valueStr = UNKNOWN_REPR;
|
|
769
778
|
if (value !== void 0) {
|
|
@@ -838,12 +847,12 @@ function isDeprecatedGlobal(globals, name) {
|
|
|
838
847
|
}
|
|
839
848
|
|
|
840
849
|
// src/lsp/diagnostics.ts
|
|
841
|
-
var formatMessage = (model,
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
850
|
+
var formatMessage = (model, code, $0) => {
|
|
851
|
+
return formatDiagnosticMessage(code, () => {
|
|
852
|
+
if (!$0) return void 0;
|
|
853
|
+
if (typeof $0 == "string") return $0;
|
|
854
|
+
return model.getValueInRange($0);
|
|
855
|
+
});
|
|
847
856
|
};
|
|
848
857
|
var makeMarkerData = (model, range, code, message, severity, tags) => {
|
|
849
858
|
const { startLineNumber, startColumn, endLineNumber, endColumn } = range;
|
|
@@ -851,8 +860,7 @@ var makeMarkerData = (model, range, code, message, severity, tags) => {
|
|
|
851
860
|
if (typeof code != "number") {
|
|
852
861
|
message = "";
|
|
853
862
|
} else {
|
|
854
|
-
|
|
855
|
-
message = template ? formatMessage(model, template, range) : "Unknown diagnostic";
|
|
863
|
+
message = formatMessage(model, code, range);
|
|
856
864
|
}
|
|
857
865
|
}
|
|
858
866
|
const marker = {
|
|
@@ -941,9 +949,7 @@ async function makeModelMarkers(model, result) {
|
|
|
941
949
|
for (const g of globals) {
|
|
942
950
|
const { name } = g;
|
|
943
951
|
if (!context.has(name)) {
|
|
944
|
-
const
|
|
945
|
-
if (!template) continue;
|
|
946
|
-
const message = formatMessage(model, template, name);
|
|
952
|
+
const message = formatMessage(model, DiagnosticCode3.GlobalVariableNotDeclared, name);
|
|
947
953
|
for (const ref of g.references) {
|
|
948
954
|
markers.push(
|
|
949
955
|
makeMarkerData(
|
|
@@ -961,9 +967,7 @@ async function makeModelMarkers(model, result) {
|
|
|
961
967
|
if (deprecated) {
|
|
962
968
|
const replacement = deprecated.use;
|
|
963
969
|
if (replacement) {
|
|
964
|
-
const
|
|
965
|
-
if (!template) continue;
|
|
966
|
-
const message = formatMessage(model, template, replacement);
|
|
970
|
+
const message = formatMessage(model, deprecated.message, replacement);
|
|
967
971
|
for (const ref of g.references) {
|
|
968
972
|
markers.push(
|
|
969
973
|
makeMarkerData(model, ref.range, deprecated.message, message, MarkerSeverity.Hint, [
|
|
@@ -1072,6 +1076,7 @@ async function compile(model) {
|
|
|
1072
1076
|
const req = [cacheKey, version, value, mode];
|
|
1073
1077
|
const res = USE_WORKER ? compileWorker(req) : compileSync(req);
|
|
1074
1078
|
void res.then(async (result) => {
|
|
1079
|
+
if (model.isDisposed()) return;
|
|
1075
1080
|
const setModelMarkers = editor?.setModelMarkers;
|
|
1076
1081
|
if (typeof setModelMarkers != "function") return;
|
|
1077
1082
|
const markers = await makeModelMarkers(model, result);
|
|
@@ -1168,11 +1173,16 @@ async function getContextImpl(model, clearCache) {
|
|
|
1168
1173
|
}
|
|
1169
1174
|
var cachedContext = null;
|
|
1170
1175
|
var Provider = class _Provider {
|
|
1171
|
-
constructor() {
|
|
1176
|
+
constructor(enabled = () => true) {
|
|
1177
|
+
this.enabled = enabled;
|
|
1172
1178
|
this.displayName = "MiraScript LSP";
|
|
1173
1179
|
this._debugDisplayName = "MiraScript LSP";
|
|
1174
1180
|
this._onDidChange = null;
|
|
1175
1181
|
}
|
|
1182
|
+
/** 是否启用 */
|
|
1183
|
+
get isEnabled() {
|
|
1184
|
+
return this.enabled();
|
|
1185
|
+
}
|
|
1176
1186
|
/** 设置全局变量提供者 */
|
|
1177
1187
|
static setContextProvider(provider) {
|
|
1178
1188
|
contextProvider = provider;
|
|
@@ -1187,6 +1197,7 @@ var Provider = class _Provider {
|
|
|
1187
1197
|
}
|
|
1188
1198
|
/** 获取编译结果 */
|
|
1189
1199
|
async getCompileResult(model) {
|
|
1200
|
+
if (!this.isEnabled) return void 0;
|
|
1190
1201
|
return _Provider.getCompileResult(model);
|
|
1191
1202
|
}
|
|
1192
1203
|
/** 获取执行上下文(全局变量) */
|
|
@@ -1422,7 +1433,7 @@ var CodeLensProvider = class extends Provider {
|
|
|
1422
1433
|
if (!result) return void 0;
|
|
1423
1434
|
const lenses = [];
|
|
1424
1435
|
for (const { definition, references } of result.groupedTags(model).locals) {
|
|
1425
|
-
if (definition.code === DiagnosticCode5.LocalFunction) {
|
|
1436
|
+
if (definition.code === DiagnosticCode5.LocalFunction || definition.code === DiagnosticCode5.LocalModule) {
|
|
1426
1437
|
lenses.push({
|
|
1427
1438
|
range: definition.range,
|
|
1428
1439
|
command: {
|
|
@@ -1728,13 +1739,34 @@ var CompletionItemProvider = class extends Provider {
|
|
|
1728
1739
|
this.triggerCharacters = [".", ":"];
|
|
1729
1740
|
}
|
|
1730
1741
|
/** 查找全局变量 */
|
|
1731
|
-
async completeGlobal(model, char, locals, range) {
|
|
1742
|
+
async completeGlobal(model, char, locals, range, hasGlobalPrefix) {
|
|
1732
1743
|
const global = await this.getContext(model);
|
|
1733
1744
|
const suggestions = [];
|
|
1734
1745
|
const localKeys = new Set(locals.map((item) => item.insertText));
|
|
1735
1746
|
for (const key of new Set(global.keys())) {
|
|
1736
1747
|
if (!global.has(key)) continue;
|
|
1737
1748
|
const element = global.get(key);
|
|
1749
|
+
let prefix = key;
|
|
1750
|
+
const edits = [];
|
|
1751
|
+
if (!REG_IDENTIFIER_FULL.test(key)) {
|
|
1752
|
+
const kStr = serialize2(key);
|
|
1753
|
+
if (hasGlobalPrefix) {
|
|
1754
|
+
prefix = `[${kStr}]`;
|
|
1755
|
+
edits.push({
|
|
1756
|
+
range: {
|
|
1757
|
+
startLineNumber: range.replace.startLineNumber,
|
|
1758
|
+
startColumn: range.replace.startColumn - 1,
|
|
1759
|
+
endLineNumber: range.replace.endLineNumber,
|
|
1760
|
+
endColumn: range.replace.endColumn
|
|
1761
|
+
},
|
|
1762
|
+
text: ""
|
|
1763
|
+
});
|
|
1764
|
+
} else {
|
|
1765
|
+
prefix = `global[${serialize2(key)}]`;
|
|
1766
|
+
}
|
|
1767
|
+
} else if (!hasGlobalPrefix && (localKeys.has(key) || isKeyword(key))) {
|
|
1768
|
+
prefix = `global.${key}`;
|
|
1769
|
+
}
|
|
1738
1770
|
if (isVmModule2(element)) {
|
|
1739
1771
|
for (const f of element.keys()) {
|
|
1740
1772
|
if (char && !f.toLowerCase().includes(char)) {
|
|
@@ -1743,9 +1775,10 @@ var CompletionItemProvider = class extends Provider {
|
|
|
1743
1775
|
const field = element.get(f);
|
|
1744
1776
|
if (field === void 0) continue;
|
|
1745
1777
|
suggestions.push({
|
|
1746
|
-
insertText:
|
|
1778
|
+
insertText: `${prefix}.${f}`,
|
|
1747
1779
|
filterText: filterText(f, char),
|
|
1748
1780
|
range,
|
|
1781
|
+
additionalTextEdits: edits,
|
|
1749
1782
|
vmParent: element,
|
|
1750
1783
|
...completion(model, DESC_GLOBAL, `${key}.${f}`, field, void 0, true)
|
|
1751
1784
|
});
|
|
@@ -1758,9 +1791,10 @@ var CompletionItemProvider = class extends Provider {
|
|
|
1758
1791
|
continue;
|
|
1759
1792
|
}
|
|
1760
1793
|
suggestions.push({
|
|
1761
|
-
insertText:
|
|
1794
|
+
insertText: prefix,
|
|
1762
1795
|
filterText: filterText(key, char),
|
|
1763
1796
|
range,
|
|
1797
|
+
additionalTextEdits: edits,
|
|
1764
1798
|
vmParent: global,
|
|
1765
1799
|
...completion(model, DESC_GLOBAL, key, element, void 0, false)
|
|
1766
1800
|
});
|
|
@@ -1780,12 +1814,18 @@ var CompletionItemProvider = class extends Provider {
|
|
|
1780
1814
|
if (char && !name.toLowerCase().includes(char)) continue;
|
|
1781
1815
|
if (locals.has(name)) continue;
|
|
1782
1816
|
locals.add(name);
|
|
1783
|
-
|
|
1817
|
+
const suggestion = {
|
|
1784
1818
|
insertText: name,
|
|
1785
1819
|
filterText: filterText(name, char),
|
|
1786
1820
|
range,
|
|
1787
1821
|
...completion(model, DESC_LOCAL, name, void 0, fn, false)
|
|
1788
|
-
}
|
|
1822
|
+
};
|
|
1823
|
+
if (definition.code === DiagnosticCode7.LocalModule) {
|
|
1824
|
+
suggestion.kind = languages.CompletionItemKind.Module;
|
|
1825
|
+
} else if (definition.code === DiagnosticCode7.LocalFunction) {
|
|
1826
|
+
suggestion.kind = languages.CompletionItemKind.Function;
|
|
1827
|
+
}
|
|
1828
|
+
suggestions.push(suggestion);
|
|
1789
1829
|
}
|
|
1790
1830
|
if (!scope.parent) break;
|
|
1791
1831
|
scope = scope.parent;
|
|
@@ -1849,7 +1889,13 @@ var CompletionItemProvider = class extends Provider {
|
|
|
1849
1889
|
model,
|
|
1850
1890
|
void 0,
|
|
1851
1891
|
[],
|
|
1852
|
-
|
|
1892
|
+
this.toCompletionItemRanges(position, {
|
|
1893
|
+
startLineNumber: position.lineNumber,
|
|
1894
|
+
startColumn: position.column,
|
|
1895
|
+
endLineNumber: position.lineNumber,
|
|
1896
|
+
endColumn: position.column
|
|
1897
|
+
}),
|
|
1898
|
+
true
|
|
1853
1899
|
);
|
|
1854
1900
|
return { suggestions: globals2 };
|
|
1855
1901
|
}
|
|
@@ -1907,7 +1953,7 @@ var CompletionItemProvider = class extends Provider {
|
|
|
1907
1953
|
}
|
|
1908
1954
|
const suggestions = COMMON_GLOBAL_SUGGESTIONS(completionRange, prev === "::");
|
|
1909
1955
|
const locals = await this.completeLocal(model, position, char, completionRange);
|
|
1910
|
-
const globals = await this.completeGlobal(model, char, locals, completionRange);
|
|
1956
|
+
const globals = await this.completeGlobal(model, char, locals, completionRange, false);
|
|
1911
1957
|
suggestions.push(...locals, ...globals);
|
|
1912
1958
|
return { suggestions };
|
|
1913
1959
|
}
|
|
@@ -1933,23 +1979,22 @@ ${def.doc.join("\n")}`
|
|
|
1933
1979
|
|
|
1934
1980
|
// src/lsp/providers/definition-reference-provider.ts
|
|
1935
1981
|
var DefinitionReferenceProvider = class extends Provider {
|
|
1936
|
-
|
|
1937
|
-
|
|
1938
|
-
|
|
1939
|
-
|
|
1940
|
-
|
|
1941
|
-
|
|
1942
|
-
this.globalModel = globalModel;
|
|
1982
|
+
/** 全局模型 */
|
|
1983
|
+
get globalModel() {
|
|
1984
|
+
if (!this._globalModel || this._globalModel.isDisposed()) {
|
|
1985
|
+
this._globalModel = editor.createModel(``, "mirascript-doc", Uri.parse("mirascript:///lib/global.mira"));
|
|
1986
|
+
}
|
|
1987
|
+
return this._globalModel;
|
|
1943
1988
|
}
|
|
1944
1989
|
/** 准备要显示的定义 */
|
|
1945
1990
|
async prepareGlobal(model, path) {
|
|
1946
|
-
const { globalModel } = this;
|
|
1947
1991
|
const globals = await this.getContext(model);
|
|
1948
1992
|
const [name, ...access] = path;
|
|
1949
1993
|
const [parent, value] = getDeep(globals, name, access);
|
|
1950
1994
|
if (value === void 0) return void 0;
|
|
1951
1995
|
const { script, doc } = valueDoc(path.at(-1), value, "declare", parent);
|
|
1952
|
-
const code = [
|
|
1996
|
+
const code = [...docComment(doc), script, ""];
|
|
1997
|
+
const { globalModel } = this;
|
|
1953
1998
|
globalModel.setValue(code.join("\n"));
|
|
1954
1999
|
return {
|
|
1955
2000
|
uri: globalModel.uri,
|
|
@@ -2303,6 +2348,11 @@ var HoverProvider = class extends Provider {
|
|
|
2303
2348
|
};
|
|
2304
2349
|
break;
|
|
2305
2350
|
}
|
|
2351
|
+
case DiagnosticCode10.LocalModule:
|
|
2352
|
+
content = {
|
|
2353
|
+
value: codeblock(`\0mod ${model.getValueInRange(tag.range)}`)
|
|
2354
|
+
};
|
|
2355
|
+
break;
|
|
2306
2356
|
case DiagnosticCode10.LocalImmutable:
|
|
2307
2357
|
content = {
|
|
2308
2358
|
value: codeblock(`\0let ${model.getValueInRange(tag.range)}`)
|
|
@@ -2734,6 +2784,10 @@ var DocumentSemanticTokensProvider = class extends Provider {
|
|
|
2734
2784
|
tokenType = 4 /* FUNCTION */;
|
|
2735
2785
|
break;
|
|
2736
2786
|
}
|
|
2787
|
+
case DiagnosticCode13.LocalModule: {
|
|
2788
|
+
tokenType = 5 /* MODULE */;
|
|
2789
|
+
break;
|
|
2790
|
+
}
|
|
2737
2791
|
case DiagnosticCode13.ParameterMutable:
|
|
2738
2792
|
case DiagnosticCode13.ParameterSubPatternMutable:
|
|
2739
2793
|
case DiagnosticCode13.ParameterMutableRest: {
|
|
@@ -2789,6 +2843,9 @@ var DocumentSemanticTokensProvider = class extends Provider {
|
|
|
2789
2843
|
});
|
|
2790
2844
|
}
|
|
2791
2845
|
for (const ref of references) {
|
|
2846
|
+
if (ref.code === DiagnosticCode13.ExportedLocal) {
|
|
2847
|
+
continue;
|
|
2848
|
+
}
|
|
2792
2849
|
data.push({
|
|
2793
2850
|
row: ref.range.startLineNumber - 1,
|
|
2794
2851
|
col: ref.range.startColumn - 1,
|
|
@@ -2933,45 +2990,52 @@ var SignatureHelpProvider = class extends Provider {
|
|
|
2933
2990
|
};
|
|
2934
2991
|
|
|
2935
2992
|
// src/lsp/index.ts
|
|
2936
|
-
async function registerLSP(contextProvider2) {
|
|
2993
|
+
async function registerLSP(contextProvider2, features = {}) {
|
|
2937
2994
|
Provider.setContextProvider(contextProvider2);
|
|
2938
2995
|
const { loadModule } = await import("@mirascript/bindings/wasm");
|
|
2939
2996
|
await loadModule();
|
|
2940
|
-
const
|
|
2941
|
-
const
|
|
2942
|
-
|
|
2943
|
-
|
|
2944
|
-
|
|
2945
|
-
|
|
2946
|
-
|
|
2947
|
-
|
|
2948
|
-
|
|
2949
|
-
|
|
2950
|
-
|
|
2951
|
-
|
|
2952
|
-
|
|
2953
|
-
|
|
2954
|
-
|
|
2955
|
-
|
|
2956
|
-
|
|
2957
|
-
|
|
2958
|
-
|
|
2959
|
-
|
|
2960
|
-
|
|
2961
|
-
|
|
2962
|
-
|
|
2963
|
-
|
|
2964
|
-
|
|
2965
|
-
|
|
2966
|
-
|
|
2967
|
-
|
|
2968
|
-
|
|
2969
|
-
|
|
2970
|
-
|
|
2971
|
-
|
|
2972
|
-
|
|
2973
|
-
|
|
2974
|
-
|
|
2997
|
+
const disposables = [];
|
|
2998
|
+
const registerIfEnabled = (feature, provider, register) => {
|
|
2999
|
+
const providerInstance = new provider(() => features[feature] !== false);
|
|
3000
|
+
const d = register(["mirascript", "mirascript-template"], providerInstance);
|
|
3001
|
+
if (Array.isArray(d)) disposables.push(...d);
|
|
3002
|
+
else disposables.push(d);
|
|
3003
|
+
};
|
|
3004
|
+
registerIfEnabled("codeAction", CodeActionProvider, languages.registerCodeActionProvider);
|
|
3005
|
+
registerIfEnabled("codeLens", CodeLensProvider, languages.registerCodeLensProvider);
|
|
3006
|
+
registerIfEnabled("color", ColorProvider, languages.registerColorProvider);
|
|
3007
|
+
registerIfEnabled("definitionReference", DefinitionReferenceProvider, (language, provider) => {
|
|
3008
|
+
return [
|
|
3009
|
+
languages.registerDefinitionProvider(language, provider),
|
|
3010
|
+
languages.registerReferenceProvider(language, provider)
|
|
3011
|
+
];
|
|
3012
|
+
});
|
|
3013
|
+
registerIfEnabled("documentHighlight", DocumentHighlightProvider, languages.registerDocumentHighlightProvider);
|
|
3014
|
+
registerIfEnabled("documentSymbol", DocumentSymbolProvider, languages.registerDocumentSymbolProvider);
|
|
3015
|
+
registerIfEnabled("formatter", FormatterProvider, (language, provider) => {
|
|
3016
|
+
return [
|
|
3017
|
+
languages.registerDocumentFormattingEditProvider(language, provider)
|
|
3018
|
+
// languages.registerDocumentRangeFormattingEditProvider(language, provider),
|
|
3019
|
+
// languages.registerOnTypeFormattingEditProvider(language, provider),
|
|
3020
|
+
];
|
|
3021
|
+
});
|
|
3022
|
+
registerIfEnabled("hover", HoverProvider, languages.registerHoverProvider);
|
|
3023
|
+
registerIfEnabled("inlayHints", InlayHintsProvider, languages.registerInlayHintsProvider);
|
|
3024
|
+
registerIfEnabled("range", RangeProvider, (language, provider) => {
|
|
3025
|
+
return [
|
|
3026
|
+
languages.registerFoldingRangeProvider(language, provider),
|
|
3027
|
+
languages.registerSelectionRangeProvider(language, provider)
|
|
3028
|
+
];
|
|
3029
|
+
});
|
|
3030
|
+
registerIfEnabled(
|
|
3031
|
+
"documentSemanticTokens",
|
|
3032
|
+
DocumentSemanticTokensProvider,
|
|
3033
|
+
languages.registerDocumentSemanticTokensProvider
|
|
3034
|
+
);
|
|
3035
|
+
registerIfEnabled("rename", RenameProvider, languages.registerRenameProvider);
|
|
3036
|
+
registerIfEnabled("completionItem", CompletionItemProvider, languages.registerCompletionItemProvider);
|
|
3037
|
+
registerIfEnabled("signatureHelp", SignatureHelpProvider, languages.registerSignatureHelpProvider);
|
|
3038
|
+
return disposables;
|
|
2975
3039
|
}
|
|
2976
3040
|
export {
|
|
2977
3041
|
CodeActionProvider,
|