@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.
Files changed (43) hide show
  1. package/dist/basic/index.js +2 -2
  2. package/dist/basic/tokens-provider.d.ts.map +1 -1
  3. package/dist/{chunk-QENEDDTR.js → chunk-LZVIYOSD.js} +8 -3
  4. package/dist/chunk-LZVIYOSD.js.map +6 -0
  5. package/dist/{chunk-B45DYEY5.js → chunk-NAOKM25O.js} +2 -2
  6. package/dist/chunk-NAOKM25O.js.map +6 -0
  7. package/dist/index.d.ts +2 -0
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +3 -2
  10. package/dist/index.js.map +1 -1
  11. package/dist/lsp/compile-result.d.ts +3 -6
  12. package/dist/lsp/compile-result.d.ts.map +1 -1
  13. package/dist/lsp/diagnostics.d.ts.map +1 -1
  14. package/dist/lsp/index.d.ts +22 -1
  15. package/dist/lsp/index.d.ts.map +1 -1
  16. package/dist/lsp/index.js +149 -85
  17. package/dist/lsp/index.js.map +1 -1
  18. package/dist/lsp/providers/base.d.ts +4 -0
  19. package/dist/lsp/providers/base.d.ts.map +1 -1
  20. package/dist/lsp/providers/completion-item-provider.d.ts.map +1 -1
  21. package/dist/lsp/providers/definition-reference-provider.d.ts +3 -2
  22. package/dist/lsp/providers/definition-reference-provider.d.ts.map +1 -1
  23. package/dist/lsp/providers/hover-provider.d.ts.map +1 -1
  24. package/dist/lsp/providers/semantic-tokens-provider.d.ts.map +1 -1
  25. package/dist/lsp/utils.d.ts.map +1 -1
  26. package/dist/lsp/worker-helper.d.ts.map +1 -1
  27. package/package.json +6 -6
  28. package/src/basic/tokens-provider.ts +6 -1
  29. package/src/index.ts +3 -1
  30. package/src/lsp/compile-result.ts +8 -5
  31. package/src/lsp/diagnostics.ts +10 -18
  32. package/src/lsp/index.ts +71 -36
  33. package/src/lsp/providers/base.ts +6 -0
  34. package/src/lsp/providers/code-lens-provider.ts +1 -1
  35. package/src/lsp/providers/completion-item-provider.ts +44 -11
  36. package/src/lsp/providers/definition-reference-provider.ts +9 -10
  37. package/src/lsp/providers/hover-provider.ts +5 -0
  38. package/src/lsp/providers/semantic-tokens-provider.ts +7 -0
  39. package/src/lsp/utils.ts +17 -10
  40. package/src/lsp/worker-helper.ts +1 -0
  41. package/src/monaco-api.js +1 -1
  42. package/dist/chunk-B45DYEY5.js.map +0 -6
  43. package/dist/chunk-QENEDDTR.js.map +0 -6
package/src/lsp/index.ts CHANGED
@@ -36,52 +36,87 @@ export {
36
36
  Provider,
37
37
  };
38
38
 
39
+ /** 支持的功能 */
40
+ export type LspFeatures = {
41
+ codeAction: CodeActionProvider;
42
+ codeLens: CodeLensProvider;
43
+ color: ColorProvider;
44
+ completionItem: CompletionItemProvider;
45
+ definitionReference: DefinitionReferenceProvider;
46
+ documentHighlight: DocumentHighlightProvider;
47
+ documentSymbol: DocumentSymbolProvider;
48
+ formatter: FormatterProvider;
49
+ hover: HoverProvider;
50
+ inlayHints: InlayHintsProvider;
51
+ range: RangeProvider;
52
+ rename: RenameProvider;
53
+ documentSemanticTokens: DocumentSemanticTokensProvider;
54
+ signatureHelp: SignatureHelpProvider;
55
+ };
56
+
57
+ /** 配置启用功能 */
58
+ export type LspFeaturesConfig = { [K in keyof LspFeatures]?: boolean | undefined };
59
+
39
60
  /** 注册 LSP 相关的编辑器功能 */
