提交 e43f0ce9 编写于 作者: B Benjamin Pasero

fix issue with absolute paths and line/col information in path on windows for quick open

上级 d5592d58
......@@ -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<QuickOpenModel>[] = [];
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) {
(<FileEntry>element).setRange(range);
(<FileEntry>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[] {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册