This commit is contained in:
Jackson Kearl
2021-05-06 15:01:28 -07:00
parent f25ffb76ed
commit 7085e50f92
2 changed files with 31 additions and 12 deletions
@@ -49,7 +49,7 @@ import type { SearchConfiguration, SearchEditorInput } from 'vs/workbench/contri
import { serializeSearchResultForEditor } from 'vs/workbench/contrib/searchEditor/browser/searchEditorSerialization';
import { IEditorGroupsService } from 'vs/workbench/services/editor/common/editorGroupsService';
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
import { IPatternInfo, ISearchConfigurationProperties, ITextQuery, SearchSortOrder, TextSearchCompleteMessageType } from 'vs/workbench/services/search/common/search';
import { IPatternInfo, ISearchComplete, ISearchConfigurationProperties, ITextQuery, SearchSortOrder, TextSearchCompleteMessageType } from 'vs/workbench/services/search/common/search';
import { searchDetailsIcon } from 'vs/workbench/contrib/search/browser/searchIcons';
import { IFileService } from 'vs/platform/files/common/files';
import { parseLinkedText } from 'vs/base/common/linkedText';
@@ -461,6 +461,7 @@ export class SearchEditor extends BaseTextEditor {
this.searchModel.cancelSearch(true);
const startInput = this.getInput();
if (!startInput) { return; }
this.searchHistoryDelayer.trigger(() => {
this.queryEditorWidget.searchInput.onSearchSubmit();
@@ -510,20 +511,31 @@ export class SearchEditor extends BaseTextEditor {
this.searchOperation.start(500);
this.ongoingOperations++;
const exit = await this.searchModel.search(query).finally(() => {
const { configurationModel } = await startInput.getModels();
configurationModel.updateConfig(config);
startInput.ongoingSearchOperation = this.searchModel.search(query).finally(() => {
this.ongoingOperations--;
if (this.ongoingOperations === 0) {
this.searchOperation.stop();
}
});
const searchOperation = await startInput.ongoingSearchOperation;
this.onSearchComplete(searchOperation, config, startInput);
}
private async onSearchComplete(searchOperation: ISearchComplete, startConfig: SearchConfiguration, startInput: SearchEditorInput) {
const input = this.getInput();
if (!input ||
input !== startInput ||
JSON.stringify(config) !== JSON.stringify(this.readConfigFromWidget())) {
JSON.stringify(startConfig) !== JSON.stringify(this.readConfigFromWidget())) {
return;
}
input.ongoingSearchOperation = undefined;
const sortOrder = this.searchConfig.sortOrder;
if (sortOrder === SearchSortOrder.Modified) {
await this.retrieveFileStats(this.searchModel.searchResult);
@@ -532,18 +544,18 @@ export class SearchEditor extends BaseTextEditor {
const controller = ReferencesController.get(this.searchResultEditor);
controller.closeWidget(false);
const labelFormatter = (uri: URI): string => this.labelService.getUriLabel(uri, { relative: true });
const results = serializeSearchResultForEditor(this.searchModel.searchResult, config.filesToInclude, config.filesToExclude, config.contextLines, labelFormatter, sortOrder, exit?.limitHit);
const { resultsModel, configurationModel } = await input.getModels();
const results = serializeSearchResultForEditor(this.searchModel.searchResult, startConfig.filesToInclude, startConfig.filesToExclude, startConfig.contextLines, labelFormatter, sortOrder, searchOperation?.limitHit);
const { resultsModel } = await input.getModels();
this.modelService.updateModel(resultsModel, results.text);
let warningMessage = '';
if (exit && exit.limitHit) {
if (searchOperation && searchOperation.limitHit) {
warningMessage += localize('searchMaxResultsWarning', "The result set only contains a subset of all matches. Be more specific in your search to narrow down the results.");
}
if (exit && exit.messages) {
for (const message of exit.messages) {
if (searchOperation && searchOperation.messages) {
for (const message of searchOperation.messages) {
if (message.type === TextSearchCompleteMessageType.Information) {
this.addMessage(message.text);
}
@@ -560,8 +572,6 @@ export class SearchEditor extends BaseTextEditor {
});
}
configurationModel.updateConfig(config);
input.setDirty(!input.isUntitled());
input.setMatchRanges(results.matchRanges);
}
@@ -650,7 +660,7 @@ export class SearchEditor extends BaseTextEditor {
this.searchResultEditor.setModel(resultsModel);
this.pauseSearching = true;
this.toggleRunAgainMessage(resultsModel.getLineCount() === 1 && resultsModel.getValue() === '' && configurationModel.config.query !== '');
this.toggleRunAgainMessage(!newInput.ongoingSearchOperation && resultsModel.getLineCount() === 1 && resultsModel.getValue() === '' && configurationModel.config.query !== '');
this.setSearchConfig(configurationModel.config);
@@ -669,6 +679,13 @@ export class SearchEditor extends BaseTextEditor {
}
this.pauseSearching = false;
if (newInput.ongoingSearchOperation) {
const existingConfig = this.readConfigFromWidget();
newInput.ongoingSearchOperation.then(complete => {
this.onSearchComplete(complete, existingConfig, newInput);
});
}
}
private toggleIncludesExcludes(_shouldShow?: boolean): void {
@@ -27,7 +27,7 @@ import { IWorkingCopyService } from 'vs/workbench/services/workingCopy/common/wo
import { IWorkingCopy, IWorkingCopyBackup, WorkingCopyCapabilities } from 'vs/workbench/services/workingCopy/common/workingCopy';
import { CancellationToken } from 'vs/base/common/cancellation';
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
import { ISearchConfigurationProperties } from 'vs/workbench/services/search/common/search';
import { ISearchComplete, ISearchConfigurationProperties } from 'vs/workbench/services/search/common/search';
import { bufferToReadable, VSBuffer } from 'vs/base/common/buffer';
export type SearchConfiguration = {
@@ -65,6 +65,8 @@ export class SearchEditorInput extends EditorInput {
return this.backingUri || this.modelUri;
}
public ongoingSearchOperation: Promise<ISearchComplete> | undefined;
public model: SearchEditorModel;
private _cachedResultsModel: ITextModel | undefined;
private _cachedConfigurationModel: SearchConfigurationModel | undefined;