Extract a common `FoldingRangeAdapter`

pull/2779/head
Alex Dima 3 years ago
parent 8d7bf2ad76
commit b49f8ffd5f
No known key found for this signature in database
GPG Key ID: 39563C1504FDD0C9

@ -902,3 +902,57 @@ export class DocumentColorAdapter<T extends ILanguageWorkerWithDocumentColors>
} }
//#endregion //#endregion
//#region FoldingRangeAdapter
export interface ILanguageWorkerWithFoldingRanges {
getFoldingRanges(uri: string, context?: { rangeLimit?: number }): Promise<lsTypes.FoldingRange[]>;
}
export class FoldingRangeAdapter<T extends ILanguageWorkerWithFoldingRanges>
implements languages.FoldingRangeProvider
{
constructor(private _worker: WorkerAccessor<T>) {}
public provideFoldingRanges(
model: editor.IReadOnlyModel,
context: languages.FoldingContext,
token: CancellationToken
): Promise<languages.FoldingRange[] | undefined> {
const resource = model.uri;
return this._worker(resource)
.then((worker) => worker.getFoldingRanges(resource.toString(), context))
.then((ranges) => {
if (!ranges) {
return;
}
return ranges.map((range) => {
const result: languages.FoldingRange = {
start: range.startLine + 1,
end: range.endLine + 1
};
if (typeof range.kind !== 'undefined') {
result.kind = toFoldingRangeKind(<lsTypes.FoldingRangeKind>range.kind);
}
return result;
});
});
}
}
function toFoldingRangeKind(
kind: lsTypes.FoldingRangeKind
): languages.FoldingRangeKind | undefined {
switch (kind) {
case lsTypes.FoldingRangeKind.Comment:
return languages.FoldingRangeKind.Comment;
case lsTypes.FoldingRangeKind.Imports:
return languages.FoldingRangeKind.Imports;
case lsTypes.FoldingRangeKind.Region:
return languages.FoldingRangeKind.Region;
}
return void 0;
}
//#endregion

@ -87,7 +87,7 @@ export function setupMode(defaults: LanguageServiceDefaults): IDisposable {
providers.push( providers.push(
languages.registerFoldingRangeProvider( languages.registerFoldingRangeProvider(
languageId, languageId,
new languageFeatures.FoldingRangeAdapter(worker) new languageFeatures.CSSFoldingRangeAdapter(worker)
) )
); );
} }

