mirror of
https://github.com/microsoft/vscode.git
synced 2026-04-20 16:49:06 +01:00
workspace symbol provider as support
This commit is contained in:
@@ -426,8 +426,36 @@ class OnTypeFormattingAdapter implements modes.IFormattingSupport {
|
||||
}
|
||||
}
|
||||
|
||||
class NavigateTypeAdapter implements INavigateTypesSupport {
|
||||
|
||||
private _provider: vscode.WorkspaceSymbolProvider;
|
||||
|
||||
constructor(provider: vscode.WorkspaceSymbolProvider) {
|
||||
this._provider = provider;
|
||||
}
|
||||
|
||||
getNavigateToItems(search: string): TPromise<ITypeBearing[]> {
|
||||
return asWinJsPromise(token => this._provider.provideWorkspaceSymbols(search, token)).then(value => {
|
||||
if (Array.isArray(value)) {
|
||||
return value.map(NavigateTypeAdapter._fromSymbolInformation);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private static _fromSymbolInformation(info: vscode.SymbolInformation): ITypeBearing {
|
||||
return <ITypeBearing>{
|
||||
name: info.name,
|
||||
type: SymbolKind[info.kind || SymbolKind.Property].toLowerCase(),
|
||||
range: TypeConverters.fromRange(info.location.range),
|
||||
resourceUri: info.location.uri,
|
||||
containerName: info.containerName,
|
||||
parameters: '',
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
type Adapter = OutlineAdapter | CodeLensAdapter | DeclarationAdapter | ExtraInfoAdapter | OccurrencesAdapter | ReferenceAdapter | QuickFixAdapter
|
||||
| DocumentFormattingAdapter | RangeFormattingAdapter | OnTypeFormattingAdapter;
|
||||
| DocumentFormattingAdapter | RangeFormattingAdapter | OnTypeFormattingAdapter | NavigateTypeAdapter;
|
||||
|
||||
@Remotable.PluginHostContext('ExtHostLanguageFeatures')
|
||||
export class ExtHostLanguageFeatures {
|
||||
@@ -598,6 +626,18 @@ export class ExtHostLanguageFeatures {
|
||||
return this._withAdapter(handle, OnTypeFormattingAdapter, adapter => adapter.formatAfterKeystroke(resource, position, ch, options));
|
||||
}
|
||||
|
||||
// --- navigate types
|
||||
|
||||
registerWorkspaceSymbolProvider(provider: vscode.WorkspaceSymbolProvider): vscode.Disposable {
|
||||
const handle = this._nextHandle();
|
||||
this._adapter[handle] = new NavigateTypeAdapter(provider);
|
||||
this._proxy.$registerNavigateTypeSupport(handle);
|
||||
return this._createDisposable(handle);
|
||||
}
|
||||
|
||||
$getNavigateToItems(handle: number, search: string): TPromise<ITypeBearing[]> {
|
||||
return this._withAdapter(handle, NavigateTypeAdapter, adapter => adapter.getNavigateToItems(search));
|
||||
}
|
||||
}
|
||||
|
||||
@Remotable.MainContext('MainThreadLanguageFeatures')
|
||||
@@ -747,4 +787,15 @@ export class MainThreadLanguageFeatures {
|
||||
});
|
||||
return undefined;
|
||||
}
|
||||
|
||||
// --- navigate type
|
||||
|
||||
$registerNavigateTypeSupport(handle: number): TPromise<any> {
|
||||
this._registrations[handle] = NavigateTypesSupportRegistry.register(<INavigateTypesSupport>{
|
||||
getNavigateToItems: (search: string): TPromise<ITypeBearing[]> => {
|
||||
return this._proxy.$getNavigateToItems(handle, search);
|
||||
}
|
||||
});
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user