@coze-editor/code-language-typescript 0.1.0-alpha.37c297 → 0.1.0-alpha.5a549c

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/esm/index.js CHANGED
@@ -6,13 +6,8 @@ import { URI } from "vscode-uri";
6
6
  import {
7
7
  MarkupKind
8
8
  } from "vscode-languageserver-types";
9
- import {
10
- DiagnosticCategory,
11
- displayPartsToString
12
- } from "typescript";
13
9
  import mitt from "mitt";
14
10
  import { wrap } from "comlink";
15
- import createFuzzySearch from "@nozbe/microfuzz";
16
11
  import {
17
12
  MarkerTag,
18
13
  textDocumentField
@@ -34,60 +29,64 @@ function tagToString(tag) {
34
29
  }
35
30
  return tagLabel;
36
31
  }
32
+ function displayPartsToString(displayParts) {
33
+ if (displayParts) {
34
+ return displayParts.map((displayPart2) => displayPart2.text).join("");
35
+ }
36
+ return "";
37
+ }
37
38
 
38
39
  // src/as.ts
39
40
  import { CompletionItemKind } from "vscode-languageserver-types";
40
- import { ScriptElementKind } from "typescript";
41
41
  function asCompletionItemKind(kind) {
42
42
  switch (kind) {
43
- case ScriptElementKind.primitiveType:
44
- case ScriptElementKind.keyword:
43
+ case "primitive type" /* primitiveType */:
44
+ case "keyword" /* keyword */:
45
45
  return CompletionItemKind.Keyword;
46
- case ScriptElementKind.constElement:
47
- case ScriptElementKind.letElement:
48
- case ScriptElementKind.variableElement:
49
- case ScriptElementKind.localVariableElement:
50
- case ScriptElementKind.alias:
51
- case ScriptElementKind.parameterElement:
46
+ case "const" /* constElement */:
47
+ case "let" /* letElement */:
48
+ case "var" /* variableElement */:
49
+ case "local var" /* localVariableElement */:
50
+ case "alias" /* alias */:
51
+ case "parameter" /* parameterElement */:
52
52
  return CompletionItemKind.Variable;
53
- case ScriptElementKind.memberVariableElement:
54
- case ScriptElementKind.memberGetAccessorElement:
55
- case ScriptElementKind.memberSetAccessorElement:
53
+ case "property" /* memberVariableElement */:
54
+ case "getter" /* memberGetAccessorElement */:
55
+ case "setter" /* memberSetAccessorElement */:
56
56
  return CompletionItemKind.Field;
57
- case ScriptElementKind.functionElement:
58
- case ScriptElementKind.localFunctionElement:
57
+ case "function" /* functionElement */:
58
+ case "local function" /* localFunctionElement */:
59
59
  return CompletionItemKind.Function;
60
- case ScriptElementKind.memberFunctionElement:
61
- case ScriptElementKind.constructSignatureElement:
62
- case ScriptElementKind.callSignatureElement:
63
- case ScriptElementKind.indexSignatureElement:
60
+ case "method" /* memberFunctionElement */:
61
+ case "construct" /* constructSignatureElement */:
62
+ case "call" /* callSignatureElement */:
63
+ case "index" /* indexSignatureElement */:
64
64
  return CompletionItemKind.Method;
65
- case ScriptElementKind.enumElement:
65
+ case "enum" /* enumElement */:
66
66
  return CompletionItemKind.Enum;
67
- case ScriptElementKind.enumMemberElement:
67
+ case "enum member" /* enumMemberElement */:
68
68
  return CompletionItemKind.EnumMember;
69
- case ScriptElementKind.moduleElement:
70
- case ScriptElementKind.externalModuleName:
69
+ case "module" /* moduleElement */:
70
+ case "external module name" /* externalModuleName */:
71
71
  return CompletionItemKind.Module;
72
- case ScriptElementKind.classElement:
73
- case ScriptElementKind.typeElement:
72
+ case "class" /* classElement */:
73
+ case "type" /* typeElement */:
74
74
  return CompletionItemKind.Class;
75
- case ScriptElementKind.interfaceElement:
75
+ case "interface" /* interfaceElement */:
76
76
  return CompletionItemKind.Interface;
77
- case ScriptElementKind.warning:
77
+ case "warning" /* warning */:
78
78
  return CompletionItemKind.Text;
79
- case ScriptElementKind.scriptElement:
79
+ case "script" /* scriptElement */:
80
80
  return CompletionItemKind.File;
81
- case ScriptElementKind.directory:
81
+ case "directory" /* directory */:
82
82
  return CompletionItemKind.Folder;
83
- case ScriptElementKind.string:
83
+ case "string" /* string */:
84
84
  return CompletionItemKind.Constant;
85
85
  }
86
86
  return CompletionItemKind.Property;
87
87
  }
88
88
 
89
89
  // src/service.ts
90
- var identRe = /^[\w$]+$/;
91
90
  function isDiagnostic(v) {
92
91
  return Boolean(v);
93
92
  }
