Skip to content

Commit

Permalink
Merge pull request #94 from mkslanc/disposal
Browse files Browse the repository at this point in the history
Add dispose
  • Loading branch information
mkslanc authored Jan 8, 2024
2 parents 37648ab + 80933ab commit bd37a81
Show file tree
Hide file tree
Showing 18 changed files with 80 additions and 33 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "ace-linters-root",
"version": "1.0.2",
"version": "1.0.3",
"scripts": {
"build:ace-linters": "cd packages/ace-linters && npm run build",
"build:ace-sql-linter": "cd packages/ace-sql-linter && npm run build",
Expand Down
2 changes: 1 addition & 1 deletion packages/ace-linters/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "ace-linters",
"author": "Azat Alimov <mkslanc@gmail.com>",
"version": "1.0.2",
"version": "1.0.3",
"scripts": {
"clean": "rimraf build",
"prebuild": "node prebuild.js",
Expand Down
12 changes: 7 additions & 5 deletions packages/ace-linters/src/language-provider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,8 @@ import {HoverTooltip} from "./ace/hover-tooltip";

export class LanguageProvider {
activeEditor: Ace.Editor;
private $signatureTooltip: SignatureTooltip;
private readonly $messageController: IMessageController;
private $signatureTooltip: SignatureTooltip;
private $sessionLanguageProviders: { [sessionID: string]: SessionLanguageProvider } = {};
editors: Ace.Editor[] = [];
options: ProviderOptions;
Expand Down Expand Up @@ -349,7 +349,9 @@ export class LanguageProvider {
}

dispose() {
// this.$messageController.dispose(this.$fileName);
this.$messageController.dispose(() => {
this.$messageController.$worker.terminate();
})
}

/**
Expand All @@ -359,7 +361,7 @@ export class LanguageProvider {
closeDocument(session: Ace.EditSession, callback?) {
let sessionProvider = this.$getSessionLanguageProvider(session);
if (sessionProvider) {
sessionProvider.dispose(callback);
sessionProvider.closeDocument(callback);
delete this.$sessionLanguageProviders[session["id"]];
}
}
Expand Down Expand Up @@ -548,7 +550,7 @@ class SessionLanguageProvider {
}
};

dispose(callback?) {
this.$messageController.dispose(this.fileName, callback);
closeDocument(callback?) {
this.$messageController.closeDocument(this.fileName, callback);
}
}
14 changes: 9 additions & 5 deletions packages/ace-linters/src/message-controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,21 +4,21 @@ import {
ChangeMessage,
ChangeModeMessage, ChangeOptionsMessage,
CompleteMessage,
DeltasMessage, DisposeMessage, DocumentHighlightMessage,
DeltasMessage, CloseDocumentMessage, DocumentHighlightMessage,
FormatMessage, GlobalOptionsMessage,
HoverMessage,
InitMessage, MessageType,
ResolveCompletionMessage, SignatureHelpMessage,
ConfigureFeaturesMessage,
ValidateMessage
ValidateMessage, DisposeMessage
} from "./message-types";
import {IMessageController} from "./types/message-controller-interface";
import * as lsp from "vscode-languageserver-protocol";
import {CompletionService, ServiceFeatures, ServiceOptions, ServiceOptionsMap, SupportedServices} from "./types/language-service";
import EventEmitter from "events";

export class MessageController extends EventEmitter implements IMessageController {
private $worker: Worker;
$worker: Worker;

constructor(worker: Worker) {
super();
Expand Down Expand Up @@ -76,8 +76,12 @@ export class MessageController extends EventEmitter implements IMessageControlle
this.postMessage(new ChangeOptionsMessage(sessionId, options, merge), callback);
}

dispose(sessionId: string, callback?: () => void) {
this.postMessage(new DisposeMessage(sessionId), callback);
closeDocument(sessionId: string, callback?: () => void) {
this.postMessage(new CloseDocumentMessage(sessionId), callback);
}

dispose(callback: () => void) {
this.postMessage(new DisposeMessage(), callback);
}

setGlobalOptions<T extends keyof ServiceOptionsMap>(serviceName: T, options: ServiceOptionsMap[T], merge = false) {
Expand Down
16 changes: 12 additions & 4 deletions packages/ace-linters/src/message-types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -126,14 +126,21 @@ export class ChangeOptionsMessage extends BaseMessage {
}
}

export class DisposeMessage extends BaseMessage {
type: MessageType = MessageType.dispose;
export class CloseDocumentMessage extends BaseMessage {
type: MessageType = MessageType.closeDocument;

constructor(sessionId: string) {
super(sessionId);
}
}

export class DisposeMessage extends BaseMessage {
type: MessageType = MessageType.dispose;
constructor() {
super("");
}
}

export class GlobalOptionsMessage {
type: MessageType = MessageType.globalOptions;
serviceName: SupportedServices;
Expand Down Expand Up @@ -189,9 +196,10 @@ export enum MessageType {
applyDelta,
changeMode,
changeOptions,
dispose,
closeDocument,
globalOptions,
configureFeatures,
signatureHelp,
documentHighlight
documentHighlight,
dispose
}
4 changes: 4 additions & 0 deletions packages/ace-linters/src/services/base-service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -108,4 +108,8 @@ export abstract class BaseService<OptionsType extends ServiceOptions = ServiceOp
}
}

dispose() {
return Promise.resolve();
}

}
15 changes: 8 additions & 7 deletions packages/ace-linters/src/services/language-client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import {
BrowserMessageReader,
BrowserMessageWriter,
createProtocolConnection,

} from "vscode-languageserver-protocol/browser";
import {
LanguageClientConfig,
Expand Down Expand Up @@ -218,15 +218,16 @@ export class LanguageClient extends BaseService implements LanguageService {
} as lsp.DidCloseTextDocumentParams));
}

/*
close() {
if (this.connection) {
this.connection.dispose();
}
async dispose() {
if (this.connection) {
this.isConnected = false;
await this.connection.sendRequest("shutdown");
this.connection.sendNotification('exit');
this.connection.dispose();
if (this.socket)
this.socket.close();
}
*/
}

sendInitialize(initializationOptions) {
if (!this.isConnected) {
Expand Down
12 changes: 11 additions & 1 deletion packages/ace-linters/src/services/service-manager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -141,10 +141,13 @@ export class ServiceManager {
});
await doValidation(documentIdentifier, serviceInstances);
break;
case MessageType.dispose:
case MessageType.closeDocument:
this.removeDocument(documentIdentifier);
await doValidation(documentIdentifier, serviceInstances);
break;
case MessageType.dispose:
await this.disposeAll();
break;
case MessageType.globalOptions:
this.setGlobalOptions(message.serviceName, message.options, message.merge);
await provideValidationForServiceInstance(message.serviceName);
Expand All @@ -169,6 +172,13 @@ export class ServiceManager {
ctx.postMessage(postMessage);
})
}

async disposeAll() {
var services = this.$services;
for (let serviceName in services) {
await services[serviceName]?.serviceInstance?.dispose();
}
}

private static async $initServiceInstance(service: ServiceConfig | LanguageClientConfig, ctx): Promise<LanguageService> {
let module
Expand Down
2 changes: 2 additions & 0 deletions packages/ace-linters/src/types/language-service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,8 @@ export interface LanguageService {
provideSignatureHelp(document: lsp.TextDocumentIdentifier, position: lsp.Position): Promise<lsp.SignatureHelp | null>

findDocumentHighlights(document: lsp.TextDocumentIdentifier, position: lsp.Position): Promise<lsp.DocumentHighlight[]>

dispose(): Promise<void>;
}

interface TooltipContent {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ import * as lsp from "vscode-languageserver-protocol";
import {CompletionService, ServiceFeatures, ServiceOptions, SupportedServices} from "./language-service";

export interface IMessageController {
$worker: Worker;

init(sessionId: string, document: Ace.Document, mode: string, options: any, initCallback: (capabilities: lsp.ServerCapabilities[]) => void, validationCallback: (annotations: lsp.Diagnostic[]) => void): void;

doValidation(sessionId: string, callback?: (annotations: lsp.Diagnostic[]) => void)
Expand All @@ -21,8 +23,10 @@ export interface IMessageController {

changeOptions(sessionId: string, options: ServiceOptions, callback?: () => void);

dispose(sessionId: string, callback?: () => void): void;

closeDocument(sessionId: string, callback?: () => void): void;

dispose(callback: () => void): void;

setGlobalOptions(serviceName: string, options: any, merge?: boolean): void;

configureFeatures(serviceName: SupportedServices, features: ServiceFeatures): void;
Expand Down
2 changes: 1 addition & 1 deletion packages/ace-linters/types/language-provider.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ import * as lsp from "vscode-languageserver-protocol";
import { ProviderOptions, ServiceFeatures, ServiceOptions, ServiceOptionsMap, ServiceStruct, SupportedServices, Tooltip } from "./types/language-service";
export declare class LanguageProvider {
activeEditor: Ace.Editor;
private $signatureTooltip;
private readonly $messageController;
private $signatureTooltip;
private $sessionLanguageProviders;
editors: Ace.Editor[];
options: ProviderOptions;
Expand Down
5 changes: 3 additions & 2 deletions packages/ace-linters/types/message-controller.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import * as lsp from "vscode-languageserver-protocol";
import { CompletionService, ServiceFeatures, ServiceOptions, ServiceOptionsMap, SupportedServices } from "./types/language-service";
import EventEmitter from "events";
export declare class MessageController extends EventEmitter implements IMessageController {
private $worker;
$worker: Worker;
constructor(worker: Worker);
init(sessionId: string, document: Ace.Document, mode: string, options: any, initCallback: (capabilities: any) => void, validationCallback: (annotations: lsp.Diagnostic[]) => void): void;
doValidation(sessionId: string, callback?: (annotations: lsp.Diagnostic[]) => void): void;
Expand All @@ -17,7 +17,8 @@ export declare class MessageController extends EventEmitter implements IMessageC
change(sessionId: string, deltas: any, document: Ace.Document, callback?: () => void): void;
changeMode(sessionId: string, value: string, mode: string, callback?: (capabilities: any) => void): void;
changeOptions(sessionId: string, options: ServiceOptions, callback?: () => void, merge?: boolean): void;
dispose(sessionId: string, callback?: () => void): void;
closeDocument(sessionId: string, callback?: () => void): void;
dispose(callback: () => void): void;
setGlobalOptions<T extends keyof ServiceOptionsMap>(serviceName: T, options: ServiceOptionsMap[T], merge?: boolean): void;
provideSignatureHelp(sessionId: string, position: lsp.Position, callback?: (signatureHelp: lsp.SignatureHelp[]) => void): void;
findDocumentHighlights(sessionId: string, position: lsp.Position, callback?: (documentHighlights: lsp.DocumentHighlight[]) => void): void;
Expand Down
11 changes: 8 additions & 3 deletions packages/ace-linters/types/message-types.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -68,10 +68,14 @@ export declare class ChangeOptionsMessage extends BaseMessage {
merge: boolean;
constructor(sessionId: string, options: ServiceOptions, merge?: boolean);
}
export declare class DisposeMessage extends BaseMessage {
export declare class CloseDocumentMessage extends BaseMessage {
type: MessageType;
constructor(sessionId: string);
}
export declare class DisposeMessage extends BaseMessage {
type: MessageType;
constructor();
}
export declare class GlobalOptionsMessage {
type: MessageType;
serviceName: SupportedServices;
Expand Down Expand Up @@ -106,9 +110,10 @@ export declare enum MessageType {
applyDelta = 7,
changeMode = 8,
changeOptions = 9,
dispose = 10,
closeDocument = 10,
globalOptions = 11,
configureFeatures = 12,
signatureHelp = 13,
documentHighlight = 14
documentHighlight = 14,
dispose = 15
}
1 change: 1 addition & 0 deletions packages/ace-linters/types/services/base-service.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,4 +31,5 @@ export declare abstract class BaseService<OptionsType extends ServiceOptions = S
provideSignatureHelp(document: lsp.TextDocumentIdentifier, position: lsp.Position): Promise<lsp.SignatureHelp | null>;
findDocumentHighlights(document: lsp.TextDocumentIdentifier, position: lsp.Position): Promise<lsp.DocumentHighlight[]>;
get optionsToFilterDiagnostics(): FilterDiagnosticsOptions;
dispose(): Promise<void>;
}
1 change: 1 addition & 0 deletions packages/ace-linters/types/services/language-client.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ export declare class LanguageClient extends BaseService implements LanguageServi
addDocument(document: lsp.TextDocumentItem): void;
enqueueIfNotConnected(callback: () => void): void;
removeDocument(document: lsp.TextDocumentIdentifier): void;
dispose(): Promise<void>;
sendInitialize(initializationOptions: any): void;
applyDeltas(identifier: lsp.VersionedTextDocumentIdentifier, deltas: lsp.TextDocumentContentChangeEvent[]): void;
setValue(identifier: lsp.VersionedTextDocumentIdentifier, value: string): void;
Expand Down
1 change: 1 addition & 0 deletions packages/ace-linters/types/services/service-manager.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ export declare class ServiceManager {
postMessage: any;
addEventListener: any;
});
disposeAll(): Promise<void>;
private static $initServiceInstance;
private $getServicesInstancesByMode;
private initializeService;
Expand Down
1 change: 1 addition & 0 deletions packages/ace-linters/types/types/language-service.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ export interface LanguageService {
getDocumentValue(uri: string): string | undefined;
provideSignatureHelp(document: lsp.TextDocumentIdentifier, position: lsp.Position): Promise<lsp.SignatureHelp | null>;
findDocumentHighlights(document: lsp.TextDocumentIdentifier, position: lsp.Position): Promise<lsp.DocumentHighlight[]>;
dispose(): Promise<void>;
}
interface TooltipContent {
type: CommonConverter.TooltipType;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { Ace } from "ace-code";
import * as lsp from "vscode-languageserver-protocol";
import { CompletionService, ServiceFeatures, ServiceOptions, SupportedServices } from "./language-service";
export interface IMessageController {
$worker: Worker;
init(sessionId: string, document: Ace.Document, mode: string, options: any, initCallback: (capabilities: lsp.ServerCapabilities[]) => void, validationCallback: (annotations: lsp.Diagnostic[]) => void): void;
doValidation(sessionId: string, callback?: (annotations: lsp.Diagnostic[]) => void): any;
doComplete(sessionId: string, position: lsp.Position, callback?: (completions: CompletionService[]) => void): any;
Expand All @@ -11,7 +12,8 @@ export interface IMessageController {
change(sessionId: string, deltas: lsp.TextDocumentContentChangeEvent[], document: Ace.Document, callback?: () => void): void;
changeMode(sessionId: string, value: string, mode: string, callback?: (capabilities: lsp.ServerCapabilities[]) => void): any;
changeOptions(sessionId: string, options: ServiceOptions, callback?: () => void): any;
dispose(sessionId: string, callback?: () => void): void;
closeDocument(sessionId: string, callback?: () => void): void;
dispose(callback: () => void): void;
setGlobalOptions(serviceName: string, options: any, merge?: boolean): void;
configureFeatures(serviceName: SupportedServices, features: ServiceFeatures): void;
provideSignatureHelp(sessionId: string, position: lsp.Position, callback?: (signatureHelp: lsp.SignatureHelp[]) => void): any;
Expand Down

0 comments on commit bd37a81

Please sign in to comment.