提交 c7f17d53 编写于 作者: R Rob Lourens

Add 'contributedByExtension' field to IConfigurationNode and ISettingsGroup.

We want to keep track of which setting groups come from extensions, so they can be displayed separately in the settings editor
上级 7adb1481
......@@ -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';
......@@ -480,10 +481,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: ['*']
}
]
};
......@@ -186,8 +186,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.
先完成此消息的编辑!
想要评论请 注册