未验证 提交 38a2c24c 编写于 作者: R Rob Lourens 提交者: GitHub

Merge pull request #59717 from skprabhanjan/fix-59364

Fix #59364 : Respect global .gitignore when searching
......@@ -341,7 +341,9 @@ function getRgArgs(query: vscode.TextSearchQuery, options: vscode.TextSearchOpti
}
args.push('--no-config');
args.push('--no-ignore-global');
if (!options.useGlobalIgnoreFiles) {
args.push('--no-ignore-global');
}
// Folder to search
args.push('--');
......
......@@ -65,6 +65,7 @@ export interface IFolderQuery<U extends UriComponents=uri> {
includePattern?: glob.IExpression;
fileEncoding?: string;
disregardIgnoreFiles?: boolean;
disregardGlobalIgnoreFiles?: boolean;
}
export interface ICommonQueryOptions<U> {
......@@ -82,6 +83,7 @@ export interface ICommonQueryOptions<U> {
cacheKey?: string;
useRipgrep?: boolean;
disregardIgnoreFiles?: boolean;
disregardGlobalIgnoreFiles?: boolean;
disregardExcludeSettings?: boolean;
ignoreSymlinks?: boolean;
maxFileSize?: number;
......@@ -275,6 +277,7 @@ export interface ISearchConfigurationProperties {
* Use ignore file for file search.
*/
useIgnoreFiles: boolean;
useGlobalIgnoreFiles: boolean;
followSymlinks: boolean;
smartCase: boolean;
globalFindClipboard: boolean;
......
......@@ -86,6 +86,13 @@ declare module 'vscode' {
* See the vscode setting `"search.followSymlinks"`.
*/
followSymlinks: boolean;
/**
* Whether global files that exclude files, like .gitignore, should be respected.
* See the vscode setting `"search.useGlobalIgnoreFiles"`.
*/
useGlobalIgnoreFiles: boolean;
}
/**
......@@ -291,6 +298,12 @@ declare module 'vscode' {
*/
useIgnoreFiles?: boolean;
/**
* Whether global files that exclude files, like .gitignore, should be respected.
* See the vscode setting `"search.useGlobalIgnoreFiles"`.
*/
useGlobalIgnoreFiles?: boolean;
/**
* Whether symlinks should be followed while searching.
* See the vscode setting `"search.followSymlinks"`.
......
......@@ -302,6 +302,7 @@ export class FileIndexSearchEngine {
excludes,
includes,
useIgnoreFiles: !this.config.disregardIgnoreFiles,
useGlobalIgnoreFiles: !this.config.disregardGlobalIgnoreFiles,
followSymlinks: !this.config.ignoreSymlinks
};
}
......
......@@ -386,6 +386,7 @@ class TextSearchEngine {
excludes,
includes,
useIgnoreFiles: !this.config.disregardIgnoreFiles,
useGlobalIgnoreFiles: !this.config.disregardGlobalIgnoreFiles,
followSymlinks: !this.config.ignoreSymlinks,
encoding: this.config.fileEncoding,
maxFileSize: this.config.maxFileSize,
......@@ -559,6 +560,7 @@ class FileSearchEngine {
excludes,
includes,
useIgnoreFiles: !this.config.disregardIgnoreFiles,
useGlobalIgnoreFiles: !this.config.disregardGlobalIgnoreFiles,
followSymlinks: !this.config.ignoreSymlinks,
maxResults: this.config.maxResults
};
......
......@@ -403,6 +403,7 @@ export class ExtHostWorkspace implements ExtHostWorkspaceShape {
const queryOptions: IQueryOptions = {
ignoreSymlinks: typeof options.followSymlinks === 'boolean' ? !options.followSymlinks : undefined,
disregardIgnoreFiles: typeof options.useIgnoreFiles === 'boolean' ? !options.useIgnoreFiles : undefined,
disregardGlobalIgnoreFiles: typeof options.useGlobalIgnoreFiles === 'boolean' ? !options.useGlobalIgnoreFiles : undefined,
disregardExcludeSettings: options.exclude === null,
fileEncoding: options.encoding,
maxResults: options.maxResults,
......
......@@ -64,6 +64,11 @@ export class QueryBuilder {
return folderConfig.search.useIgnoreFiles;
});
const useGlobalIgnoreFiles = !folderResources || folderResources.every(folder => {
const folderConfig = this.configurationService.getValue<ISearchConfiguration>({ resource: folder });
return folderConfig.search.useGlobalIgnoreFiles;
});
const useRipgrep = !folderResources || folderResources.every(folder => {
const folderConfig = this.configurationService.getValue<ISearchConfiguration>({ resource: folder });
return folderConfig.search.useRipgrep;
......@@ -93,6 +98,7 @@ export class QueryBuilder {
contentPattern,
useRipgrep,
disregardIgnoreFiles: options.disregardIgnoreFiles || !useIgnoreFiles,
disregardGlobalIgnoreFiles: options.disregardGlobalIgnoreFiles || !useGlobalIgnoreFiles,
disregardExcludeSettings: options.disregardExcludeSettings,
ignoreSymlinks,
previewOptions: options.previewOptions,
......@@ -297,7 +303,8 @@ export class QueryBuilder {
folder,
excludePattern: this.getExcludesForFolder(folderConfig, options),
fileEncoding: folderConfig.files && folderConfig.files.encoding,
disregardIgnoreFiles: perFolderUseIgnoreFiles ? !folderConfig.search.useIgnoreFiles : undefined
disregardIgnoreFiles: perFolderUseIgnoreFiles ? !folderConfig.search.useIgnoreFiles : undefined,
disregardGlobalIgnoreFiles: perFolderUseIgnoreFiles ? !folderConfig.search.useGlobalIgnoreFiles : undefined
};
}
}
......
......@@ -595,6 +595,12 @@ configurationRegistry.registerConfiguration({
default: true,
scope: ConfigurationScope.RESOURCE
},
'search.useGlobalIgnoreFiles': {
type: 'boolean',
markdownDescription: nls.localize('useGlobalIgnoreFiles', "Controls whether to use global `.gitignore` and `.ignore` files when searching for files."),
default: false,
scope: ConfigurationScope.RESOURCE
},
'search.quickOpen.includeSymbols': {
type: 'boolean',
description: nls.localize('search.quickOpen.includeSymbols', "Whether to include results from a global symbol search in the file results for Quick Open."),
......
......@@ -16,8 +16,8 @@ import { ISearchPathsResult, QueryBuilder } from 'vs/workbench/parts/search/comm
import { TestContextService, TestEnvironmentService } from 'vs/workbench/test/workbenchTestServices';
const DEFAULT_EDITOR_CONFIG = {};
const DEFAULT_USER_CONFIG = { useRipgrep: true, useIgnoreFiles: true };
const DEFAULT_QUERY_PROPS = { useRipgrep: true, disregardIgnoreFiles: false };
const DEFAULT_USER_CONFIG = { useRipgrep: true, useIgnoreFiles: true, useGlobalIgnoreFiles: true };
const DEFAULT_QUERY_PROPS = { useRipgrep: true, disregardIgnoreFiles: false, disregardGlobalIgnoreFiles: false };
suite('QueryBuilder', () => {
const PATTERN_INFO: IPatternInfo = { pattern: 'a' };
......
......@@ -515,7 +515,9 @@ function getRgArgs(config: IRawSearch) {
}
args.push('--no-config');
args.push('--no-ignore-global');
if (config.disregardGlobalIgnoreFiles) {
args.push('--no-ignore-global');
}
// Folder to search
args.push('--');
......
......@@ -15,6 +15,7 @@ export interface IFolderSearch {
includePattern?: IExpression;
fileEncoding?: string;
disregardIgnoreFiles?: boolean;
disregardGlobalIgnoreFiles?: boolean;
}
export interface IRawSearch {
......@@ -33,6 +34,7 @@ export interface IRawSearch {
useRipgrep?: boolean;
disregardIgnoreFiles?: boolean;
previewOptions?: ITextSearchPreviewOptions;
disregardGlobalIgnoreFiles?: boolean;
}
export interface ITelemetryEvent {
......
......@@ -488,6 +488,7 @@ export class DiskSearch implements ISearchResultProvider {
cacheKey: query.cacheKey,
useRipgrep: query.useRipgrep,
disregardIgnoreFiles: query.disregardIgnoreFiles,
disregardGlobalIgnoreFiles: query.disregardGlobalIgnoreFiles,
ignoreSymlinks: query.ignoreSymlinks,
previewOptions: query.previewOptions
};
......@@ -498,6 +499,7 @@ export class DiskSearch implements ISearchResultProvider {
includePattern: q.includePattern,
fileEncoding: q.fileEncoding,
disregardIgnoreFiles: q.disregardIgnoreFiles,
disregardGlobalIgnoreFiles: q.disregardGlobalIgnoreFiles,
folder: q.folder.fsPath
});
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册