mirror of
https://github.com/microsoft/monaco-editor.git
synced 2025-12-22 11:35:40 +01:00
Extract a common DocumentSymbolAdapter
This commit is contained in:
parent
6e986e8f96
commit
81023950c6
7 changed files with 95 additions and 235 deletions
|
|
@ -646,3 +646,85 @@ function toWorkspaceEdit(edit: lsTypes.WorkspaceEdit): languages.WorkspaceEdit {
|
||||||
}
|
}
|
||||||
|
|
||||||
//#endregion
|
//#endregion
|
||||||
|
|
||||||
|
//#region DocumentSymbolAdapter
|
||||||
|
|
||||||
|
export interface ILanguageWorkerWithDocumentSymbols {
|
||||||
|
findDocumentSymbols(uri: string): Promise<lsTypes.SymbolInformation[]>;
|
||||||
|
}
|
||||||
|
|
||||||
|
export class DocumentSymbolAdapter<T extends ILanguageWorkerWithDocumentSymbols>
|
||||||
|
implements languages.DocumentSymbolProvider
|
||||||
|
{
|
||||||
|
constructor(private readonly _worker: WorkerAccessor<T>) {}
|
||||||
|
|
||||||
|
public provideDocumentSymbols(
|
||||||
|
model: editor.IReadOnlyModel,
|
||||||
|
token: CancellationToken
|
||||||
|
): Promise<languages.DocumentSymbol[] | undefined> {
|
||||||
|
const resource = model.uri;
|
||||||
|
|
||||||
|
return this._worker(resource)
|
||||||
|
.then((worker) => worker.findDocumentSymbols(resource.toString()))
|
||||||
|
.then((items) => {
|
||||||
|
if (!items) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
return items.map((item) => ({
|
||||||
|
name: item.name,
|
||||||
|
detail: '',
|
||||||
|
containerName: item.containerName,
|
||||||
|
kind: toSymbolKind(item.kind),
|
||||||
|
range: toRange(item.location.range),
|
||||||
|
selectionRange: toRange(item.location.range),
|
||||||
|
tags: []
|
||||||
|
}));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function toSymbolKind(kind: lsTypes.SymbolKind): languages.SymbolKind {
|
||||||
|
let mKind = languages.SymbolKind;
|
||||||
|
|
||||||
|
switch (kind) {
|
||||||
|
case lsTypes.SymbolKind.File:
|
||||||
|
return mKind.Array;
|
||||||
|
case lsTypes.SymbolKind.Module:
|
||||||
|
return mKind.Module;
|
||||||
|
case lsTypes.SymbolKind.Namespace:
|
||||||
|
return mKind.Namespace;
|
||||||
|
case lsTypes.SymbolKind.Package:
|
||||||
|
return mKind.Package;
|
||||||
|
case lsTypes.SymbolKind.Class:
|
||||||
|
return mKind.Class;
|
||||||
|
case lsTypes.SymbolKind.Method:
|
||||||
|
return mKind.Method;
|
||||||
|
case lsTypes.SymbolKind.Property:
|
||||||
|
return mKind.Property;
|
||||||
|
case lsTypes.SymbolKind.Field:
|
||||||
|
return mKind.Field;
|
||||||
|
case lsTypes.SymbolKind.Constructor:
|
||||||
|
return mKind.Constructor;
|
||||||
|
case lsTypes.SymbolKind.Enum:
|
||||||
|
return mKind.Enum;
|
||||||
|
case lsTypes.SymbolKind.Interface:
|
||||||
|
return mKind.Interface;
|
||||||
|
case lsTypes.SymbolKind.Function:
|
||||||
|
return mKind.Function;
|
||||||
|
case lsTypes.SymbolKind.Variable:
|
||||||
|
return mKind.Variable;
|
||||||
|
case lsTypes.SymbolKind.Constant:
|
||||||
|
return mKind.Constant;
|
||||||
|
case lsTypes.SymbolKind.String:
|
||||||
|
return mKind.String;
|
||||||
|
case lsTypes.SymbolKind.Number:
|
||||||
|
return mKind.Number;
|
||||||
|
case lsTypes.SymbolKind.Boolean:
|
||||||
|
return mKind.Boolean;
|
||||||
|
case lsTypes.SymbolKind.Array:
|
||||||
|
return mKind.Array;
|
||||||
|
}
|
||||||
|
return mKind.Function;
|
||||||
|
}
|
||||||
|
|
||||||
|
//#endregion
|
||||||
|
|
|
||||||
|
|
@ -66,7 +66,7 @@ export function setupMode(defaults: LanguageServiceDefaults): IDisposable {
|
||||||
providers.push(
|
providers.push(
|
||||||
languages.registerDocumentSymbolProvider(
|
languages.registerDocumentSymbolProvider(
|
||||||
languageId,
|
languageId,
|
||||||
new languageFeatures.DocumentSymbolAdapter(worker)
|
new languageFeatures.CSSDocumentSymbolAdapter(worker)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,8 @@ import {
|
||||||
DocumentHighlightAdapter,
|
DocumentHighlightAdapter,
|
||||||
DefinitionAdapter,
|
DefinitionAdapter,
|
||||||
ReferenceAdapter,
|
ReferenceAdapter,
|
||||||
RenameAdapter
|
RenameAdapter,
|
||||||
|
DocumentSymbolAdapter
|
||||||
} from '../common/lspLanguageFeatures';
|
} from '../common/lspLanguageFeatures';
|
||||||
|
|
||||||
export interface WorkerAccessor {
|
export interface WorkerAccessor {
|
||||||
|
|
@ -47,79 +48,7 @@ export class CSSReferenceAdapter extends ReferenceAdapter<CSSWorker> {}
|
||||||
|
|
||||||
export class CSSRenameAdapter extends RenameAdapter<CSSWorker> {}
|
export class CSSRenameAdapter extends RenameAdapter<CSSWorker> {}
|
||||||
|
|
||||||
// --- document symbols ------
|
export class CSSDocumentSymbolAdapter extends DocumentSymbolAdapter<CSSWorker> {}
|
||||||
|
|
||||||
function toSymbolKind(kind: lsTypes.SymbolKind): languages.SymbolKind {
|
|
||||||
let mKind = languages.SymbolKind;
|
|
||||||
|
|
||||||
switch (kind) {
|
|
||||||
case lsTypes.SymbolKind.File:
|
|
||||||
return mKind.Array;
|
|
||||||
case lsTypes.SymbolKind.Module:
|
|
||||||
return mKind.Module;
|
|
||||||
case lsTypes.SymbolKind.Namespace:
|
|
||||||
return mKind.Namespace;
|
|
||||||
case lsTypes.SymbolKind.Package:
|
|
||||||
return mKind.Package;
|
|
||||||
case lsTypes.SymbolKind.Class:
|
|
||||||
return mKind.Class;
|
|
||||||
case lsTypes.SymbolKind.Method:
|
|
||||||
return mKind.Method;
|
|
||||||
case lsTypes.SymbolKind.Property:
|
|
||||||
return mKind.Property;
|
|
||||||
case lsTypes.SymbolKind.Field:
|
|
||||||
return mKind.Field;
|
|
||||||
case lsTypes.SymbolKind.Constructor:
|
|
||||||
return mKind.Constructor;
|
|
||||||
case lsTypes.SymbolKind.Enum:
|
|
||||||
return mKind.Enum;
|
|
||||||
case lsTypes.SymbolKind.Interface:
|
|
||||||
return mKind.Interface;
|
|
||||||
case lsTypes.SymbolKind.Function:
|
|
||||||
return mKind.Function;
|
|
||||||
case lsTypes.SymbolKind.Variable:
|
|
||||||
return mKind.Variable;
|
|
||||||
case lsTypes.SymbolKind.Constant:
|
|
||||||
return mKind.Constant;
|
|
||||||
case lsTypes.SymbolKind.String:
|
|
||||||
return mKind.String;
|
|
||||||
case lsTypes.SymbolKind.Number:
|
|
||||||
return mKind.Number;
|
|
||||||
case lsTypes.SymbolKind.Boolean:
|
|
||||||
return mKind.Boolean;
|
|
||||||
case lsTypes.SymbolKind.Array:
|
|
||||||
return mKind.Array;
|
|
||||||
}
|
|
||||||
return mKind.Function;
|
|
||||||
}
|
|
||||||
|
|
||||||
export class DocumentSymbolAdapter implements languages.DocumentSymbolProvider {
|
|
||||||
constructor(private _worker: WorkerAccessor) {}
|
|
||||||
|
|
||||||
public provideDocumentSymbols(
|
|
||||||
model: editor.IReadOnlyModel,
|
|
||||||
token: CancellationToken
|
|
||||||
): Promise<languages.DocumentSymbol[] | undefined> {
|
|
||||||
const resource = model.uri;
|
|
||||||
|
|
||||||
return this._worker(resource)
|
|
||||||
.then((worker) => worker.findDocumentSymbols(resource.toString()))
|
|
||||||
.then((items) => {
|
|
||||||
if (!items) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
return items.map((item) => ({
|
|
||||||
name: item.name,
|
|
||||||
detail: '',
|
|
||||||
containerName: item.containerName,
|
|
||||||
kind: toSymbolKind(item.kind),
|
|
||||||
range: toRange(item.location.range),
|
|
||||||
selectionRange: toRange(item.location.range),
|
|
||||||
tags: []
|
|
||||||
}));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export class DocumentColorAdapter implements languages.DocumentColorProvider {
|
export class DocumentColorAdapter implements languages.DocumentColorProvider {
|
||||||
constructor(private _worker: WorkerAccessor) {}
|
constructor(private _worker: WorkerAccessor) {}
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,7 @@ export function setupMode1(defaults: LanguageServiceDefaults): void {
|
||||||
);
|
);
|
||||||
languages.registerDocumentSymbolProvider(
|
languages.registerDocumentSymbolProvider(
|
||||||
languageId,
|
languageId,
|
||||||
new languageFeatures.DocumentSymbolAdapter(worker)
|
new languageFeatures.HTMLDocumentSymbolAdapter(worker)
|
||||||
);
|
);
|
||||||
languages.registerSelectionRangeProvider(
|
languages.registerSelectionRangeProvider(
|
||||||
languageId,
|
languageId,
|
||||||
|
|
@ -103,7 +103,7 @@ export function setupMode(defaults: LanguageServiceDefaults): IDisposable {
|
||||||
providers.push(
|
providers.push(
|
||||||
languages.registerDocumentSymbolProvider(
|
languages.registerDocumentSymbolProvider(
|
||||||
languageId,
|
languageId,
|
||||||
new languageFeatures.DocumentSymbolAdapter(worker)
|
new languageFeatures.HTMLDocumentSymbolAdapter(worker)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,8 @@ import {
|
||||||
CompletionAdapter,
|
CompletionAdapter,
|
||||||
HoverAdapter,
|
HoverAdapter,
|
||||||
DocumentHighlightAdapter,
|
DocumentHighlightAdapter,
|
||||||
RenameAdapter
|
RenameAdapter,
|
||||||
|
DocumentSymbolAdapter
|
||||||
} from '../common/lspLanguageFeatures';
|
} from '../common/lspLanguageFeatures';
|
||||||
|
|
||||||
export interface WorkerAccessor {
|
export interface WorkerAccessor {
|
||||||
|
|
@ -40,79 +41,7 @@ export class HTMLDocumentHighlightAdapter extends DocumentHighlightAdapter<HTMLW
|
||||||
|
|
||||||
export class HTMLRenameAdapter extends RenameAdapter<HTMLWorker> {}
|
export class HTMLRenameAdapter extends RenameAdapter<HTMLWorker> {}
|
||||||
|
|
||||||
// --- document symbols ------
|
export class HTMLDocumentSymbolAdapter extends DocumentSymbolAdapter<HTMLWorker> {}
|
||||||
|
|
||||||
function toSymbolKind(kind: lsTypes.SymbolKind): languages.SymbolKind {
|
|
||||||
let mKind = languages.SymbolKind;
|
|
||||||
|
|
||||||
switch (kind) {
|
|
||||||
case lsTypes.SymbolKind.File:
|
|
||||||
return mKind.Array;
|
|
||||||
case lsTypes.SymbolKind.Module:
|
|
||||||
return mKind.Module;
|
|
||||||
case lsTypes.SymbolKind.Namespace:
|
|
||||||
return mKind.Namespace;
|
|
||||||
case lsTypes.SymbolKind.Package:
|
|
||||||
return mKind.Package;
|
|
||||||
case lsTypes.SymbolKind.Class:
|
|
||||||
return mKind.Class;
|
|
||||||
case lsTypes.SymbolKind.Method:
|
|
||||||
return mKind.Method;
|
|
||||||
case lsTypes.SymbolKind.Property:
|
|
||||||
return mKind.Property;
|
|
||||||
case lsTypes.SymbolKind.Field:
|
|
||||||
return mKind.Field;
|
|
||||||
case lsTypes.SymbolKind.Constructor:
|
|
||||||
return mKind.Constructor;
|
|
||||||
case lsTypes.SymbolKind.Enum:
|
|
||||||
return mKind.Enum;
|
|
||||||
case lsTypes.SymbolKind.Interface:
|
|
||||||
return mKind.Interface;
|
|
||||||
case lsTypes.SymbolKind.Function:
|
|
||||||
return mKind.Function;
|
|
||||||
case lsTypes.SymbolKind.Variable:
|
|
||||||
return mKind.Variable;
|
|
||||||
case lsTypes.SymbolKind.Constant:
|
|
||||||
return mKind.Constant;
|
|
||||||
case lsTypes.SymbolKind.String:
|
|
||||||
return mKind.String;
|
|
||||||
case lsTypes.SymbolKind.Number:
|
|
||||||
return mKind.Number;
|
|
||||||
case lsTypes.SymbolKind.Boolean:
|
|
||||||
return mKind.Boolean;
|
|
||||||
case lsTypes.SymbolKind.Array:
|
|
||||||
return mKind.Array;
|
|
||||||
}
|
|
||||||
return mKind.Function;
|
|
||||||
}
|
|
||||||
|
|
||||||
export class DocumentSymbolAdapter implements languages.DocumentSymbolProvider {
|
|
||||||
constructor(private _worker: WorkerAccessor) {}
|
|
||||||
|
|
||||||
public provideDocumentSymbols(
|
|
||||||
model: editor.IReadOnlyModel,
|
|
||||||
token: CancellationToken
|
|
||||||
): Promise<languages.DocumentSymbol[] | undefined> {
|
|
||||||
const resource = model.uri;
|
|
||||||
|
|
||||||
return this._worker(resource)
|
|
||||||
.then((worker) => worker.findDocumentSymbols(resource.toString()))
|
|
||||||
.then((items) => {
|
|
||||||
if (!items) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
return items.map((item) => ({
|
|
||||||
name: item.name,
|
|
||||||
detail: '',
|
|
||||||
containerName: item.containerName,
|
|
||||||
kind: toSymbolKind(item.kind),
|
|
||||||
range: toRange(item.location.range),
|
|
||||||
selectionRange: toRange(item.location.range),
|
|
||||||
tags: []
|
|
||||||
}));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export class DocumentLinkAdapter implements languages.LinkProvider {
|
export class DocumentLinkAdapter implements languages.LinkProvider {
|
||||||
constructor(private _worker: WorkerAccessor) {}
|
constructor(private _worker: WorkerAccessor) {}
|
||||||
|
|
|
||||||
|
|
@ -59,7 +59,7 @@ export function setupMode(defaults: LanguageServiceDefaults): IDisposable {
|
||||||
providers.push(
|
providers.push(
|
||||||
languages.registerDocumentSymbolProvider(
|
languages.registerDocumentSymbolProvider(
|
||||||
languageId,
|
languageId,
|
||||||
new languageFeatures.DocumentSymbolAdapter(worker)
|
new languageFeatures.JSONDocumentSymbolAdapter(worker)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,8 @@ import {
|
||||||
toTextEdit,
|
toTextEdit,
|
||||||
fromRange,
|
fromRange,
|
||||||
CompletionAdapter,
|
CompletionAdapter,
|
||||||
HoverAdapter
|
HoverAdapter,
|
||||||
|
DocumentSymbolAdapter
|
||||||
} from '../common/lspLanguageFeatures';
|
} from '../common/lspLanguageFeatures';
|
||||||
|
|
||||||
export interface WorkerAccessor {
|
export interface WorkerAccessor {
|
||||||
|
|
@ -59,88 +60,7 @@ export class JSONCompletionAdapter extends CompletionAdapter<JSONWorker> {
|
||||||
|
|
||||||
export class JSONHoverAdapter extends HoverAdapter<JSONWorker> {}
|
export class JSONHoverAdapter extends HoverAdapter<JSONWorker> {}
|
||||||
|
|
||||||
// --- definition ------
|
export class JSONDocumentSymbolAdapter extends DocumentSymbolAdapter<JSONWorker> {}
|
||||||
|
|
||||||
function toLocation(location: lsTypes.Location): languages.Location {
|
|
||||||
return {
|
|
||||||
uri: Uri.parse(location.uri),
|
|
||||||
range: toRange(location.range)
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
// --- document symbols ------
|
|
||||||
|
|
||||||
function toSymbolKind(kind: lsTypes.SymbolKind): languages.SymbolKind {
|
|
||||||
let mKind = languages.SymbolKind;
|
|
||||||
|
|
||||||
switch (kind) {
|
|
||||||
case lsTypes.SymbolKind.File:
|
|
||||||
return mKind.Array;
|
|
||||||
case lsTypes.SymbolKind.Module:
|
|
||||||
return mKind.Module;
|
|
||||||
case lsTypes.SymbolKind.Namespace:
|
|
||||||
return mKind.Namespace;
|
|
||||||
case lsTypes.SymbolKind.Package:
|
|
||||||
return mKind.Package;
|
|
||||||
case lsTypes.SymbolKind.Class:
|
|
||||||
return mKind.Class;
|
|
||||||
case lsTypes.SymbolKind.Method:
|
|
||||||
return mKind.Method;
|
|
||||||
case lsTypes.SymbolKind.Property:
|
|
||||||
return mKind.Property;
|
|
||||||
case lsTypes.SymbolKind.Field:
|
|
||||||
return mKind.Field;
|
|
||||||
case lsTypes.SymbolKind.Constructor:
|
|
||||||
return mKind.Constructor;
|
|
||||||
case lsTypes.SymbolKind.Enum:
|
|
||||||
return mKind.Enum;
|
|
||||||
case lsTypes.SymbolKind.Interface:
|
|
||||||
return mKind.Interface;
|
|
||||||
case lsTypes.SymbolKind.Function:
|
|
||||||
return mKind.Function;
|
|
||||||
case lsTypes.SymbolKind.Variable:
|
|
||||||
return mKind.Variable;
|
|
||||||
case lsTypes.SymbolKind.Constant:
|
|
||||||
return mKind.Constant;
|
|
||||||
case lsTypes.SymbolKind.String:
|
|
||||||
return mKind.String;
|
|
||||||
case lsTypes.SymbolKind.Number:
|
|
||||||
return mKind.Number;
|
|
||||||
case lsTypes.SymbolKind.Boolean:
|
|
||||||
return mKind.Boolean;
|
|
||||||
case lsTypes.SymbolKind.Array:
|
|
||||||
return mKind.Array;
|
|
||||||
}
|
|
||||||
return mKind.Function;
|
|
||||||
}
|
|
||||||
|
|
||||||
export class DocumentSymbolAdapter implements languages.DocumentSymbolProvider {
|
|
||||||
constructor(private _worker: WorkerAccessor) {}
|
|
||||||
|
|
||||||
public provideDocumentSymbols(
|
|
||||||
model: editor.IReadOnlyModel,
|
|
||||||
token: CancellationToken
|
|
||||||
): Promise<languages.DocumentSymbol[] | undefined> {
|
|
||||||
const resource = model.uri;
|
|
||||||
|
|
||||||
return this._worker(resource)
|
|
||||||
.then((worker) => worker.findDocumentSymbols(resource.toString()))
|
|
||||||
.then((items) => {
|
|
||||||
if (!items) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
return items.map((item) => ({
|
|
||||||
name: item.name,
|
|
||||||
detail: '',
|
|
||||||
containerName: item.containerName,
|
|
||||||
kind: toSymbolKind(item.kind),
|
|
||||||
range: toRange(item.location.range),
|
|
||||||
selectionRange: toRange(item.location.range),
|
|
||||||
tags: []
|
|
||||||
}));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function fromFormattingOptions(options: languages.FormattingOptions): lsTypes.FormattingOptions {
|
function fromFormattingOptions(options: languages.FormattingOptions): lsTypes.FormattingOptions {
|
||||||
return {
|
return {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue