diff --git a/packages/ace-linters/src/services/typescript/typescript-service.ts b/packages/ace-linters/src/services/typescript/typescript-service.ts index c4e888a0..8604d226 100644 --- a/packages/ace-linters/src/services/typescript/typescript-service.ts +++ b/packages/ace-linters/src/services/typescript/typescript-service.ts @@ -143,18 +143,21 @@ export class TypescriptService extends BaseService implements } $getDocument(fileName: string): string | undefined { - let text: string; - let document = this.getDocument(fileName); + const fileNameWithoutUri = fileName.replace("file:///", ""); + let document = this.getDocument(fileName) ?? this.getDocument(fileNameWithoutUri); if (document) { - text = document.getText(); - } else if (fileName in libFileMap) { - text = libFileMap[fileName]; - } else if (fileName in this.$extraLibs) { - text = this.$extraLibs[fileName].content; - } else { - return; + return document.getText(); + } + if (fileName in libFileMap) { + return libFileMap[fileName]; + } + if (fileName in this.$extraLibs) { + return this.$extraLibs[fileName].content; + } + if (fileNameWithoutUri in this.$extraLibs) { + return this.$extraLibs[fileNameWithoutUri].content; } - return text; + return; } getScriptKind?(fileName: string): ts.ScriptKind { diff --git a/packages/demo/docs-example/typescript-example.js b/packages/demo/docs-example/typescript-example.js index d88e315d..b525acf6 100644 --- a/packages/demo/docs-example/typescript-example.js +++ b/packages/demo/docs-example/typescript-example.js @@ -1,5 +1,14 @@ export var typescriptContent = ` -class Greeter { +import {SomeTestClassName} from "../anotherFile"; +import * as libFile from "../dir/file"; + +let test; +let chainable = new ChainableOne(); +chainable.chainableTwo.addAlpha("test").setBeta(); + +libFile.data.setAlpha("").chainableTwo; + +export class Greeter { readonly name: string = "world"; doc: HTMLDocument; someTest: SomeTestClassName; @@ -16,11 +25,17 @@ class Greeter { } const g = new Greeter(); g.name = "also not ok"; + ` export var typescriptContent1 = ` +import * as lib from "./someLibDir/index"; + //This created only to show that docs are dependent on each other -class SomeTestClassName { +export class SomeTestClassName { } + +console.log(lib.Greeter); + ` \ No newline at end of file diff --git a/packages/demo/utils.ts b/packages/demo/utils.ts index 34d69935..8b2da068 100644 --- a/packages/demo/utils.ts +++ b/packages/demo/utils.ts @@ -51,6 +51,16 @@ export function createEditorWithLSP(mode, i: number, languageProvider: LanguageP let options = mode.options ?? {}; languageProvider.setSessionOptions(editor.session, options); + + + /** + * Sets the file path for the current editor session. + * This allows the language provider to associate the editor session with a specific file path, + * which can be useful for features like code formatting, diagnostics, and other language-specific functionality. + */ + if (mode.filePath) { + languageProvider.setSessionFilePath(editor.session, mode.filePath); + } closeButton.onclick = () => { languageProvider.closeDocument(editor.session); diff --git a/packages/demo/webworker-lsp/demo.ts b/packages/demo/webworker-lsp/demo.ts index a3664a9d..d9f0611b 100644 --- a/packages/demo/webworker-lsp/demo.ts +++ b/packages/demo/webworker-lsp/demo.ts @@ -26,12 +26,12 @@ let modes = [ {name: "css", mode: "ace/mode/css", content: cssContent}, {name: "less", mode: "ace/mode/less", content: lessContent}, {name: "scss", mode: "ace/mode/scss", content: scssContent}, - {name: "typescript", mode: "ace/mode/typescript", content: typescriptContent}, + {name: "typescript", mode: "ace/mode/typescript", content: typescriptContent, filePath: "someLibDir/index.ts"}, {name: "python", mode: "ace/mode/python", content: pythonContent}, /*{name: "svelte", mode: "ace/mode/html", content: svelteContent}, {name: "astro", mode: "ace/mode/astro", content: svelteContent}, {name: "golang", mode: "ace/mode/golang", content: svelteContent},*/ - {name: "typescript", mode: "ace/mode/typescript", content: typescriptContent1}, + {name: "typescript", mode: "ace/mode/typescript", content: typescriptContent1, filePath: "anotherFile.ts"}, {name: "javascript", mode: "ace/mode/javascript", content: jsContent}, {name: "tsx", mode: "ace/mode/tsx", content: tsxContent}, {name: "jsx", mode: "ace/mode/javascript", content: jsxContent, options: {jsx: true}}, //TODO: @@ -57,9 +57,30 @@ languageProvider.setGlobalOptions("json", { languageProvider.setGlobalOptions("typescript", { errorCodesToTreatAsWarning: [ "2540" - ] + ], + extraLibs: { + "libDeclaration.d.ts": { + content: + `declare class ChainableOne { + chainableTwo: ChainableTwo; + setAlpha(value: string): this; + setBeta(value: number): ChainableTwo; +} + +declare class ChainableTwo { + setGamma(value: boolean): this; + addAlpha(value: string): ChainableOne; +}`, + version: 1 + }, + "dir/file.ts": { + content: "export var data = new ChainableOne();", + version: 1 + } + } }); + languageProvider.setGlobalOptions("javascript", { errorMessagesToTreatAsInfo: [ /Identifier\sdirectly/