@mirascript/monaco 0.1.44 → 0.1.46
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 +156 -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 +5 -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 +11 -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 +13 -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,29 @@ ${def.doc.join("\n")}`
|
|
|
1933
1979
|
|
|
1934
1980
|
// src/lsp/providers/definition-reference-provider.ts
|
|
1935
1981
|
var DefinitionReferenceProvider = class extends Provider {
|
|
1936
|
-
constructor(
|
|
1937
|
-
|
|
1938
|
-
|
|
1939
|
-
|
|
1940
|
-
|
|
1941
|
-
|
|
1942
|
-
|
|
1982
|
+
constructor() {
|
|
1983
|
+
super(...arguments);
|
|
1984
|
+
/** 创建全局模型 */
|
|
1985
|
+
this.createGlobalModel = (uri) => editor.createModel(``, "mirascript-doc", Uri.parse(uri));
|
|
1986
|
+
}
|
|
1987
|
+
#globalModel;
|
|
1988
|
+
/** 全局模型 */
|
|
1989
|
+
async getGlobalModel() {
|
|
1990
|
+
if (!this.#globalModel || this.#globalModel.isDisposed()) {
|
|
1991
|
+
this.#globalModel = await this.createGlobalModel("mirascript:///lib/global.mira") ?? void 0;
|
|
1992
|
+
}
|
|
1993
|
+
return this.#globalModel;
|
|
1943
1994
|
}
|
|
1944
1995
|
/** 准备要显示的定义 */
|
|
1945
1996
|
async prepareGlobal(model, path) {
|
|
1946
|
-
const { globalModel } = this;
|
|
1947
1997
|
const globals = await this.getContext(model);
|
|
1948
1998
|
const [name, ...access] = path;
|
|
1949
1999
|
const [parent, value] = getDeep(globals, name, access);
|
|
1950
2000
|
if (value === void 0) return void 0;
|
|
1951
2001
|
const { script, doc } = valueDoc(path.at(-1), value, "declare", parent);
|
|
1952
|
-
const code = [
|
|
2002
|
+
const code = [...docComment(doc), script, ""];
|
|
2003
|
+
const globalModel = await this.getGlobalModel();
|
|
2004
|
+
if (!globalModel) return void 0;
|
|
1953
2005
|
globalModel.setValue(code.join("\n"));
|
|
1954
2006
|
return {
|
|
1955
2007
|
uri: globalModel.uri,
|
|
@@ -2303,6 +2355,11 @@ var HoverProvider = class extends Provider {
|
|
|
2303
2355
|
};
|
|
2304
2356
|
break;
|
|
2305
2357
|
}
|
|
2358
|
+
case DiagnosticCode10.LocalModule:
|
|
2359
|
+
content = {
|
|
2360
|
+
value: codeblock(`\0mod ${model.getValueInRange(tag.range)}`)
|
|
2361
|
+
};
|
|
2362
|
+
break;
|
|
2306
2363
|
case DiagnosticCode10.LocalImmutable:
|
|
2307
2364
|
content = {
|
|
2308
2365
|
value: codeblock(`\0let ${model.getValueInRange(tag.range)}`)
|
|
@@ -2734,6 +2791,10 @@ var DocumentSemanticTokensProvider = class extends Provider {
|
|
|
2734
2791
|
tokenType = 4 /* FUNCTION */;
|
|
2735
2792
|
break;
|
|
2736
2793
|
}
|
|
2794
|
+
case DiagnosticCode13.LocalModule: {
|
|
2795
|
+
tokenType = 5 /* MODULE */;
|
|
2796
|
+
break;
|
|
2797
|
+
}
|
|
2737
2798
|
case DiagnosticCode13.ParameterMutable:
|
|
2738
2799
|
case DiagnosticCode13.ParameterSubPatternMutable:
|
|
2739
2800
|
case DiagnosticCode13.ParameterMutableRest: {
|
|
@@ -2789,6 +2850,9 @@ var DocumentSemanticTokensProvider = class extends Provider {
|
|
|
2789
2850
|
});
|
|
2790
2851
|
}
|
|
2791
2852
|
for (const ref of references) {
|
|
2853
|
+
if (ref.code === DiagnosticCode13.ExportedLocal) {
|
|
2854
|
+
continue;
|
|
2855
|
+
}
|
|
2792
2856
|
data.push({
|
|
2793
2857
|
row: ref.range.startLineNumber - 1,
|
|
2794
2858
|
col: ref.range.startColumn - 1,
|
|
@@ -2933,45 +2997,52 @@ var SignatureHelpProvider = class extends Provider {
|
|
|
2933
2997
|
};
|
|
2934
2998
|
|
|
2935
2999
|
// src/lsp/index.ts
|
|
2936
|
-
async function registerLSP(contextProvider2) {
|
|
3000
|
+
async function registerLSP(contextProvider2, features = {}) {
|
|
2937
3001
|
Provider.setContextProvider(contextProvider2);
|
|
2938
3002
|
const { loadModule } = await import("@mirascript/bindings/wasm");
|
|
2939
3003
|
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
|
-
|
|
3004
|
+
const disposables = [];
|
|
3005
|
+
const registerIfEnabled = (feature, provider, register) => {
|
|
3006
|
+
const providerInstance = new provider(() => features[feature] !== false);
|
|
3007
|
+
const d = register(["mirascript", "mirascript-template"], providerInstance);
|
|
3008
|
+
if (Array.isArray(d)) disposables.push(...d);
|
|
3009
|
+
else disposables.push(d);
|
|
3010
|
+
};
|
|
3011
|
+
registerIfEnabled("codeAction", CodeActionProvider, languages.registerCodeActionProvider);
|
|
3012
|
+
registerIfEnabled("codeLens", CodeLensProvider, languages.registerCodeLensProvider);
|
|
3013
|
+
registerIfEnabled("color", ColorProvider, languages.registerColorProvider);
|
|
3014
|
+
registerIfEnabled("definitionReference", DefinitionReferenceProvider, (language, provider) => {
|
|
3015
|
+
return [
|
|
3016
|
+
languages.registerDefinitionProvider(language, provider),
|
|
3017
|
+
languages.registerReferenceProvider(language, provider)
|
|
3018
|
+
];
|
|
3019
|
+
});
|
|
3020
|
+
registerIfEnabled("documentHighlight", DocumentHighlightProvider, languages.registerDocumentHighlightProvider);
|
|
3021
|
+
registerIfEnabled("documentSymbol", DocumentSymbolProvider, languages.registerDocumentSymbolProvider);
|
|
3022
|
+
registerIfEnabled("formatter", FormatterProvider, (language, provider) => {
|
|
3023
|
+
return [
|
|
3024
|
+
languages.registerDocumentFormattingEditProvider(language, provider)
|
|
3025
|
+
// languages.registerDocumentRangeFormattingEditProvider(language, provider),
|
|
3026
|
+
// languages.registerOnTypeFormattingEditProvider(language, provider),
|
|
3027
|
+
];
|
|
3028
|
+
});
|
|
3029
|
+
registerIfEnabled("hover", HoverProvider, languages.registerHoverProvider);
|
|
3030
|
+
registerIfEnabled("inlayHints", InlayHintsProvider, languages.registerInlayHintsProvider);
|
|
3031
|
+
registerIfEnabled("range", RangeProvider, (language, provider) => {
|
|
3032
|
+
return [
|
|
3033
|
+
languages.registerFoldingRangeProvider(language, provider),
|
|
3034
|
+
languages.registerSelectionRangeProvider(language, provider)
|
|
3035
|
+
];
|
|
3036
|
+
});
|
|
3037
|
+
registerIfEnabled(
|
|
3038
|
+
"documentSemanticTokens",
|
|
3039
|
+
DocumentSemanticTokensProvider,
|
|
3040
|
+
languages.registerDocumentSemanticTokensProvider
|
|
3041
|
+
);
|
|
3042
|
+
registerIfEnabled("rename", RenameProvider, languages.registerRenameProvider);
|
|
3043
|
+
registerIfEnabled("completionItem", CompletionItemProvider, languages.registerCompletionItemProvider);
|
|
3044
|
+
registerIfEnabled("signatureHelp", SignatureHelpProvider, languages.registerSignatureHelpProvider);
|
|
3045
|
+
return disposables;
|
|
2975
3046
|
}
|
|
2976
3047
|
export {
|
|
2977
3048
|
CodeActionProvider,
|