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

Merge pull request #52649 from Microsoft/roblou/extSettings

Track which settings were contributed by extensions
......@@ -84,6 +84,7 @@ export interface IConfigurationNode {
allOf?: IConfigurationNode[];
overridable?: boolean;
scope?: ConfigurationScope;
contributedByExtension?: boolean;
}
export interface IDefaultConfigurationExtension {
......
......@@ -6,6 +6,7 @@
import * as DOM from 'vs/base/browser/dom';
import { Button } from 'vs/base/browser/ui/button/button';
import * as arrays from 'vs/base/common/arrays';
import * as collections from 'vs/base/common/collections';
import { Delayer, ThrottledDelayer } from 'vs/base/common/async';
import { CancellationToken } from 'vs/base/common/cancellation';
import { Color } from 'vs/base/common/color';
......@@ -30,7 +31,7 @@ import { BaseEditor } from 'vs/workbench/browser/parts/editor/baseEditor';
import { EditorOptions, IEditor } from 'vs/workbench/common/editor';
import { SearchWidget, SettingsTarget, SettingsTargetsWidget } from 'vs/workbench/parts/preferences/browser/preferencesWidgets';
import { tocData, commonlyUsedData } from 'vs/workbench/parts/preferences/browser/settingsLayout';
import { ISettingsEditorViewState, SearchResultIdx, SearchResultModel, SettingsAccessibilityProvider, SettingsDataSource, SettingsRenderer, SettingsTreeController, SettingsTreeElement, SettingsTreeFilter, SettingsTreeModel, SettingsTreeSettingElement, SettingsTreeGroupElement, resolveSettingsTree, NonExpandableTree } from 'vs/workbench/parts/preferences/browser/settingsTree';
import { ISettingsEditorViewState, SearchResultIdx, SearchResultModel, SettingsAccessibilityProvider, SettingsDataSource, SettingsRenderer, SettingsTreeController, SettingsTreeElement, SettingsTreeFilter, SettingsTreeModel, SettingsTreeSettingElement, SettingsTreeGroupElement, resolveSettingsTree, NonExpandableTree, resolveExtensionsSettings } from 'vs/workbench/parts/preferences/browser/settingsTree';
import { TOCDataSource, TOCRenderer, TOCTreeModel } from 'vs/workbench/parts/preferences/browser/tocTree';
import { CONTEXT_SETTINGS_EDITOR, CONTEXT_SETTINGS_SEARCH_FOCUS, IPreferencesSearchService, ISearchProvider } from 'vs/workbench/parts/preferences/common/preferences';
import { IPreferencesService, ISearchResult, ISettingsEditorModel } from 'vs/workbench/services/preferences/common/preferences';
......@@ -486,10 +487,13 @@ export class SettingsEditor2 extends BaseEditor {
private onConfigUpdate(): TPromise<void> {
const groups = this.defaultSettingsEditorModel.settingsGroups.slice(1); // Without commonlyUsed
const resolvedSettingsRoot = resolveSettingsTree(tocData, groups);
const commonlyUsed = resolveSettingsTree(commonlyUsedData, groups);
const dividedGroups = collections.groupBy(groups, g => g.contributedByExtension ? 'extension' : 'core');
const resolvedSettingsRoot = resolveSettingsTree(tocData, dividedGroups.core);
const commonlyUsed = resolveSettingsTree(commonlyUsedData, dividedGroups.core);
resolvedSettingsRoot.children.unshift(commonlyUsed);
resolvedSettingsRoot.children.push(resolveExtensionsSettings(dividedGroups.extension || []));
if (this.settingsTreeModel) {
this.settingsTreeModel.update(resolvedSettingsRoot);
} else {
......
......@@ -184,11 +184,6 @@ export const tocData: ITOCEntry = {
settings: ['telemetry.*']
}
]
},
{
id: 'extensions',
label: localize('extensions', "Extensions"),
settings: ['*']
}
]
};
......@@ -200,8 +200,31 @@ function inspectSetting(key: string, target: SettingsTarget, configurationServic
return { isConfigured, inspected, targetSelector };
}
export function resolveSettingsTree(tocData: ITOCEntry, settingsGroups: ISettingsGroup[]): ITOCEntry {
return _resolveSettingsTree(tocData, getFlatSettings(settingsGroups));
export function resolveSettingsTree(tocData: ITOCEntry, coreSettingsGroups: ISettingsGroup[]): ITOCEntry {
return _resolveSettingsTree(tocData, getFlatSettings(coreSettingsGroups));
}
export function resolveExtensionsSettings(groups: ISettingsGroup[]): ITOCEntry {
const settingsGroupToEntry = (group: ISettingsGroup) => {
const flatSettings = arrays.flatten(
group.sections.map(section => section.settings));
return {
id: group.id,
label: group.title,
settings: flatSettings
};
};
const extGroups = groups
.sort((a, b) => a.title.localeCompare(b.title))
.map(g => settingsGroupToEntry(g));
return {
id: 'extensions',
label: localize('extensions', "Extensions"),
children: extGroups
};
}
function _resolveSettingsTree(tocData: ITOCEntry, allSettings: Set<ISetting>): ITOCEntry {
......
......@@ -106,7 +106,8 @@ configurationExtPoint.setHandler(extensions => {
validateProperties(configuration, extension);
configuration.id = extension.description.uuid || extension.description.id;
configuration.id = node.id || extension.description.uuid || extension.description.id;
configuration.contributedByExtension = true;
configuration.title = configuration.title || extension.description.displayName || extension.description.id;
configurations.push(configuration);
}
......
......@@ -25,6 +25,7 @@ export interface ISettingsGroup {
title: string;
titleRange: IRange;
sections: ISettingsSection[];
contributedByExtension: boolean;
}
export interface ISettingsSection {
......
......@@ -189,7 +189,8 @@ export class SettingsEditorModel extends AbstractSettingsModel implements ISetti
settings: filteredSettings
}],
title: modelGroup.title,
titleRange: modelGroup.titleRange
titleRange: modelGroup.titleRange,
contributedByExtension: !!modelGroup.contributedByExtension
};
}
......@@ -503,7 +504,7 @@ export class DefaultSettings extends Disposable {
if (!settingsGroup) {
settingsGroup = result.filter(g => g.title === title)[0];
if (!settingsGroup) {
settingsGroup = { sections: [{ settings: [] }], id: config.id, title: title, titleRange: null, range: null };
settingsGroup = { sections: [{ settings: [] }], id: config.id, title: title, titleRange: null, range: null, contributedByExtension: !!config.contributedByExtension };
result.push(settingsGroup);
}
} else {
......@@ -512,7 +513,7 @@ export class DefaultSettings extends Disposable {
}
if (config.properties) {
if (!settingsGroup) {
settingsGroup = { sections: [{ settings: [] }], id: config.id, title: config.id, titleRange: null, range: null };
settingsGroup = { sections: [{ settings: [] }], id: config.id, title: config.id, titleRange: null, range: null, contributedByExtension: !!config.contributedByExtension };
result.push(settingsGroup);
}
const configurationSettings: ISetting[] = [...settingsGroup.sections[settingsGroup.sections.length - 1].settings, ...this.parseSettings(config.properties)];
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册