@theia/file-search 1.67.0-next.3 → 1.67.0-next.56

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/README.md +1 -1
  2. package/package.json +7 -7
  3. package/lib/browser/file-search-frontend-module.d.ts +0 -4
  4. package/lib/browser/file-search-frontend-module.d.ts.map +0 -1
  5. package/lib/browser/file-search-frontend-module.js +0 -36
  6. package/lib/browser/file-search-frontend-module.js.map +0 -1
  7. package/lib/browser/quick-file-open-contribution.d.ts +0 -11
  8. package/lib/browser/quick-file-open-contribution.d.ts.map +0 -1
  9. package/lib/browser/quick-file-open-contribution.js +0 -68
  10. package/lib/browser/quick-file-open-contribution.js.map +0 -1
  11. package/lib/browser/quick-file-open.d.ts +0 -67
  12. package/lib/browser/quick-file-open.d.ts.map +0 -1
  13. package/lib/browser/quick-file-open.js +0 -214
  14. package/lib/browser/quick-file-open.js.map +0 -1
  15. package/lib/browser/quick-file-select-service.d.ts +0 -57
  16. package/lib/browser/quick-file-select-service.d.ts.map +0 -1
  17. package/lib/browser/quick-file-select-service.js +0 -276
  18. package/lib/browser/quick-file-select-service.js.map +0 -1
  19. package/lib/browser-only/file-search-frontend-only-module.d.ts +0 -4
  20. package/lib/browser-only/file-search-frontend-only-module.d.ts.map +0 -1
  21. package/lib/browser-only/file-search-frontend-only-module.js +0 -34
  22. package/lib/browser-only/file-search-frontend-only-module.js.map +0 -1
  23. package/lib/browser-only/file-search-service-impl.d.ts +0 -38
  24. package/lib/browser-only/file-search-service-impl.d.ts.map +0 -1
  25. package/lib/browser-only/file-search-service-impl.js +0 -211
  26. package/lib/browser-only/file-search-service-impl.js.map +0 -1
  27. package/lib/common/file-search-service.d.ts +0 -31
  28. package/lib/common/file-search-service.d.ts.map +0 -1
  29. package/lib/common/file-search-service.js +0 -22
  30. package/lib/common/file-search-service.js.map +0 -1
  31. package/lib/node/file-search-backend-module.d.ts +0 -4
  32. package/lib/node/file-search-backend-module.d.ts.map +0 -1
  33. package/lib/node/file-search-backend-module.js +0 -26
  34. package/lib/node/file-search-backend-module.js.map +0 -1
  35. package/lib/node/file-search-service-impl.d.ts +0 -16
  36. package/lib/node/file-search-service-impl.d.ts.map +0 -1
  37. package/lib/node/file-search-service-impl.js +0 -184
  38. package/lib/node/file-search-service-impl.js.map +0 -1
  39. package/lib/node/file-search-service-impl.spec.d.ts +0 -2
  40. package/lib/node/file-search-service-impl.spec.d.ts.map +0 -1
  41. package/lib/node/file-search-service-impl.spec.js +0 -196
  42. package/lib/node/file-search-service-impl.spec.js.map +0 -1
@@ -1,22 +0,0 @@
1
- "use strict";
2
- // *****************************************************************************
3
- // Copyright (C) 2017 TypeFox and others.
4
- //
5
- // This program and the accompanying materials are made available under the
6
- // terms of the Eclipse Public License v. 2.0 which is available at
7
- // http://www.eclipse.org/legal/epl-2.0.
8
- //
9
- // This Source Code may also be made available under the following Secondary
10
- // Licenses when the conditions for such availability set forth in the Eclipse
11
- // Public License v. 2.0 are satisfied: GNU General Public License, version 2
12
- // with the GNU Classpath Exception which is available at
13
- // https://www.gnu.org/software/classpath/license.html.
14
- //
15
- // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
16
- // *****************************************************************************
17
- Object.defineProperty(exports, "__esModule", { value: true });
18
- exports.WHITESPACE_QUERY_SEPARATOR = exports.FileSearchService = exports.fileSearchServicePath = void 0;
19
- exports.fileSearchServicePath = '/services/search';
20
- exports.FileSearchService = Symbol('FileSearchService');
21
- exports.WHITESPACE_QUERY_SEPARATOR = /\s+/;
22
- //# sourceMappingURL=file-search-service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"file-search-service.js","sourceRoot":"","sources":["../../src/common/file-search-service.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;;AAInE,QAAA,qBAAqB,GAAG,kBAAkB,CAAC;AAe3C,QAAA,iBAAiB,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAC;AAkBhD,QAAA,0BAA0B,GAAG,KAAK,CAAC"}
@@ -1,4 +0,0 @@
1
- import { ContainerModule } from '@theia/core/shared/inversify';
2
- declare const _default: ContainerModule;
3
- export default _default;
4
- //# sourceMappingURL=file-search-backend-module.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"file-search-backend-module.d.ts","sourceRoot":"","sources":["../../src/node/file-search-backend-module.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;;AAK/D,wBAQG"}
@@ -1,26 +0,0 @@
1
- "use strict";
2
- // *****************************************************************************
3
- // Copyright (C) 2017 TypeFox and others.
4
- //
5
- // This program and the accompanying materials are made available under the
6
- // terms of the Eclipse Public License v. 2.0 which is available at
7
- // http://www.eclipse.org/legal/epl-2.0.
8
- //
9
- // This Source Code may also be made available under the following Secondary
10
- // Licenses when the conditions for such availability set forth in the Eclipse
11
- // Public License v. 2.0 are satisfied: GNU General Public License, version 2
12
- // with the GNU Classpath Exception which is available at
13
- // https://www.gnu.org/software/classpath/license.html.
14
- //
15
- // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
16
- // *****************************************************************************
17
- Object.defineProperty(exports, "__esModule", { value: true });
18
- const inversify_1 = require("@theia/core/shared/inversify");
19
- const common_1 = require("@theia/core/lib/common");
20
- const file_search_service_impl_1 = require("./file-search-service-impl");
21
- const file_search_service_1 = require("../common/file-search-service");
22
- exports.default = new inversify_1.ContainerModule(bind => {
23
- bind(file_search_service_1.FileSearchService).to(file_search_service_impl_1.FileSearchServiceImpl).inSingletonScope();
24
- bind(common_1.ConnectionHandler).toDynamicValue(ctx => new common_1.RpcConnectionHandler(file_search_service_1.fileSearchServicePath, () => ctx.container.get(file_search_service_1.FileSearchService))).inSingletonScope();
25
- });
26
- //# sourceMappingURL=file-search-backend-module.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"file-search-backend-module.js","sourceRoot":"","sources":["../../src/node/file-search-backend-module.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;AAEhF,4DAA+D;AAC/D,mDAAiF;AACjF,yEAAmE;AACnE,uEAAyF;AAEzF,kBAAe,IAAI,2BAAe,CAAC,IAAI,CAAC,EAAE;IAEtC,IAAI,CAAC,uCAAiB,CAAC,CAAC,EAAE,CAAC,gDAAqB,CAAC,CAAC,gBAAgB,EAAE,CAAC;IACrE,IAAI,CAAC,0BAAiB,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CACzC,IAAI,6BAAoB,CAAC,2CAAqB,EAAE,GAAG,EAAE,CACjD,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,uCAAiB,CAAC,CACvC,CACJ,CAAC,gBAAgB,EAAE,CAAC;AACzB,CAAC,CAAC,CAAC"}
@@ -1,16 +0,0 @@
1
- import URI from '@theia/core/lib/common/uri';
2
- import { CancellationToken, ILogger } from '@theia/core';
3
- import { RawProcessFactory } from '@theia/process/lib/node';
4
- import { FileSearchService } from '../common/file-search-service';
5
- export declare class FileSearchServiceImpl implements FileSearchService {
6
- protected readonly logger: ILogger;
7
- /** @deprecated since 1.7.0 */
8
- protected readonly rawProcessFactory: RawProcessFactory;
9
- constructor(logger: ILogger,
10
- /** @deprecated since 1.7.0 */
11
- rawProcessFactory: RawProcessFactory);
12
- find(searchPattern: string, options: FileSearchService.Options, clientToken?: CancellationToken): Promise<string[]>;
13
- protected doFind(rootUri: URI, options: FileSearchService.BaseOptions, accept: (fileUri: string) => void, token: CancellationToken): Promise<void>;
14
- protected getSearchArgs(options: FileSearchService.BaseOptions): string[];
15
- }
16
- //# sourceMappingURL=file-search-service-impl.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"file-search-service-impl.d.ts","sourceRoot":"","sources":["../../src/node/file-search-service-impl.ts"],"names":[],"mappings":"AAqBA,OAAO,GAAG,MAAM,4BAA4B,CAAC;AAE7C,OAAO,EAA2B,iBAAiB,EAAE,OAAO,EAAa,MAAM,aAAa,CAAC;AAC7F,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAA8B,MAAM,+BAA+B,CAAC;AAG9F,qBACa,qBAAsB,YAAW,iBAAiB;IAGtC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO;IACnD,8BAA8B;IACH,SAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB;gBAF9C,MAAM,EAAE,OAAO;IACnD,8BAA8B;IACgB,iBAAiB,EAAE,iBAAiB;IAGhF,IAAI,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IA8FzH,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,EAAE,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IA8BlJ,SAAS,CAAC,aAAa,CAAC,OAAO,EAAE,iBAAiB,CAAC,WAAW,GAAG,MAAM,EAAE;CAyB5E"}
@@ -1,184 +0,0 @@
1
- "use strict";
2
- // *****************************************************************************
3
- // Copyright (C) 2017 TypeFox and others.
4
- //
5
- // This program and the accompanying materials are made available under the
6
- // terms of the Eclipse Public License v. 2.0 which is available at
7
- // http://www.eclipse.org/legal/epl-2.0.
8
- //
9
- // This Source Code may also be made available under the following Secondary
10
- // Licenses when the conditions for such availability set forth in the Eclipse
11
- // Public License v. 2.0 are satisfied: GNU General Public License, version 2
12
- // with the GNU Classpath Exception which is available at
13
- // https://www.gnu.org/software/classpath/license.html.
14
- //
15
- // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
16
- // *****************************************************************************
17
- Object.defineProperty(exports, "__esModule", { value: true });
18
- exports.FileSearchServiceImpl = void 0;
19
- const tslib_1 = require("tslib");
20
- const cp = require("child_process");
21
- const fuzzy = require("@theia/core/shared/fuzzy");
22
- const readline = require("readline");
23
- const ripgrep_1 = require("@vscode/ripgrep");
24
- const inversify_1 = require("@theia/core/shared/inversify");
25
- const uri_1 = require("@theia/core/lib/common/uri");
26
- const file_uri_1 = require("@theia/core/lib/common/file-uri");
27
- const core_1 = require("@theia/core");
28
- const node_1 = require("@theia/process/lib/node");
29
- const file_search_service_1 = require("../common/file-search-service");
30
- const path = require("path");
31
- let FileSearchServiceImpl = class FileSearchServiceImpl {
32
- constructor(logger, rawProcessFactory) {
33
- this.logger = logger;
34
- this.rawProcessFactory = rawProcessFactory;
35
- }
36
- async find(searchPattern, options, clientToken) {
37
- const cancellationSource = new core_1.CancellationTokenSource();
38
- if (clientToken) {
39
- clientToken.onCancellationRequested(() => cancellationSource.cancel());
40
- }
41
- const token = cancellationSource.token;
42
- const opts = {
43
- fuzzyMatch: true,
44
- limit: Number.MAX_SAFE_INTEGER,
45
- useGitIgnore: true,
46
- ...options
47
- };
48
- const roots = options.rootOptions || {};
49
- if (options.rootUris) {
50
- for (const rootUri of options.rootUris) {
51
- if (!roots[rootUri]) {
52
- roots[rootUri] = {};
53
- }
54
- }
55
- }
56
- // eslint-disable-next-line guard-for-in
57
- for (const rootUri in roots) {
58
- const rootOptions = roots[rootUri];
59
- if (opts.includePatterns) {
60
- const includePatterns = rootOptions.includePatterns || [];
61
- rootOptions.includePatterns = [...includePatterns, ...opts.includePatterns];
62
- }
63
- if (opts.excludePatterns) {
64
- const excludePatterns = rootOptions.excludePatterns || [];
65
- rootOptions.excludePatterns = [...excludePatterns, ...opts.excludePatterns];
66
- }
67
- if (rootOptions.useGitIgnore === undefined) {
68
- rootOptions.useGitIgnore = opts.useGitIgnore;
69
- }
70
- }
71
- const exactMatches = new Set();
72
- const fuzzyMatches = new Set();
73
- if (core_1.isWindows) {
74
- // Allow users on Windows to search for paths using either forwards or backwards slash
75
- searchPattern = searchPattern.replace(/\//g, '\\');
76
- }
77
- const patterns = searchPattern.toLocaleLowerCase().trim().split(file_search_service_1.WHITESPACE_QUERY_SEPARATOR);
78
- await Promise.all(Object.keys(roots).map(async (root) => {
79
- try {
80
- const rootUri = new uri_1.default(root);
81
- const rootPath = file_uri_1.FileUri.fsPath(rootUri);
82
- const rootOptions = roots[root];
83
- await this.doFind(rootUri, rootOptions, candidate => {
84
- // Convert OS-native candidate path to a file URI string
85
- const fileUri = file_uri_1.FileUri.create(path.resolve(rootPath, candidate)).toString();
86
- // Skip results that have already been matched.
87
- if (exactMatches.has(fileUri) || fuzzyMatches.has(fileUri)) {
88
- return;
89
- }
90
- // Determine if the candidate matches any of the patterns exactly or fuzzy
91
- const candidatePattern = candidate.toLocaleLowerCase();
92
- const patternExists = patterns.every(pattern => candidatePattern.indexOf(pattern) !== -1);
93
- if (patternExists) {
94
- exactMatches.add(fileUri);
95
- }
96
- else if (!searchPattern || searchPattern === '*') {
97
- exactMatches.add(fileUri);
98
- }
99
- else {
100
- const fuzzyPatternExists = patterns.every(pattern => fuzzy.test(pattern, candidate));
101
- if (opts.fuzzyMatch && fuzzyPatternExists) {
102
- fuzzyMatches.add(fileUri);
103
- }
104
- }
105
- // Preemptively terminate the search when the list of exact matches reaches the limit.
106
- if (exactMatches.size === opts.limit) {
107
- cancellationSource.cancel();
108
- }
109
- }, token);
110
- }
111
- catch (e) {
112
- console.error('Failed to search:', root, e);
113
- }
114
- }));
115
- if (clientToken && clientToken.isCancellationRequested) {
116
- return [];
117
- }
118
- // Return the list of results limited by the search limit.
119
- return [...exactMatches, ...fuzzyMatches].slice(0, opts.limit);
120
- }
121
- doFind(rootUri, options, accept, token) {
122
- return new Promise((resolve, reject) => {
123
- const cwd = file_uri_1.FileUri.fsPath(rootUri);
124
- const args = this.getSearchArgs(options);
125
- const ripgrep = cp.spawn(ripgrep_1.rgPath, args, { cwd });
126
- ripgrep.on('error', reject);
127
- ripgrep.on('exit', (code, signal) => {
128
- if (typeof code === 'number' && code !== 0) {
129
- reject(new Error(`"${ripgrep_1.rgPath}" exited with code: ${code}`));
130
- }
131
- else if (typeof signal === 'string') {
132
- reject(new Error(`"${ripgrep_1.rgPath}" was terminated by signal: ${signal}`));
133
- }
134
- });
135
- token.onCancellationRequested(() => {
136
- ripgrep.kill(); // most likely sends a signal.
137
- resolve(); // avoid rejecting for no good reason.
138
- });
139
- const lineReader = readline.createInterface({
140
- input: ripgrep.stdout,
141
- crlfDelay: Infinity,
142
- });
143
- lineReader.on('line', line => {
144
- if (!token.isCancellationRequested) {
145
- accept(line);
146
- }
147
- });
148
- lineReader.on('close', () => resolve());
149
- });
150
- }
151
- getSearchArgs(options) {
152
- const args = ['--files', '--hidden', '--case-sensitive', '--no-require-git', '--no-config'];
153
- if (options.includePatterns) {
154
- for (const includePattern of options.includePatterns) {
155
- if (includePattern) {
156
- args.push('--glob', includePattern);
157
- }
158
- }
159
- }
160
- if (options.excludePatterns) {
161
- for (const excludePattern of options.excludePatterns) {
162
- if (excludePattern) {
163
- args.push('--glob', `!${excludePattern}`);
164
- }
165
- }
166
- }
167
- if (options.useGitIgnore) {
168
- // ripgrep follows `.gitignore` by default, but it doesn't exclude `.git`:
169
- args.push('--glob', '!.git');
170
- }
171
- else {
172
- args.push('--no-ignore');
173
- }
174
- return args;
175
- }
176
- };
177
- exports.FileSearchServiceImpl = FileSearchServiceImpl;
178
- exports.FileSearchServiceImpl = FileSearchServiceImpl = tslib_1.__decorate([
179
- (0, inversify_1.injectable)(),
180
- tslib_1.__param(0, (0, inversify_1.inject)(core_1.ILogger)),
181
- tslib_1.__param(1, (0, inversify_1.inject)(node_1.RawProcessFactory)),
182
- tslib_1.__metadata("design:paramtypes", [Object, Function])
183
- ], FileSearchServiceImpl);
184
- //# sourceMappingURL=file-search-service-impl.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"file-search-service-impl.js","sourceRoot":"","sources":["../../src/node/file-search-service-impl.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=file-search-service-impl.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"file-search-service-impl.spec.d.ts","sourceRoot":"","sources":["../../src/node/file-search-service-impl.spec.ts"],"names":[],"mappings":""}
@@ -1,196 +0,0 @@
1
- "use strict";
2
- // *****************************************************************************
3
- // Copyright (C) 2017 TypeFox and others.
4
- //
5
- // This program and the accompanying materials are made available under the
6
- // terms of the Eclipse Public License v. 2.0 which is available at
7
- // http://www.eclipse.org/legal/epl-2.0.
8
- //
9
- // This Source Code may also be made available under the following Secondary
10
- // Licenses when the conditions for such availability set forth in the Eclipse
11
- // Public License v. 2.0 are satisfied: GNU General Public License, version 2
12
- // with the GNU Classpath Exception which is available at
13
- // https://www.gnu.org/software/classpath/license.html.
14
- //
15
- // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
16
- // *****************************************************************************
17
- Object.defineProperty(exports, "__esModule", { value: true });
18
- const chai_1 = require("chai");
19
- const assert = require("assert");
20
- const path = require("path");
21
- const file_search_service_impl_1 = require("./file-search-service-impl");
22
- const node_1 = require("@theia/core/lib/node");
23
- const inversify_1 = require("@theia/core/shared/inversify");
24
- const core_1 = require("@theia/core");
25
- const logger_backend_module_1 = require("@theia/core/lib/node/logger-backend-module");
26
- const uri_1 = require("@theia/core/lib/common/uri");
27
- const node_2 = require("@theia/process/lib/node");
28
- const testContainer = new inversify_1.Container();
29
- (0, logger_backend_module_1.bindLogger)(testContainer.bind.bind(testContainer));
30
- testContainer.bind(node_2.RawProcessFactory).toConstantValue(() => {
31
- throw new Error('should not be used anymore');
32
- });
33
- testContainer.load(new inversify_1.ContainerModule(bind => {
34
- bind(file_search_service_impl_1.FileSearchServiceImpl).toSelf().inSingletonScope();
35
- }));
36
- describe('search-service', function () {
37
- this.timeout(10000);
38
- let service;
39
- beforeEach(() => {
40
- service = testContainer.get(file_search_service_impl_1.FileSearchServiceImpl);
41
- });
42
- it('should fuzzy search this spec file', async () => {
43
- const rootUri = node_1.FileUri.create(path.resolve(__dirname, '..')).toString();
44
- const matches = await service.find('spc', { rootUris: [rootUri] });
45
- const expectedFile = node_1.FileUri.create(__filename).path.base;
46
- const testFile = matches.find(e => e.endsWith(expectedFile));
47
- (0, chai_1.expect)(testFile).to.not.be.undefined;
48
- });
49
- it.skip('should respect nested .gitignore', async () => {
50
- const rootUri = node_1.FileUri.create(path.resolve(__dirname, '../../test-resources')).toString();
51
- const matches = await service.find('foo', { rootUris: [rootUri], fuzzyMatch: false });
52
- (0, chai_1.expect)(matches.find(match => match.endsWith('subdir1/sub-bar/foo.txt'))).to.be.undefined;
53
- (0, chai_1.expect)(matches.find(match => match.endsWith('subdir1/sub2/foo.txt'))).to.not.be.undefined;
54
- (0, chai_1.expect)(matches.find(match => match.endsWith('subdir1/foo.txt'))).to.not.be.undefined;
55
- });
56
- it('should cancel searches', async () => {
57
- const rootUri = node_1.FileUri.create(path.resolve(__dirname, '../../../../..')).toString();
58
- const cancelTokenSource = new core_1.CancellationTokenSource();
59
- cancelTokenSource.cancel();
60
- const matches = await service.find('foo', { rootUris: [rootUri], fuzzyMatch: false }, cancelTokenSource.token);
61
- (0, chai_1.expect)(matches).to.be.empty;
62
- });
63
- it('should perform file search across all folders in the workspace', async () => {
64
- const dirA = node_1.FileUri.create(path.resolve(__dirname, '../../test-resources/subdir1/sub-bar')).toString();
65
- const dirB = node_1.FileUri.create(path.resolve(__dirname, '../../test-resources/subdir1/sub2')).toString();
66
- const matches = await service.find('foo', { rootUris: [dirA, dirB] });
67
- (0, chai_1.expect)(matches).to.not.be.undefined;
68
- (0, chai_1.expect)(matches.length).to.eq(2);
69
- });
70
- describe('search with glob', () => {
71
- it('should support file searches with globs', async () => {
72
- const rootUri = node_1.FileUri.create(path.resolve(__dirname, '../../test-resources/subdir1/sub2')).toString();
73
- const matches = await service.find('', { rootUris: [rootUri], includePatterns: ['**/*oo.*'] });
74
- (0, chai_1.expect)(matches).to.not.be.undefined;
75
- (0, chai_1.expect)(matches.length).to.eq(1);
76
- });
77
- it('should NOT support file searches with globs without the prefixed or trailing star (*)', async () => {
78
- const rootUri = node_1.FileUri.create(path.resolve(__dirname, '../../test-resources/subdir1/sub2')).toString();
79
- const trailingMatches = await service.find('', { rootUris: [rootUri], includePatterns: ['*oo'] });
80
- (0, chai_1.expect)(trailingMatches).to.not.be.undefined;
81
- (0, chai_1.expect)(trailingMatches.length).to.eq(0);
82
- const prefixedMatches = await service.find('', { rootUris: [rootUri], includePatterns: ['oo*'] });
83
- (0, chai_1.expect)(prefixedMatches).to.not.be.undefined;
84
- (0, chai_1.expect)(prefixedMatches.length).to.eq(0);
85
- });
86
- });
87
- describe('search with ignored patterns', () => {
88
- it('should NOT ignore strings passed through the search options', async () => {
89
- const rootUri = node_1.FileUri.create(path.resolve(__dirname, '../../test-resources/subdir1/sub2')).toString();
90
- const matches = await service.find('', { rootUris: [rootUri], includePatterns: ['**/*oo.*'], excludePatterns: ['foo'] });
91
- (0, chai_1.expect)(matches).to.not.be.undefined;
92
- (0, chai_1.expect)(matches.length).to.eq(1);
93
- });
94
- const ignoreGlobsUri = node_1.FileUri.create(path.resolve(__dirname, '../../test-resources/subdir1/sub2')).toString();
95
- it('should ignore globs passed through the search options #1', () => assertIgnoreGlobs({
96
- rootUris: [ignoreGlobsUri],
97
- includePatterns: ['**/*oo.*'],
98
- excludePatterns: ['*fo*']
99
- }));
100
- it('should ignore globs passed through the search options #2', () => assertIgnoreGlobs({
101
- rootOptions: {
102
- [ignoreGlobsUri]: {
103
- includePatterns: ['**/*oo.*'],
104
- excludePatterns: ['*fo*']
105
- }
106
- }
107
- }));
108
- it('should ignore globs passed through the search options #3', () => assertIgnoreGlobs({
109
- rootOptions: {
110
- [ignoreGlobsUri]: {
111
- includePatterns: ['**/*oo.*']
112
- }
113
- },
114
- excludePatterns: ['*fo*']
115
- }));
116
- it('should ignore globs passed through the search options #4', () => assertIgnoreGlobs({
117
- rootOptions: {
118
- [ignoreGlobsUri]: {
119
- excludePatterns: ['*fo*']
120
- }
121
- },
122
- includePatterns: ['**/*oo.*']
123
- }));
124
- it('should ignore globs passed through the search options #5', () => assertIgnoreGlobs({
125
- rootOptions: {
126
- [ignoreGlobsUri]: {}
127
- },
128
- excludePatterns: ['*fo*'],
129
- includePatterns: ['**/*oo.*']
130
- }));
131
- async function assertIgnoreGlobs(options) {
132
- const matches = await service.find('', options);
133
- (0, chai_1.expect)(matches).to.not.be.undefined;
134
- (0, chai_1.expect)(matches.length).to.eq(0);
135
- }
136
- });
137
- describe('irrelevant absolute results', () => {
138
- const rootUri = node_1.FileUri.create(path.resolve(__dirname, '../../../..'));
139
- it('not fuzzy', async () => {
140
- const searchPattern = 'package'; // package.json should produce a result.
141
- const matches = await service.find(searchPattern, { rootUris: [rootUri.toString()], fuzzyMatch: false, useGitIgnore: true, limit: 200 });
142
- (0, chai_1.expect)(matches).not.empty;
143
- for (const match of matches) {
144
- const relativeUri = rootUri.relative(new uri_1.default(match));
145
- assert.notStrictEqual(relativeUri, undefined);
146
- const relativeMatch = relativeUri.toString();
147
- assert.notStrictEqual(relativeMatch.indexOf(searchPattern), -1, relativeMatch);
148
- }
149
- });
150
- it('fuzzy', async () => {
151
- const matches = await service.find('shell', { rootUris: [rootUri.toString()], fuzzyMatch: true, useGitIgnore: true, limit: 200 });
152
- (0, chai_1.expect)(matches).not.empty;
153
- for (const match of matches) {
154
- const relativeUri = rootUri.relative(new uri_1.default(match));
155
- assert.notStrictEqual(relativeUri, undefined);
156
- const relativeMatch = relativeUri.toString();
157
- let position = 0;
158
- for (const ch of 'shell') {
159
- position = relativeMatch.toLowerCase().indexOf(ch, position);
160
- assert.notStrictEqual(position, -1, `character "${ch}" not found in "${relativeMatch}"`);
161
- }
162
- }
163
- });
164
- it('should not look into .git', async () => {
165
- const matches = await service.find('master', { rootUris: [rootUri.toString()], fuzzyMatch: false, useGitIgnore: true, limit: 200 });
166
- // `**/.git/refs/remotes/*/master` files should not be picked up
167
- assert.deepStrictEqual([], matches);
168
- });
169
- });
170
- describe('search with whitespaces', () => {
171
- const rootUri = node_1.FileUri.create(path.resolve(__dirname, '../../test-resources')).toString();
172
- it('should support file searches with whitespaces', async () => {
173
- const matches = await service.find('foo sub', { rootUris: [rootUri], fuzzyMatch: true, useGitIgnore: true, limit: 200 });
174
- (0, chai_1.expect)(matches).to.be.length(2);
175
- (0, chai_1.expect)(matches[0].endsWith('subdir1/sub-bar/foo.txt'));
176
- (0, chai_1.expect)(matches[1].endsWith('subdir1/sub2/foo.txt'));
177
- });
178
- it('should support fuzzy file searches with whitespaces', async () => {
179
- const matchesExact = await service.find('foo sbd2', { rootUris: [rootUri], fuzzyMatch: false, useGitIgnore: true, limit: 200 });
180
- const matchesFuzzy = await service.find('foo sbd2', { rootUris: [rootUri], fuzzyMatch: true, useGitIgnore: true, limit: 200 });
181
- (0, chai_1.expect)(matchesExact).to.be.length(0);
182
- (0, chai_1.expect)(matchesFuzzy).to.be.length(1);
183
- (0, chai_1.expect)(matchesFuzzy[0].endsWith('subdir1/sub2/foo.txt'));
184
- });
185
- it('should support file searches with whitespaces regardless of order', async () => {
186
- const matchesA = await service.find('foo sub', { rootUris: [rootUri], fuzzyMatch: true, useGitIgnore: true, limit: 200 });
187
- const matchesB = await service.find('sub foo', { rootUris: [rootUri], fuzzyMatch: true, useGitIgnore: true, limit: 200 });
188
- (0, chai_1.expect)(matchesA).to.not.be.empty;
189
- (0, chai_1.expect)(matchesB).to.not.be.empty;
190
- (0, chai_1.expect)(matchesA.length).to.equal(matchesB.length);
191
- // Due to ripgrep parallelism we cannot deepEqual the matches since order is not guaranteed.
192
- (0, chai_1.expect)(matchesA).to.have.members(matchesB);
193
- });
194
- });
195
- });
196
- //# sourceMappingURL=file-search-service-impl.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"file-search-service-impl.spec.js","sourceRoot":"","sources":["../../src/node/file-search-service-impl.spec.ts"],"names":[],"mappings":"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"}