當前位置: 首頁>>代碼示例>>TypeScript>>正文


TypeScript FileWalker.walk方法代碼示例

本文整理匯總了TypeScript中vs/workbench/services/search/node/fileSearch.FileWalker.walk方法的典型用法代碼示例。如果您正苦於以下問題:TypeScript FileWalker.walk方法的具體用法?TypeScript FileWalker.walk怎麽用?TypeScript FileWalker.walk使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在vs/workbench/services/search/node/fileSearch.FileWalker的用法示例。


在下文中一共展示了FileWalker.walk方法的1個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的TypeScript代碼示例。

示例1: search

	public search(onResult: (match: ISerializedFileMatch) => void, onProgress: (progress: IProgress) => void, done: (error: Error, isLimitHit: boolean) => void): void {
		let resultCounter = 0;

		let unwind = (processed: number) => {
			this.worked += processed;

			// Emit progress() unless we got canceled or hit the limit
			if (processed && !this.isDone && !this.isCanceled && !this.limitReached) {
				onProgress({ total: this.total, worked: this.worked });
			}

			// Emit done()
			if (this.worked === this.total && this.walkerIsDone && !this.isDone) {
				this.isDone = true;
				done(this.walkerError, this.limitReached);
			}
		};

		// Walk over the file system
		this.walker.walk(this.rootFolders, this.extraFiles, (result) => {
			this.total++;

			// If the result is empty or we have reached the limit or we are canceled, ignore it
			if (this.limitReached || this.isCanceled) {
				return unwind(1);
			}

			// Indicate progress to the outside
			onProgress({ total: this.total, worked: this.worked });

			let fileMatch: FileMatch = null;

			let doneCallback = (error?: Error) => {
				if (!error && !this.isCanceled && fileMatch && !fileMatch.isEmpty()) {
					onResult(fileMatch.serialize());
				}

				return unwind(1);
			};

			let perLineCallback = (line: string, lineNumber: number) => {
				if (this.limitReached || this.isCanceled) {
					return; // return early if canceled or limit reached
				}

				let lineMatch: LineMatch = null;
				let match = this.contentPattern.exec(line);

				// Record all matches into file result
				while (match !== null && match[0].length > 0 && !this.limitReached && !this.isCanceled) {
					resultCounter++;
					if (this.maxResults && resultCounter >= this.maxResults) {
						this.limitReached = true;
					}

					if (fileMatch === null) {
						fileMatch = new FileMatch(result.path);
					}

					if (lineMatch === null) {
						lineMatch = new LineMatch(line, lineNumber);
						fileMatch.addMatch(lineMatch);
					}

					lineMatch.addMatch(match.index, match[0].length);

					match = this.contentPattern.exec(line);
				}
			};

			// Read lines buffered to support large files
			this.readlinesAsync(result.path, perLineCallback, { bufferLength: 8096, encoding: this.fileEncoding }, doneCallback);
		}, (error, isLimitHit) => {
			this.walkerIsDone = true;
			this.walkerError = error;
			unwind(0 /* walker is done, indicate this back to our handler to be able to unwind */);
		});
	}
開發者ID:578723746,項目名稱:vscode,代碼行數:78,代碼來源:textSearch.ts


注:本文中的vs/workbench/services/search/node/fileSearch.FileWalker.walk方法示例由純淨天空整理自Github/MSDocs等開源代碼及文檔管理平台,相關代碼片段篩選自各路編程大神貢獻的開源項目,源碼版權歸原作者所有,傳播和使用請參考對應項目的License;未經允許,請勿轉載。