@coze-editor/code-language-typescript 0.1.0-alpha.7cf9d0 → 0.1.0-alpha.868621

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,10 +6,6 @@ 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
11
  import {
@@ -33,53 +29,58 @@ function tagToString(tag) {
33
29
  }
34
30
  return tagLabel;
35
31
  }
32
+ function displayPartsToString(displayParts) {
33
+ if (displayParts) {
34
+ return displayParts.map((displayPart2) => displayPart2.text).join("");
35
+ }
36
+ return "";
37
+ }
36
38
 
37
39
  // src/as.ts
38
40
  import { CompletionItemKind } from "vscode-languageserver-types";
39
- import { ScriptElementKind } from "typescript";
40
41
  function asCompletionItemKind(kind) {
41
42
  switch (kind) {
42
- case ScriptElementKind.primitiveType:
43
- case ScriptElementKind.keyword:
43
+ case "primitive type" /* primitiveType */:
44
+ case "keyword" /* keyword */:
44
45
  return CompletionItemKind.Keyword;
45
- case ScriptElementKind.constElement:
46
- case ScriptElementKind.letElement:
47
- case ScriptElementKind.variableElement:
48
- case ScriptElementKind.localVariableElement:
49
- case ScriptElementKind.alias:
50
- 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 */:
51
52
  return CompletionItemKind.Variable;
52
- case ScriptElementKind.memberVariableElement:
53
- case ScriptElementKind.memberGetAccessorElement:
54
- case ScriptElementKind.memberSetAccessorElement:
53
+ case "property" /* memberVariableElement */:
54
+ case "getter" /* memberGetAccessorElement */:
55
+ case "setter" /* memberSetAccessorElement */:
55
56
  return CompletionItemKind.Field;
56
- case ScriptElementKind.functionElement:
57
- case ScriptElementKind.localFunctionElement:
57
+ case "function" /* functionElement */:
58
+ case "local function" /* localFunctionElement */:
58
59
  return CompletionItemKind.Function;
59
- case ScriptElementKind.memberFunctionElement:
60
- case ScriptElementKind.constructSignatureElement:
61
- case ScriptElementKind.callSignatureElement:
62
- case ScriptElementKind.indexSignatureElement:
60
+ case "method" /* memberFunctionElement */:
61
+ case "construct" /* constructSignatureElement */:
62
+ case "call" /* callSignatureElement */:
63
+ case "index" /* indexSignatureElement */:
63
64
  return CompletionItemKind.Method;
64
- case ScriptElementKind.enumElement:
65
+ case "enum" /* enumElement */:
65
66
  return CompletionItemKind.Enum;
66
- case ScriptElementKind.enumMemberElement:
67
+ case "enum member" /* enumMemberElement */:
67
68
  return CompletionItemKind.EnumMember;
68
- case ScriptElementKind.moduleElement:
69
- case ScriptElementKind.externalModuleName:
69
+ case "module" /* moduleElement */:
70
+ case "external module name" /* externalModuleName */:
70
71
  return CompletionItemKind.Module;
71
- case ScriptElementKind.classElement:
72
- case ScriptElementKind.typeElement:
72
+ case "class" /* classElement */:
73
+ case "type" /* typeElement */:
73
74
  return CompletionItemKind.Class;
74
- case ScriptElementKind.interfaceElement:
75
+ case "interface" /* interfaceElement */:
75
76
  return CompletionItemKind.Interface;
76
- case ScriptElementKind.warning:
77
+ case "warning" /* warning */:
77
78
  return CompletionItemKind.Text;
78
- case ScriptElementKind.scriptElement:
79
+ case "script" /* scriptElement */:
79
80
  return CompletionItemKind.File;
80
- case ScriptElementKind.directory:
81
+ case "directory" /* directory */:
81
82
  return CompletionItemKind.Folder;
82
- case ScriptElementKind.string:
83
+ case "string" /* string */:
83
84
  return CompletionItemKind.Constant;
84
85
  }
85
86
  return CompletionItemKind.Property;
@@ -168,10 +169,10 @@ ${tags}` : ""}`
168
169
  ...await worker.getSuggestionDiagnostics(path)
169
170
  ];
170
171
  const categoryToSeverityMap = {
171
- [DiagnosticCategory.Error]: "error",
172
- [DiagnosticCategory.Warning]: "warning",
173
- [DiagnosticCategory.Message]: "info",
174
- [DiagnosticCategory.Suggestion]: "hint"
172
+ [1 /* Error */]: "error",
173
+ [0 /* Warning */]: "warning",
174
+ [3 /* Message */]: "info",
175
+ [2 /* Suggestion */]: "hint"
175
176
  };
