Skip to content

Commit 9c91aa2

Browse files
gayanperrgrunber
authored andcommitted
Add support for qualified workspace symbols
The change prefix the symbol name with container name if the query is a qualified name to overcome vscode fuzzy search limitation. Signed-off-by: Gayan Perera <[email protected]>
1 parent fb12b59 commit 9c91aa2

File tree

1 file changed

+20
-1
lines changed

1 file changed

+20
-1
lines changed

src/providerDispatcher.ts

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,26 @@ const START_OF_DOCUMENT = new Range(new Position(0, 0), new Position(0, 0));
110110

111111
function createWorkspaceSymbolProvider(existingWorkspaceSymbolProvider: WorkspaceSymbolProvider): WorkspaceSymbolProvider {
112112
return {
113-
provideWorkspaceSymbols: existingWorkspaceSymbolProvider.provideWorkspaceSymbols,
113+
provideWorkspaceSymbols: async (query: string, token: CancellationToken) => {
114+
// This is a workaround until vscode add support for qualified symbol search which is tracked by
115+
// https://github.com/microsoft/vscode/issues/98125
116+
const result = existingWorkspaceSymbolProvider.provideWorkspaceSymbols(query, token);
117+
if (query.indexOf('.') > -1) { // seems like a qualified name
118+
return new Promise<SymbolInformation[]>((resolve) => {
119+
((result as Promise<SymbolInformation[]>)).then((symbols) => {
120+
if (symbols === null) {
121+
resolve(null);
122+
} else {
123+
resolve(symbols?.map((s) => {
124+
s.name = `${s.containerName}.${s.name}`;
125+
return s;
126+
}));
127+
}
128+
});
129+
});
130+
}
131+
return result;
132+
},
114133
resolveWorkspaceSymbol: async (symbol: SymbolInformation, token: CancellationToken): Promise<SymbolInformation> => {
115134
const range = symbol.location.range;
116135
if (range && !range.isEqual(START_OF_DOCUMENT)) {

0 commit comments

Comments
 (0)