@mirascript/monaco 0.1.13 → 0.1.15

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.
@@ -1,4 +1,4 @@
1
- import type { VmContext } from '@mirascript/mirascript';
1
+ import type { VmContext, VmAny } from '@mirascript/mirascript';
2
2
  import { DefaultVmContext, type IRange } from '@mirascript/mirascript/subtle';
3
3
  import type { VmContextProvider } from '../../index.js';
4
4
  import { type editor, Emitter, type IEvent, type IPosition } from '../../monaco-api.js';
@@ -14,11 +14,17 @@ export function setContextProvider(provider: VmContextProvider | undefined): voi
14
14
  }
15
15
 
16
16
  /** 提供全局变量的执行上下文 */
17
- type MonacoContext = Readonly<Required<Pick<VmContext, 'get' | 'describe' | 'keys' | 'has'>>>;
17
+ export type MonacoContext = Readonly<Required<Pick<VmContext, 'get' | 'describe' | 'keys' | 'has'>>> & {
18
+ /** 获取指定 key 的值,找不到时返回 undefined */
19
+ getOrUndefined(key: string): VmAny;
20
+ };
18
21
  const DEFAULT_MONACO_CONTEXT: MonacoContext = Object.freeze({
19
22
  get(key: string) {
20
23
  return DefaultVmContext.get(key);
21
24
  },
25
+ getOrUndefined(key: string) {
26
+ return DefaultVmContext.has(key) ? DefaultVmContext.get(key) : undefined;
27
+ },
22
28
  has(key: string) {
23
29
  return DefaultVmContext.has(key);
24
30
  },
@@ -29,60 +35,79 @@ const DEFAULT_MONACO_CONTEXT: MonacoContext = Object.freeze({
29
35
  return undefined;
30
36
  },
31
37
  });
38
+ /** 获取执行上下文 */
39
+ async function getContextImpl(model: editor.ITextModel, clearCache: () => void): Promise<MonacoContext> {
40
+ try {
41
+ const context = await contextProvider?.(model);
42
+ if (!context) {
43
+ return DEFAULT_MONACO_CONTEXT;
44
+ }
32
45
 
33
- let cachedContext: readonly [editor.ITextModel, MonacoContext] | null = null;
46
+ const monacoContext: MonacoContext = Object.freeze({
47
+ get(key: string) {
48
+ try {
49
+ return context.get(key);
50
+ } catch {
51
+ clearCache();
52
+ return DEFAULT_MONACO_CONTEXT.get(key);
53
+ }
54
+ },
55
+ getOrUndefined(key: string) {
56
+ try {
57
+ return context.has(key) ? context.get(key) : undefined;
58
+ } catch {
59
+ clearCache();
60
+ return DEFAULT_MONACO_CONTEXT.getOrUndefined(key);
61
+ }
62
+ },
63
+ has(key: string) {
64
+ try {
65
+ return context.has(key);
66
+ } catch {
67
+ clearCache();
68
+ return DEFAULT_MONACO_CONTEXT.has(key);
69
+ }
70
+ },
71
+ keys() {
72
+ try {
73
+ return context.keys();
74
+ } catch {
75
+ clearCache();
76
+ return DEFAULT_MONACO_CONTEXT.keys();
77
+ }
78
+ },
79
+ describe(key: string) {
80
+ try {
81
+ return context.describe?.(key) || undefined;
82
+ } catch {
83
+ clearCache();
84
+ return DEFAULT_MONACO_CONTEXT.describe(key);
85
+ }
86
+ },
87
+ });
88
+ return monacoContext;
89
+ } catch (ex) {
90
+ // eslint-disable-next-line no-console
91
+ console.error('Error getting MiraScript Monaco context:', ex);
92
+ return DEFAULT_MONACO_CONTEXT;
93
+ }
94
+ }
95
+ let cachedContext: readonly [editor.ITextModel, Promise<MonacoContext>] | null = null;
34
96
  /** 获取执行上下文 */
35
- async function getContext(model: editor.ITextModel): Promise<MonacoContext> {
97
+ export async function getContext(model: editor.ITextModel): Promise<MonacoContext> {
36
98
  if (cachedContext?.[0] === model) {
37
99
  return cachedContext[1];
38
100
  }
39
- const context = await contextProvider?.(model);
40
- if (!context) {
41
- return DEFAULT_MONACO_CONTEXT;
42
- }
43
- const monacoContext: MonacoContext = Object.freeze({
44
- get(key: string) {
45
- try {
46
- return context.get(key);
47
- } catch {
48
- clearCache();
49
- return DefaultVmContext.get(key);
50
- }
51
- },
52
- has(key: string) {
53
- try {
54
- return context.has(key);
55
- } catch {
56
- clearCache();
57
- return DefaultVmContext.has(key);
58
- }
59
- },
60
- keys() {
61
- try {
62
- return context.keys();
63
- } catch {
64
- clearCache();
65
- return DefaultVmContext.keys();
66
- }
67
- },
68
- describe(key: string) {
69
- try {
70
- return context.describe?.(key) || undefined;
71
- } catch {
72
- clearCache();
73
- return undefined;
74
- }
75
- },
76
- });
77
- const cache = [model, monacoContext] as const;
78
- cachedContext = cache;
79
101
  const clearCache = () => {
80
102
  if (cachedContext === cache) {
81
103
  cachedContext = null;
82
104
  }
83
105
  };
106
+ const context = getContextImpl(model, clearCache);
107
+ const cache = [model, context] as const;
108
+ cachedContext = cache;
84
109
  setTimeout(clearCache, 100);
85
- return monacoContext;
110
+ return context;
86
111
  }
87
112
 
88
113
  /** 提供编辑器 LSP 支持 */
@@ -268,8 +268,8 @@ export class CompletionItemProvider extends Provider implements languages.Comple
268
268
  const suggestions: CustomCompletionItem[] = [];
269
269
  const localKeys = new Set(locals.map((item) => item.insertText));
270
270
  for (const key of new Set(global.keys())) {
271
+ if (!global.has(key)) continue;
271
272
  const element = global.get(key);
272
- if (element === undefined) continue;
273
273
 
274
274
  if (isVmModule(element)) {
275
275
  for (const f of element.keys()) {
@@ -292,7 +292,7 @@ export class CompletionItemProvider extends Provider implements languages.Comple
292
292
  continue;
293
293
  }
294
294
 
295
- const doc = global.describe?.(key) ?? undefined;
295
+ const doc = global.describe(key);
296
296
  suggestions.push({
297
297
  insertText: localKeys.has(key) ? `global.${key}` : key, // 如果有同名局部变量,使用 global. 前缀
298
298
  filterText: filterText(key, char),
@@ -355,7 +355,7 @@ export class CompletionItemProvider extends Provider implements languages.Comple
355
355
  }
356
356
  const vmGlobal = await this.getContext(model);
357
357
  fields.pop(); // 移除最后一个部分,因为它是当前输入位置的字段名
358
- const value = getDeep(vmGlobal.get(def.def.name), fields);
358
+ const value = getDeep(vmGlobal, def.def.name, fields);
359
359
  if (value == null || typeof value != 'object') {
360
360
  return [];
361
361
  }
@@ -34,8 +34,7 @@ export class DefinitionReferenceProvider
34
34
  const { globalModel } = this;
35
35
  const globals = await this.getContext(model);
36
36
  const [name, ...access] = path;
37
- if (!globals.has(name!)) return undefined;
38
- const value = getDeep(globals.get(name!), access);
37
+ const value = getDeep(globals, name!, access);
39
38
  if (value === undefined) return undefined;
40
39
  const { script, doc } = valueDoc(path.at(-1)!, value, 'declare');
41
40
  const code = ['', ...docComment(doc), script, ''];
@@ -15,13 +15,13 @@ export class HoverProvider extends Provider implements languages.HoverProvider {
15
15
  let range: IRange | undefined;
16
16
  if ('name' in def) {
17
17
  const globals = await this.getContext(model);
18
- const value = globals.has(def.name) ? globals.get(def.name) : undefined;
18
+ const value = globals.getOrUndefined(def.name);
19
19
  const { script, doc } = valueDoc(def.name, value, 'hint');
20
20
  contents.push({ value: codeblock(`\0(global) ${script}`) });
21
21
  for (const d of doc) {
22
22
  contents.push({ value: d });
23
23
  }
24
- const describe = globals.describe?.(def.name);
24
+ const describe = globals.describe(def.name);
25
25
  if (describe) {
26
26
  contents.push({ value: describe });
27
27
  }
@@ -115,7 +115,7 @@ export class HoverProvider extends Provider implements languages.HoverProvider {
115
115
  return undefined;
116
116
  }
117
117
  const vmGlobal = await this.getContext(model);
118
- const value = getDeep(vmGlobal.get(def.name), fields);
118
+ const value = getDeep(vmGlobal, def.name, fields);
119
119
  if (value == null) return undefined;
120
120
  const lastField = fields.pop()!;
121
121
  const { script, doc } = valueDoc(lastField, value, 'field');
@@ -66,12 +66,15 @@ export class DocumentSemanticTokensProvider extends Provider implements language
66
66
  const id = model.getValueInRange(range);
67
67
  if (id.startsWith('@')) {
68
68
  tokenType = TokenType.CONSTANT;
69
- } else if (isVmFunction(globals.get(id))) {
70
- tokenType = TokenType.FUNCTION;
71
- } else if (isVmModule(globals.get(id))) {
72
- tokenType = TokenType.MODULE;
73
69
  } else {
74
- tokenType = TokenType.GLOBAL;
70
+ const val = globals.getOrUndefined(id);
71
+ if (isVmFunction(val)) {
72
+ tokenType = TokenType.FUNCTION;
73
+ } else if (isVmModule(val)) {
74
+ tokenType = TokenType.MODULE;
75
+ } else {
76
+ tokenType = TokenType.GLOBAL;
77
+ }
75
78
  }
76
79
  break;
77
80
  }
@@ -51,7 +51,7 @@ export class SignatureHelpProvider extends Provider implements languages.Signatu
51
51
  if ('name' in callableInfo.def.def) {
52
52
  const { name } = callableInfo.def.def;
53
53
  const globals = await this.getContext(model);
54
- const callable = getDeep(globals.get(name), callableInfo.fields);
54
+ const callable = getDeep(globals, name, callableInfo.fields);
55
55
  const info = getVmFunctionInfo(callable);
56
56
  if (!info) return undefined;
57
57
  sig = { ...fnSignature(name, info), name, summary: info.summary };
package/src/lsp/utils.ts CHANGED
@@ -15,8 +15,9 @@ import {
15
15
  type VmValue,
16
16
  type VmExtern,
17
17
  } from '@mirascript/mirascript';
18
- import { operations, serializePropName, serializeString } from '@mirascript/mirascript/subtle';
18
+ import { operations, serializeRecordKey, serializeString } from '@mirascript/mirascript/subtle';
19
19
  import type { LocalDefinition } from './compile-result.js';
20
+ import type { MonacoContext } from './providers/base.js';
20
21
 
21
22
  /** 参数签名 */
22
23
  export type ParamSignature = [name: string, sig: string, doc: string];
@@ -217,7 +218,7 @@ function serializeForDisplay(value: Exclude<VmValue, VmModule>, maxEntries = 100
217
218
  entries.push(`../* x${e.length - entries.length} */`);
218
219
  break;
219
220
  }
220
- const sk = serializePropName(key);
221
+ const sk = serializeRecordKey(key);
221
222
  const entry = `${sk}: ${serializeForDisplayInner(value ?? null, maxWidth - sk.length - 4)}`;
222
223
  entries.push(entry);
223
224
  resultLength += entry.length;
@@ -251,7 +252,7 @@ function serializeForDisplay(value: Exclude<VmValue, VmModule>, maxEntries = 100
251
252
  // 数组索引
252
253
  entry = serializeForDisplayInner(value.get(key) ?? null, maxWidth - 2);
253
254
  } else {
254
- const sk = serializePropName(key);
255
+ const sk = serializeRecordKey(key);
255
256
  entry = `${sk}: ${serializeForDisplayInner(value.get(key) ?? null, maxWidth - sk.length - 4)}`;
256
257
  }
257
258
  entries.push(entry);
@@ -333,8 +334,9 @@ export function valueDoc(
333
334
  }
334
335
 
335
336
  /** 获取深层属性 */
336
- export function getDeep(value: VmAny, path: readonly string[]): VmAny {
337
- let current: VmAny = value;
337
+ export function getDeep(globals: MonacoContext, name: string, path: readonly string[]): VmAny {
338
+ if (!globals.has(name)) return undefined;
339
+ let current: VmAny = globals.get(name);
338
340
  for (const key of path) {
339
341
  if (current == null) return current;
340
342
  if (!operations.$Has(current, key)) return undefined;
@@ -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
- }