Skip to content

Commit 602f161

Browse files
committed
Add support for * in workspace symbol search
The fix change the code so that the query to LS is sent with * while the query components used to perform the matching is fixed by removing the * characters for workspace symbol search.
1 parent 1b6f8eb commit 602f161

File tree

1 file changed

+30
-1
lines changed

1 file changed

+30
-1
lines changed

src/vs/workbench/contrib/search/browser/symbolsQuickAccess.ts

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import { IKeyMods, IQuickPickItemWithResource } from 'vs/platform/quickinput/com
2121
import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService';
2222
import { getSelectionSearchString } from 'vs/editor/contrib/find/browser/findController';
2323
import { withNullAsUndefined } from 'vs/base/common/types';
24-
import { prepareQuery, IPreparedQuery, scoreFuzzy2, pieceToQuery } from 'vs/base/common/fuzzyScorer';
24+
import { prepareQuery, IPreparedQuery, scoreFuzzy2, pieceToQuery, IPreparedQueryPiece } from 'vs/base/common/fuzzyScorer';
2525
import { IMatch } from 'vs/base/common/filters';
2626
import { Codicon } from 'vs/base/common/codicons';
2727
import { ThemeIcon } from 'vs/base/common/themables';
@@ -115,6 +115,11 @@ export class SymbolsQuickAccessProvider extends PickerQuickAccessProvider<ISymbo
115115
if (token.isCancellationRequested) {
116116
return [];
117117
}
118+
// fix the queries before matching start
119+
symbolQuery = this.removeWildcards(symbolQuery);
120+
if (containerQuery) {
121+
containerQuery = this.removeWildcards(containerQuery);
122+
}
118123

119124
const symbolPicks: Array<ISymbolQuickPickItem> = [];
120125

@@ -225,6 +230,30 @@ export class SymbolsQuickAccessProvider extends PickerQuickAccessProvider<ISymbo
225230
return symbolPicks;
226231
}
227232

233+
private removeWildcards(query: IPreparedQuery): IPreparedQuery {
234+
return {
235+
expectContiguousMatch: query.expectContiguousMatch,
236+
normalized: query.normalized.replaceAll('*', ''),
237+
normalizedLowercase: query.normalizedLowercase.replaceAll('*', ''),
238+
original: query.original.replaceAll('*', ''),
239+
originalLowercase: query.originalLowercase.replaceAll('*', ''),
240+
pathNormalized: query.pathNormalized.replaceAll('*', ''),
241+
containsPathSeparator: query.containsPathSeparator,
242+
values: query.values?.map((v) => this.removeWildcardsInPiece(v))
243+
};
244+
}
245+
246+
private removeWildcardsInPiece(query: IPreparedQueryPiece): IPreparedQueryPiece {
247+
return {
248+
expectContiguousMatch: query.expectContiguousMatch,
249+
normalized: query.normalized.replaceAll('*', ''),
250+
normalizedLowercase: query.normalizedLowercase.replaceAll('*', ''),
251+
original: query.original.replaceAll('*', ''),
252+
originalLowercase: query.originalLowercase.replaceAll('*', ''),
253+
pathNormalized: query.pathNormalized.replaceAll('*', '')
254+
};
255+
}
256+
228257
private async openSymbol(provider: IWorkspaceSymbolProvider, symbol: IWorkspaceSymbol, token: CancellationToken, options: { keyMods: IKeyMods; forceOpenSideBySide?: boolean; preserveFocus?: boolean; forcePinned?: boolean }): Promise<void> {
229258

230259
// Resolve actual symbol to open for providers that can resolve

0 commit comments

Comments
 (0)