From 76093aa7291726cff24dd5016fc11a52301db557 Mon Sep 17 00:00:00 2001 From: rudeigerc Date: Sun, 11 Sep 2022 00:53:19 +0800 Subject: [PATCH] feat: add support for diagnostics severity configuration Signed-off-by: rudeigerc --- extension/package.json | 11 +++++++ .../src/services/DiagnosticsService.ts | 33 +++++++++++++++++-- 2 files changed, 41 insertions(+), 3 deletions(-) diff --git a/extension/package.json b/extension/package.json index edf2d010a..06439620c 100644 --- a/extension/package.json +++ b/extension/package.json @@ -109,6 +109,17 @@ "description": "Start text checking session in paused state", "default": false }, + "grammarly.diagnostics.severity": { + "markdownDescription": "Severity of Grammarly messages", + "enum": [ + "error", + "warning", + "information", + "hint" + ], + "default": "error", + "scope": "language-overridable" + }, "grammarly.config.documentDialect": { "markdownDescription": "Specific variety of English being written. See [this article](https://support.grammarly.com/hc/en-us/articles/115000089992-Select-between-British-English-American-English-Canadian-English-and-Australian-English) for differences.", "enum": [ diff --git a/packages/grammarly-languageserver/src/services/DiagnosticsService.ts b/packages/grammarly-languageserver/src/services/DiagnosticsService.ts index 29cbef46b..f61492967 100644 --- a/packages/grammarly-languageserver/src/services/DiagnosticsService.ts +++ b/packages/grammarly-languageserver/src/services/DiagnosticsService.ts @@ -10,20 +10,44 @@ export type SuggestionDiagnostic = { suggestion: Suggestion } +const diagnosticSeverityMap = new Map([ + ['error', 1], + ['warning', 2], + ['information', 3], + ['hint', 4], +]) + @injectable() export class DiagnosticsService implements Registerable { #connection: Connection #documents: DocumentService #diagnostics: Map> - + #severity?: DiagnosticSeverity public constructor(@inject(CONNECTION) connection: Connection, documents: DocumentService) { this.#connection = connection this.#documents = documents this.#diagnostics = new Map() } + private _getSeverity: Promise | null = null + + public async getSeverity(): Promise { + if (this._getSeverity != null) await this._getSeverity + this._getSeverity = (async () => { + const severity: string[] = await this.#connection.workspace.getConfiguration([ + { section: 'grammarly.diagnostics.severity' }, + ]) + this.#severity = diagnosticSeverityMap.get(severity[0]) + })() + + await this._getSeverity + } + public register(): Disposable { - this.#documents.onDidOpen((document) => this.#setupDiagnostics(document)) + this.#documents.onDidOpen(async (document) => { + await this.getSeverity() + this.#setupDiagnostics(document) + }) this.#documents.onDidClose((document) => this.#clearDiagnostics(document)) this.#connection.onRequest('$/pause', ([uri]: [uri: string]) => { const document = this.#documents.get(uri) @@ -37,6 +61,9 @@ export class DiagnosticsService implements Registerable { document.resume() this.#sendDiagnostics(document) }) + this.#connection.onDidChangeConfiguration(async () => { + await this.getSeverity() + }) return { dispose() {} } } @@ -119,7 +146,7 @@ export class DiagnosticsService implements Registerable { message: suggestion.title, range: document.findOriginalRange(highlight.start, highlight.end), source: 'Grammarly', - severity: suggestion.type === 'corrective' ? 1 : 3, + severity: this.#severity ?? (suggestion.type === 'corrective' ? 1 : 3), } } }