diff --git a/src/vs/workbench/parts/search/browser/openAnythingHandler.ts b/src/vs/workbench/parts/search/browser/openAnythingHandler.ts index a74bf522ab074187abef0012aeddc0d215968c57..c9e06f8e1ea66026a00aaa11b6c7a8c344f97c98 100644 --- a/src/vs/workbench/parts/search/browser/openAnythingHandler.ts +++ b/src/vs/workbench/parts/search/browser/openAnythingHandler.ts @@ -28,6 +28,11 @@ import {IWorkspaceContextService} from 'vs/workbench/services/workspace/common/c import {ISearchConfiguration} from 'vs/platform/search/common/search'; import {IConfigurationService, IConfigurationServiceEvent, ConfigurationServiceEventTypes} from 'vs/platform/configuration/common/configuration'; +interface ISearchWithRange { + search: string; + range: IRange; +} + export class OpenAnythingHandler extends QuickOpenHandler { private static LINE_COLON_PATTERN = /[#|:](\d*)([#|:](\d*))?$/; @@ -100,16 +105,13 @@ export class OpenAnythingHandler extends QuickOpenHandler { } // Find a suitable range from the pattern looking for ":" and "#" - let range = this.findRange(searchValue); - if (range) { - let rangePrefix = searchValue.indexOf('#') >= 0 ? searchValue.indexOf('#') : searchValue.indexOf(':'); - if (rangePrefix >= 0) { - searchValue = searchValue.substring(0, rangePrefix); - } + let searchWithRange = this.extractRange(searchValue); + if (searchWithRange) { + searchValue = searchWithRange.search; // ignore range portion in query } // Check Cache first - let cachedResults = this.getResultsFromCache(searchValue, range); + let cachedResults = this.getResultsFromCache(searchValue, searchWithRange ? searchWithRange.range : null); if (cachedResults) { return TPromise.as(new QuickOpenModel(cachedResults)); } @@ -120,7 +122,7 @@ export class OpenAnythingHandler extends QuickOpenHandler { // Symbol Results (unless a range is specified) let resultPromises: TPromise[] = []; - if (!range) { + if (!searchWithRange) { let symbolSearchTimeoutPromiseFn: (timeout: number) => Promise = (timeout) => { return TPromise.timeout(timeout).then(() => { @@ -172,7 +174,7 @@ export class OpenAnythingHandler extends QuickOpenHandler { // Apply Range result.forEach((element) => { if (element instanceof FileEntry) { - (element).setRange(range); + (element).setRange(searchWithRange ? searchWithRange.range : null); } }); @@ -195,7 +197,7 @@ export class OpenAnythingHandler extends QuickOpenHandler { return this.delayer.trigger(promiseFactory); } - private findRange(value: string): IRange { + private extractRange(value: string): ISearchWithRange { let range: IRange = null; // Find Line/Column number from search value using RegExp @@ -233,7 +235,14 @@ export class OpenAnythingHandler extends QuickOpenHandler { } } - return range; + if (range) { + return { + search: value.substr(0, patternMatch.index), // clear range suffix from search value + range: range + } + } + + return null; } public getResultsFromCache(searchValue: string, range: IRange = null): QuickOpenEntry[] {