Skip to content

Commit 425c7f9

Browse files
authored
Merge pull request #2625 from filipw/feature/workspace-symbols-change
Do not send a symbol search request to OmniSharp if search term is shorter than "omnisharp.minFindSymbolsFilterLength"
2 parents de76266 + 5594cf9 commit 425c7f9

File tree

3 files changed

+61
-3
lines changed

3 files changed

+61
-3
lines changed

src/features/workspaceSymbolProvider.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,15 @@ export default class OmnisharpWorkspaceSymbolProvider extends AbstractSupport im
2323
let options = this.optionProvider.GetLatestOptions();
2424
let minFilterLength = options.minFindSymbolsFilterLength > 0 ? options.minFindSymbolsFilterLength : undefined;
2525
let maxItemsToReturn = options.maxFindSymbolsItems > 0 ? options.maxFindSymbolsItems : undefined;
26-
return serverUtils.findSymbols(this._server, { Filter: search, MinFilterLength: minFilterLength, MaxItemsToReturn: maxItemsToReturn, FileName: '' }, token).then(res => {
26+
27+
if (minFilterLength != undefined && search.length < minFilterLength) {
28+
return [];
29+
}
30+
31+
return serverUtils.findSymbols(this._server, { Filter: search, MaxItemsToReturn: maxItemsToReturn, FileName: '' }, token).then(res => {
2732
if (res && Array.isArray(res.QuickFixes)) {
2833
return res.QuickFixes.map(OmnisharpWorkspaceSymbolProvider._asSymbolInformation);
29-
}
34+
}
3035
});
3136
}
3237

src/omnisharp/protocol.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,6 @@ export interface FindUsagesRequest extends Request {
128128

129129
export interface FindSymbolsRequest extends Request {
130130
Filter: string;
131-
MinFilterLength?: number;
132131
MaxItemsToReturn?: number;
133132
}
134133

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
/*---------------------------------------------------------------------------------------------
2+
* Copyright (c) Microsoft Corporation. All rights reserved.
3+
* Licensed under the MIT License. See License.txt in the project root for license information.
4+
*--------------------------------------------------------------------------------------------*/
5+
6+
import * as vscode from 'vscode';
7+
import { should, expect } from 'chai';
8+
import { activateCSharpExtension } from './integrationHelpers';
9+
import testAssetWorkspace from './testAssets/testAssetWorkspace';
10+
11+
const chai = require('chai');
12+
chai.use(require('chai-arrays'));
13+
chai.use(require('chai-fs'));
14+
15+
suite(`WorkspaceSymbolProvider: ${testAssetWorkspace.description}`, function () {
16+
17+
suiteSetup(async function () {
18+
should();
19+
await testAssetWorkspace.restore();
20+
await activateCSharpExtension();
21+
22+
let projectDirectory = vscode.Uri.file(testAssetWorkspace.projects[0].projectDirectoryPath);
23+
await vscode.commands.executeCommand("vscode.openFolder", projectDirectory);
24+
});
25+
26+
suiteTeardown(async () => {
27+
await testAssetWorkspace.cleanupWorkspace();
28+
});
29+
30+
test("Returns elements", async function () {
31+
let symbols = await GetWorkspaceSymbols("P");
32+
expect(symbols.length).to.be.greaterThan(0);
33+
});
34+
35+
test("Returns no elements when minimum filter length is configured and search term is shorter", async function () {
36+
let omnisharpConfig = vscode.workspace.getConfiguration('omnisharp');
37+
await omnisharpConfig.update('minFindSymbolsFilterLength', 2);
38+
39+
let symbols = await GetWorkspaceSymbols("P");
40+
expect(symbols.length).to.be.equal(0);
41+
});
42+
43+
test("Returns elements when minimum filter length is configured and search term is longer or equal", async function () {
44+
let omnisharpConfig = vscode.workspace.getConfiguration('omnisharp');
45+
await omnisharpConfig.update('minFindSymbolsFilterLength', 2);
46+
47+
let symbols = await GetWorkspaceSymbols("P1");
48+
expect(symbols.length).to.be.greaterThan(0);
49+
});
50+
});
51+
52+
async function GetWorkspaceSymbols(filter: string) {
53+
return <vscode.SymbolInformation[]>await vscode.commands.executeCommand("vscode.executeWorkspaceSymbolProvider", filter);
54+
}

0 commit comments

Comments
 (0)