diff --git a/package.json b/package.json index c0b6556..bcae75d 100644 --- a/package.json +++ b/package.json @@ -53,6 +53,7 @@ "@angular/platform-browser": "19.2.0", "ace-builds": "1.43.0", "ace-diff": "3.0.3", + "ace-layout": "1.5.0", "ace-linters": "1.7.0", "bootstrap": "5.3.6", "bootstrap-icons": "1.12.1", diff --git a/src/app/common/services/editor/lsp-manager/lsp-manager.service.ts b/src/app/common/services/editor/lsp-manager/lsp-manager.service.ts index 7f61459..d087526 100644 --- a/src/app/common/services/editor/lsp-manager/lsp-manager.service.ts +++ b/src/app/common/services/editor/lsp-manager/lsp-manager.service.ts @@ -30,7 +30,7 @@ export class LspManagerService { }); } - public registerEditorToLSPClient(editor: any): void { + public registerEditorToLSPClient(editor: any) { let mode = this.getMode(editor.session); if ( this.languageProviders[mode] ) { @@ -45,7 +45,7 @@ export class LspManagerService { return window.fs.getLspConfigData(); } - private parseAndReturnLSPConfigData() { + private parseAndReturnLSPConfigData(): {} { let configData = JSON.parse( this.lspConfigDataStr.replaceAll("{workspace.folder}", this.workspaceFolder) ); @@ -62,7 +62,7 @@ export class LspManagerService { return configData; } - private getInitializationOptions(mode: string, configData: {}) { + private getInitializationOptions(mode: string, configData: {}): {} { let _initializationOptions = {}; if ( Object.keys(configData).length !== 0 && configData[mode] ) { @@ -72,7 +72,7 @@ export class LspManagerService { return _initializationOptions; } - public createLanguageProviderWithClientServer(mode: string) { + public createLanguageProviderWithClientServer(mode: string): LanguageProvider { if ( this.languageProviders[mode] ) return; let servers: LanguageClientConfig[] = []; @@ -97,10 +97,12 @@ export class LspManagerService { } this.languageProviders[mode] = AceLanguageClient.for(servers); + // this.languageProviders[mode].requireFilePath = true; + this.languageProviders[mode].changeWorkspaceFolder(this.workspaceFolder); return this.languageProviders[mode]; } - private getLanguageProviderWithWebWorker() { + private getLanguageProviderWithWebWorker(): LanguageProvider { let worker = new Worker(new URL('./webworker.js', import.meta.url)); return LanguageProvider.create(worker); } @@ -112,7 +114,7 @@ export class LspManagerService { this.languageProviders[mode].setSessionFilePath(session, filePath); } - public getMode(session: any) { + public getMode(session: any): string { return session.getMode()["$id"].replace("ace/mode/", ""); } diff --git a/src/app/common/services/files.service.ts b/src/app/common/services/files.service.ts index ba05b60..5375343 100644 --- a/src/app/common/services/files.service.ts +++ b/src/app/common/services/files.service.ts @@ -62,7 +62,6 @@ export class FilesService { ): Promise { for (let i = 0; i < files.length; i++) { const file = files[i]; - // const path = window.fs.getPathForFile(file).replace("file://", ""); const path = window.fs.getPathForFile(file); if (!file || !path) continue; @@ -90,7 +89,8 @@ export class FilesService { if (loadFileContents) data = await window.fs.getFileContents(file.path); - file.session = new EditSession(data); + file.session = new EditSession(data); + file.session["id"] = path; file.session.setUndoManager( new UndoManager() ); file.session.setMode( getModeForPath( file.path ).mode ); diff --git a/src/app/editor/code-view/view.component.ts b/src/app/editor/code-view/view.component.ts index 8f00c35..7dc1394 100644 --- a/src/app/editor/code-view/view.component.ts +++ b/src/app/editor/code-view/view.component.ts @@ -2,6 +2,10 @@ import { Component } from "@angular/core"; // Import Ace and its modes/themes so that `ace` global is defined import * as ace from "ace-builds/src-min-noconflict/ace"; + +// Note: https://github.com/mkslanc/ace-linters/blob/c286d85c558530aa1b0597d02108bc782abd4736/packages/demo/file-api-websockets/client.ts#L27 +// import { AceLayout, Box, TabManager, Button, dom, AceTreeWrapper, FileSystemWeb, Pane, AceEditor, Tab } from "ace-layout"; + import "ace-builds/src-min-noconflict/ext-settings_menu"; import "ace-builds/src-min-noconflict/ext-keybinding_menu"; import "ace-builds/src-min-noconflict/ext-command_bar"; diff --git a/src/app/editor/lsp-manager/lsp-manager.component.ts b/src/app/editor/lsp-manager/lsp-manager.component.ts index a185501..9928ec7 100644 --- a/src/app/editor/lsp-manager/lsp-manager.component.ts +++ b/src/app/editor/lsp-manager/lsp-manager.component.ts @@ -103,6 +103,7 @@ export class LspManagerComponent { this.editor.session, this.activeFile.path ); + } @@ -124,7 +125,7 @@ export class LspManagerComponent { // Note: hack for issue with setActiveEditor TODO setTimeout(() => { - this.innerEditor.setSession(this.editor.session); + this.innerEditor.setSession(this.editor.getSession()); }, 10); } @@ -145,6 +146,7 @@ export class LspManagerComponent { this.editor.session, this.activeFile.path ); + } private closeFile(message: ServiceMessage) {