mirror of
https://github.com/microsoft/vscode.git
synced 2026-04-24 18:49:00 +01:00
add resolveWorkspaceSymbol method and wire it up, not yet exposed in the API
This commit is contained in:
@@ -28,7 +28,7 @@ import * as modes from 'vs/editor/common/modes';
|
||||
import {IResourceEdit} from 'vs/editor/common/services/bulkEdit';
|
||||
|
||||
import {IPickOpenEntry, IPickOptions} from 'vs/workbench/services/quickopen/common/quickOpenService';
|
||||
import {ITypeBearing} from 'vs/workbench/parts/search/common/search';
|
||||
import {IWorkspaceSymbol} from 'vs/workbench/parts/search/common/search';
|
||||
import {TextEditorRevealType, ITextEditorConfigurationUpdate, IResolvedTextEditorConfiguration, ISelectionChangeEvent} from './mainThreadEditorsTracker';
|
||||
import {EndOfLine} from './extHostTypes';
|
||||
|
||||
@@ -263,7 +263,8 @@ export abstract class ExtHostLanguageFeaturesShape {
|
||||
$provideDocumentFormattingEdits(handle: number, resource: URI, options: modes.FormattingOptions): TPromise<editorCommon.ISingleEditOperation[]> { throw ni(); }
|
||||
$provideDocumentRangeFormattingEdits(handle: number, resource: URI, range: editorCommon.IRange, options: modes.FormattingOptions): TPromise<editorCommon.ISingleEditOperation[]> { throw ni(); }
|
||||
$provideOnTypeFormattingEdits(handle: number, resource: URI, position: editorCommon.IPosition, ch: string, options: modes.FormattingOptions): TPromise<editorCommon.ISingleEditOperation[]> { throw ni(); }
|
||||
$getNavigateToItems(handle: number, search: string): TPromise<ITypeBearing[]> { throw ni(); }
|
||||
$provideWorkspaceSymbols(handle: number, search: string): TPromise<IWorkspaceSymbol[]> { throw ni(); }
|
||||
$resolveWorkspaceSymbol(handle: number, symbol: IWorkspaceSymbol): TPromise<IWorkspaceSymbol> { throw ni(); }
|
||||
$provideRenameEdits(handle: number, resource: URI, position: editorCommon.IPosition, newName: string): TPromise<modes.WorkspaceEdit> { throw ni(); }
|
||||
$provideCompletionItems(handle: number, resource: URI, position: editorCommon.IPosition): TPromise<modes.ISuggestResult[]> { throw ni(); }
|
||||
$resolveCompletionItem(handle: number, resource: URI, position: editorCommon.IPosition, suggestion: modes.ISuggestion): TPromise<modes.ISuggestion> { throw ni(); }
|
||||
|
||||
@@ -16,7 +16,7 @@ import {ICommandHandlerDescription} from 'vs/platform/commands/common/commands';
|
||||
import {ExtHostCommands} from 'vs/workbench/api/node/extHostCommands';
|
||||
import {IQuickFix2} from 'vs/editor/contrib/quickFix/common/quickFix';
|
||||
import {IOutline} from 'vs/editor/contrib/quickOpen/common/quickOpen';
|
||||
import {ITypeBearing} from 'vs/workbench/parts/search/common/search';
|
||||
import {IWorkspaceSymbolProvider, IWorkspaceSymbol} from 'vs/workbench/parts/search/common/search';
|
||||
import {ICodeLensData} from 'vs/editor/contrib/codelens/common/codelens';
|
||||
|
||||
export function registerApiCommands(commands:ExtHostCommands) {
|
||||
@@ -240,10 +240,14 @@ class ExtHostApiCommands {
|
||||
* @return A promise that resolves to an array of symbol information.
|
||||
*/
|
||||
private _executeWorkspaceSymbolProvider(query: string): Thenable<types.SymbolInformation[]> {
|
||||
return this._commands.executeCommand<ITypeBearing[]>('_executeWorkspaceSymbolProvider', { query }).then(value => {
|
||||
return this._commands.executeCommand<[IWorkspaceSymbolProvider, IWorkspaceSymbol[]][]>('_executeWorkspaceSymbolProvider', { query }).then(value => {
|
||||
const result: types.SymbolInformation[] = [];
|
||||
if (Array.isArray(value)) {
|
||||
return value.map(typeConverters.toSymbolInformation);
|
||||
for (const tuple of value) {
|
||||
result.push(...tuple[1].map(typeConverters.toSymbolInformation));
|
||||
}
|
||||
}
|
||||
return result;
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ import * as modes from 'vs/editor/common/modes';
|
||||
import {ExtHostDocuments} from 'vs/workbench/api/node/extHostDocuments';
|
||||
import {ExtHostCommands} from 'vs/workbench/api/node/extHostCommands';
|
||||
import {ExtHostDiagnostics} from 'vs/workbench/api/node/extHostDiagnostics';
|
||||
import {INavigateTypesSupport, ITypeBearing} from 'vs/workbench/parts/search/common/search';
|
||||
import {IWorkspaceSymbolProvider, IWorkspaceSymbol} from 'vs/workbench/parts/search/common/search';
|
||||
import {asWinJsPromise, ShallowCancelThenPromise} from 'vs/base/common/async';
|
||||
import {MainContext, MainThreadLanguageFeaturesShape, ExtHostLanguageFeaturesShape} from './extHost.protocol';
|
||||
import {regExpLeadsToEndlessLoop} from 'vs/base/common/strings';
|
||||
@@ -394,7 +394,7 @@ class OnTypeFormattingAdapter {
|
||||
}
|
||||
}
|
||||
|
||||
class NavigateTypeAdapter implements INavigateTypesSupport {
|
||||
class NavigateTypeAdapter implements IWorkspaceSymbolProvider {
|
||||
|
||||
private _provider: vscode.WorkspaceSymbolProvider;
|
||||
|
||||
@@ -402,13 +402,17 @@ class NavigateTypeAdapter implements INavigateTypesSupport {
|
||||
this._provider = provider;
|
||||
}
|
||||
|
||||
getNavigateToItems(search: string): TPromise<ITypeBearing[]> {
|
||||
provideWorkspaceSymbols(search: string): TPromise<IWorkspaceSymbol[]> {
|
||||
return asWinJsPromise(token => this._provider.provideWorkspaceSymbols(search, token)).then(value => {
|
||||
if (Array.isArray(value)) {
|
||||
return value.map(TypeConverters.fromSymbolInformation);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
resolveWorkspaceSymbol(item: IWorkspaceSymbol): TPromise<IWorkspaceSymbol> {
|
||||
return TPromise.as(item);
|
||||
}
|
||||
}
|
||||
|
||||
class RenameAdapter {
|
||||
@@ -795,8 +799,12 @@ export class ExtHostLanguageFeatures extends ExtHostLanguageFeaturesShape {
|
||||
return this._createDisposable(handle);
|
||||
}
|
||||
|
||||
$getNavigateToItems(handle: number, search: string): TPromise<ITypeBearing[]> {
|
||||
return this._withAdapter(handle, NavigateTypeAdapter, adapter => adapter.getNavigateToItems(search));
|
||||
$provideWorkspaceSymbols(handle: number, search: string): TPromise<IWorkspaceSymbol[]> {
|
||||
return this._withAdapter(handle, NavigateTypeAdapter, adapter => adapter.provideWorkspaceSymbols(search));
|
||||
}
|
||||
|
||||
$resolveWorkspaceSymbol(handle: number, symbol: IWorkspaceSymbol): TPromise<IWorkspaceSymbol> {
|
||||
return this._withAdapter(handle, NavigateTypeAdapter, adapter => adapter.resolveWorkspaceSymbol(symbol));
|
||||
}
|
||||
|
||||
// --- rename
|
||||
|
||||
@@ -12,7 +12,7 @@ import * as modes from 'vs/editor/common/modes';
|
||||
import * as types from './extHostTypes';
|
||||
import {Position as EditorPosition} from 'vs/platform/editor/common/editor';
|
||||
import {IPosition, ISelection, IRange, IDecorationOptions, ISingleEditOperation} from 'vs/editor/common/editorCommon';
|
||||
import {ITypeBearing} from 'vs/workbench/parts/search/common/search';
|
||||
import {IWorkspaceSymbol} from 'vs/workbench/parts/search/common/search';
|
||||
import * as vscode from 'vscode';
|
||||
import URI from 'vs/base/common/uri';
|
||||
|
||||
@@ -190,22 +190,21 @@ export namespace SymbolInformation {
|
||||
}
|
||||
}
|
||||
|
||||
export function fromSymbolInformation(info: vscode.SymbolInformation): ITypeBearing {
|
||||
return <ITypeBearing>{
|
||||
export function fromSymbolInformation(info: vscode.SymbolInformation): IWorkspaceSymbol {
|
||||
return <IWorkspaceSymbol>{
|
||||
name: info.name,
|
||||
type: types.SymbolKind[info.kind || types.SymbolKind.Property].toLowerCase(),
|
||||
range: fromRange(info.location.range),
|
||||
resourceUri: info.location.uri,
|
||||
containerName: info.containerName,
|
||||
parameters: '',
|
||||
resource: info.location.uri,
|
||||
containerName: info.containerName
|
||||
};
|
||||
}
|
||||
|
||||
export function toSymbolInformation(bearing: ITypeBearing): types.SymbolInformation {
|
||||
export function toSymbolInformation(bearing: IWorkspaceSymbol): types.SymbolInformation {
|
||||
return new types.SymbolInformation(bearing.name,
|
||||
types.SymbolKind[bearing.type.charAt(0).toUpperCase() + bearing.type.substr(1)],
|
||||
toRange(bearing.range),
|
||||
bearing.resourceUri,
|
||||
bearing.resource,
|
||||
bearing.containerName);
|
||||
}
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ import {IThreadService} from 'vs/workbench/services/thread/common/threadService'
|
||||
import * as vscode from 'vscode';
|
||||
import {IReadOnlyModel, ISingleEditOperation} from 'vs/editor/common/editorCommon';
|
||||
import * as modes from 'vs/editor/common/modes';
|
||||
import {NavigateTypesSupportRegistry, INavigateTypesSupport, ITypeBearing} from 'vs/workbench/parts/search/common/search';
|
||||
import {WorkspaceSymbolProviderRegistry, IWorkspaceSymbolProvider, IWorkspaceSymbol} from 'vs/workbench/parts/search/common/search';
|
||||
import {wireCancellationToken} from 'vs/base/common/async';
|
||||
import {CancellationToken} from 'vs/base/common/cancellation';
|
||||
import {Position as EditorPosition} from 'vs/editor/common/core/position';
|
||||
@@ -152,9 +152,12 @@ export class MainThreadLanguageFeatures extends MainThreadLanguageFeaturesShape
|
||||
// --- navigate type
|
||||
|
||||
$registerNavigateTypeSupport(handle: number): TPromise<any> {
|
||||
this._registrations[handle] = NavigateTypesSupportRegistry.register(<INavigateTypesSupport>{
|
||||
getNavigateToItems: (search: string): TPromise<ITypeBearing[]> => {
|
||||
return this._proxy.$getNavigateToItems(handle, search);
|
||||
this._registrations[handle] = WorkspaceSymbolProviderRegistry.register(<IWorkspaceSymbolProvider>{
|
||||
provideWorkspaceSymbols: (search: string): TPromise<IWorkspaceSymbol[]> => {
|
||||
return this._proxy.$provideWorkspaceSymbols(handle, search);
|
||||
},
|
||||
resolveWorkspaceSymbol: (item: IWorkspaceSymbol): TPromise<IWorkspaceSymbol> => {
|
||||
return this._proxy.$resolveWorkspaceSymbol(handle, item);
|
||||
}
|
||||
});
|
||||
return undefined;
|
||||
|
||||
Reference in New Issue
Block a user