40
- export async function registerLSP(contextProvider: VmContextProvider | undefined): Promise<IDisposable[]> {
61
+ export async function registerLSP(
62
+ contextProvider: VmContextProvider | undefined,
63
+ features: LspFeaturesConfig = {},
64
+ ): Promise<IDisposable[]> {
41
65
  Provider.setContextProvider(contextProvider);
42
66
  const { loadModule } = await import('@mirascript/bindings/wasm');
43
67
  await loadModule();
68
+ const disposables: IDisposable[] = [];
69
+ const registerIfEnabled = <T extends keyof LspFeatures>(
70
+ feature: T,
71
+ provider: new (enabled: () => boolean) => LspFeatures[T],
72
+ register: (language: languages.LanguageSelector, provider: LspFeatures[T]) => IDisposable | IDisposable[],
73
+ ): void => {
74
+ const providerInstance = new provider(() => features[feature] !== false);
75
+ const d = register(['mirascript', 'mirascript-template'], providerInstance);
76
+ if (Array.isArray(d)) disposables.push(...d);
77
+ else disposables.push(d);
78
+ };
44
79
 
45
- const codeActionProvider = new CodeActionProvider();
46
- const codeLensProvider = new CodeLensProvider();
47
- const colorProvider = new ColorProvider();
48
- const completionItemProvider = new CompletionItemProvider();
49
- const definitionReferenceProvider = new DefinitionReferenceProvider();
50
- const documentHighlightProvider = new DocumentHighlightProvider();
51
- const documentSymbolProvider = new DocumentSymbolProvider();
52
- const formatterProvider = new FormatterProvider();
53
- const hoverProvider = new HoverProvider();
54
- const inlayHintsProvider = new InlayHintsProvider();
55
- const rangeProvider = new RangeProvider();
56
- const renameProvider = new RenameProvider();
57
- const documentSemanticTokensProvider = new DocumentSemanticTokensProvider();
58
- const signatureHelpProvider = new SignatureHelpProvider();
80
+ registerIfEnabled('codeAction', CodeActionProvider, languages.registerCodeActionProvider);
81
+ registerIfEnabled('codeLens', CodeLensProvider, languages.registerCodeLensProvider);
82
+ registerIfEnabled('color', ColorProvider, languages.registerColorProvider);
59
83
 
60
- const language: languages.LanguageSelector = ['mirascript', 'mirascript-template'];
61
- return [
62
- languages.registerCodeActionProvider(language, codeActionProvider),
63
- languages.registerCodeLensProvider(language, codeLensProvider),
64
- languages.registerColorProvider(language, colorProvider),
84
+ registerIfEnabled('definitionReference', DefinitionReferenceProvider, (language, provider) => {
85
+ return [
86
+ languages.registerDefinitionProvider(language, provider),
87
+ languages.registerReferenceProvider(language, provider),
88
+ ];
89
+ });
65
90
 
66
- languages.registerDefinitionProvider(language, definitionReferenceProvider),
67
- languages.registerReferenceProvider(language, definitionReferenceProvider),
91
+ registerIfEnabled('documentHighlight', DocumentHighlightProvider, languages.registerDocumentHighlightProvider);
92
+ registerIfEnabled('documentSymbol', DocumentSymbolProvider, languages.registerDocumentSymbolProvider);
68
93
 
69
- languages.registerDocumentHighlightProvider(language, documentHighlightProvider),
70
- languages.registerDocumentSymbolProvider(language, documentSymbolProvider),
94
+ registerIfEnabled('formatter', FormatterProvider, (language, provider) => {
95
+ return [
96
+ languages.registerDocumentFormattingEditProvider(language, provider),
97
+ // languages.registerDocumentRangeFormattingEditProvider(language, provider),
98
+ // languages.registerOnTypeFormattingEditProvider(language, provider),
99
+ ];
100
+ });
71
101
 
72
- languages.registerDocumentFormattingEditProvider(language, formatterProvider),
73
- // languages.registerDocumentRangeFormattingEditProvider(language, formatterProvider),
74
- // languages.registerOnTypeFormattingEditProvider(language, formatterProvider),
102
+ registerIfEnabled('hover', HoverProvider, languages.registerHoverProvider);
103
+ registerIfEnabled('inlayHints', InlayHintsProvider, languages.registerInlayHintsProvider);
75
104
 
76
- languages.registerHoverProvider(language, hoverProvider),
77
- languages.registerInlayHintsProvider(language, inlayHintsProvider),
105
+ registerIfEnabled('range', RangeProvider, (language, provider) => {
106
+ return [
107
+ languages.registerFoldingRangeProvider(language, provider),
108
+ languages.registerSelectionRangeProvider(language, provider),
109
+ ];
110
+ });
78
111
 
79
- languages.registerFoldingRangeProvider(language, rangeProvider),
80
- languages.registerSelectionRangeProvider(language, rangeProvider),
112
+ registerIfEnabled(
113
+ 'documentSemanticTokens',
114
+ DocumentSemanticTokensProvider,
115
+ languages.registerDocumentSemanticTokensProvider,
116
+ );
117
+ registerIfEnabled('rename', RenameProvider, languages.registerRenameProvider);
118
+ registerIfEnabled('completionItem', CompletionItemProvider, languages.registerCompletionItemProvider);
119
+ registerIfEnabled('signatureHelp', SignatureHelpProvider, languages.registerSignatureHelpProvider);
81
120
 
82
- languages.registerDocumentSemanticTokensProvider(language, documentSemanticTokensProvider),
83
- languages.registerRenameProvider(language, renameProvider),
84
- languages.registerCompletionItemProvider(language, completionItemProvider),
85
- languages.registerSignatureHelpProvider(language, signatureHelpProvider),
86
- ];
121
+ return disposables;
87
122
  }
@@ -90,6 +90,11 @@ let cachedContext: readonly [editor.ITextModel, Promise<MonacoContext>] | null =
90
90
 
91
91
  /** 提供编辑器 LSP 支持 */
92
92
  export abstract class Provider {
93
+ constructor(private readonly enabled: () => boolean = () => true) {}
94
+ /** 是否启用 */
95
+ get isEnabled(): boolean {
96
+ return this.enabled();
97
+ }
93
98
  /** 设置全局变量提供者 */
94
99
  static setContextProvider(provider: VmContextProvider | undefined): void {
95
100
  contextProvider = provider;
@@ -104,6 +109,7 @@ export abstract class Provider {
104
109
  }
105
110
  /** 获取编译结果 */
106
111
  async getCompileResult(model: editor.ITextModel): Promise<CompileResult | undefined> {
112
+ if (!this.isEnabled) return undefined;
107
113
  return Provider.getCompileResult(model);
108
114
  }
109
115
  /** 获取执行上下文(全局变量) */
@@ -16,7 +16,7 @@ export class CodeLensProvider extends Provider implements languages.CodeLensProv
16
16
 
17
17
  const lenses: languages.CodeLens[] = [];
18
18
  for (const { definition, references } of result.groupedTags(model).locals) {
19
- if (definition.code === DiagnosticCode.LocalFunction) {
19
+ if (definition.code === DiagnosticCode.LocalFunction || definition.code === DiagnosticCode.LocalModule) {
20
20
  lenses.push({
21
21
  range: definition.range,
22
22
  command: {
@@ -250,6 +250,7 @@ export class CompletionItemProvider extends Provider implements languages.Comple
250
250
  char: string | undefined,
251
251
  locals: readonly CustomCompletionItem[],
252
252
  range: languages.CompletionItemRanges,
253
+ hasGlobalPrefix: boolean,
253
254
  ): Promise<CustomCompletionItem[]> {
254
255
  const global = await this.getContext(model);
255
256
  const suggestions: CustomCompletionItem[] = [];
@@ -258,6 +259,29 @@ export class CompletionItemProvider extends Provider implements languages.Comple
258
259
  if (!global.has(key)) continue;
259
260
  const element = global.get(key);
260
261
 
262
+ let prefix = key;
263
+ const edits: editor.ISingleEditOperation[] = [];
264
+ if (!REG_IDENTIFIER_FULL.test(key)) {
265
+ const kStr = serialize(key);
266
+ if (hasGlobalPrefix) {
267
+ prefix = `[${kStr}]`;
268
+ // 删除多余的 . 前缀
269
+ edits.push({
270
+ range: {
271
+ startLineNumber: range.replace.startLineNumber,
272
+ startColumn: range.replace.startColumn - 1,
273
+ endLineNumber: range.replace.endLineNumber,
274
+ endColumn: range.replace.endColumn,
275
+ },
276
+ text: '',
277
+ });
278
+ } else {
279
+ prefix = `global[${serialize(key)}]`;
280
+ }
281
+ } else if (!hasGlobalPrefix && (localKeys.has(key) || isKeyword(key))) {
282
+ prefix = `global.${key}`;
283
+ }
284
+
261
285
  if (isVmModule(element)) {
262
286
  for (const f of element.keys()) {
263
287
  if (char && !f.toLowerCase().includes(char)) {
@@ -267,9 +291,10 @@ export class CompletionItemProvider extends Provider implements languages.Comple
267
291
  if (field === undefined) continue;
268
292
 
269
293
  suggestions.push({
270
- insertText: localKeys.has(key) || isKeyword(key) ? `global.${key}.${f}` : `${key}.${f}`,
294
+ insertText: `${prefix}.${f}`,
271
295
  filterText: filterText(f, char),
272
296
  range,
297
+ additionalTextEdits: edits,
273
298
  vmParent: element,
274
299
  ...completion(model, DESC_GLOBAL, `${key}.${f}`, field, undefined, true),
275
300
  });
@@ -285,14 +310,10 @@ export class CompletionItemProvider extends Provider implements languages.Comple
285
310
  continue;
286
311
  }
287
312
  suggestions.push({
288
- insertText:
289
- localKeys.has(key) || isKeyword(key)
290
- ? `global.${key}` // 如果有同名局部变量,使用 global. 前缀
291
- : REG_IDENTIFIER_FULL.test(key)
292
- ? key
293
- : `global[${serialize(key)}]`,
313
+ insertText: prefix,
294
314
  filterText: filterText(key, char),
295
315
  range,
316
+ additionalTextEdits: edits,
296
317
  vmParent: global,
297
318
  ...completion(model, DESC_GLOBAL, key, element, undefined, false),
298
319
  });
@@ -320,12 +341,18 @@ export class CompletionItemProvider extends Provider implements languages.Comple
320
341
  if (locals.has(name)) continue; // 子作用域可能会覆盖父作用域的变量
321
342
 
322
343
  locals.add(name);
323
- suggestions.push({
344
+ const suggestion = {
324
345
  insertText: name,
325
346
  filterText: filterText(name, char),
326
347
  range,
327
348
  ...completion(model, DESC_LOCAL, name, undefined, fn, false),
328
- });
349
+ };
350
+ if (definition.code === DiagnosticCode.LocalModule) {
351
+ suggestion.kind = languages.CompletionItemKind.Module;
352
+ } else if (definition.code === DiagnosticCode.LocalFunction) {
353
+ suggestion.kind = languages.CompletionItemKind.Function;
354
+ }
355
+ suggestions.push(suggestion);
329
356
  }
330
357
  if (!scope.parent) break;
331
358
  scope = scope.parent;
@@ -404,7 +431,13 @@ export class CompletionItemProvider extends Provider implements languages.Comple
404
431
  model,
405
432
  undefined,
406
433
  [],
407
- undefined as unknown as languages.CompletionItemRanges,
434
+ this.toCompletionItemRanges(position, {
435
+ startLineNumber: position.lineNumber,
436
+ startColumn: position.column,
437
+ endLineNumber: position.lineNumber,
438
+ endColumn: position.column,
439
+ }),
440
+ true,
408
441
  );
409
442
  return { suggestions: globals };
410
443
  }
@@ -473,7 +506,7 @@ export class CompletionItemProvider extends Provider implements languages.Comple
473
506
 
474
507
  const suggestions = COMMON_GLOBAL_SUGGESTIONS(completionRange, prev === '::');
475
508
  const locals = await this.completeLocal(model, position, char, completionRange);
476
- const globals = await this.completeGlobal(model, char, locals, completionRange);
509
+ const globals = await this.completeGlobal(model, char, locals, completionRange, false);
477
510
  suggestions.push(...locals, ...globals);
478
511
 
479
512
  return { suggestions };
@@ -17,27 +17,26 @@ export class DefinitionReferenceProvider
17
17
  extends Provider
18
18
  implements languages.DefinitionProvider, languages.ReferenceProvider
19
19
  {
20
- constructor(
21
- private readonly globalModel = editor.createModel(
22
- ``,
23
- 'mirascript-doc',
24
- Uri.parse('mirascript:///lib/global.mira'),
25
- ),
26
- ) {
27
- super();
20
+ private _globalModel?: editor.ITextModel;
21
+ /** 全局模型 */
22
+ protected get globalModel(): editor.ITextModel {
23
+ if (!this._globalModel || this._globalModel.isDisposed()) {
24
+ this._globalModel = editor.createModel(``, 'mirascript-doc', Uri.parse('mirascript:///lib/global.mira'));
25
+ }
26
+ return this._globalModel;
28
27
  }
29
28
  /** 准备要显示的定义 */
30
29
  private async prepareGlobal(
31
30
  model: editor.ITextModel,
32
31
  path: readonly string[],
33
32
  ): Promise<{ uri: Uri; range: IRange } | undefined> {
34
- const { globalModel } = this;
35
33
  const globals = await this.getContext(model);
36
34
  const [name, ...access] = path;
37
35
  const [parent, value] = getDeep(globals, name!, access);
38
36
  if (value === undefined) return undefined;
39
37
  const { script, doc } = valueDoc(path.at(-1)!, value, 'declare', parent);
40
- const code = ['', ...docComment(doc), script, ''];
38
+ const code = [...docComment(doc), script, ''];
39
+ const { globalModel } = this;
41
40
  globalModel.setValue(code.join('\n'));
42
41
  return {
43
42
  uri: globalModel.uri,
@@ -108,6 +108,11 @@ export class HoverProvider extends Provider implements languages.HoverProvider {
108
108
  };
109
109
  break;
110
110
  }
111
+ case DiagnosticCode.LocalModule:
112
+ content = {
113
+ value: codeblock(`\0mod ${model.getValueInRange(tag.range)}`),
114
+ };
115
+ break;
111
116
  case DiagnosticCode.LocalImmutable:
112
117
  content = {
113
118
  value: codeblock(`\0let ${model.getValueInRange(tag.range)}`),
@@ -80,6 +80,10 @@ export class DocumentSemanticTokensProvider extends Provider implements language
80
80
  tokenType = TokenType.FUNCTION;
81
81
  break;
82
82
  }
83
+ case DiagnosticCode.LocalModule: {
84
+ tokenType = TokenType.MODULE;
85
+ break;
86
+ }
83
87
  case DiagnosticCode.ParameterMutable:
84
88
  case DiagnosticCode.ParameterSubPatternMutable:
85
89
  case DiagnosticCode.ParameterMutableRest: {
@@ -134,6 +138,9 @@ export class DocumentSemanticTokensProvider extends Provider implements language
134
138
  });
135
139
  }
136
140
  for (const ref of references) {
141
+ if (ref.code === DiagnosticCode.ExportedLocal) {
142
+ continue; // 导出位置的类型为模块,与原始定义位置不同
143
+ }
137
144
  data.push({
138
145
  row: ref.range.startLineNumber - 1,
139
146
  col: ref.range.startColumn - 1,
package/src/lsp/utils.ts CHANGED
@@ -393,25 +393,32 @@ export function valueDoc(
393
393
  prefix = `${name}: `;
394
394
  }
395
395
  if (isVmModule(value)) {
396
- const doc = `模块 \`${value.name}\``;
397
396
  let script;
398
397
  if (type === 'declare') {
399
398
  const exports = value.keys();
400
- script = '\n';
401
- for (const k of exports) {
402
- const v = value.get(k);
403
- const vDoc = valueDoc(k, v, isVmModule(v) ? 'field' : 'declare', value);
404
- const code = [...docComment(vDoc.doc), 'pub ' + vDoc.script, '', ''];
405
- script += code.join('\n');
399
+ if (!exports.length) {
400
+ script = `mod ${value.name} { }`;
401
+ } else {
402
+ script = `mod ${value.name} {\n`;
403
+ for (const k of exports) {
404
+ const v = value.get(k);
405
+ const vDoc = valueDoc(k, v, 'declare', value);
406
+ const code = [...docComment(vDoc.doc), 'pub ' + vDoc.script];
407
+ const lines = code.flatMap((line) => line.split('\n'));
408
+ for (const line of lines) {
409
+ script += line ? ' ' + line + '\n' : '\n';
410
+ }
411
+ script += '\n';
412
+ }
413
+ script = script.trimEnd() + '\n}';
406
414
  }
407
- script = script.trimEnd();
408
415
  } else {
409
- script = `(module) ${value.name}`;
416
+ script = `mod ${value.name}`;
410
417
  if (value.name !== name) {
411
418
  script = `${prefix}${script}`;
412
419
  }
413
420
  }
414
- return { script, doc: doc ? [doc] : [] };
421
+ return { script, doc: [`模块 \`${value.name}\``] };
415
422
  }
416
423
  let valueStr = UNKNOWN_REPR;
417
424
  if (value !== undefined) {
@@ -105,6 +105,7 @@ export async function compile(model: editor.ITextModel): Promise<CompileResult>
105
105
  const req: Req = [cacheKey, version, value, mode];
106
106
  const res = USE_WORKER ? compileWorker(req) : compileSync(req);
107
107
  void res.then(async (result) => {
108
+ if (model.isDisposed()) return;
108
109
  const setModelMarkers = editor?.setModelMarkers;
109
110
  if (typeof setModelMarkers != 'function') return;
110
111
  const markers = await makeModelMarkers(model, result);
package/src/monaco-api.js CHANGED
@@ -23,7 +23,7 @@ export let CancellationTokenSource,
23
23
  * @param {object} monacoApi - Monaco API 对象,必须包含特定方法和属性。
24
24
  */
25
25
  export function registerMonacoApi(monacoApi) {
26
- if (monaco) {
26
+ if (monaco && monaco !== monacoApi) {
27
27
  throw new Error('MiraScriptMonacoLoader has already been registered.');
28
28
  }
29
29
  if (
@@ -1,6 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/monaco-api.js"],
4
- "mappings": ";AAAA,IAAI,SAAS;AAGN,IAAI;AAAJ,IACH;AADG,IAEH;AAFG,IAGH;AAHG,IAIH;AAJG,IAKH;AALG,IAMH;AANG,IAOH;AAPG,IAQH;AARG,IASH;AATG,IAUH;AAVG,IAWH;AAXG,IAYH;AAZG,IAaH;AAbG,IAcH;AAdG,IAeH;AAMG,SAAS,kBAAkB,WAAW;AACzC,MAAI,QAAQ;AACR,UAAM,IAAI,MAAM,qDAAqD;AAAA,EACzE;AACA,MACI,CAAC,aACD,OAAO,cAAc,YACrB,CAAC,UAAU;AAAA;AAAA,EAGX,CAAC,UAAU;AAAA;AAAA;AAAA,EAIX,cAAc,OAAO,UAAU,OAC/B,cAAc,OAAO,UAAU,SAC/B,cAAc,OAAO,UAAU,YAC/B,cAAc,OAAO,UAAU,2BAC/B,cAAc,OAAO,UAAU,SACjC;AACE,UAAM,IAAI,UAAU,0CAA0C;AAAA,EAClE;AACA,WAAS;AACT,GAAC;AAAA,IACG;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,IAAI;AACR;",
5
- "names": []
6
- }
@@ -1,6 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/constants.ts", "../src/basic/language-configuration.ts", "../src/basic/tokens-provider.ts", "../src/basic/index.ts"],
4
- "mappings": "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",
5
- "names": []
6
- }