@ -18,7 +18,8 @@ import {
ReferenceAdapter, ReferenceAdapter,
RenameAdapter, RenameAdapter,
DocumentSymbolAdapter, DocumentSymbolAdapter,
DocumentColorAdapter DocumentColorAdapter,
FoldingRangeAdapter
} from '../common/lspLanguageFeatures'; } from '../common/lspLanguageFeatures';
export interface WorkerAccessor { export interface WorkerAccessor {
@ -51,49 +52,7 @@ export class CSSDocumentSymbolAdapter extends DocumentSymbolAdapter<CSSWorker> {
export class CSSDocumentColorAdapter extends DocumentColorAdapter<CSSWorker> {} export class CSSDocumentColorAdapter extends DocumentColorAdapter<CSSWorker> {}
export class FoldingRangeAdapter implements languages.FoldingRangeProvider { export class CSSFoldingRangeAdapter extends FoldingRangeAdapter<CSSWorker> {}
constructor(private _worker: WorkerAccessor) {}
public provideFoldingRanges(
model: editor.IReadOnlyModel,
context: languages.FoldingContext,
token: CancellationToken
): Promise<languages.FoldingRange[] | undefined> {
const resource = model.uri;
return this._worker(resource)
.then((worker) => worker.getFoldingRanges(resource.toString(), context))
.then((ranges) => {
if (!ranges) {
return;
}
return ranges.map((range) => {
const result: languages.FoldingRange = {
start: range.startLine + 1,
end: range.endLine + 1
};
if (typeof range.kind !== 'undefined') {
result.kind = toFoldingRangeKind(<lsTypes.FoldingRangeKind>range.kind);
}
return result;
});
});
}
}
function toFoldingRangeKind(
kind: lsTypes.FoldingRangeKind
): languages.FoldingRangeKind | undefined {
switch (kind) {
case lsTypes.FoldingRangeKind.Comment:
return languages.FoldingRangeKind.Comment;
case lsTypes.FoldingRangeKind.Imports:
return languages.FoldingRangeKind.Imports;
case lsTypes.FoldingRangeKind.Region:
return languages.FoldingRangeKind.Region;
}
return void 0;
}
export class SelectionRangeAdapter implements languages.SelectionRangeProvider { export class SelectionRangeAdapter implements languages.SelectionRangeProvider {
constructor(private _worker: WorkerAccessor) {} constructor(private _worker: WorkerAccessor) {}

@ -32,7 +32,7 @@ export function setupMode1(defaults: LanguageServiceDefaults): void {
languages.registerLinkProvider(languageId, new languageFeatures.HTMLDocumentLinkAdapter(worker)); languages.registerLinkProvider(languageId, new languageFeatures.HTMLDocumentLinkAdapter(worker));
languages.registerFoldingRangeProvider( languages.registerFoldingRangeProvider(
languageId, languageId,
new languageFeatures.FoldingRangeAdapter(worker) new languageFeatures.HTMLFoldingRangeAdapter(worker)
); );
languages.registerDocumentSymbolProvider( languages.registerDocumentSymbolProvider(
languageId, languageId,
@ -119,7 +119,7 @@ export function setupMode(defaults: LanguageServiceDefaults): IDisposable {
providers.push( providers.push(
languages.registerFoldingRangeProvider( languages.registerFoldingRangeProvider(
languageId, languageId,
new languageFeatures.FoldingRangeAdapter(worker) new languageFeatures.HTMLFoldingRangeAdapter(worker)
) )
); );
} }

@ -16,7 +16,8 @@ import {
DocumentSymbolAdapter, DocumentSymbolAdapter,
DocumentLinkAdapter, DocumentLinkAdapter,
DocumentFormattingEditProvider, DocumentFormattingEditProvider,
DocumentRangeFormattingEditProvider DocumentRangeFormattingEditProvider,
FoldingRangeAdapter
} from '../common/lspLanguageFeatures'; } from '../common/lspLanguageFeatures';
export interface WorkerAccessor { export interface WorkerAccessor {
@ -43,49 +44,7 @@ export class HTMLDocumentFormattingEditProvider extends DocumentFormattingEditPr
export class HTMLDocumentRangeFormattingEditProvider extends DocumentRangeFormattingEditProvider<HTMLWorker> {} export class HTMLDocumentRangeFormattingEditProvider extends DocumentRangeFormattingEditProvider<HTMLWorker> {}
export class FoldingRangeAdapter implements languages.FoldingRangeProvider { export class HTMLFoldingRangeAdapter extends FoldingRangeAdapter<HTMLWorker> {}
constructor(private _worker: WorkerAccessor) {}
public provideFoldingRanges(
model: editor.IReadOnlyModel,
context: languages.FoldingContext,
token: CancellationToken
): Promise<languages.FoldingRange[] | undefined> {
const resource = model.uri;
return this._worker(resource)
.then((worker) => worker.getFoldingRanges(resource.toString(), context))
.then((ranges) => {
if (!ranges) {
return;
}
return ranges.map((range) => {
const result: languages.FoldingRange = {
start: range.startLine + 1,
end: range.endLine + 1
};
if (typeof range.kind !== 'undefined') {
result.kind = toFoldingRangeKind(<lsTypes.FoldingRangeKind>range.kind);
}
return result;
});
});
}
}
function toFoldingRangeKind(
kind: lsTypes.FoldingRangeKind
): languages.FoldingRangeKind | undefined {
switch (kind) {
case lsTypes.FoldingRangeKind.Comment:
return languages.FoldingRangeKind.Comment;
case lsTypes.FoldingRangeKind.Imports:
return languages.FoldingRangeKind.Imports;
case lsTypes.FoldingRangeKind.Region:
return languages.FoldingRangeKind.Region;
}
return void 0;
}
export class SelectionRangeAdapter implements languages.SelectionRangeProvider { export class SelectionRangeAdapter implements languages.SelectionRangeProvider {
constructor(private _worker: WorkerAccessor) {} constructor(private _worker: WorkerAccessor) {}

@ -78,7 +78,7 @@ export function setupMode(defaults: LanguageServiceDefaults): IDisposable {
providers.push( providers.push(
languages.registerFoldingRangeProvider( languages.registerFoldingRangeProvider(
languageId, languageId,
new languageFeatures.FoldingRangeAdapter(worker) new languageFeatures.JSONFoldingRangeAdapter(worker)
) )
); );
} }

@ -16,7 +16,8 @@ import {
DocumentSymbolAdapter, DocumentSymbolAdapter,
DocumentFormattingEditProvider, DocumentFormattingEditProvider,
DocumentRangeFormattingEditProvider, DocumentRangeFormattingEditProvider,
DocumentColorAdapter DocumentColorAdapter,
FoldingRangeAdapter
} from '../common/lspLanguageFeatures'; } from '../common/lspLanguageFeatures';
export interface WorkerAccessor { export interface WorkerAccessor {
@ -62,49 +63,7 @@ export class JSONDocumentRangeFormattingEditProvider extends DocumentRangeFormat
export class JSONDocumentColorAdapter extends DocumentColorAdapter<JSONWorker> {} export class JSONDocumentColorAdapter extends DocumentColorAdapter<JSONWorker> {}
export class FoldingRangeAdapter implements languages.FoldingRangeProvider { export class JSONFoldingRangeAdapter extends FoldingRangeAdapter<JSONWorker> {}
constructor(private _worker: WorkerAccessor) {}
public provideFoldingRanges(
model: editor.IReadOnlyModel,
context: languages.FoldingContext,
token: CancellationToken
): Promise<languages.FoldingRange[] | undefined> {
const resource = model.uri;
return this._worker(resource)
.then((worker) => worker.getFoldingRanges(resource.toString(), context))
.then((ranges) => {
if (!ranges) {
return;
}
return ranges.map((range) => {
const result: languages.FoldingRange = {
start: range.startLine + 1,
end: range.endLine + 1
};
if (typeof range.kind !== 'undefined') {
result.kind = toFoldingRangeKind(<lsTypes.FoldingRangeKind>range.kind);
}
return result;
});
});
}
}
function toFoldingRangeKind(
kind: lsTypes.FoldingRangeKind
): languages.FoldingRangeKind | undefined {
switch (kind) {
case lsTypes.FoldingRangeKind.Comment:
return languages.FoldingRangeKind.Comment;
case lsTypes.FoldingRangeKind.Imports:
return languages.FoldingRangeKind.Imports;
case lsTypes.FoldingRangeKind.Region:
return languages.FoldingRangeKind.Region;
}
return void 0;
}
export class SelectionRangeAdapter implements languages.SelectionRangeProvider { export class SelectionRangeAdapter implements languages.SelectionRangeProvider {
constructor(private _worker: WorkerAccessor) {} constructor(private _worker: WorkerAccessor) {}

Loading…
Cancel
Save