@coze-editor/code-language-typescript 0.1.0-alpha.323b5c → 0.1.0-alpha.5a549c
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/index.js +52 -37
- package/dist/esm/index.js.map +1 -1
- package/dist/index.js +62 -44
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
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
|
|
43
|
-
case
|
|
43
|
+
case "primitive type" /* primitiveType */:
|
|
44
|
+
case "keyword" /* keyword */:
|
|
44
45
|
return CompletionItemKind.Keyword;
|
|
45
|
-
case
|
|
46
|
-
case
|
|
47
|
-
case
|
|
48
|
-
case
|
|
49
|
-
case
|
|
50
|
-
case
|
|
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
|
|
53
|
-
case
|
|
54
|
-
case
|
|
53
|
+
case "property" /* memberVariableElement */:
|
|
54
|
+
case "getter" /* memberGetAccessorElement */:
|
|
55
|
+
case "setter" /* memberSetAccessorElement */:
|
|
55
56
|
return CompletionItemKind.Field;
|
|
56
|
-
case
|
|
57
|
-
case
|
|
57
|
+
case "function" /* functionElement */:
|
|
58
|
+
case "local function" /* localFunctionElement */:
|
|
58
59
|
return CompletionItemKind.Function;
|
|
59
|
-
case
|
|
60
|
-
case
|
|
61
|
-
case
|
|
62
|
-
case
|
|
60
|
+
case "method" /* memberFunctionElement */:
|
|
61
|
+
case "construct" /* constructSignatureElement */:
|
|
62
|
+
case "call" /* callSignatureElement */:
|
|
63
|
+
case "index" /* indexSignatureElement */:
|
|
63
64
|
return CompletionItemKind.Method;
|
|
64
|
-
case
|
|
65
|
+
case "enum" /* enumElement */:
|
|
65
66
|
return CompletionItemKind.Enum;
|
|
66
|
-
case
|
|
67
|
+
case "enum member" /* enumMemberElement */:
|
|
67
68
|
return CompletionItemKind.EnumMember;
|
|
68
|
-
case
|
|
69
|
-
case
|
|
69
|
+
case "module" /* moduleElement */:
|
|
70
|
+
case "external module name" /* externalModuleName */:
|
|
70
71
|
return CompletionItemKind.Module;
|
|
71
|
-
case
|
|
72
|
-
case
|
|
72
|
+
case "class" /* classElement */:
|
|
73
|
+
case "type" /* typeElement */:
|
|
73
74
|
return CompletionItemKind.Class;
|
|
74
|
-
case
|
|
75
|
+
case "interface" /* interfaceElement */:
|
|
75
76
|
return CompletionItemKind.Interface;
|
|
76
|
-
case
|
|
77
|
+
case "warning" /* warning */:
|
|
77
78
|
return CompletionItemKind.Text;
|
|
78
|
-
case
|
|
79
|
+
case "script" /* scriptElement */:
|
|
79
80
|
return CompletionItemKind.File;
|
|
80
|
-
case
|
|
81
|
+
case "directory" /* directory */:
|
|
81
82
|
return CompletionItemKind.Folder;
|
|
82
|
-
case
|
|
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
|
-
[
|
|
172
|
-
[
|
|
173
|
-
[
|
|
174
|
-
[
|
|
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
|
package/dist/esm/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":["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
|
|
71
|
-
case
|
|
74
|
+
case "primitive type" /* primitiveType */:
|
|
75
|
+
case "keyword" /* keyword */:
|
|
72
76
|
return import_vscode_languageserver_types.CompletionItemKind.Keyword;
|
|
73
|
-
case
|
|
74
|
-
case
|
|
75
|
-
case
|
|
76
|
-
case
|
|
77
|
-
case
|
|
78
|
-
case
|
|
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
|
|
81
|
-
case
|
|
82
|
-
case
|
|
84
|
+
case "property" /* memberVariableElement */:
|
|
85
|
+
case "getter" /* memberGetAccessorElement */:
|
|
86
|
+
case "setter" /* memberSetAccessorElement */:
|
|
83
87
|
return import_vscode_languageserver_types.CompletionItemKind.Field;
|
|
84
|
-
case
|
|
85
|
-
case
|
|
88
|
+
case "function" /* functionElement */:
|
|
89
|
+
case "local function" /* localFunctionElement */:
|
|
86
90
|
return import_vscode_languageserver_types.CompletionItemKind.Function;
|
|
87
|
-
case
|
|
88
|
-
case
|
|
89
|
-
case
|
|
90
|
-
case
|
|
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
|
|
96
|
+
case "enum" /* enumElement */:
|
|
93
97
|
return import_vscode_languageserver_types.CompletionItemKind.Enum;
|
|
94
|
-
case
|
|
98
|
+
case "enum member" /* enumMemberElement */:
|
|
95
99
|
return import_vscode_languageserver_types.CompletionItemKind.EnumMember;
|
|
96
|
-
case
|
|
97
|
-
case
|
|
100
|
+
case "module" /* moduleElement */:
|
|
101
|
+
case "external module name" /* externalModuleName */:
|
|
98
102
|
return import_vscode_languageserver_types.CompletionItemKind.Module;
|
|
99
|
-
case
|
|
100
|
-
case
|
|
103
|
+
case "class" /* classElement */:
|
|
104
|
+
case "type" /* typeElement */:
|
|
101
105
|
return import_vscode_languageserver_types.CompletionItemKind.Class;
|
|
102
|
-
case
|
|
106
|
+
case "interface" /* interfaceElement */:
|
|
103
107
|
return import_vscode_languageserver_types.CompletionItemKind.Interface;
|
|
104
|
-
case
|
|
108
|
+
case "warning" /* warning */:
|
|
105
109
|
return import_vscode_languageserver_types.CompletionItemKind.Text;
|
|
106
|
-
case
|
|
110
|
+
case "script" /* scriptElement */:
|
|
107
111
|
return import_vscode_languageserver_types.CompletionItemKind.File;
|
|
108
|
-
case
|
|
112
|
+
case "directory" /* directory */:
|
|
109
113
|
return import_vscode_languageserver_types.CompletionItemKind.Folder;
|
|
110
|
-
case
|
|
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 =
|
|
159
|
-
const 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
|
-
[
|
|
200
|
-
[
|
|
201
|
-
[
|
|
202
|
-
[
|
|
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:
|
|
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:
|
|
335
|
+
value: displayPartsToString(item.documentation)
|
|
332
336
|
};
|
|
333
|
-
signature.label +=
|
|
337
|
+
signature.label += displayPartsToString(item.prefixDisplayParts);
|
|
334
338
|
item.parameters.forEach((p, i, a) => {
|
|
335
|
-
const label =
|
|
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:
|
|
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 +=
|
|
350
|
+
signature.label += displayPartsToString(item.separatorDisplayParts);
|
|
347
351
|
}
|
|
348
352
|
});
|
|
349
|
-
signature.label +=
|
|
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 =
|
|
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.
|
|
3
|
+
"version": "0.1.0-alpha.5a549c",
|
|
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.
|
|
46
|
+
"@coze-editor/code-language-shared": "0.1.0-alpha.5a549c",
|
|
47
47
|
"typescript": "*"
|
|
48
48
|
},
|
|
49
49
|
"publishConfig": {
|