Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 17 additions & 14 deletions src/vs/workbench/contrib/preferences/browser/preferencesSearch.ts
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ export class LocalSearchProvider implements ISearchProvider {
this._filter = cleanFilter(this._filter);
}

searchModel(preferencesModel: ISettingsEditorModel, token?: CancellationToken): Promise<ISearchResult | null> {
searchModel(preferencesModel: ISettingsEditorModel, token: CancellationToken): Promise<ISearchResult | null> {
if (!this._filter) {
return Promise.resolve(null);
}
Expand All @@ -99,7 +99,6 @@ export class LocalSearchProvider implements ISearchProvider {
this._filter,
setting,
true,
(filter, setting) => preferencesModel.findValueMatches(filter, setting),
this.configurationService
);
if (matchType === SettingMatchType.None || matches.length === 0) {
Expand Down Expand Up @@ -150,7 +149,6 @@ export class SettingMatches {
searchString: string,
setting: ISetting,
private searchDescription: boolean,
valuesMatcher: (filter: string, setting: ISetting) => IRange[],
private readonly configurationService: IConfigurationService
) {
this.matches = distinct(this._findMatchesInSetting(searchString, setting), (match) => `${match.startLineNumber}_${match.startColumn}_${match.endLineNumber}_${match.endColumn}_`);
Expand Down Expand Up @@ -419,7 +417,7 @@ class AiRelatedInformationSearchProvider implements IRemoteSearchProvider {
this._filter = cleanFilter(filter);
}

async searchModel(preferencesModel: ISettingsEditorModel, token?: CancellationToken | undefined): Promise<ISearchResult | null> {
async searchModel(preferencesModel: ISettingsEditorModel, token: CancellationToken): Promise<ISearchResult | null> {
if (
!this._filter ||
!this.aiRelatedInformationService.isEnabled()
Expand All @@ -434,14 +432,14 @@ class AiRelatedInformationSearchProvider implements IRemoteSearchProvider {
};
}

private async getAiRelatedInformationItems(token?: CancellationToken | undefined) {
private async getAiRelatedInformationItems(token: CancellationToken) {
const settingsRecord = this._keysProvider.getSettingsRecord();

const filterMatches: ISettingMatch[] = [];
const relatedInformation = await this.aiRelatedInformationService.getRelatedInformation(
this._filter,
[RelatedInformationType.SettingInformation],
token ?? CancellationToken.None
token
) as SettingInformationResult[];
relatedInformation.sort((a, b) => b.weight - a.weight);

Expand Down Expand Up @@ -497,7 +495,7 @@ class TfIdfSearchProvider implements IRemoteSearchProvider {
return result;
}

async searchModel(preferencesModel: ISettingsEditorModel, token?: CancellationToken | undefined): Promise<ISearchResult | null> {
async searchModel(preferencesModel: ISettingsEditorModel, token: CancellationToken): Promise<ISearchResult | null> {
if (!this._filter) {
return null;
}
Expand Down Expand Up @@ -528,11 +526,11 @@ class TfIdfSearchProvider implements IRemoteSearchProvider {
};
}

private async getTfIdfItems(token?: CancellationToken | undefined): Promise<ISettingMatch[]> {
private async getTfIdfItems(token: CancellationToken): Promise<ISettingMatch[]> {
const filterMatches: ISettingMatch[] = [];
const tfIdfCalculator = new TfIdfCalculator();
tfIdfCalculator.updateDocuments(this._documents);
const tfIdfRankings = tfIdfCalculator.calculateScores(this._filter, token ?? CancellationToken.None);
const tfIdfRankings = tfIdfCalculator.calculateScores(this._filter, token);
tfIdfRankings.sort((a, b) => b.score - a.score);
const maxScore = tfIdfRankings[0].score;

Expand Down Expand Up @@ -585,19 +583,24 @@ class RemoteSearchProvider implements IRemoteSearchProvider {
this.tfIdfSearchProvider!.setFilter(filter);
}

searchModel(preferencesModel: ISettingsEditorModel, token?: CancellationToken): Promise<ISearchResult | null> {
async searchModel(preferencesModel: ISettingsEditorModel, token: CancellationToken): Promise<ISearchResult | null> {
if (!this.filter) {
return Promise.resolve(null);
return null;
}

if (!this.adaSearchProvider) {
return this.tfIdfSearchProvider!.searchModel(preferencesModel, token);
}

// Use TF-IDF search as a fallback, ref https://github.com/microsoft/vscode/issues/224946
return this.adaSearchProvider.searchModel(preferencesModel, token).then((results) => {
return results?.filterMatches.length ? results : this.tfIdfSearchProvider!.searchModel(preferencesModel, token);
});
const results = await this.adaSearchProvider.searchModel(preferencesModel, token);
if (results?.filterMatches.length) {
return results;
}
if (!token.isCancellationRequested) {
return this.tfIdfSearchProvider!.searchModel(preferencesModel, token);
}
return null;
}
}

Expand Down
52 changes: 20 additions & 32 deletions src/vs/workbench/contrib/preferences/browser/settingsEditor2.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1720,19 +1720,22 @@ export class SettingsEditor2 extends EditorPane {
this.renderTree(undefined, true);
}

private localFilterPreferences(query: string, token?: CancellationToken): Promise<ISearchResult | null> {
private localFilterPreferences(query: string, token: CancellationToken): Promise<ISearchResult | null> {
const localSearchProvider = this.preferencesSearchService.getLocalSearchProvider(query);
return this.filterOrSearchPreferences(query, SearchResultIdx.Local, localSearchProvider, token);
return this.searchWithProvider(SearchResultIdx.Local, localSearchProvider, token);
}

private remoteSearchPreferences(query: string, token?: CancellationToken): Promise<ISearchResult | null> {
private remoteSearchPreferences(query: string, token: CancellationToken): Promise<ISearchResult | null> {
const remoteSearchProvider = this.preferencesSearchService.getRemoteSearchProvider(query);
return this.filterOrSearchPreferences(query, SearchResultIdx.Remote, remoteSearchProvider, token);
if (!remoteSearchProvider) {
return Promise.resolve(null);
}
return this.searchWithProvider(SearchResultIdx.Remote, remoteSearchProvider, token);
}

private async filterOrSearchPreferences(query: string, type: SearchResultIdx, searchProvider?: ISearchProvider, token?: CancellationToken): Promise<ISearchResult | null> {
const result = await this._filterOrSearchPreferencesModel(query, this.defaultSettingsEditorModel, searchProvider, token);
if (token?.isCancellationRequested) {
private async searchWithProvider(type: SearchResultIdx, searchProvider: ISearchProvider, token: CancellationToken): Promise<ISearchResult | null> {
const result = await this._searchPreferencesModel(this.defaultSettingsEditorModel, searchProvider, token);
if (token.isCancellationRequested) {
// Handle cancellation like this because cancellation is lost inside the search provider due to async/await
return null;
}
Expand Down Expand Up @@ -1785,31 +1788,16 @@ export class SettingsEditor2 extends EditorPane {
}
}

private _filterOrSearchPreferencesModel(filter: string, model: ISettingsEditorModel, provider?: ISearchProvider, token?: CancellationToken): Promise<ISearchResult | null> {
const searchP = provider ? provider.searchModel(model, token) : Promise.resolve(null);
return searchP
.then<ISearchResult, ISearchResult | null>(undefined, err => {
if (isCancellationError(err)) {
return Promise.reject(err);
} else {
// type SettingsSearchErrorEvent = {
// 'message': string;
// };
// type SettingsSearchErrorClassification = {
// owner: 'rzhao271';
// comment: 'Helps understand when settings search errors out';
// 'message': { 'classification': 'CallstackOrException'; 'purpose': 'FeatureInsight'; 'owner': 'rzhao271'; 'comment': 'The error message of the search error.' };
// };

// const message = getErrorMessage(err).trim();
// if (message && message !== 'Error') {
// // "Error" = any generic network error
// this.telemetryService.publicLogError2<SettingsSearchErrorEvent, SettingsSearchErrorClassification>('settingsEditor.searchError', { message });
// this.logService.info('Setting search error: ' + message);
// }
return null;
}
});
private async _searchPreferencesModel(model: ISettingsEditorModel, provider: ISearchProvider, token: CancellationToken): Promise<ISearchResult | null> {
try {
return await provider.searchModel(model, token);
} catch (err) {
if (isCancellationError(err)) {
return Promise.reject(err);
} else {
return null;
}
}
}

private layoutSplitView(dimension: DOM.Dimension): void {
Expand Down
2 changes: 1 addition & 1 deletion src/vs/workbench/contrib/preferences/common/preferences.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ export interface IPreferencesSearchService {
}

export interface ISearchProvider {
searchModel(preferencesModel: ISettingsEditorModel, token?: CancellationToken): Promise<ISearchResult | null>;
searchModel(preferencesModel: ISettingsEditorModel, token: CancellationToken): Promise<ISearchResult | null>;
}

export interface IRemoteSearchProvider extends ISearchProvider {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -201,7 +201,6 @@ export interface ISettingsEditorModel extends IPreferencesEditorModel<ISetting>
readonly onDidChangeGroups: Event<void>;
settingsGroups: ISettingsGroup[];
filterSettings(filter: string, groupFilter: IGroupFilter, settingMatcher: ISettingMatcher): ISettingMatch[];
findValueMatches(filter: string, setting: ISetting): IRange[];
updateResultGroup(id: string, resultGroup: ISearchResultGroup | undefined): IFilterResult | undefined;
}

Expand Down
15 changes: 0 additions & 15 deletions src/vs/workbench/services/preferences/common/preferencesModels.ts
Original file line number Diff line number Diff line change
Expand Up @@ -116,8 +116,6 @@ abstract class AbstractSettingsModel extends EditorModel {

abstract settingsGroups: ISettingsGroup[];

abstract findValueMatches(filter: string, setting: ISetting): IRange[];

protected abstract update(): IFilterResult | undefined;
}

Expand Down Expand Up @@ -158,10 +156,6 @@ export class SettingsEditorModel extends AbstractSettingsModel implements ISetti
return this.settingsModel.getValue();
}

findValueMatches(filter: string, setting: ISetting): IRange[] {
return this.settingsModel.findMatches(filter, setting.valueRange, false, false, null, false).map(match => match.range);
}

protected isSettingsProperty(property: string, previousParents: string[]): boolean {
return previousParents.length === 0; // Settings is root
}
Expand Down Expand Up @@ -255,11 +249,6 @@ export class Settings2EditorModel extends AbstractSettingsModel implements ISett
this.additionalGroups = groups;
}

findValueMatches(filter: string, setting: ISetting): IRange[] {
// TODO @roblou
return [];
}

protected update(): IFilterResult {
throw new Error('Not supported');
}
Expand Down Expand Up @@ -951,10 +940,6 @@ export class DefaultSettingsEditorModel extends AbstractSettingsModel implements
};
}

findValueMatches(filter: string, setting: ISetting): IRange[] {
return [];
}

override getPreference(key: string): ISetting | undefined {
for (const group of this.settingsGroups) {
for (const section of group.sections) {
Expand Down
Loading