|
|
|
@ -21,7 +21,8 @@ import {
|
|
|
|
|
toTextEdit,
|
|
|
|
|
fromRange,
|
|
|
|
|
CompletionAdapter,
|
|
|
|
|
HoverAdapter
|
|
|
|
|
HoverAdapter,
|
|
|
|
|
DocumentSymbolAdapter
|
|
|
|
|
} from '../common/lspLanguageFeatures';
|
|
|
|
|
|
|
|
|
|
export interface WorkerAccessor {
|
|
|
|
@ -59,88 +60,7 @@ export class JSONCompletionAdapter extends CompletionAdapter<JSONWorker> {
|
|
|
|
|
|
|
|
|
|
export class JSONHoverAdapter extends HoverAdapter<JSONWorker> {}
|
|
|
|
|
|
|
|
|
|
// --- definition ------
|
|
|
|
|
|
|
|
|
|
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: []
|
|
|
|
|
}));
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
export class JSONDocumentSymbolAdapter extends DocumentSymbolAdapter<JSONWorker> {}
|
|
|
|
|
|
|
|
|
|
function fromFormattingOptions(options: languages.FormattingOptions): lsTypes.FormattingOptions {
|
|
|
|
|
return {
|
|
|
|
|