From 4b2441bf6682ea7d5afdce49213bd8726c6c8141 Mon Sep 17 00:00:00 2001 From: Alex Dima Date: Wed, 17 Nov 2021 13:47:40 +0100 Subject: [PATCH] Move `DefinitionAdapter` and `ReferenceAdapter` to `/common/` --- src/common/lspLanguageFeatures.ts | 78 ++++++++++++++++++++++++++++++- src/css/cssMode.ts | 4 +- src/css/languageFeatures.ts | 62 ++---------------------- 3 files changed, 83 insertions(+), 61 deletions(-) diff --git a/src/common/lspLanguageFeatures.ts b/src/common/lspLanguageFeatures.ts index 0239fa57..dce43cc4 100644 --- a/src/common/lspLanguageFeatures.ts +++ b/src/common/lspLanguageFeatures.ts @@ -398,7 +398,7 @@ export interface ILanguageWorkerWithHover { } export class HoverAdapter implements languages.HoverProvider { - constructor(private _worker: WorkerAccessor) {} + constructor(private readonly _worker: WorkerAccessor) {} provideHover( model: editor.IReadOnlyModel, @@ -475,7 +475,7 @@ export interface ILanguageWorkerWithDocumentHighlights { export class DocumentHighlightAdapter implements languages.DocumentHighlightProvider { - constructor(private _worker: WorkerAccessor) {} + constructor(private readonly _worker: WorkerAccessor) {} public provideDocumentHighlights( model: editor.IReadOnlyModel, @@ -515,3 +515,77 @@ function toDocumentHighlightKind( } //#endregion + +//#region DefinitionAdapter + +export interface ILanguageWorkerWithDefinitions { + findDefinition(uri: string, position: lsTypes.Position): Promise; +} + +export class DefinitionAdapter + implements languages.DefinitionProvider +{ + constructor(private readonly _worker: WorkerAccessor) {} + + public provideDefinition( + model: editor.IReadOnlyModel, + position: Position, + token: CancellationToken + ): Promise { + const resource = model.uri; + + return this._worker(resource) + .then((worker) => { + return worker.findDefinition(resource.toString(), fromPosition(position)); + }) + .then((definition) => { + if (!definition) { + return; + } + return [toLocation(definition)]; + }); + } +} + +function toLocation(location: lsTypes.Location): languages.Location { + return { + uri: Uri.parse(location.uri), + range: toRange(location.range) + }; +} + +//#endregion + +//#region ReferenceAdapter + +export interface ILanguageWorkerWithReferences { + findReferences(uri: string, position: lsTypes.Position): Promise; +} + +export class ReferenceAdapter + implements languages.ReferenceProvider +{ + constructor(private readonly _worker: WorkerAccessor) {} + + provideReferences( + model: editor.IReadOnlyModel, + position: Position, + context: languages.ReferenceContext, + token: CancellationToken + ): Promise { + const resource = model.uri; + + return this._worker(resource) + .then((worker) => { + return worker.findReferences(resource.toString(), fromPosition(position)); + }) + .then((entries) => { + if (!entries) { + return; + } + return entries.map(toLocation); + }); + } +} + +//#endregion diff --git a/src/css/cssMode.ts b/src/css/cssMode.ts index 5d4f19c2..5a70ec17 100644 --- a/src/css/cssMode.ts +++ b/src/css/cssMode.ts @@ -50,7 +50,7 @@ export function setupMode(defaults: LanguageServiceDefaults): IDisposable { providers.push( languages.registerDefinitionProvider( languageId, - new languageFeatures.DefinitionAdapter(worker) + new languageFeatures.CSSDefinitionAdapter(worker) ) ); } @@ -58,7 +58,7 @@ export function setupMode(defaults: LanguageServiceDefaults): IDisposable { providers.push( languages.registerReferenceProvider( languageId, - new languageFeatures.ReferenceAdapter(worker) + new languageFeatures.CSSReferenceAdapter(worker) ) ); } diff --git a/src/css/languageFeatures.ts b/src/css/languageFeatures.ts index 7843fc46..8a185583 100644 --- a/src/css/languageFeatures.ts +++ b/src/css/languageFeatures.ts @@ -15,7 +15,9 @@ import { fromRange, CompletionAdapter, HoverAdapter, - DocumentHighlightAdapter + DocumentHighlightAdapter, + DefinitionAdapter, + ReferenceAdapter } from '../common/lspLanguageFeatures'; export interface WorkerAccessor { @@ -38,63 +40,9 @@ export class CSSHoverAdapter extends HoverAdapter {} export class CSSDocumentHighlightAdapter extends DocumentHighlightAdapter {} -// --- definition ------ +export class CSSDefinitionAdapter extends DefinitionAdapter {} -function toLocation(location: lsTypes.Location): languages.Location { - return { - uri: Uri.parse(location.uri), - range: toRange(location.range) - }; -} - -export class DefinitionAdapter { - constructor(private _worker: WorkerAccessor) {} - - public provideDefinition( - model: editor.IReadOnlyModel, - position: Position, - token: CancellationToken - ): Promise { - const resource = model.uri; - - return this._worker(resource) - .then((worker) => { - return worker.findDefinition(resource.toString(), fromPosition(position)); - }) - .then((definition) => { - if (!definition) { - return; - } - return [toLocation(definition)]; - }); - } -} - -// --- references ------ - -export class ReferenceAdapter implements languages.ReferenceProvider { - constructor(private _worker: WorkerAccessor) {} - - provideReferences( - model: editor.IReadOnlyModel, - position: Position, - context: languages.ReferenceContext, - token: CancellationToken - ): Promise { - const resource = model.uri; - - return this._worker(resource) - .then((worker) => { - return worker.findReferences(resource.toString(), fromPosition(position)); - }) - .then((entries) => { - if (!entries) { - return; - } - return entries.map(toLocation); - }); - } -} +export class CSSReferenceAdapter extends ReferenceAdapter {} // --- rename ------