@@ -99,6 +98,7 @@ var TypeScriptLanguageService = class {
99
98
  starting = null;
100
99
  _cachedFiles = /* @__PURE__ */ Object.create(null);
101
100
  events = mitt();
101
+ triggerCharacters = [".", "'", '"'];
102
102
  async synchronize(paths) {
103
103
  await this.starting;
104
104
  if (!this.worker) {
@@ -169,10 +169,10 @@ ${tags}` : ""}`
169
169
  ...await worker.getSuggestionDiagnostics(path)
170
170
  ];
171
171
  const categoryToSeverityMap = {
172
- [DiagnosticCategory.Error]: "error",
173
- [DiagnosticCategory.Warning]: "warning",
174
- [DiagnosticCategory.Message]: "info",
175
- [DiagnosticCategory.Suggestion]: "hint"
172
+ [1 /* Error */]: "error",
173
+ [0 /* Warning */]: "warning",
174
+ [3 /* Message */]: "info",
175
+ [2 /* Suggestion */]: "hint"
176
176
  };
177
177
  return diagnostics.map((d) => {
178
178
  if (typeof d.start !== "number" || !categoryToSeverityMap[d.category]) {
@@ -200,7 +200,6 @@ ${tags}` : ""}`
200
200
  doComplete = async (ctx) => {
201
201
  const uri = URI.parse(ctx.textDocument.uri);
202
202
  const path = uri.fsPath;
203
- const content = ctx.textDocument.getText();
204
203
  const worker = await this.synchronize([path]);
205
204
  const result = await worker.getCompletionsAtPosition(path, ctx.offset);
206
205
  if (!result) {
@@ -210,45 +209,9 @@ ${tags}` : ""}`
210
209
  label: entry.name,
211
210
  kind: asCompletionItemKind(entry.kind)
212
211
  }));
213
- const fuzzySearch = createFuzzySearch(items, {
214
- key: "label"
215
- });
216
- let i = ctx.offset - 1;
217
- let query = "";
218
- while (i >= 0) {
219
- const char = content.slice(i, i + 1);
220
- if (char === "\n") {
221
- break;
222
- }
223
- if (!identRe.test(char) && i + 1 <= ctx.offset) {
224
- break;
225
- }
226
- i--;
227
- }
228
- query = content.slice(i + 1, ctx.offset);
229
- const charBefore = content.slice(ctx.offset - 1, ctx.offset);
230
- const triggerCharacters = [".", "'", '"'];
231
- if (triggerCharacters.includes(charBefore)) {
232
- return {
233
- isIncomplete: true,
234
- items
235
- };
236
- }
237
- return query ? {
238
- isIncomplete: true,
239
- items: fuzzySearch(query).map((v) => ({
240
- ...v.item,
241
- textEdit: {
242
- range: {
243
- start: ctx.textDocument.positionAt(i + 1),
244
- end: ctx.textDocument.positionAt(ctx.offset)
245
- },
246
- newText: v.item.label
247
- }
248
- }))
249
- } : {
250
- isIncomplete: true,
251
- items: []
212
+ return {
213
+ isIncomplete: result.isIncomplete ?? true,
214
+ items
252
215
  };
253
216
  };
254
217
  async resolveCompletionItem(ctx, item) {
@@ -557,7 +520,8 @@ var tooltipTheme = EditorView.theme({
557
520
  },
558
521
  ".cm-type-tooltip-props-list": {
559
522
  listStyle: "none",
560
- margin: "0"
523
+ margin: "0",
524
+ paddingInlineStart: "20px"
561
525
  },
562
526
  ".cm-type-tooltip-prop-item": {
563
527
  marginBottom: "3px"
@@ -612,4 +576,18 @@ export {
612
576
  typescriptLanguage,
613
577
  typescriptLanguageService
614
578
  };
579
+ /*! *****************************************************************************
580
+ Copyright (c) Microsoft Corporation. All rights reserved.
581
+ Licensed under the Apache License, Version 2.0 (the "License"); you may not use
582
+ this file except in compliance with the License. You may obtain a copy of the
583
+ License at http://www.apache.org/licenses/LICENSE-2.0
584
+
585
+ THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
586
+ KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
587
+ WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
588
+ MERCHANTABLITY OR NON-INFRINGEMENT.
589
+
590
+ See the Apache Version 2.0 License for specific language governing permissions
591
+ and limitations under the License.
592
+ ***************************************************************************** */
615
593
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/service.ts","../../src/utils.ts","../../src/as.ts","../../src/extensions/index.ts","../../src/extensions/type-information.ts"],"sourcesContent":["// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nimport { typescriptLanguage } from '@codemirror/lang-javascript';\n\nimport {\n TypeScriptLanguageService,\n typescriptLanguageService,\n} from './service';\nimport extensions from './extensions';\n\nconst typescript = {\n language: typescriptLanguage,\n languageService: typescriptLanguageService,\n extensions,\n};\n\nexport {\n typescript,\n typescriptLanguage,\n typescriptLanguageService,\n TypeScriptLanguageService,\n};\n","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nimport { URI } from 'vscode-uri';\nimport {\n type CompletionItem,\n MarkupKind,\n type ParameterInformation,\n type SignatureHelp,\n type SignatureInformation,\n} from 'vscode-languageserver-types';\nimport {\n type CompletionEntryDetails,\n DiagnosticCategory,\n displayPartsToString,\n type FormatCodeSettings,\n} from 'typescript';\nimport mitt from 'mitt';\nimport { type Remote, wrap } from 'comlink';\nimport createFuzzySearch from '@nozbe/microfuzz';\nimport {\n type Diagnostic,\n type LanguageService as ILanguageService,\n MarkerTag,\n textDocumentField,\n} from '@coze-editor/code-language-shared';\nimport type {\n ChangeSpec,\n EditorState,\n TransactionSpec,\n} from '@codemirror/state';\n\nimport { tagToString } from './utils';\nimport type { InitializeOptions, ITypeScriptWorker } from './types';\nimport { asCompletionItemKind } from './as';\n\nconst identRe = /^[\\w$]+$/;\n\nfunction isDiagnostic(v: unknown): v is Diagnostic {\n return Boolean(v);\n}\n\nfunction isChangeDesc(v: unknown): v is ChangeSpec {\n return Boolean(v);\n}\n\ntype Severity = 'hint' | 'info' | 'warning' | 'error';\n\ntype Events = {\n diagnostics: {\n uri: string;\n diagnostics: {\n from: number;\n to: number;\n message: string;\n severity: Severity;\n }[];\n };\n 'refresh-diagnostics': void;\n};\n\nclass TypeScriptLanguageService implements ILanguageService {\n private worker: Remote<ITypeScriptWorker> | null = null;\n private starting: Promise<unknown> | null = null;\n private _cachedFiles: Record<string, string> = Object.create(null);\n public events = mitt<Events>();\n\n private async synchronize(paths: string[]) {\n await this.starting;\n\n if (!this.worker) {\n throw new Error('TypeScript LanguageService is not initialized');\n }\n\n const files: Record<string, string> = {};\n paths.forEach(path => {\n files[path] = this._cachedFiles[path] ?? '';\n });\n await this.worker.syncFiles(files);\n\n return this.worker;\n }\n\n onTextDocumentDidChange = (ctx: any) => {\n const { textDocument } = ctx;\n const text = textDocument.getText();\n const uri = URI.parse(textDocument.uri);\n const path = uri.fsPath;\n this._cachedFiles[path] = text;\n };\n\n doHover: NonNullable<ILanguageService['doHover']> = async ctx => {\n const { textDocument } = ctx;\n\n const uri = URI.parse(textDocument.uri);\n const path = uri.fsPath;\n\n const worker = await this.synchronize([path]);\n\n const info = await worker.getQuickInfoAtPosition(path, ctx.offset);\n\n if (!info) {\n return;\n }\n\n const tags = info.tags\n ? info.tags.map(tag => tagToString(tag)).join(' \\n\\n')\n : '';\n const contents = displayPartsToString(info.displayParts);\n const documentation = displayPartsToString(info.documentation);\n\n return {\n kind: MarkupKind.Markdown,\n value: `\\`\\`\\`ts\\n${contents}\\n\\`\\`\\`\\n${\n documentation\n }${tags ? `\\n\\n${tags}` : ''}`,\n };\n };\n\n public async synchronizeByURI(uri: string, content: string) {\n await this.onTextDocumentDidChange({\n textDocument: {\n uri,\n getText() {\n return content;\n },\n },\n });\n }\n\n public async validateByURI(uri: string) {\n return this.doValidation({\n textDocument: {\n uri,\n } as any,\n });\n }\n\n doValidation: NonNullable<ILanguageService['doValidation']> = async ctx => {\n const { textDocument } = ctx;\n\n const uri = URI.parse(textDocument.uri);\n const path = uri.fsPath;\n\n const worker = await this.synchronize([path]);\n\n try {\n const diagnostics = [\n ...(await worker.getSyntacticDiagnostics(path)),\n ...(await worker.getSemanticDiagnostics(path)),\n ...(await worker.getSuggestionDiagnostics(path)),\n ];\n\n const categoryToSeverityMap = {\n [DiagnosticCategory.Error]: 'error',\n [DiagnosticCategory.Warning]: 'warning',\n [DiagnosticCategory.Message]: 'info',\n [DiagnosticCategory.Suggestion]: 'hint',\n };\n\n return diagnostics\n .map(d => {\n if (\n typeof d.start !== 'number' ||\n !categoryToSeverityMap[d.category]\n ) {\n return;\n }\n\n const tags: MarkerTag[] = [];\n if (d.reportsUnnecessary) {\n tags.push(MarkerTag.Unnecessary);\n }\n if (d.reportsDeprecated) {\n tags.push(MarkerTag.Deprecated);\n }\n\n return {\n from: d.start,\n to: d.start + (d.length ?? 0),\n severity: categoryToSeverityMap[d.category],\n message:\n typeof d.messageText === 'string'\n ? d.messageText\n : d.messageText.messageText,\n tags,\n };\n })\n .filter(v => isDiagnostic(v));\n } catch (e) {\n return [];\n }\n };\n\n doComplete: ILanguageService['doComplete'] = async ctx => {\n const uri = URI.parse(ctx.textDocument.uri);\n const path = uri.fsPath;\n const content = ctx.textDocument.getText();\n\n const worker = await this.synchronize([path]);\n\n const result = await worker.getCompletionsAtPosition(path, ctx.offset);\n\n if (!result) {\n return null;\n }\n\n const items = result.entries.map(entry => ({\n label: entry.name,\n kind: asCompletionItemKind(entry.kind),\n }));\n\n const fuzzySearch = createFuzzySearch(items, {\n key: 'label',\n });\n\n let i = ctx.offset - 1;\n let query = '';\n\n while (i >= 0) {\n const char = content.slice(i, i + 1);\n\n if (char === '\\n') {\n break;\n }\n\n if (!identRe.test(char) && i + 1 <= ctx.offset) {\n break;\n }\n i--;\n }\n\n query = content.slice(i + 1, ctx.offset);\n\n const charBefore = content.slice(ctx.offset - 1, ctx.offset);\n\n const triggerCharacters = ['.', \"'\", '\"'];\n if (triggerCharacters.includes(charBefore)) {\n return {\n isIncomplete: true,\n items,\n };\n }\n\n // cannot use validFor here as range changes during filtering\n return query\n ? {\n isIncomplete: true,\n items: fuzzySearch(query).map(v => ({\n ...v.item,\n textEdit: {\n range: {\n start: ctx.textDocument.positionAt(i + 1),\n end: ctx.textDocument.positionAt(ctx.offset),\n },\n newText: v.item.label,\n },\n })),\n }\n : {\n isIncomplete: true,\n items: [],\n };\n };\n\n public async resolveCompletionItem(\n ctx: any,\n item: CompletionItem,\n ): Promise<CompletionItem> {\n const uri = URI.parse(ctx.textDocument.uri);\n const path = uri.fsPath;\n const worker = await this.synchronize([path]);\n const details = await worker.getCompletionEntryDetails(\n path,\n ctx.offset,\n item.label,\n undefined,\n undefined,\n undefined,\n undefined,\n );\n if (!details) {\n return item;\n }\n const documentationString = createDocumentationString(details);\n return {\n label: details.name,\n detail: displayPartsToString(details?.displayParts),\n documentation: documentationString\n ? {\n kind: MarkupKind.Markdown,\n value: documentationString,\n }\n : undefined,\n };\n }\n\n public async format(\n state: EditorState,\n options: FormatCodeSettings = {},\n ): Promise<TransactionSpec> {\n const { textDocument, originalRangeFor } = state.field(textDocumentField);\n\n const uri = URI.parse(textDocument.uri);\n const path = uri.fsPath;\n\n const worker = await this.synchronize([path]);\n\n const edits = await worker.getFormattingEditsForDocument(path, {\n indentSize: 2,\n tabSize: 2,\n convertTabsToSpaces: true,\n newLineCharacter: '\\n',\n ...options,\n });\n\n if (!edits) {\n return {\n changes: [],\n };\n }\n\n const changes = edits\n .map(edit => {\n const range = originalRangeFor({\n from: edit.span.start,\n to: edit.span.start + edit.span.length,\n });\n if (range) {\n return {\n ...range,\n insert: edit.newText,\n };\n }\n })\n .filter(v => isChangeDesc(v));\n\n return {\n changes,\n };\n }\n\n async getTypeInformation(ctx: any) {\n const { textDocument } = ctx;\n\n const uri = URI.parse(textDocument.uri);\n const path = uri.fsPath;\n\n const worker = await this.synchronize([path]);\n\n const info = await worker.getTypeInfoAtPosition(path, ctx.offset);\n\n return info;\n }\n\n async doSignatureHelp(ctx: any) {\n const uri = URI.parse(ctx.textDocument.uri);\n const path = uri.fsPath;\n\n const worker = await this.synchronize([path]);\n\n const info = await worker.getSignatureHelpItems(path, ctx.offset, {});\n\n if (!info) {\n return null;\n }\n\n const ret: SignatureHelp = {\n activeSignature: info.selectedItemIndex,\n activeParameter: info.argumentIndex,\n signatures: [],\n };\n\n info.items.forEach(item => {\n const signature: SignatureInformation = {\n label: '',\n parameters: [],\n };\n\n signature.documentation = {\n kind: MarkupKind.Markdown,\n value: displayPartsToString(item.documentation),\n };\n signature.label += displayPartsToString(item.prefixDisplayParts);\n item.parameters.forEach((p, i, a) => {\n const label = displayPartsToString(p.displayParts);\n const parameter: ParameterInformation = {\n label,\n documentation: {\n kind: MarkupKind.Markdown,\n value: displayPartsToString(p.documentation),\n },\n };\n signature.label += label;\n signature.parameters!.push(parameter);\n if (i < a.length - 1) {\n signature.label += displayPartsToString(item.separatorDisplayParts);\n }\n });\n signature.label += displayPartsToString(item.suffixDisplayParts);\n ret.signatures.push(signature);\n });\n\n return ret;\n }\n\n // async findDefinition(ctx) {\n // const uri = URI.parse(ctx.textDocument.uri)\n // const path = uri.fsPath\n\n // const worker = await this.synchronize([path])\n\n // const info = await worker.getDefinitionAtPosition(path, ctx.offset)\n\n // if (!info) {\n // return\n // }\n\n // return info.map(def => {\n // return {\n // from: def.textSpan.start,\n // to: def.textSpan.start + def.textSpan.length,\n // }\n // })\n // }\n\n public initialize(tsWorker: Worker, options?: InitializeOptions) {\n this.worker = wrap<ITypeScriptWorker>(tsWorker);\n this.starting = this.worker.initialize({\n compilerOptions: options?.compilerOptions ?? {},\n initialFiles: {\n ...this.extraFiles,\n ...(options?.initialFiles ?? {}),\n },\n });\n }\n\n private extraFiles: Record<string, string> = Object.create(null);\n\n public async addExtraFiles(files: Record<string, string>) {\n this.extraFiles = Object.assign({}, this.extraFiles, files);\n\n await this.starting;\n if (this.worker) {\n await this.worker.syncFiles(files);\n this.events.emit('refresh-diagnostics');\n }\n }\n}\n\nfunction createDocumentationString(details: CompletionEntryDetails): string {\n let documentationString = displayPartsToString(details.documentation);\n if (details.tags) {\n for (const tag of details.tags) {\n documentationString += `\\n\\n${tagToString(tag)}`;\n }\n }\n return documentationString;\n}\n\nconst typescriptLanguageService = new TypeScriptLanguageService();\n\nexport { TypeScriptLanguageService, typescriptLanguageService };\n","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nimport type ts from 'typescript';\n\nfunction tagToString(tag: ts.JSDocTagInfo): string {\n let tagLabel = `*@${tag.name}*`;\n if (tag.name === 'param' && tag.text) {\n const [paramName, ...rest] = tag.text;\n tagLabel += `\\`${paramName.text}\\``;\n if (rest.length > 0) {\n tagLabel += ` — ${rest.map(r => r.text).join(' ')}`;\n }\n } else if (Array.isArray(tag.text)) {\n tagLabel += ` — ${tag.text.map(r => r.text).join(' ')}`;\n } else if (tag.text) {\n tagLabel += ` — ${tag.text}`;\n }\n return tagLabel;\n}\n\nexport { tagToString };\n","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nimport { CompletionItemKind } from 'vscode-languageserver-types';\nimport { ScriptElementKind } from 'typescript';\n\n/*\n * Copyright (C) 2018 TypeFox and others.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0\n */\nfunction asCompletionItemKind(kind: ScriptElementKind): CompletionItemKind {\n switch (kind) {\n case ScriptElementKind.primitiveType:\n case ScriptElementKind.keyword:\n return CompletionItemKind.Keyword;\n case ScriptElementKind.constElement:\n case ScriptElementKind.letElement:\n case ScriptElementKind.variableElement:\n case ScriptElementKind.localVariableElement:\n case ScriptElementKind.alias:\n case ScriptElementKind.parameterElement:\n return CompletionItemKind.Variable;\n case ScriptElementKind.memberVariableElement:\n case ScriptElementKind.memberGetAccessorElement:\n case ScriptElementKind.memberSetAccessorElement:\n return CompletionItemKind.Field;\n case ScriptElementKind.functionElement:\n case ScriptElementKind.localFunctionElement:\n return CompletionItemKind.Function;\n case ScriptElementKind.memberFunctionElement:\n case ScriptElementKind.constructSignatureElement:\n case ScriptElementKind.callSignatureElement:\n case ScriptElementKind.indexSignatureElement:\n return CompletionItemKind.Method;\n case ScriptElementKind.enumElement:\n return CompletionItemKind.Enum;\n case ScriptElementKind.enumMemberElement:\n return CompletionItemKind.EnumMember;\n case ScriptElementKind.moduleElement:\n case ScriptElementKind.externalModuleName:\n return CompletionItemKind.Module;\n case ScriptElementKind.classElement:\n case ScriptElementKind.typeElement:\n return CompletionItemKind.Class;\n case ScriptElementKind.interfaceElement:\n return CompletionItemKind.Interface;\n case ScriptElementKind.warning:\n return CompletionItemKind.Text;\n case ScriptElementKind.scriptElement:\n return CompletionItemKind.File;\n case ScriptElementKind.directory:\n return CompletionItemKind.Folder;\n case ScriptElementKind.string:\n return CompletionItemKind.Constant;\n }\n return CompletionItemKind.Property;\n}\n\nexport { asCompletionItemKind };\n","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nimport { textDocumentField } from '@coze-editor/code-language-shared';\n\nimport { typescriptLanguageService } from '../service';\nimport typeInformation from './type-information';\n\nconst extensions = [\n typeInformation(async (state, pos) => {\n const { textDocument, generatedRangeFor } = state.field(textDocumentField);\n const range = generatedRangeFor({ from: pos, to: pos });\n const offset = range?.from;\n\n if (typeof offset !== 'number') {\n return null;\n }\n\n const result = await typescriptLanguageService.getTypeInformation({\n textDocument,\n offset,\n });\n\n return result;\n }),\n];\n\nexport default extensions;\n","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nimport {\n EditorView,\n hoverTooltip,\n ViewPlugin,\n type Tooltip,\n} from '@codemirror/view';\nimport {\n StateField,\n StateEffect,\n type EditorState,\n Facet,\n} from '@codemirror/state';\n\ntype GetTypeInformation = (\n state: EditorState,\n pos: number,\n) =>\n | Promise<{\n type: string;\n properties: {\n name: string;\n type: string;\n }[];\n } | null>\n | undefined;\n\nconst cmdKeyPressedState = StateField.define<boolean>({\n create: () => false,\n update: (value, tr) => {\n for (const effect of tr.effects) {\n if (effect.is(setCmdKeyPressedEffect)) {\n return effect.value;\n }\n }\n return value;\n },\n});\n\nconst setCmdKeyPressedEffect = StateEffect.define<boolean>();\n\nconst cmdKeyEventPlugin = ViewPlugin.fromClass(\n class {\n private dispose: () => void;\n constructor(view: EditorView) {\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.metaKey && !view.state.field(cmdKeyPressedState)) {\n view.dispatch({ effects: setCmdKeyPressedEffect.of(true) });\n }\n };\n\n const onKeyUp = (event: KeyboardEvent) => {\n if (!event.metaKey && view.state.field(cmdKeyPressedState)) {\n view.dispatch({ effects: setCmdKeyPressedEffect.of(false) });\n }\n };\n\n const onBlur = () => {\n if (view.state.field(cmdKeyPressedState)) {\n view.dispatch({ effects: setCmdKeyPressedEffect.of(false) });\n }\n };\n\n window.addEventListener('keydown', onKeyDown);\n window.addEventListener('keyup', onKeyUp);\n window.addEventListener('blur', onBlur);\n\n this.dispose = () => {\n window.removeEventListener('keydown', onKeyDown);\n window.removeEventListener('keyup', onKeyUp);\n window.removeEventListener('blur', onBlur);\n };\n }\n destroy() {\n this.dispose();\n }\n },\n);\n\nconst getTypeInformationFacet = Facet.define<\n GetTypeInformation,\n GetTypeInformation\n>({\n combine(values) {\n return values[values.length - 1];\n },\n});\n\nconst cmdHoverTooltipSource = async (\n view: EditorView,\n pos: number,\n side: -1 | 1,\n): Promise<Tooltip | null> => {\n const word = view.state.wordAt(pos);\n\n if (!word) {\n return null;\n }\n\n if (!view.state.facet(getTypeInformationFacet)) {\n return null;\n }\n\n const doTypeInfoFn = view.state.facet(getTypeInformationFacet);\n const info = await doTypeInfoFn?.(view.state, word.from);\n\n if (!info) {\n return null;\n }\n\n return {\n pos: word.from,\n end: word.to,\n above: true,\n create() {\n const dom = document.createElement('div');\n dom.className = 'cm-type-tooltip';\n\n const cmdPressed = view.state.field(cmdKeyPressedState, false);\n dom.style.display = cmdPressed ? 'block' : 'none';\n\n if (info?.properties?.length) {\n const propsDiv = document.createElement('div');\n propsDiv.className = 'cm-type-tooltip-properties';\n\n const propsHeader = document.createElement('div');\n propsHeader.className = 'cm-type-tooltip-props-header';\n propsHeader.textContent = 'Properties:';\n propsDiv.appendChild(propsHeader);\n\n const propsList = document.createElement('ul');\n propsList.className = 'cm-type-tooltip-props-list';\n\n info.properties.forEach(prop => {\n if (\n prop &&\n typeof prop.name === 'string' &&\n typeof prop.type === 'string'\n ) {\n const propItem = document.createElement('li');\n propItem.className = 'cm-type-tooltip-prop-item';\n\n const propName = document.createElement('span');\n propName.className = 'cm-type-tooltip-prop-name';\n propName.textContent = prop.name;\n propItem.appendChild(propName);\n\n const separator = document.createTextNode(': ');\n propItem.appendChild(separator);\n\n const propType = document.createElement('span');\n propType.className = 'cm-type-tooltip-prop-type';\n propType.textContent = prop.type;\n propItem.appendChild(propType);\n\n propsList.appendChild(propItem);\n }\n });\n propsDiv.appendChild(propsList);\n dom.appendChild(propsDiv);\n }\n\n return {\n dom,\n update(update) {\n for (const tr of update.transactions) {\n for (const effect of tr.effects) {\n if (effect.is(setCmdKeyPressedEffect)) {\n const show = effect.value;\n dom.style.display = show ? 'block' : 'none';\n break;\n }\n }\n }\n },\n };\n },\n };\n};\n\nconst tooltipTheme = EditorView.theme({\n '.cm-tooltip .cm-type-tooltip': {\n padding: '0 10px 6px 10px',\n maxWidth: '350px',\n },\n '.cm-type-tooltip-properties': {\n paddingTop: '6px',\n },\n '.cm-type-tooltip-props-header': {\n fontWeight: 'bold',\n marginBottom: '4px',\n color: '#E06C75',\n },\n '.cm-type-tooltip-props-list': {\n listStyle: 'none',\n margin: '0',\n },\n '.cm-type-tooltip-prop-item': {\n marginBottom: '3px',\n },\n '.cm-type-tooltip-prop-name': {\n color: '#E5C07B',\n },\n '.cm-type-tooltip-prop-type': {\n color: '#ABB2BF',\n },\n});\n\nfunction typeInformation(getTypeInformation: GetTypeInformation) {\n return [\n getTypeInformationFacet.of(getTypeInformation),\n tooltipTheme,\n cmdKeyPressedState,\n cmdKeyEventPlugin,\n hoverTooltip(cmdHoverTooltipSource, {\n hoverTime: 300,\n }),\n ];\n}\n\nexport default typeInformation;\n"],"mappings":"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","names":["textDocumentField","textDocumentField"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/service.ts","../../src/utils.ts","../../src/as.ts","../../src/extensions/index.ts","../../src/extensions/type-information.ts"],"sourcesContent":["// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nimport { typescriptLanguage } from '@codemirror/lang-javascript';\n\nimport {\n TypeScriptLanguageService,\n typescriptLanguageService,\n} from './service';\nimport extensions from './extensions';\n\nconst typescript = {\n language: typescriptLanguage,\n languageService: typescriptLanguageService,\n extensions,\n};\n\nexport {\n typescript,\n typescriptLanguage,\n typescriptLanguageService,\n TypeScriptLanguageService,\n};\n","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nimport { URI } from 'vscode-uri';\nimport {\n type CompletionItem,\n MarkupKind,\n type ParameterInformation,\n type SignatureHelp,\n type SignatureInformation,\n} from 'vscode-languageserver-types';\nimport {\n type CompletionEntryDetails,\n type FormatCodeSettings,\n} from 'typescript';\nimport mitt from 'mitt';\nimport { type Remote, wrap } from 'comlink';\nimport {\n type Diagnostic,\n type LanguageService as ILanguageService,\n MarkerTag,\n textDocumentField,\n} from '@coze-editor/code-language-shared';\nimport type {\n ChangeSpec,\n EditorState,\n TransactionSpec,\n} from '@codemirror/state';\n\nimport { displayPartsToString, tagToString } from './utils';\nimport type { InitializeOptions, ITypeScriptWorker } from './types';\nimport { DiagnosticCategory } from './ts-enums';\nimport { asCompletionItemKind } from './as';\n\nfunction isDiagnostic(v: unknown): v is Diagnostic {\n return Boolean(v);\n}\n\nfunction isChangeDesc(v: unknown): v is ChangeSpec {\n return Boolean(v);\n}\n\ntype Severity = 'hint' | 'info' | 'warning' | 'error';\n\ntype Events = {\n diagnostics: {\n uri: string;\n diagnostics: {\n from: number;\n to: number;\n message: string;\n severity: Severity;\n }[];\n };\n 'refresh-diagnostics': void;\n};\n\nclass TypeScriptLanguageService implements ILanguageService {\n private worker: Remote<ITypeScriptWorker> | null = null;\n private starting: Promise<unknown> | null = null;\n private _cachedFiles: Record<string, string> = Object.create(null);\n public events = mitt<Events>();\n public triggerCharacters: string[] = ['.', \"'\", '\"'];\n\n private async synchronize(paths: string[]) {\n await this.starting;\n\n if (!this.worker) {\n throw new Error('TypeScript LanguageService is not initialized');\n }\n\n const files: Record<string, string> = {};\n paths.forEach(path => {\n files[path] = this._cachedFiles[path] ?? '';\n });\n await this.worker.syncFiles(files);\n\n return this.worker;\n }\n\n onTextDocumentDidChange = (ctx: any) => {\n const { textDocument } = ctx;\n const text = textDocument.getText();\n const uri = URI.parse(textDocument.uri);\n const path = uri.fsPath;\n this._cachedFiles[path] = text;\n };\n\n doHover: NonNullable<ILanguageService['doHover']> = async ctx => {\n const { textDocument } = ctx;\n\n const uri = URI.parse(textDocument.uri);\n const path = uri.fsPath;\n\n const worker = await this.synchronize([path]);\n\n const info = await worker.getQuickInfoAtPosition(path, ctx.offset);\n\n if (!info) {\n return;\n }\n\n const tags = info.tags\n ? info.tags.map(tag => tagToString(tag)).join(' \\n\\n')\n : '';\n const contents = displayPartsToString(info.displayParts);\n const documentation = displayPartsToString(info.documentation);\n\n return {\n kind: MarkupKind.Markdown,\n value: `\\`\\`\\`ts\\n${contents}\\n\\`\\`\\`\\n${\n documentation\n }${tags ? `\\n\\n${tags}` : ''}`,\n };\n };\n\n public async synchronizeByURI(uri: string, content: string) {\n await this.onTextDocumentDidChange({\n textDocument: {\n uri,\n getText() {\n return content;\n },\n },\n });\n }\n\n public async validateByURI(uri: string) {\n return this.doValidation({\n textDocument: {\n uri,\n } as any,\n });\n }\n\n doValidation: NonNullable<ILanguageService['doValidation']> = async ctx => {\n const { textDocument } = ctx;\n\n const uri = URI.parse(textDocument.uri);\n const path = uri.fsPath;\n\n const worker = await this.synchronize([path]);\n\n try {\n const diagnostics = [\n ...(await worker.getSyntacticDiagnostics(path)),\n ...(await worker.getSemanticDiagnostics(path)),\n ...(await worker.getSuggestionDiagnostics(path)),\n ];\n\n const categoryToSeverityMap = {\n [DiagnosticCategory.Error]: 'error',\n [DiagnosticCategory.Warning]: 'warning',\n [DiagnosticCategory.Message]: 'info',\n [DiagnosticCategory.Suggestion]: 'hint',\n };\n\n return diagnostics\n .map(d => {\n if (\n typeof d.start !== 'number' ||\n !categoryToSeverityMap[d.category]\n ) {\n return;\n }\n\n const tags: MarkerTag[] = [];\n if (d.reportsUnnecessary) {\n tags.push(MarkerTag.Unnecessary);\n }\n if (d.reportsDeprecated) {\n tags.push(MarkerTag.Deprecated);\n }\n\n return {\n from: d.start,\n to: d.start + (d.length ?? 0),\n severity: categoryToSeverityMap[d.category],\n message:\n typeof d.messageText === 'string'\n ? d.messageText\n : d.messageText.messageText,\n tags,\n };\n })\n .filter(v => isDiagnostic(v));\n } catch (e) {\n return [];\n }\n };\n\n doComplete: ILanguageService['doComplete'] = async ctx => {\n const uri = URI.parse(ctx.textDocument.uri);\n const path = uri.fsPath;\n\n const worker = await this.synchronize([path]);\n\n const result = await worker.getCompletionsAtPosition(path, ctx.offset);\n\n if (!result) {\n return null;\n }\n\n const items = result.entries.map(entry => ({\n label: entry.name,\n kind: asCompletionItemKind(entry.kind),\n }));\n\n return {\n isIncomplete: result.isIncomplete ?? true,\n items,\n };\n };\n\n public async resolveCompletionItem(\n ctx: any,\n item: CompletionItem,\n ): Promise<CompletionItem> {\n const uri = URI.parse(ctx.textDocument.uri);\n const path = uri.fsPath;\n const worker = await this.synchronize([path]);\n const details = await worker.getCompletionEntryDetails(\n path,\n ctx.offset,\n item.label,\n undefined,\n undefined,\n undefined,\n undefined,\n );\n if (!details) {\n return item;\n }\n const documentationString = createDocumentationString(details);\n return {\n label: details.name,\n detail: displayPartsToString(details?.displayParts),\n documentation: documentationString\n ? {\n kind: MarkupKind.Markdown,\n value: documentationString,\n }\n : undefined,\n };\n }\n\n public async format(\n state: EditorState,\n options: FormatCodeSettings = {},\n ): Promise<TransactionSpec> {\n const { textDocument, originalRangeFor } = state.field(textDocumentField);\n\n const uri = URI.parse(textDocument.uri);\n const path = uri.fsPath;\n\n const worker = await this.synchronize([path]);\n\n const edits = await worker.getFormattingEditsForDocument(path, {\n indentSize: 2,\n tabSize: 2,\n convertTabsToSpaces: true,\n newLineCharacter: '\\n',\n ...options,\n });\n\n if (!edits) {\n return {\n changes: [],\n };\n }\n\n const changes = edits\n .map(edit => {\n const range = originalRangeFor({\n from: edit.span.start,\n to: edit.span.start + edit.span.length,\n });\n if (range) {\n return {\n ...range,\n insert: edit.newText,\n };\n }\n })\n .filter(v => isChangeDesc(v));\n\n return {\n changes,\n };\n }\n\n async getTypeInformation(ctx: any) {\n const { textDocument } = ctx;\n\n const uri = URI.parse(textDocument.uri);\n const path = uri.fsPath;\n\n const worker = await this.synchronize([path]);\n\n const info = await worker.getTypeInfoAtPosition(path, ctx.offset);\n\n return info;\n }\n\n async doSignatureHelp(ctx: any) {\n const uri = URI.parse(ctx.textDocument.uri);\n const path = uri.fsPath;\n\n const worker = await this.synchronize([path]);\n\n const info = await worker.getSignatureHelpItems(path, ctx.offset, {});\n\n if (!info) {\n return null;\n }\n\n const ret: SignatureHelp = {\n activeSignature: info.selectedItemIndex,\n activeParameter: info.argumentIndex,\n signatures: [],\n };\n\n info.items.forEach(item => {\n const signature: SignatureInformation = {\n label: '',\n parameters: [],\n };\n\n signature.documentation = {\n kind: MarkupKind.Markdown,\n value: displayPartsToString(item.documentation),\n };\n signature.label += displayPartsToString(item.prefixDisplayParts);\n item.parameters.forEach((p, i, a) => {\n const label = displayPartsToString(p.displayParts);\n const parameter: ParameterInformation = {\n label,\n documentation: {\n kind: MarkupKind.Markdown,\n value: displayPartsToString(p.documentation),\n },\n };\n signature.label += label;\n signature.parameters!.push(parameter);\n if (i < a.length - 1) {\n signature.label += displayPartsToString(item.separatorDisplayParts);\n }\n });\n signature.label += displayPartsToString(item.suffixDisplayParts);\n ret.signatures.push(signature);\n });\n\n return ret;\n }\n\n // async findDefinition(ctx) {\n // const uri = URI.parse(ctx.textDocument.uri)\n // const path = uri.fsPath\n\n // const worker = await this.synchronize([path])\n\n // const info = await worker.getDefinitionAtPosition(path, ctx.offset)\n\n // if (!info) {\n // return\n // }\n\n // return info.map(def => {\n // return {\n // from: def.textSpan.start,\n // to: def.textSpan.start + def.textSpan.length,\n // }\n // })\n // }\n\n public initialize(tsWorker: Worker, options?: InitializeOptions) {\n this.worker = wrap<ITypeScriptWorker>(tsWorker);\n this.starting = this.worker.initialize({\n compilerOptions: options?.compilerOptions ?? {},\n initialFiles: {\n ...this.extraFiles,\n ...(options?.initialFiles ?? {}),\n },\n });\n }\n\n private extraFiles: Record<string, string> = Object.create(null);\n\n public async addExtraFiles(files: Record<string, string>) {\n this.extraFiles = Object.assign({}, this.extraFiles, files);\n\n await this.starting;\n if (this.worker) {\n await this.worker.syncFiles(files);\n this.events.emit('refresh-diagnostics');\n }\n }\n}\n\nfunction createDocumentationString(details: CompletionEntryDetails): string {\n let documentationString = displayPartsToString(details.documentation);\n if (details.tags) {\n for (const tag of details.tags) {\n documentationString += `\\n\\n${tagToString(tag)}`;\n }\n }\n return documentationString;\n}\n\nconst typescriptLanguageService = new TypeScriptLanguageService();\n\nexport { TypeScriptLanguageService, typescriptLanguageService };\n","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nimport type ts from 'typescript';\nimport { type SymbolDisplayPart } from 'typescript';\n\nfunction tagToString(tag: ts.JSDocTagInfo): string {\n let tagLabel = `*@${tag.name}*`;\n if (tag.name === 'param' && tag.text) {\n const [paramName, ...rest] = tag.text;\n tagLabel += `\\`${paramName.text}\\``;\n if (rest.length > 0) {\n tagLabel += ` — ${rest.map(r => r.text).join(' ')}`;\n }\n } else if (Array.isArray(tag.text)) {\n tagLabel += ` — ${tag.text.map(r => r.text).join(' ')}`;\n } else if (tag.text) {\n tagLabel += ` — ${tag.text}`;\n }\n return tagLabel;\n}\n\nfunction displayPartsToString(displayParts?: SymbolDisplayPart[]) {\n if (displayParts) {\n return displayParts.map(displayPart2 => displayPart2.text).join('');\n }\n return '';\n}\n\nexport { tagToString, displayPartsToString };\n","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nimport { CompletionItemKind } from 'vscode-languageserver-types';\n\nimport { ScriptElementKind } from './ts-enums';\n\n/*\n * Copyright (C) 2018 TypeFox and others.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0\n */\nfunction asCompletionItemKind(kind: ScriptElementKind): CompletionItemKind {\n switch (kind) {\n case ScriptElementKind.primitiveType:\n case ScriptElementKind.keyword:\n return CompletionItemKind.Keyword;\n case ScriptElementKind.constElement:\n case ScriptElementKind.letElement:\n case ScriptElementKind.variableElement:\n case ScriptElementKind.localVariableElement:\n case ScriptElementKind.alias:\n case ScriptElementKind.parameterElement:\n return CompletionItemKind.Variable;\n case ScriptElementKind.memberVariableElement:\n case ScriptElementKind.memberGetAccessorElement:\n case ScriptElementKind.memberSetAccessorElement:\n return CompletionItemKind.Field;\n case ScriptElementKind.functionElement:\n case ScriptElementKind.localFunctionElement:\n return CompletionItemKind.Function;\n case ScriptElementKind.memberFunctionElement:\n case ScriptElementKind.constructSignatureElement:\n case ScriptElementKind.callSignatureElement:\n case ScriptElementKind.indexSignatureElement:\n return CompletionItemKind.Method;\n case ScriptElementKind.enumElement:\n return CompletionItemKind.Enum;\n case ScriptElementKind.enumMemberElement:\n return CompletionItemKind.EnumMember;\n case ScriptElementKind.moduleElement:\n case ScriptElementKind.externalModuleName:\n return CompletionItemKind.Module;\n case ScriptElementKind.classElement:\n case ScriptElementKind.typeElement:\n return CompletionItemKind.Class;\n case ScriptElementKind.interfaceElement:\n return CompletionItemKind.Interface;\n case ScriptElementKind.warning:\n return CompletionItemKind.Text;\n case ScriptElementKind.scriptElement:\n return CompletionItemKind.File;\n case ScriptElementKind.directory:\n return CompletionItemKind.Folder;\n case ScriptElementKind.string:\n return CompletionItemKind.Constant;\n }\n return CompletionItemKind.Property;\n}\n\nexport { asCompletionItemKind };\n","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nimport { textDocumentField } from '@coze-editor/code-language-shared';\n\nimport { typescriptLanguageService } from '../service';\nimport typeInformation from './type-information';\n\nconst extensions = [\n typeInformation(async (state, pos) => {\n const { textDocument, generatedRangeFor } = state.field(textDocumentField);\n const range = generatedRangeFor({ from: pos, to: pos });\n const offset = range?.from;\n\n if (typeof offset !== 'number') {\n return null;\n }\n\n const result = await typescriptLanguageService.getTypeInformation({\n textDocument,\n offset,\n });\n\n return result;\n }),\n];\n\nexport default extensions;\n","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nimport {\n EditorView,\n hoverTooltip,\n ViewPlugin,\n type Tooltip,\n} from '@codemirror/view';\nimport {\n StateField,\n StateEffect,\n type EditorState,\n Facet,\n} from '@codemirror/state';\n\ntype GetTypeInformation = (\n state: EditorState,\n pos: number,\n) =>\n | Promise<{\n type: string;\n properties: {\n name: string;\n type: string;\n }[];\n } | null>\n | undefined;\n\nconst cmdKeyPressedState = StateField.define<boolean>({\n create: () => false,\n update: (value, tr) => {\n for (const effect of tr.effects) {\n if (effect.is(setCmdKeyPressedEffect)) {\n return effect.value;\n }\n }\n return value;\n },\n});\n\nconst setCmdKeyPressedEffect = StateEffect.define<boolean>();\n\nconst cmdKeyEventPlugin = ViewPlugin.fromClass(\n class {\n private dispose: () => void;\n constructor(view: EditorView) {\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.metaKey && !view.state.field(cmdKeyPressedState)) {\n view.dispatch({ effects: setCmdKeyPressedEffect.of(true) });\n }\n };\n\n const onKeyUp = (event: KeyboardEvent) => {\n if (!event.metaKey && view.state.field(cmdKeyPressedState)) {\n view.dispatch({ effects: setCmdKeyPressedEffect.of(false) });\n }\n };\n\n const onBlur = () => {\n if (view.state.field(cmdKeyPressedState)) {\n view.dispatch({ effects: setCmdKeyPressedEffect.of(false) });\n }\n };\n\n window.addEventListener('keydown', onKeyDown);\n window.addEventListener('keyup', onKeyUp);\n window.addEventListener('blur', onBlur);\n\n this.dispose = () => {\n window.removeEventListener('keydown', onKeyDown);\n window.removeEventListener('keyup', onKeyUp);\n window.removeEventListener('blur', onBlur);\n };\n }\n destroy() {\n this.dispose();\n }\n },\n);\n\nconst getTypeInformationFacet = Facet.define<\n GetTypeInformation,\n GetTypeInformation\n>({\n combine(values) {\n return values[values.length - 1];\n },\n});\n\nconst cmdHoverTooltipSource = async (\n view: EditorView,\n pos: number,\n side: -1 | 1,\n): Promise<Tooltip | null> => {\n const word = view.state.wordAt(pos);\n\n if (!word) {\n return null;\n }\n\n if (!view.state.facet(getTypeInformationFacet)) {\n return null;\n }\n\n const doTypeInfoFn = view.state.facet(getTypeInformationFacet);\n const info = await doTypeInfoFn?.(view.state, word.from);\n\n if (!info) {\n return null;\n }\n\n return {\n pos: word.from,\n end: word.to,\n above: true,\n create() {\n const dom = document.createElement('div');\n dom.className = 'cm-type-tooltip';\n\n const cmdPressed = view.state.field(cmdKeyPressedState, false);\n dom.style.display = cmdPressed ? 'block' : 'none';\n\n if (info?.properties?.length) {\n const propsDiv = document.createElement('div');\n propsDiv.className = 'cm-type-tooltip-properties';\n\n const propsHeader = document.createElement('div');\n propsHeader.className = 'cm-type-tooltip-props-header';\n propsHeader.textContent = 'Properties:';\n propsDiv.appendChild(propsHeader);\n\n const propsList = document.createElement('ul');\n propsList.className = 'cm-type-tooltip-props-list';\n\n info.properties.forEach(prop => {\n if (\n prop &&\n typeof prop.name === 'string' &&\n typeof prop.type === 'string'\n ) {\n const propItem = document.createElement('li');\n propItem.className = 'cm-type-tooltip-prop-item';\n\n const propName = document.createElement('span');\n propName.className = 'cm-type-tooltip-prop-name';\n propName.textContent = prop.name;\n propItem.appendChild(propName);\n\n const separator = document.createTextNode(': ');\n propItem.appendChild(separator);\n\n const propType = document.createElement('span');\n propType.className = 'cm-type-tooltip-prop-type';\n propType.textContent = prop.type;\n propItem.appendChild(propType);\n\n propsList.appendChild(propItem);\n }\n });\n propsDiv.appendChild(propsList);\n dom.appendChild(propsDiv);\n }\n\n return {\n dom,\n update(update) {\n for (const tr of update.transactions) {\n for (const effect of tr.effects) {\n if (effect.is(setCmdKeyPressedEffect)) {\n const show = effect.value;\n dom.style.display = show ? 'block' : 'none';\n break;\n }\n }\n }\n },\n };\n },\n };\n};\n\nconst tooltipTheme = EditorView.theme({\n '.cm-tooltip .cm-type-tooltip': {\n padding: '0 10px 6px 10px',\n maxWidth: '350px',\n },\n '.cm-type-tooltip-properties': {\n paddingTop: '6px',\n },\n '.cm-type-tooltip-props-header': {\n fontWeight: 'bold',\n marginBottom: '4px',\n color: '#E06C75',\n },\n '.cm-type-tooltip-props-list': {\n listStyle: 'none',\n margin: '0',\n paddingInlineStart: '20px',\n },\n '.cm-type-tooltip-prop-item': {\n marginBottom: '3px',\n },\n '.cm-type-tooltip-prop-name': {\n color: '#E5C07B',\n },\n '.cm-type-tooltip-prop-type': {\n color: '#ABB2BF',\n },\n});\n\nfunction typeInformation(getTypeInformation: GetTypeInformation) {\n return [\n getTypeInformationFacet.of(getTypeInformation),\n tooltipTheme,\n cmdKeyPressedState,\n cmdKeyEventPlugin,\n hoverTooltip(cmdHoverTooltipSource, {\n hoverTime: 300,\n }),\n ];\n}\n\nexport default typeInformation;\n"],"mappings":"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","names":["textDocumentField","textDocumentField"]}
package/dist/index.d.mts CHANGED
@@ -30,6 +30,7 @@ declare class TypeScriptLanguageService implements LanguageService {
30
30
  private starting;
31
31
  private _cachedFiles;
32
32
  events: mitt.Emitter<Events>;
33
+ triggerCharacters: string[];
33
34
  private synchronize;
34
35
  onTextDocumentDidChange: (ctx: any) => void;
35
36
  doHover: NonNullable<LanguageService['doHover']>;
package/dist/index.d.ts CHANGED
@@ -30,6 +30,7 @@ declare class TypeScriptLanguageService implements LanguageService {
30
30
  private starting;
31
31
  private _cachedFiles;
32
32
  events: mitt.Emitter<Events>;
33
+ triggerCharacters: string[];
33
34
  private synchronize;
34
35
  onTextDocumentDidChange: (ctx: any) => void;
35
36
  doHover: NonNullable<LanguageService['doHover']>;
package/dist/index.js CHANGED
@@ -40,10 +40,8 @@ var import_lang_javascript = require("@codemirror/lang-javascript");
40
40
  // src/service.ts
41
41
  var import_vscode_uri = require("vscode-uri");
42
42
  var import_vscode_languageserver_types2 = require("vscode-languageserver-types");
43
- var import_typescript2 = require("typescript");
44
43
  var import_mitt = __toESM(require("mitt"));
45
44
  var import_comlink = require("comlink");
46
- var import_microfuzz = __toESM(require("@nozbe/microfuzz"));
47
45
  var import_code_language_shared = require("@coze-editor/code-language-shared");
48
46
 
49
47
  // src/utils.ts
@@ -62,60 +60,64 @@ function tagToString(tag) {
62
60
  }
63
61
  return tagLabel;
64
62
  }
63
+ function displayPartsToString(displayParts) {
64
+ if (displayParts) {
65
+ return displayParts.map((displayPart2) => displayPart2.text).join("");
66
+ }
67
+ return "";
68
+ }
65
69
 
66
70
  // src/as.ts
67
71
  var import_vscode_languageserver_types = require("vscode-languageserver-types");
68
- var import_typescript = require("typescript");
69
72
  function asCompletionItemKind(kind) {
70
73
  switch (kind) {
71
- case import_typescript.ScriptElementKind.primitiveType:
72
- case import_typescript.ScriptElementKind.keyword:
74
+ case "primitive type" /* primitiveType */:
75
+ case "keyword" /* keyword */:
73
76
  return import_vscode_languageserver_types.CompletionItemKind.Keyword;
74
- case import_typescript.ScriptElementKind.constElement:
75
- case import_typescript.ScriptElementKind.letElement:
76
- case import_typescript.ScriptElementKind.variableElement:
77
- case import_typescript.ScriptElementKind.localVariableElement:
78
- case import_typescript.ScriptElementKind.alias:
79
- case import_typescript.ScriptElementKind.parameterElement:
77
+ case "const" /* constElement */:
78
+ case "let" /* letElement */:
79
+ case "var" /* variableElement */:
80
+ case "local var" /* localVariableElement */:
81
+ case "alias" /* alias */:
82
+ case "parameter" /* parameterElement */:
80
83
  return import_vscode_languageserver_types.CompletionItemKind.Variable;
81
- case import_typescript.ScriptElementKind.memberVariableElement:
82
- case import_typescript.ScriptElementKind.memberGetAccessorElement:
83
- case import_typescript.ScriptElementKind.memberSetAccessorElement:
84
+ case "property" /* memberVariableElement */:
85
+ case "getter" /* memberGetAccessorElement */:
86
+ case "setter" /* memberSetAccessorElement */:
84
87
  return import_vscode_languageserver_types.CompletionItemKind.Field;
85
- case import_typescript.ScriptElementKind.functionElement:
86
- case import_typescript.ScriptElementKind.localFunctionElement:
88
+ case "function" /* functionElement */:
89
+ case "local function" /* localFunctionElement */:
87
90
  return import_vscode_languageserver_types.CompletionItemKind.Function;
88
- case import_typescript.ScriptElementKind.memberFunctionElement:
89
- case import_typescript.ScriptElementKind.constructSignatureElement:
90
- case import_typescript.ScriptElementKind.callSignatureElement:
91
- case import_typescript.ScriptElementKind.indexSignatureElement:
91
+ case "method" /* memberFunctionElement */:
92
+ case "construct" /* constructSignatureElement */:
93
+ case "call" /* callSignatureElement */:
94
+ case "index" /* indexSignatureElement */:
92
95
  return import_vscode_languageserver_types.CompletionItemKind.Method;
93
- case import_typescript.ScriptElementKind.enumElement:
96
+ case "enum" /* enumElement */:
94
97
  return import_vscode_languageserver_types.CompletionItemKind.Enum;
95
- case import_typescript.ScriptElementKind.enumMemberElement:
98
+ case "enum member" /* enumMemberElement */:
96
99
  return import_vscode_languageserver_types.CompletionItemKind.EnumMember;
97
- case import_typescript.ScriptElementKind.moduleElement:
98
- case import_typescript.ScriptElementKind.externalModuleName:
100
+ case "module" /* moduleElement */:
101
+ case "external module name" /* externalModuleName */:
99
102
  return import_vscode_languageserver_types.CompletionItemKind.Module;
100
- case import_typescript.ScriptElementKind.classElement:
101
- case import_typescript.ScriptElementKind.typeElement:
103
+ case "class" /* classElement */:
104
+ case "type" /* typeElement */:
102
105
  return import_vscode_languageserver_types.CompletionItemKind.Class;
103
- case import_typescript.ScriptElementKind.interfaceElement:
106
+ case "interface" /* interfaceElement */:
104
107
  return import_vscode_languageserver_types.CompletionItemKind.Interface;
105
- case import_typescript.ScriptElementKind.warning:
108
+ case "warning" /* warning */:
106
109
  return import_vscode_languageserver_types.CompletionItemKind.Text;
107
- case import_typescript.ScriptElementKind.scriptElement:
110
+ case "script" /* scriptElement */:
108
111
  return import_vscode_languageserver_types.CompletionItemKind.File;
109
- case import_typescript.ScriptElementKind.directory:
112
+ case "directory" /* directory */:
110
113
  return import_vscode_languageserver_types.CompletionItemKind.Folder;
111
- case import_typescript.ScriptElementKind.string:
114
+ case "string" /* string */:
112
115
  return import_vscode_languageserver_types.CompletionItemKind.Constant;
113
116
  }
114
117
  return import_vscode_languageserver_types.CompletionItemKind.Property;
115
118
  }
116
119
 
117
120
  // src/service.ts
118
- var identRe = /^[\w$]+$/;
119
121
  function isDiagnostic(v) {
120
122
  return Boolean(v);
121
123
  }
@@ -127,6 +129,7 @@ var TypeScriptLanguageService = class {
127
129
  starting = null;
128
130
  _cachedFiles = /* @__PURE__ */ Object.create(null);
129
131
  events = (0, import_mitt.default)();
132
+ triggerCharacters = [".", "'", '"'];
130
133
  async synchronize(paths) {
131
134
  await this.starting;
132
135
  if (!this.worker) {
@@ -156,8 +159,8 @@ var TypeScriptLanguageService = class {
156
159
  return;
157
160
  }
158
161
  const tags = info.tags ? info.tags.map((tag) => tagToString(tag)).join(" \n\n") : "";
159
- const contents = (0, import_typescript2.displayPartsToString)(info.displayParts);
160
- const documentation = (0, import_typescript2.displayPartsToString)(info.documentation);
162
+ const contents = displayPartsToString(info.displayParts);
163
+ const documentation = displayPartsToString(info.documentation);
161
164
  return {
162
165
  kind: import_vscode_languageserver_types2.MarkupKind.Markdown,
163
166
  value: `\`\`\`ts
@@ -197,10 +200,10 @@ ${tags}` : ""}`
197
200
  ...await worker.getSuggestionDiagnostics(path)
198
201
  ];
199
202
  const categoryToSeverityMap = {
200
- [import_typescript2.DiagnosticCategory.Error]: "error",
201
- [import_typescript2.DiagnosticCategory.Warning]: "warning",
202
- [import_typescript2.DiagnosticCategory.Message]: "info",
203
- [import_typescript2.DiagnosticCategory.Suggestion]: "hint"
203
+ [1 /* Error */]: "error",
204
+ [0 /* Warning */]: "warning",
205
+ [3 /* Message */]: "info",
206
+ [2 /* Suggestion */]: "hint"
204
207
  };
205
208
  return diagnostics.map((d) => {
206
209
  if (typeof d.start !== "number" || !categoryToSeverityMap[d.category]) {
@@ -228,7 +231,6 @@ ${tags}` : ""}`
228
231
  doComplete = async (ctx) => {
229
232
  const uri = import_vscode_uri.URI.parse(ctx.textDocument.uri);
230
233
  const path = uri.fsPath;
231
- const content = ctx.textDocument.getText();
232
234
  const worker = await this.synchronize([path]);
233
235
  const result = await worker.getCompletionsAtPosition(path, ctx.offset);
234
236
  if (!result) {
@@ -238,45 +240,9 @@ ${tags}` : ""}`
238
240
  label: entry.name,
239
241
  kind: asCompletionItemKind(entry.kind)
240
242
  }));
241
- const fuzzySearch = (0, import_microfuzz.default)(items, {
242
- key: "label"
243
- });
244
- let i = ctx.offset - 1;
245
- let query = "";
246
- while (i >= 0) {
247
- const char = content.slice(i, i + 1);
248
- if (char === "\n") {
249
- break;
250
- }
251
- if (!identRe.test(char) && i + 1 <= ctx.offset) {
252
- break;
253
- }
254
- i--;
255
- }
256
- query = content.slice(i + 1, ctx.offset);
257
- const charBefore = content.slice(ctx.offset - 1, ctx.offset);
258
- const triggerCharacters = [".", "'", '"'];
259
- if (triggerCharacters.includes(charBefore)) {
260
- return {
261
- isIncomplete: true,
262
- items
263
- };
264
- }
265
- return query ? {
266
- isIncomplete: true,
267
- items: fuzzySearch(query).map((v) => ({
268
- ...v.item,
269
- textEdit: {
270
- range: {
271
- start: ctx.textDocument.positionAt(i + 1),
272
- end: ctx.textDocument.positionAt(ctx.offset)
273
- },
274
- newText: v.item.label
275
- }
276
- }))
277
- } : {
278
- isIncomplete: true,
279
- items: []
243
+ return {
244
+ isIncomplete: result.isIncomplete ?? true,
245
+ items
280
246
  };
281
247
  };
282
248
  async resolveCompletionItem(ctx, item) {
@@ -298,7 +264,7 @@ ${tags}` : ""}`
298
264
  const documentationString = createDocumentationString(details);
299
265
  return {
300
266
  label: details.name,
301
- detail: (0, import_typescript2.displayPartsToString)(details == null ? void 0 : details.displayParts),
267
+ detail: displayPartsToString(details == null ? void 0 : details.displayParts),
302
268
  documentation: documentationString ? {
303
269
  kind: import_vscode_languageserver_types2.MarkupKind.Markdown,
304
270
  value: documentationString
@@ -366,25 +332,25 @@ ${tags}` : ""}`
366
332
  };
367
333
  signature.documentation = {
368
334
  kind: import_vscode_languageserver_types2.MarkupKind.Markdown,
369
- value: (0, import_typescript2.displayPartsToString)(item.documentation)
335
+ value: displayPartsToString(item.documentation)
370
336
  };
371
- signature.label += (0, import_typescript2.displayPartsToString)(item.prefixDisplayParts);
337
+ signature.label += displayPartsToString(item.prefixDisplayParts);
372
338
  item.parameters.forEach((p, i, a) => {
373
- const label = (0, import_typescript2.displayPartsToString)(p.displayParts);
339
+ const label = displayPartsToString(p.displayParts);
374
340
  const parameter = {
375
341
  label,
376
342
  documentation: {
377
343
  kind: import_vscode_languageserver_types2.MarkupKind.Markdown,
378
- value: (0, import_typescript2.displayPartsToString)(p.documentation)
344
+ value: displayPartsToString(p.documentation)
379
345
  }
380
346
  };
381
347
  signature.label += label;
382
348
  signature.parameters.push(parameter);
383
349
  if (i < a.length - 1) {
384
- signature.label += (0, import_typescript2.displayPartsToString)(item.separatorDisplayParts);
350
+ signature.label += displayPartsToString(item.separatorDisplayParts);
385
351
  }
386
352
  });
387
- signature.label += (0, import_typescript2.displayPartsToString)(item.suffixDisplayParts);
353
+ signature.label += displayPartsToString(item.suffixDisplayParts);
388
354
  ret.signatures.push(signature);
389
355
  });
390
356
  return ret;
@@ -425,7 +391,7 @@ ${tags}` : ""}`
425
391
  }
426
392
  };
427
393
  function createDocumentationString(details) {
428
- let documentationString = (0, import_typescript2.displayPartsToString)(details.documentation);
394
+ let documentationString = displayPartsToString(details.documentation);
429
395
  if (details.tags) {
430
396
  for (const tag of details.tags) {
431
397
  documentationString += `
@@ -577,7 +543,8 @@ var tooltipTheme = import_view.EditorView.theme({
577
543
  },
578
544
  ".cm-type-tooltip-props-list": {
579
545
  listStyle: "none",
580
- margin: "0"
546
+ margin: "0",
547
+ paddingInlineStart: "20px"
581
548
  },
582
549
  ".cm-type-tooltip-prop-item": {
583
550
  marginBottom: "3px"
@@ -633,4 +600,18 @@ var typescript = {
633
600
  typescriptLanguage,
634
601
  typescriptLanguageService
635
602
  });
603
+ /*! *****************************************************************************
604
+ Copyright (c) Microsoft Corporation. All rights reserved.
605
+ Licensed under the Apache License, Version 2.0 (the "License"); you may not use
606
+ this file except in compliance with the License. You may obtain a copy of the
607
+ License at http://www.apache.org/licenses/LICENSE-2.0
608
+
609
+ THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
610
+ KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
611
+ WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
612
+ MERCHANTABLITY OR NON-INFRINGEMENT.
613
+
614
+ See the Apache Version 2.0 License for specific language governing permissions
615
+ and limitations under the License.
616
+ ***************************************************************************** */
636
617
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/service.ts","../src/utils.ts","../src/as.ts","../src/extensions/index.ts","../src/extensions/type-information.ts"],"sourcesContent":["// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nimport { typescriptLanguage } from '@codemirror/lang-javascript';\n\nimport {\n TypeScriptLanguageService,\n typescriptLanguageService,\n} from './service';\nimport extensions from './extensions';\n\nconst typescript = {\n language: typescriptLanguage,\n languageService: typescriptLanguageService,\n extensions,\n};\n\nexport {\n typescript,\n typescriptLanguage,\n typescriptLanguageService,\n TypeScriptLanguageService,\n};\n","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nimport { URI } from 'vscode-uri';\nimport {\n type CompletionItem,\n MarkupKind,\n type ParameterInformation,\n type SignatureHelp,\n type SignatureInformation,\n} from 'vscode-languageserver-types';\nimport {\n type CompletionEntryDetails,\n DiagnosticCategory,\n displayPartsToString,\n type FormatCodeSettings,\n} from 'typescript';\nimport mitt from 'mitt';\nimport { type Remote, wrap } from 'comlink';\nimport createFuzzySearch from '@nozbe/microfuzz';\nimport {\n type Diagnostic,\n type LanguageService as ILanguageService,\n MarkerTag,\n textDocumentField,\n} from '@coze-editor/code-language-shared';\nimport type {\n ChangeSpec,\n EditorState,\n TransactionSpec,\n} from '@codemirror/state';\n\nimport { tagToString } from './utils';\nimport type { InitializeOptions, ITypeScriptWorker } from './types';\nimport { asCompletionItemKind } from './as';\n\nconst identRe = /^[\\w$]+$/;\n\nfunction isDiagnostic(v: unknown): v is Diagnostic {\n return Boolean(v);\n}\n\nfunction isChangeDesc(v: unknown): v is ChangeSpec {\n return Boolean(v);\n}\n\ntype Severity = 'hint' | 'info' | 'warning' | 'error';\n\ntype Events = {\n diagnostics: {\n uri: string;\n diagnostics: {\n from: number;\n to: number;\n message: string;\n severity: Severity;\n }[];\n };\n 'refresh-diagnostics': void;\n};\n\nclass TypeScriptLanguageService implements ILanguageService {\n private worker: Remote<ITypeScriptWorker> | null = null;\n private starting: Promise<unknown> | null = null;\n private _cachedFiles: Record<string, string> = Object.create(null);\n public events = mitt<Events>();\n\n private async synchronize(paths: string[]) {\n await this.starting;\n\n if (!this.worker) {\n throw new Error('TypeScript LanguageService is not initialized');\n }\n\n const files: Record<string, string> = {};\n paths.forEach(path => {\n files[path] = this._cachedFiles[path] ?? '';\n });\n await this.worker.syncFiles(files);\n\n return this.worker;\n }\n\n onTextDocumentDidChange = (ctx: any) => {\n const { textDocument } = ctx;\n const text = textDocument.getText();\n const uri = URI.parse(textDocument.uri);\n const path = uri.fsPath;\n this._cachedFiles[path] = text;\n };\n\n doHover: NonNullable<ILanguageService['doHover']> = async ctx => {\n const { textDocument } = ctx;\n\n const uri = URI.parse(textDocument.uri);\n const path = uri.fsPath;\n\n const worker = await this.synchronize([path]);\n\n const info = await worker.getQuickInfoAtPosition(path, ctx.offset);\n\n if (!info) {\n return;\n }\n\n const tags = info.tags\n ? info.tags.map(tag => tagToString(tag)).join(' \\n\\n')\n : '';\n const contents = displayPartsToString(info.displayParts);\n const documentation = displayPartsToString(info.documentation);\n\n return {\n kind: MarkupKind.Markdown,\n value: `\\`\\`\\`ts\\n${contents}\\n\\`\\`\\`\\n${\n documentation\n }${tags ? `\\n\\n${tags}` : ''}`,\n };\n };\n\n public async synchronizeByURI(uri: string, content: string) {\n await this.onTextDocumentDidChange({\n textDocument: {\n uri,\n getText() {\n return content;\n },\n },\n });\n }\n\n public async validateByURI(uri: string) {\n return this.doValidation({\n textDocument: {\n uri,\n } as any,\n });\n }\n\n doValidation: NonNullable<ILanguageService['doValidation']> = async ctx => {\n const { textDocument } = ctx;\n\n const uri = URI.parse(textDocument.uri);\n const path = uri.fsPath;\n\n const worker = await this.synchronize([path]);\n\n try {\n const diagnostics = [\n ...(await worker.getSyntacticDiagnostics(path)),\n ...(await worker.getSemanticDiagnostics(path)),\n ...(await worker.getSuggestionDiagnostics(path)),\n ];\n\n const categoryToSeverityMap = {\n [DiagnosticCategory.Error]: 'error',\n [DiagnosticCategory.Warning]: 'warning',\n [DiagnosticCategory.Message]: 'info',\n [DiagnosticCategory.Suggestion]: 'hint',\n };\n\n return diagnostics\n .map(d => {\n if (\n typeof d.start !== 'number' ||\n !categoryToSeverityMap[d.category]\n ) {\n return;\n }\n\n const tags: MarkerTag[] = [];\n if (d.reportsUnnecessary) {\n tags.push(MarkerTag.Unnecessary);\n }\n if (d.reportsDeprecated) {\n tags.push(MarkerTag.Deprecated);\n }\n\n return {\n from: d.start,\n to: d.start + (d.length ?? 0),\n severity: categoryToSeverityMap[d.category],\n message:\n typeof d.messageText === 'string'\n ? d.messageText\n : d.messageText.messageText,\n tags,\n };\n })\n .filter(v => isDiagnostic(v));\n } catch (e) {\n return [];\n }\n };\n\n doComplete: ILanguageService['doComplete'] = async ctx => {\n const uri = URI.parse(ctx.textDocument.uri);\n const path = uri.fsPath;\n const content = ctx.textDocument.getText();\n\n const worker = await this.synchronize([path]);\n\n const result = await worker.getCompletionsAtPosition(path, ctx.offset);\n\n if (!result) {\n return null;\n }\n\n const items = result.entries.map(entry => ({\n label: entry.name,\n kind: asCompletionItemKind(entry.kind),\n }));\n\n const fuzzySearch = createFuzzySearch(items, {\n key: 'label',\n });\n\n let i = ctx.offset - 1;\n let query = '';\n\n while (i >= 0) {\n const char = content.slice(i, i + 1);\n\n if (char === '\\n') {\n break;\n }\n\n if (!identRe.test(char) && i + 1 <= ctx.offset) {\n break;\n }\n i--;\n }\n\n query = content.slice(i + 1, ctx.offset);\n\n const charBefore = content.slice(ctx.offset - 1, ctx.offset);\n\n const triggerCharacters = ['.', \"'\", '\"'];\n if (triggerCharacters.includes(charBefore)) {\n return {\n isIncomplete: true,\n items,\n };\n }\n\n // cannot use validFor here as range changes during filtering\n return query\n ? {\n isIncomplete: true,\n items: fuzzySearch(query).map(v => ({\n ...v.item,\n textEdit: {\n range: {\n start: ctx.textDocument.positionAt(i + 1),\n end: ctx.textDocument.positionAt(ctx.offset),\n },\n newText: v.item.label,\n },\n })),\n }\n : {\n isIncomplete: true,\n items: [],\n };\n };\n\n public async resolveCompletionItem(\n ctx: any,\n item: CompletionItem,\n ): Promise<CompletionItem> {\n const uri = URI.parse(ctx.textDocument.uri);\n const path = uri.fsPath;\n const worker = await this.synchronize([path]);\n const details = await worker.getCompletionEntryDetails(\n path,\n ctx.offset,\n item.label,\n undefined,\n undefined,\n undefined,\n undefined,\n );\n if (!details) {\n return item;\n }\n const documentationString = createDocumentationString(details);\n return {\n label: details.name,\n detail: displayPartsToString(details?.displayParts),\n documentation: documentationString\n ? {\n kind: MarkupKind.Markdown,\n value: documentationString,\n }\n : undefined,\n };\n }\n\n public async format(\n state: EditorState,\n options: FormatCodeSettings = {},\n ): Promise<TransactionSpec> {\n const { textDocument, originalRangeFor } = state.field(textDocumentField);\n\n const uri = URI.parse(textDocument.uri);\n const path = uri.fsPath;\n\n const worker = await this.synchronize([path]);\n\n const edits = await worker.getFormattingEditsForDocument(path, {\n indentSize: 2,\n tabSize: 2,\n convertTabsToSpaces: true,\n newLineCharacter: '\\n',\n ...options,\n });\n\n if (!edits) {\n return {\n changes: [],\n };\n }\n\n const changes = edits\n .map(edit => {\n const range = originalRangeFor({\n from: edit.span.start,\n to: edit.span.start + edit.span.length,\n });\n if (range) {\n return {\n ...range,\n insert: edit.newText,\n };\n }\n })\n .filter(v => isChangeDesc(v));\n\n return {\n changes,\n };\n }\n\n async getTypeInformation(ctx: any) {\n const { textDocument } = ctx;\n\n const uri = URI.parse(textDocument.uri);\n const path = uri.fsPath;\n\n const worker = await this.synchronize([path]);\n\n const info = await worker.getTypeInfoAtPosition(path, ctx.offset);\n\n return info;\n }\n\n async doSignatureHelp(ctx: any) {\n const uri = URI.parse(ctx.textDocument.uri);\n const path = uri.fsPath;\n\n const worker = await this.synchronize([path]);\n\n const info = await worker.getSignatureHelpItems(path, ctx.offset, {});\n\n if (!info) {\n return null;\n }\n\n const ret: SignatureHelp = {\n activeSignature: info.selectedItemIndex,\n activeParameter: info.argumentIndex,\n signatures: [],\n };\n\n info.items.forEach(item => {\n const signature: SignatureInformation = {\n label: '',\n parameters: [],\n };\n\n signature.documentation = {\n kind: MarkupKind.Markdown,\n value: displayPartsToString(item.documentation),\n };\n signature.label += displayPartsToString(item.prefixDisplayParts);\n item.parameters.forEach((p, i, a) => {\n const label = displayPartsToString(p.displayParts);\n const parameter: ParameterInformation = {\n label,\n documentation: {\n kind: MarkupKind.Markdown,\n value: displayPartsToString(p.documentation),\n },\n };\n signature.label += label;\n signature.parameters!.push(parameter);\n if (i < a.length - 1) {\n signature.label += displayPartsToString(item.separatorDisplayParts);\n }\n });\n signature.label += displayPartsToString(item.suffixDisplayParts);\n ret.signatures.push(signature);\n });\n\n return ret;\n }\n\n // async findDefinition(ctx) {\n // const uri = URI.parse(ctx.textDocument.uri)\n // const path = uri.fsPath\n\n // const worker = await this.synchronize([path])\n\n // const info = await worker.getDefinitionAtPosition(path, ctx.offset)\n\n // if (!info) {\n // return\n // }\n\n // return info.map(def => {\n // return {\n // from: def.textSpan.start,\n // to: def.textSpan.start + def.textSpan.length,\n // }\n // })\n // }\n\n public initialize(tsWorker: Worker, options?: InitializeOptions) {\n this.worker = wrap<ITypeScriptWorker>(tsWorker);\n this.starting = this.worker.initialize({\n compilerOptions: options?.compilerOptions ?? {},\n initialFiles: {\n ...this.extraFiles,\n ...(options?.initialFiles ?? {}),\n },\n });\n }\n\n private extraFiles: Record<string, string> = Object.create(null);\n\n public async addExtraFiles(files: Record<string, string>) {\n this.extraFiles = Object.assign({}, this.extraFiles, files);\n\n await this.starting;\n if (this.worker) {\n await this.worker.syncFiles(files);\n this.events.emit('refresh-diagnostics');\n }\n }\n}\n\nfunction createDocumentationString(details: CompletionEntryDetails): string {\n let documentationString = displayPartsToString(details.documentation);\n if (details.tags) {\n for (const tag of details.tags) {\n documentationString += `\\n\\n${tagToString(tag)}`;\n }\n }\n return documentationString;\n}\n\nconst typescriptLanguageService = new TypeScriptLanguageService();\n\nexport { TypeScriptLanguageService, typescriptLanguageService };\n","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nimport type ts from 'typescript';\n\nfunction tagToString(tag: ts.JSDocTagInfo): string {\n let tagLabel = `*@${tag.name}*`;\n if (tag.name === 'param' && tag.text) {\n const [paramName, ...rest] = tag.text;\n tagLabel += `\\`${paramName.text}\\``;\n if (rest.length > 0) {\n tagLabel += ` — ${rest.map(r => r.text).join(' ')}`;\n }\n } else if (Array.isArray(tag.text)) {\n tagLabel += ` — ${tag.text.map(r => r.text).join(' ')}`;\n } else if (tag.text) {\n tagLabel += ` — ${tag.text}`;\n }\n return tagLabel;\n}\n\nexport { tagToString };\n","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nimport { CompletionItemKind } from 'vscode-languageserver-types';\nimport { ScriptElementKind } from 'typescript';\n\n/*\n * Copyright (C) 2018 TypeFox and others.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0\n */\nfunction asCompletionItemKind(kind: ScriptElementKind): CompletionItemKind {\n switch (kind) {\n case ScriptElementKind.primitiveType:\n case ScriptElementKind.keyword:\n return CompletionItemKind.Keyword;\n case ScriptElementKind.constElement:\n case ScriptElementKind.letElement:\n case ScriptElementKind.variableElement:\n case ScriptElementKind.localVariableElement:\n case ScriptElementKind.alias:\n case ScriptElementKind.parameterElement:\n return CompletionItemKind.Variable;\n case ScriptElementKind.memberVariableElement:\n case ScriptElementKind.memberGetAccessorElement:\n case ScriptElementKind.memberSetAccessorElement:\n return CompletionItemKind.Field;\n case ScriptElementKind.functionElement:\n case ScriptElementKind.localFunctionElement:\n return CompletionItemKind.Function;\n case ScriptElementKind.memberFunctionElement:\n case ScriptElementKind.constructSignatureElement:\n case ScriptElementKind.callSignatureElement:\n case ScriptElementKind.indexSignatureElement:\n return CompletionItemKind.Method;\n case ScriptElementKind.enumElement:\n return CompletionItemKind.Enum;\n case ScriptElementKind.enumMemberElement:\n return CompletionItemKind.EnumMember;\n case ScriptElementKind.moduleElement:\n case ScriptElementKind.externalModuleName:\n return CompletionItemKind.Module;\n case ScriptElementKind.classElement:\n case ScriptElementKind.typeElement:\n return CompletionItemKind.Class;\n case ScriptElementKind.interfaceElement:\n return CompletionItemKind.Interface;\n case ScriptElementKind.warning:\n return CompletionItemKind.Text;\n case ScriptElementKind.scriptElement:\n return CompletionItemKind.File;\n case ScriptElementKind.directory:\n return CompletionItemKind.Folder;\n case ScriptElementKind.string:\n return CompletionItemKind.Constant;\n }\n return CompletionItemKind.Property;\n}\n\nexport { asCompletionItemKind };\n","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nimport { textDocumentField } from '@coze-editor/code-language-shared';\n\nimport { typescriptLanguageService } from '../service';\nimport typeInformation from './type-information';\n\nconst extensions = [\n typeInformation(async (state, pos) => {\n const { textDocument, generatedRangeFor } = state.field(textDocumentField);\n const range = generatedRangeFor({ from: pos, to: pos });\n const offset = range?.from;\n\n if (typeof offset !== 'number') {\n return null;\n }\n\n const result = await typescriptLanguageService.getTypeInformation({\n textDocument,\n offset,\n });\n\n return result;\n }),\n];\n\nexport default extensions;\n","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nimport {\n EditorView,\n hoverTooltip,\n ViewPlugin,\n type Tooltip,\n} from '@codemirror/view';\nimport {\n StateField,\n StateEffect,\n type EditorState,\n Facet,\n} from '@codemirror/state';\n\ntype GetTypeInformation = (\n state: EditorState,\n pos: number,\n) =>\n | Promise<{\n type: string;\n properties: {\n name: string;\n type: string;\n }[];\n } | null>\n | undefined;\n\nconst cmdKeyPressedState = StateField.define<boolean>({\n create: () => false,\n update: (value, tr) => {\n for (const effect of tr.effects) {\n if (effect.is(setCmdKeyPressedEffect)) {\n return effect.value;\n }\n }\n return value;\n },\n});\n\nconst setCmdKeyPressedEffect = StateEffect.define<boolean>();\n\nconst cmdKeyEventPlugin = ViewPlugin.fromClass(\n class {\n private dispose: () => void;\n constructor(view: EditorView) {\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.metaKey && !view.state.field(cmdKeyPressedState)) {\n view.dispatch({ effects: setCmdKeyPressedEffect.of(true) });\n }\n };\n\n const onKeyUp = (event: KeyboardEvent) => {\n if (!event.metaKey && view.state.field(cmdKeyPressedState)) {\n view.dispatch({ effects: setCmdKeyPressedEffect.of(false) });\n }\n };\n\n const onBlur = () => {\n if (view.state.field(cmdKeyPressedState)) {\n view.dispatch({ effects: setCmdKeyPressedEffect.of(false) });\n }\n };\n\n window.addEventListener('keydown', onKeyDown);\n window.addEventListener('keyup', onKeyUp);\n window.addEventListener('blur', onBlur);\n\n this.dispose = () => {\n window.removeEventListener('keydown', onKeyDown);\n window.removeEventListener('keyup', onKeyUp);\n window.removeEventListener('blur', onBlur);\n };\n }\n destroy() {\n this.dispose();\n }\n },\n);\n\nconst getTypeInformationFacet = Facet.define<\n GetTypeInformation,\n GetTypeInformation\n>({\n combine(values) {\n return values[values.length - 1];\n },\n});\n\nconst cmdHoverTooltipSource = async (\n view: EditorView,\n pos: number,\n side: -1 | 1,\n): Promise<Tooltip | null> => {\n const word = view.state.wordAt(pos);\n\n if (!word) {\n return null;\n }\n\n if (!view.state.facet(getTypeInformationFacet)) {\n return null;\n }\n\n const doTypeInfoFn = view.state.facet(getTypeInformationFacet);\n const info = await doTypeInfoFn?.(view.state, word.from);\n\n if (!info) {\n return null;\n }\n\n return {\n pos: word.from,\n end: word.to,\n above: true,\n create() {\n const dom = document.createElement('div');\n dom.className = 'cm-type-tooltip';\n\n const cmdPressed = view.state.field(cmdKeyPressedState, false);\n dom.style.display = cmdPressed ? 'block' : 'none';\n\n if (info?.properties?.length) {\n const propsDiv = document.createElement('div');\n propsDiv.className = 'cm-type-tooltip-properties';\n\n const propsHeader = document.createElement('div');\n propsHeader.className = 'cm-type-tooltip-props-header';\n propsHeader.textContent = 'Properties:';\n propsDiv.appendChild(propsHeader);\n\n const propsList = document.createElement('ul');\n propsList.className = 'cm-type-tooltip-props-list';\n\n info.properties.forEach(prop => {\n if (\n prop &&\n typeof prop.name === 'string' &&\n typeof prop.type === 'string'\n ) {\n const propItem = document.createElement('li');\n propItem.className = 'cm-type-tooltip-prop-item';\n\n const propName = document.createElement('span');\n propName.className = 'cm-type-tooltip-prop-name';\n propName.textContent = prop.name;\n propItem.appendChild(propName);\n\n const separator = document.createTextNode(': ');\n propItem.appendChild(separator);\n\n const propType = document.createElement('span');\n propType.className = 'cm-type-tooltip-prop-type';\n propType.textContent = prop.type;\n propItem.appendChild(propType);\n\n propsList.appendChild(propItem);\n }\n });\n propsDiv.appendChild(propsList);\n dom.appendChild(propsDiv);\n }\n\n return {\n dom,\n update(update) {\n for (const tr of update.transactions) {\n for (const effect of tr.effects) {\n if (effect.is(setCmdKeyPressedEffect)) {\n const show = effect.value;\n dom.style.display = show ? 'block' : 'none';\n break;\n }\n }\n }\n },\n };\n },\n };\n};\n\nconst tooltipTheme = EditorView.theme({\n '.cm-tooltip .cm-type-tooltip': {\n padding: '0 10px 6px 10px',\n maxWidth: '350px',\n },\n '.cm-type-tooltip-properties': {\n paddingTop: '6px',\n },\n '.cm-type-tooltip-props-header': {\n fontWeight: 'bold',\n marginBottom: '4px',\n color: '#E06C75',\n },\n '.cm-type-tooltip-props-list': {\n listStyle: 'none',\n margin: '0',\n },\n '.cm-type-tooltip-prop-item': {\n marginBottom: '3px',\n },\n '.cm-type-tooltip-prop-name': {\n color: '#E5C07B',\n },\n '.cm-type-tooltip-prop-type': {\n color: '#ABB2BF',\n },\n});\n\nfunction typeInformation(getTypeInformation: GetTypeInformation) {\n return [\n getTypeInformationFacet.of(getTypeInformation),\n tooltipTheme,\n cmdKeyPressedState,\n cmdKeyEventPlugin,\n hoverTooltip(cmdHoverTooltipSource, {\n hoverTime: 300,\n }),\n ];\n}\n\nexport default typeInformation;\n"],"mappings":"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","names":["import_vscode_languageserver_types","import_typescript","mitt","createFuzzySearch","import_code_language_shared"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/service.ts","../src/utils.ts","../src/as.ts","../src/extensions/index.ts","../src/extensions/type-information.ts"],"sourcesContent":["// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nimport { typescriptLanguage } from '@codemirror/lang-javascript';\n\nimport {\n TypeScriptLanguageService,\n typescriptLanguageService,\n} from './service';\nimport extensions from './extensions';\n\nconst typescript = {\n language: typescriptLanguage,\n languageService: typescriptLanguageService,\n extensions,\n};\n\nexport {\n typescript,\n typescriptLanguage,\n typescriptLanguageService,\n TypeScriptLanguageService,\n};\n","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nimport { URI } from 'vscode-uri';\nimport {\n type CompletionItem,\n MarkupKind,\n type ParameterInformation,\n type SignatureHelp,\n type SignatureInformation,\n} from 'vscode-languageserver-types';\nimport {\n type CompletionEntryDetails,\n type FormatCodeSettings,\n} from 'typescript';\nimport mitt from 'mitt';\nimport { type Remote, wrap } from 'comlink';\nimport {\n type Diagnostic,\n type LanguageService as ILanguageService,\n MarkerTag,\n textDocumentField,\n} from '@coze-editor/code-language-shared';\nimport type {\n ChangeSpec,\n EditorState,\n TransactionSpec,\n} from '@codemirror/state';\n\nimport { displayPartsToString, tagToString } from './utils';\nimport type { InitializeOptions, ITypeScriptWorker } from './types';\nimport { DiagnosticCategory } from './ts-enums';\nimport { asCompletionItemKind } from './as';\n\nfunction isDiagnostic(v: unknown): v is Diagnostic {\n return Boolean(v);\n}\n\nfunction isChangeDesc(v: unknown): v is ChangeSpec {\n return Boolean(v);\n}\n\ntype Severity = 'hint' | 'info' | 'warning' | 'error';\n\ntype Events = {\n diagnostics: {\n uri: string;\n diagnostics: {\n from: number;\n to: number;\n message: string;\n severity: Severity;\n }[];\n };\n 'refresh-diagnostics': void;\n};\n\nclass TypeScriptLanguageService implements ILanguageService {\n private worker: Remote<ITypeScriptWorker> | null = null;\n private starting: Promise<unknown> | null = null;\n private _cachedFiles: Record<string, string> = Object.create(null);\n public events = mitt<Events>();\n public triggerCharacters: string[] = ['.', \"'\", '\"'];\n\n private async synchronize(paths: string[]) {\n await this.starting;\n\n if (!this.worker) {\n throw new Error('TypeScript LanguageService is not initialized');\n }\n\n const files: Record<string, string> = {};\n paths.forEach(path => {\n files[path] = this._cachedFiles[path] ?? '';\n });\n await this.worker.syncFiles(files);\n\n return this.worker;\n }\n\n onTextDocumentDidChange = (ctx: any) => {\n const { textDocument } = ctx;\n const text = textDocument.getText();\n const uri = URI.parse(textDocument.uri);\n const path = uri.fsPath;\n this._cachedFiles[path] = text;\n };\n\n doHover: NonNullable<ILanguageService['doHover']> = async ctx => {\n const { textDocument } = ctx;\n\n const uri = URI.parse(textDocument.uri);\n const path = uri.fsPath;\n\n const worker = await this.synchronize([path]);\n\n const info = await worker.getQuickInfoAtPosition(path, ctx.offset);\n\n if (!info) {\n return;\n }\n\n const tags = info.tags\n ? info.tags.map(tag => tagToString(tag)).join(' \\n\\n')\n : '';\n const contents = displayPartsToString(info.displayParts);\n const documentation = displayPartsToString(info.documentation);\n\n return {\n kind: MarkupKind.Markdown,\n value: `\\`\\`\\`ts\\n${contents}\\n\\`\\`\\`\\n${\n documentation\n }${tags ? `\\n\\n${tags}` : ''}`,\n };\n };\n\n public async synchronizeByURI(uri: string, content: string) {\n await this.onTextDocumentDidChange({\n textDocument: {\n uri,\n getText() {\n return content;\n },\n },\n });\n }\n\n public async validateByURI(uri: string) {\n return this.doValidation({\n textDocument: {\n uri,\n } as any,\n });\n }\n\n doValidation: NonNullable<ILanguageService['doValidation']> = async ctx => {\n const { textDocument } = ctx;\n\n const uri = URI.parse(textDocument.uri);\n const path = uri.fsPath;\n\n const worker = await this.synchronize([path]);\n\n try {\n const diagnostics = [\n ...(await worker.getSyntacticDiagnostics(path)),\n ...(await worker.getSemanticDiagnostics(path)),\n ...(await worker.getSuggestionDiagnostics(path)),\n ];\n\n const categoryToSeverityMap = {\n [DiagnosticCategory.Error]: 'error',\n [DiagnosticCategory.Warning]: 'warning',\n [DiagnosticCategory.Message]: 'info',\n [DiagnosticCategory.Suggestion]: 'hint',\n };\n\n return diagnostics\n .map(d => {\n if (\n typeof d.start !== 'number' ||\n !categoryToSeverityMap[d.category]\n ) {\n return;\n }\n\n const tags: MarkerTag[] = [];\n if (d.reportsUnnecessary) {\n tags.push(MarkerTag.Unnecessary);\n }\n if (d.reportsDeprecated) {\n tags.push(MarkerTag.Deprecated);\n }\n\n return {\n from: d.start,\n to: d.start + (d.length ?? 0),\n severity: categoryToSeverityMap[d.category],\n message:\n typeof d.messageText === 'string'\n ? d.messageText\n : d.messageText.messageText,\n tags,\n };\n })\n .filter(v => isDiagnostic(v));\n } catch (e) {\n return [];\n }\n };\n\n doComplete: ILanguageService['doComplete'] = async ctx => {\n const uri = URI.parse(ctx.textDocument.uri);\n const path = uri.fsPath;\n\n const worker = await this.synchronize([path]);\n\n const result = await worker.getCompletionsAtPosition(path, ctx.offset);\n\n if (!result) {\n return null;\n }\n\n const items = result.entries.map(entry => ({\n label: entry.name,\n kind: asCompletionItemKind(entry.kind),\n }));\n\n return {\n isIncomplete: result.isIncomplete ?? true,\n items,\n };\n };\n\n public async resolveCompletionItem(\n ctx: any,\n item: CompletionItem,\n ): Promise<CompletionItem> {\n const uri = URI.parse(ctx.textDocument.uri);\n const path = uri.fsPath;\n const worker = await this.synchronize([path]);\n const details = await worker.getCompletionEntryDetails(\n path,\n ctx.offset,\n item.label,\n undefined,\n undefined,\n undefined,\n undefined,\n );\n if (!details) {\n return item;\n }\n const documentationString = createDocumentationString(details);\n return {\n label: details.name,\n detail: displayPartsToString(details?.displayParts),\n documentation: documentationString\n ? {\n kind: MarkupKind.Markdown,\n value: documentationString,\n }\n : undefined,\n };\n }\n\n public async format(\n state: EditorState,\n options: FormatCodeSettings = {},\n ): Promise<TransactionSpec> {\n const { textDocument, originalRangeFor } = state.field(textDocumentField);\n\n const uri = URI.parse(textDocument.uri);\n const path = uri.fsPath;\n\n const worker = await this.synchronize([path]);\n\n const edits = await worker.getFormattingEditsForDocument(path, {\n indentSize: 2,\n tabSize: 2,\n convertTabsToSpaces: true,\n newLineCharacter: '\\n',\n ...options,\n });\n\n if (!edits) {\n return {\n changes: [],\n };\n }\n\n const changes = edits\n .map(edit => {\n const range = originalRangeFor({\n from: edit.span.start,\n to: edit.span.start + edit.span.length,\n });\n if (range) {\n return {\n ...range,\n insert: edit.newText,\n };\n }\n })\n .filter(v => isChangeDesc(v));\n\n return {\n changes,\n };\n }\n\n async getTypeInformation(ctx: any) {\n const { textDocument } = ctx;\n\n const uri = URI.parse(textDocument.uri);\n const path = uri.fsPath;\n\n const worker = await this.synchronize([path]);\n\n const info = await worker.getTypeInfoAtPosition(path, ctx.offset);\n\n return info;\n }\n\n async doSignatureHelp(ctx: any) {\n const uri = URI.parse(ctx.textDocument.uri);\n const path = uri.fsPath;\n\n const worker = await this.synchronize([path]);\n\n const info = await worker.getSignatureHelpItems(path, ctx.offset, {});\n\n if (!info) {\n return null;\n }\n\n const ret: SignatureHelp = {\n activeSignature: info.selectedItemIndex,\n activeParameter: info.argumentIndex,\n signatures: [],\n };\n\n info.items.forEach(item => {\n const signature: SignatureInformation = {\n label: '',\n parameters: [],\n };\n\n signature.documentation = {\n kind: MarkupKind.Markdown,\n value: displayPartsToString(item.documentation),\n };\n signature.label += displayPartsToString(item.prefixDisplayParts);\n item.parameters.forEach((p, i, a) => {\n const label = displayPartsToString(p.displayParts);\n const parameter: ParameterInformation = {\n label,\n documentation: {\n kind: MarkupKind.Markdown,\n value: displayPartsToString(p.documentation),\n },\n };\n signature.label += label;\n signature.parameters!.push(parameter);\n if (i < a.length - 1) {\n signature.label += displayPartsToString(item.separatorDisplayParts);\n }\n });\n signature.label += displayPartsToString(item.suffixDisplayParts);\n ret.signatures.push(signature);\n });\n\n return ret;\n }\n\n // async findDefinition(ctx) {\n // const uri = URI.parse(ctx.textDocument.uri)\n // const path = uri.fsPath\n\n // const worker = await this.synchronize([path])\n\n // const info = await worker.getDefinitionAtPosition(path, ctx.offset)\n\n // if (!info) {\n // return\n // }\n\n // return info.map(def => {\n // return {\n // from: def.textSpan.start,\n // to: def.textSpan.start + def.textSpan.length,\n // }\n // })\n // }\n\n public initialize(tsWorker: Worker, options?: InitializeOptions) {\n this.worker = wrap<ITypeScriptWorker>(tsWorker);\n this.starting = this.worker.initialize({\n compilerOptions: options?.compilerOptions ?? {},\n initialFiles: {\n ...this.extraFiles,\n ...(options?.initialFiles ?? {}),\n },\n });\n }\n\n private extraFiles: Record<string, string> = Object.create(null);\n\n public async addExtraFiles(files: Record<string, string>) {\n this.extraFiles = Object.assign({}, this.extraFiles, files);\n\n await this.starting;\n if (this.worker) {\n await this.worker.syncFiles(files);\n this.events.emit('refresh-diagnostics');\n }\n }\n}\n\nfunction createDocumentationString(details: CompletionEntryDetails): string {\n let documentationString = displayPartsToString(details.documentation);\n if (details.tags) {\n for (const tag of details.tags) {\n documentationString += `\\n\\n${tagToString(tag)}`;\n }\n }\n return documentationString;\n}\n\nconst typescriptLanguageService = new TypeScriptLanguageService();\n\nexport { TypeScriptLanguageService, typescriptLanguageService };\n","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nimport type ts from 'typescript';\nimport { type SymbolDisplayPart } from 'typescript';\n\nfunction tagToString(tag: ts.JSDocTagInfo): string {\n let tagLabel = `*@${tag.name}*`;\n if (tag.name === 'param' && tag.text) {\n const [paramName, ...rest] = tag.text;\n tagLabel += `\\`${paramName.text}\\``;\n if (rest.length > 0) {\n tagLabel += ` — ${rest.map(r => r.text).join(' ')}`;\n }\n } else if (Array.isArray(tag.text)) {\n tagLabel += ` — ${tag.text.map(r => r.text).join(' ')}`;\n } else if (tag.text) {\n tagLabel += ` — ${tag.text}`;\n }\n return tagLabel;\n}\n\nfunction displayPartsToString(displayParts?: SymbolDisplayPart[]) {\n if (displayParts) {\n return displayParts.map(displayPart2 => displayPart2.text).join('');\n }\n return '';\n}\n\nexport { tagToString, displayPartsToString };\n","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nimport { CompletionItemKind } from 'vscode-languageserver-types';\n\nimport { ScriptElementKind } from './ts-enums';\n\n/*\n * Copyright (C) 2018 TypeFox and others.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0\n */\nfunction asCompletionItemKind(kind: ScriptElementKind): CompletionItemKind {\n switch (kind) {\n case ScriptElementKind.primitiveType:\n case ScriptElementKind.keyword:\n return CompletionItemKind.Keyword;\n case ScriptElementKind.constElement:\n case ScriptElementKind.letElement:\n case ScriptElementKind.variableElement:\n case ScriptElementKind.localVariableElement:\n case ScriptElementKind.alias:\n case ScriptElementKind.parameterElement:\n return CompletionItemKind.Variable;\n case ScriptElementKind.memberVariableElement:\n case ScriptElementKind.memberGetAccessorElement:\n case ScriptElementKind.memberSetAccessorElement:\n return CompletionItemKind.Field;\n case ScriptElementKind.functionElement:\n case ScriptElementKind.localFunctionElement:\n return CompletionItemKind.Function;\n case ScriptElementKind.memberFunctionElement:\n case ScriptElementKind.constructSignatureElement:\n case ScriptElementKind.callSignatureElement:\n case ScriptElementKind.indexSignatureElement:\n return CompletionItemKind.Method;\n case ScriptElementKind.enumElement:\n return CompletionItemKind.Enum;\n case ScriptElementKind.enumMemberElement:\n return CompletionItemKind.EnumMember;\n case ScriptElementKind.moduleElement:\n case ScriptElementKind.externalModuleName:\n return CompletionItemKind.Module;\n case ScriptElementKind.classElement:\n case ScriptElementKind.typeElement:\n return CompletionItemKind.Class;\n case ScriptElementKind.interfaceElement:\n return CompletionItemKind.Interface;\n case ScriptElementKind.warning:\n return CompletionItemKind.Text;\n case ScriptElementKind.scriptElement:\n return CompletionItemKind.File;\n case ScriptElementKind.directory:\n return CompletionItemKind.Folder;\n case ScriptElementKind.string:\n return CompletionItemKind.Constant;\n }\n return CompletionItemKind.Property;\n}\n\nexport { asCompletionItemKind };\n","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nimport { textDocumentField } from '@coze-editor/code-language-shared';\n\nimport { typescriptLanguageService } from '../service';\nimport typeInformation from './type-information';\n\nconst extensions = [\n typeInformation(async (state, pos) => {\n const { textDocument, generatedRangeFor } = state.field(textDocumentField);\n const range = generatedRangeFor({ from: pos, to: pos });\n const offset = range?.from;\n\n if (typeof offset !== 'number') {\n return null;\n }\n\n const result = await typescriptLanguageService.getTypeInformation({\n textDocument,\n offset,\n });\n\n return result;\n }),\n];\n\nexport default extensions;\n","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nimport {\n EditorView,\n hoverTooltip,\n ViewPlugin,\n type Tooltip,\n} from '@codemirror/view';\nimport {\n StateField,\n StateEffect,\n type EditorState,\n Facet,\n} from '@codemirror/state';\n\ntype GetTypeInformation = (\n state: EditorState,\n pos: number,\n) =>\n | Promise<{\n type: string;\n properties: {\n name: string;\n type: string;\n }[];\n } | null>\n | undefined;\n\nconst cmdKeyPressedState = StateField.define<boolean>({\n create: () => false,\n update: (value, tr) => {\n for (const effect of tr.effects) {\n if (effect.is(setCmdKeyPressedEffect)) {\n return effect.value;\n }\n }\n return value;\n },\n});\n\nconst setCmdKeyPressedEffect = StateEffect.define<boolean>();\n\nconst cmdKeyEventPlugin = ViewPlugin.fromClass(\n class {\n private dispose: () => void;\n constructor(view: EditorView) {\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.metaKey && !view.state.field(cmdKeyPressedState)) {\n view.dispatch({ effects: setCmdKeyPressedEffect.of(true) });\n }\n };\n\n const onKeyUp = (event: KeyboardEvent) => {\n if (!event.metaKey && view.state.field(cmdKeyPressedState)) {\n view.dispatch({ effects: setCmdKeyPressedEffect.of(false) });\n }\n };\n\n const onBlur = () => {\n if (view.state.field(cmdKeyPressedState)) {\n view.dispatch({ effects: setCmdKeyPressedEffect.of(false) });\n }\n };\n\n window.addEventListener('keydown', onKeyDown);\n window.addEventListener('keyup', onKeyUp);\n window.addEventListener('blur', onBlur);\n\n this.dispose = () => {\n window.removeEventListener('keydown', onKeyDown);\n window.removeEventListener('keyup', onKeyUp);\n window.removeEventListener('blur', onBlur);\n };\n }\n destroy() {\n this.dispose();\n }\n },\n);\n\nconst getTypeInformationFacet = Facet.define<\n GetTypeInformation,\n GetTypeInformation\n>({\n combine(values) {\n return values[values.length - 1];\n },\n});\n\nconst cmdHoverTooltipSource = async (\n view: EditorView,\n pos: number,\n side: -1 | 1,\n): Promise<Tooltip | null> => {\n const word = view.state.wordAt(pos);\n\n if (!word) {\n return null;\n }\n\n if (!view.state.facet(getTypeInformationFacet)) {\n return null;\n }\n\n const doTypeInfoFn = view.state.facet(getTypeInformationFacet);\n const info = await doTypeInfoFn?.(view.state, word.from);\n\n if (!info) {\n return null;\n }\n\n return {\n pos: word.from,\n end: word.to,\n above: true,\n create() {\n const dom = document.createElement('div');\n dom.className = 'cm-type-tooltip';\n\n const cmdPressed = view.state.field(cmdKeyPressedState, false);\n dom.style.display = cmdPressed ? 'block' : 'none';\n\n if (info?.properties?.length) {\n const propsDiv = document.createElement('div');\n propsDiv.className = 'cm-type-tooltip-properties';\n\n const propsHeader = document.createElement('div');\n propsHeader.className = 'cm-type-tooltip-props-header';\n propsHeader.textContent = 'Properties:';\n propsDiv.appendChild(propsHeader);\n\n const propsList = document.createElement('ul');\n propsList.className = 'cm-type-tooltip-props-list';\n\n info.properties.forEach(prop => {\n if (\n prop &&\n typeof prop.name === 'string' &&\n typeof prop.type === 'string'\n ) {\n const propItem = document.createElement('li');\n propItem.className = 'cm-type-tooltip-prop-item';\n\n const propName = document.createElement('span');\n propName.className = 'cm-type-tooltip-prop-name';\n propName.textContent = prop.name;\n propItem.appendChild(propName);\n\n const separator = document.createTextNode(': ');\n propItem.appendChild(separator);\n\n const propType = document.createElement('span');\n propType.className = 'cm-type-tooltip-prop-type';\n propType.textContent = prop.type;\n propItem.appendChild(propType);\n\n propsList.appendChild(propItem);\n }\n });\n propsDiv.appendChild(propsList);\n dom.appendChild(propsDiv);\n }\n\n return {\n dom,\n update(update) {\n for (const tr of update.transactions) {\n for (const effect of tr.effects) {\n if (effect.is(setCmdKeyPressedEffect)) {\n const show = effect.value;\n dom.style.display = show ? 'block' : 'none';\n break;\n }\n }\n }\n },\n };\n },\n };\n};\n\nconst tooltipTheme = EditorView.theme({\n '.cm-tooltip .cm-type-tooltip': {\n padding: '0 10px 6px 10px',\n maxWidth: '350px',\n },\n '.cm-type-tooltip-properties': {\n paddingTop: '6px',\n },\n '.cm-type-tooltip-props-header': {\n fontWeight: 'bold',\n marginBottom: '4px',\n color: '#E06C75',\n },\n '.cm-type-tooltip-props-list': {\n listStyle: 'none',\n margin: '0',\n paddingInlineStart: '20px',\n },\n '.cm-type-tooltip-prop-item': {\n marginBottom: '3px',\n },\n '.cm-type-tooltip-prop-name': {\n color: '#E5C07B',\n },\n '.cm-type-tooltip-prop-type': {\n color: '#ABB2BF',\n },\n});\n\nfunction typeInformation(getTypeInformation: GetTypeInformation) {\n return [\n getTypeInformationFacet.of(getTypeInformation),\n tooltipTheme,\n cmdKeyPressedState,\n cmdKeyEventPlugin,\n hoverTooltip(cmdHoverTooltipSource, {\n hoverTime: 300,\n }),\n ];\n}\n\nexport default typeInformation;\n"],"mappings":"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","names":["import_vscode_languageserver_types","mitt","import_code_language_shared"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@coze-editor/code-language-typescript",
3
- "version": "0.1.0-alpha.37c297",
3
+ "version": "0.1.0-alpha.5a549c",
4
4
  "description": "code-language-typescript",
5
5
  "license": "MIT",
6
6
  "author": "fengzilong",
@@ -19,7 +19,6 @@
19
19
  "dependencies": {
20
20
  "@codemirror/lang-javascript": "^6.2.1",
21
21
  "@lukeed/uuid": "^2.0.1",
22
- "@nozbe/microfuzz": "^1.0.0",
23
22
  "@typescript/vfs": "^1.6.1",
24
23
  "comlink": "^4.4.2",
25
24
  "lz-string": "^1.5.0",
@@ -44,7 +43,7 @@
44
43
  "@codemirror/language": "^6.0.0",
45
44
  "@codemirror/state": "^6.4.1",
46
45
  "@codemirror/view": "^6.26.1",
47
- "@coze-editor/code-language-shared": "0.1.0-alpha.37c297",
46
+ "@coze-editor/code-language-shared": "0.1.0-alpha.5a549c",
48
47
  "typescript": "*"
49
48
  },
50
49
  "publishConfig": {