mirror of
https://github.com/microsoft/monaco-editor.git
synced 2025-12-22 19:42:56 +01:00
Extract a common FoldingRangeAdapter
This commit is contained in:
parent
8d7bf2ad76
commit
b49f8ffd5f
7 changed files with 67 additions and 136 deletions
|
|
@ -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…
Add table
Add a link
Reference in a new issue