176
177
  return diagnostics.map((d) => {
177
178
  if (typeof d.start !== "number" || !categoryToSeverityMap[d.category]) {
@@ -575,4 +576,18 @@ export {
575
576
  typescriptLanguage,
576
577
  typescriptLanguageService
577
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
+ ***************************************************************************** */
578
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 {\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\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';\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 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"]}
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.js CHANGED
@@ -40,7 +40,6 @@ 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
45
  var import_code_language_shared = require("@coze-editor/code-language-shared");
@@ -61,53 +60,58 @@ function tagToString(tag) {
61
60
  }
62
61
  return tagLabel;
63
62
  }
63
+ function displayPartsToString(displayParts) {
64
+ if (displayParts) {
65
+ return displayParts.map((displayPart2) => displayPart2.text).join("");
66
+ }
67
+ return "";
68
+ }
64
69
 
65
70
  // src/as.ts
66
71
  var import_vscode_languageserver_types = require("vscode-languageserver-types");
67
- var import_typescript = require("typescript");
68
72
  function asCompletionItemKind(kind) {
69
73
  switch (kind) {
70
- case import_typescript.ScriptElementKind.primitiveType:
71
- case import_typescript.ScriptElementKind.keyword:
74
+ case "primitive type" /* primitiveType */:
75
+ case "keyword" /* keyword */:
72
76
  return import_vscode_languageserver_types.CompletionItemKind.Keyword;
73
- case import_typescript.ScriptElementKind.constElement:
74
- case import_typescript.ScriptElementKind.letElement:
75
- case import_typescript.ScriptElementKind.variableElement:
76
- case import_typescript.ScriptElementKind.localVariableElement:
77
- case import_typescript.ScriptElementKind.alias:
78
- 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 */:
79
83
  return import_vscode_languageserver_types.CompletionItemKind.Variable;
80
- case import_typescript.ScriptElementKind.memberVariableElement:
81
- case import_typescript.ScriptElementKind.memberGetAccessorElement:
82
- case import_typescript.ScriptElementKind.memberSetAccessorElement:
84
+ case "property" /* memberVariableElement */:
85
+ case "getter" /* memberGetAccessorElement */:
86
+ case "setter" /* memberSetAccessorElement */:
83
87
  return import_vscode_languageserver_types.CompletionItemKind.Field;
84
- case import_typescript.ScriptElementKind.functionElement:
85
- case import_typescript.ScriptElementKind.localFunctionElement:
88
+ case "function" /* functionElement */:
89
+ case "local function" /* localFunctionElement */:
86
90
  return import_vscode_languageserver_types.CompletionItemKind.Function;
87
- case import_typescript.ScriptElementKind.memberFunctionElement:
88
- case import_typescript.ScriptElementKind.constructSignatureElement:
89
- case import_typescript.ScriptElementKind.callSignatureElement:
90
- case import_typescript.ScriptElementKind.indexSignatureElement:
91
+ case "method" /* memberFunctionElement */:
92
+ case "construct" /* constructSignatureElement */:
93
+ case "call" /* callSignatureElement */:
94
+ case "index" /* indexSignatureElement */:
91
95
  return import_vscode_languageserver_types.CompletionItemKind.Method;
92
- case import_typescript.ScriptElementKind.enumElement:
96
+ case "enum" /* enumElement */:
93
97
  return import_vscode_languageserver_types.CompletionItemKind.Enum;
94
- case import_typescript.ScriptElementKind.enumMemberElement:
98
+ case "enum member" /* enumMemberElement */:
95
99
  return import_vscode_languageserver_types.CompletionItemKind.EnumMember;
96
- case import_typescript.ScriptElementKind.moduleElement:
97
- case import_typescript.ScriptElementKind.externalModuleName:
100
+ case "module" /* moduleElement */:
101
+ case "external module name" /* externalModuleName */:
98
102
  return import_vscode_languageserver_types.CompletionItemKind.Module;
99
- case import_typescript.ScriptElementKind.classElement:
100
- case import_typescript.ScriptElementKind.typeElement:
103
+ case "class" /* classElement */:
104
+ case "type" /* typeElement */:
101
105
  return import_vscode_languageserver_types.CompletionItemKind.Class;
102
- case import_typescript.ScriptElementKind.interfaceElement:
106
+ case "interface" /* interfaceElement */:
103
107
  return import_vscode_languageserver_types.CompletionItemKind.Interface;
104
- case import_typescript.ScriptElementKind.warning:
108
+ case "warning" /* warning */:
105
109
  return import_vscode_languageserver_types.CompletionItemKind.Text;
106
- case import_typescript.ScriptElementKind.scriptElement:
110
+ case "script" /* scriptElement */:
107
111
  return import_vscode_languageserver_types.CompletionItemKind.File;
108
- case import_typescript.ScriptElementKind.directory:
112
+ case "directory" /* directory */:
109
113
  return import_vscode_languageserver_types.CompletionItemKind.Folder;
110
- case import_typescript.ScriptElementKind.string:
114
+ case "string" /* string */:
111
115
  return import_vscode_languageserver_types.CompletionItemKind.Constant;
112
116
  }
113
117
  return import_vscode_languageserver_types.CompletionItemKind.Property;
@@ -155,8 +159,8 @@ var TypeScriptLanguageService = class {
155
159
  return;
156
160
  }
157
161
  const tags = info.tags ? info.tags.map((tag) => tagToString(tag)).join(" \n\n") : "";
158
- const contents = (0, import_typescript2.displayPartsToString)(info.displayParts);
159
- const documentation = (0, import_typescript2.displayPartsToString)(info.documentation);
162
+ const contents = displayPartsToString(info.displayParts);
163
+ const documentation = displayPartsToString(info.documentation);
160
164
  return {
161
165
  kind: import_vscode_languageserver_types2.MarkupKind.Markdown,
162
166
  value: `\`\`\`ts
@@ -196,10 +200,10 @@ ${tags}` : ""}`
196
200
  ...await worker.getSuggestionDiagnostics(path)
197
201
  ];
198
202
  const categoryToSeverityMap = {
199
- [import_typescript2.DiagnosticCategory.Error]: "error",
200
- [import_typescript2.DiagnosticCategory.Warning]: "warning",
201
- [import_typescript2.DiagnosticCategory.Message]: "info",
202
- [import_typescript2.DiagnosticCategory.Suggestion]: "hint"
203
+ [1 /* Error */]: "error",
204
+ [0 /* Warning */]: "warning",
205
+ [3 /* Message */]: "info",
206
+ [2 /* Suggestion */]: "hint"
203
207
  };
204
208
  return diagnostics.map((d) => {
205
209
  if (typeof d.start !== "number" || !categoryToSeverityMap[d.category]) {
@@ -260,7 +264,7 @@ ${tags}` : ""}`
260
264
  const documentationString = createDocumentationString(details);
261
265
  return {
262
266
  label: details.name,
263
- detail: (0, import_typescript2.displayPartsToString)(details == null ? void 0 : details.displayParts),
267
+ detail: displayPartsToString(details == null ? void 0 : details.displayParts),
264
268
  documentation: documentationString ? {
265
269
  kind: import_vscode_languageserver_types2.MarkupKind.Markdown,
266
270
  value: documentationString
@@ -328,25 +332,25 @@ ${tags}` : ""}`
328
332
  };
329
333
  signature.documentation = {
330
334
  kind: import_vscode_languageserver_types2.MarkupKind.Markdown,
331
- value: (0, import_typescript2.displayPartsToString)(item.documentation)
335
+ value: displayPartsToString(item.documentation)
332
336
  };
333
- signature.label += (0, import_typescript2.displayPartsToString)(item.prefixDisplayParts);
337
+ signature.label += displayPartsToString(item.prefixDisplayParts);
334
338
  item.parameters.forEach((p, i, a) => {
335
- const label = (0, import_typescript2.displayPartsToString)(p.displayParts);
339
+ const label = displayPartsToString(p.displayParts);
336
340
  const parameter = {
337
341
  label,
338
342
  documentation: {
339
343
  kind: import_vscode_languageserver_types2.MarkupKind.Markdown,
340
- value: (0, import_typescript2.displayPartsToString)(p.documentation)
344
+ value: displayPartsToString(p.documentation)
341
345
  }
342
346
  };
343
347
  signature.label += label;
344
348
  signature.parameters.push(parameter);
345
349
  if (i < a.length - 1) {
346
- signature.label += (0, import_typescript2.displayPartsToString)(item.separatorDisplayParts);
350
+ signature.label += displayPartsToString(item.separatorDisplayParts);
347
351
  }
348
352
  });
349
- signature.label += (0, import_typescript2.displayPartsToString)(item.suffixDisplayParts);
353
+ signature.label += displayPartsToString(item.suffixDisplayParts);
350
354
  ret.signatures.push(signature);
351
355
  });
352
356
  return ret;
@@ -387,7 +391,7 @@ ${tags}` : ""}`
387
391
  }
388
392
  };
389
393
  function createDocumentationString(details) {
390
- let documentationString = (0, import_typescript2.displayPartsToString)(details.documentation);
394
+ let documentationString = displayPartsToString(details.documentation);
391
395
  if (details.tags) {
392
396
  for (const tag of details.tags) {
393
397
  documentationString += `
@@ -596,4 +600,18 @@ var typescript = {
596
600
  typescriptLanguage,
597
601
  typescriptLanguageService
598
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
+ ***************************************************************************** */
599
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 {\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\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';\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 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","import_typescript","mitt","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.7cf9d0",
3
+ "version": "0.1.0-alpha.868621",
4
4
  "description": "code-language-typescript",
5
5
  "license": "MIT",
6
6
  "author": "fengzilong",
@@ -43,7 +43,7 @@
43
43
  "@codemirror/language": "^6.0.0",
44
44
  "@codemirror/state": "^6.4.1",
45
45
  "@codemirror/view": "^6.26.1",
46
- "@coze-editor/code-language-shared": "0.1.0-alpha.7cf9d0",
46
+ "@coze-editor/code-language-shared": "0.1.0-alpha.868621",
47
47
  "typescript": "*"
48
48
  },
49
49
  "publishConfig": {