mirror of
https://github.com/microsoft/vscode.git
synced 2026-05-21 23:59:34 +01:00
@@ -25,6 +25,9 @@ export interface IConfigurationProperty {
|
||||
}
|
||||
|
||||
export interface IConfiguration {
|
||||
id?: string,
|
||||
order?: number,
|
||||
title?: string,
|
||||
properties: { [key: string]: IConfigurationProperty; };
|
||||
}
|
||||
|
||||
|
||||
@@ -288,6 +288,9 @@
|
||||
padding-right: 24px;
|
||||
overflow: visible;
|
||||
}
|
||||
.settings-editor > .settings-body .settings-tree-container .monaco-list-row .monaco-tl-contents.group-title {
|
||||
max-width: min(100%, 1000px); /* Cut off title if too long for window */
|
||||
}
|
||||
|
||||
.settings-editor > .settings-body > .settings-tree-container .settings-group-title-label,
|
||||
.settings-editor > .settings-body > .settings-tree-container .setting-item-contents {
|
||||
@@ -559,15 +562,17 @@
|
||||
padding-left: 15px;
|
||||
width: 100%;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.settings-editor > .settings-body > .settings-tree-container .settings-group-level-1 {
|
||||
font-size: 24px;
|
||||
.settings-editor > .settings-body > .settings-tree-container .settings-group-title-label.settings-group-level-1 {
|
||||
font-size: 26px;
|
||||
}
|
||||
|
||||
.settings-editor > .settings-body > .settings-tree-container .settings-group-level-2 {
|
||||
padding-top: 32px;
|
||||
font-size: 20px;
|
||||
.settings-editor > .settings-body > .settings-tree-container .settings-group-title-label.settings-group-level-2 {
|
||||
font-size: 22px;
|
||||
}
|
||||
.settings-editor > .settings-body > .settings-tree-container .settings-group-title-label.settings-group-level-3 {
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
.settings-editor.search-mode > .settings-body .settings-toc-container .monaco-list-row .settings-toc-count {
|
||||
|
||||
@@ -54,6 +54,7 @@ import { preferencesClearInputIcon } from 'vs/workbench/contrib/preferences/brow
|
||||
import { IWorkspaceTrustManagementService } from 'vs/platform/workspace/common/workspaceTrust';
|
||||
import { IWorkbenchConfigurationService } from 'vs/workbench/services/configuration/common/configuration';
|
||||
import { ITextResourceConfigurationService } from 'vs/editor/common/services/textResourceConfigurationService';
|
||||
import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions';
|
||||
|
||||
export const enum SettingsFocusContext {
|
||||
Search,
|
||||
@@ -199,7 +200,8 @@ export class SettingsEditor2 extends EditorPane {
|
||||
@IEditorGroupsService protected editorGroupService: IEditorGroupsService,
|
||||
@IUserDataSyncWorkbenchService private readonly userDataSyncWorkbenchService: IUserDataSyncWorkbenchService,
|
||||
@IUserDataAutoSyncEnablementService private readonly userDataAutoSyncEnablementService: IUserDataAutoSyncEnablementService,
|
||||
@IWorkspaceTrustManagementService private readonly workspaceTrustManagementService: IWorkspaceTrustManagementService
|
||||
@IWorkspaceTrustManagementService private readonly workspaceTrustManagementService: IWorkspaceTrustManagementService,
|
||||
@IExtensionService private readonly extensionService: IExtensionService
|
||||
) {
|
||||
super(SettingsEditor2.ID, telemetryService, themeService, storageService);
|
||||
this.delayedFilterLogging = new Delayer<void>(1000);
|
||||
@@ -307,7 +309,7 @@ export class SettingsEditor2 extends EditorPane {
|
||||
this.modelDisposables.clear();
|
||||
this.modelDisposables.add(model.onDidChangeGroups(() => {
|
||||
this.updatedConfigSchemaDelayer.trigger(() => {
|
||||
this.onConfigUpdate(undefined, undefined, true);
|
||||
this.onConfigUpdate(undefined, false, true);
|
||||
});
|
||||
}));
|
||||
this.defaultSettingsEditorModel = model;
|
||||
@@ -1025,7 +1027,7 @@ export class SettingsEditor2 extends EditorPane {
|
||||
const commonlyUsed = resolveSettingsTree(commonlyUsedData, dividedGroups.core, this.logService);
|
||||
resolvedSettingsRoot.children!.unshift(commonlyUsed.tree);
|
||||
|
||||
resolvedSettingsRoot.children!.push(resolveExtensionsSettings(dividedGroups.extension || []));
|
||||
resolvedSettingsRoot.children!.push(await resolveExtensionsSettings(this.extensionService, dividedGroups.extension || []));
|
||||
|
||||
if (!this.workspaceTrustManagementService.isWorkspaceTrusted() && (this.viewState.settingsTarget instanceof URI || this.viewState.settingsTarget === ConfigurationTarget.WORKSPACE)) {
|
||||
const configuredUntrustedWorkspaceSettings = resolveConfiguredUntrustedSettings(groups, this.viewState.settingsTarget, this.configurationService);
|
||||
|
||||
@@ -7,6 +7,7 @@ import { localize } from 'vs/nls';
|
||||
export interface ITOCEntry<T> {
|
||||
id: string;
|
||||
label: string;
|
||||
order?: number;
|
||||
children?: ITOCEntry<T>[];
|
||||
settings?: Array<T>;
|
||||
}
|
||||
|
||||
@@ -60,6 +60,7 @@ import { settingsMoreActionIcon } from 'vs/workbench/contrib/preferences/browser
|
||||
import { IWorkbenchConfigurationService } from 'vs/workbench/services/configuration/common/configuration';
|
||||
import { SettingsTarget } from 'vs/workbench/contrib/preferences/browser/preferencesWidgets';
|
||||
import { MarkdownRenderer } from 'vs/editor/browser/core/markdownRenderer';
|
||||
import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions';
|
||||
|
||||
const $ = DOM.$;
|
||||
|
||||
@@ -358,27 +359,69 @@ export function resolveConfiguredUntrustedSettings(groups: ISettingsGroup[], tar
|
||||
return [...allSettings].filter(setting => setting.restricted && inspectSetting(setting.key, target, configurationService).isConfigured);
|
||||
}
|
||||
|
||||
export function resolveExtensionsSettings(groups: ISettingsGroup[]): ITOCEntry<ISetting> {
|
||||
const settingsGroupToEntry = (group: ISettingsGroup) => {
|
||||
export async function resolveExtensionsSettings(extensionService: IExtensionService, groups: ISettingsGroup[]): Promise<ITOCEntry<ISetting>> {
|
||||
const extGroupTree = new Map<string, ITOCEntry<ISetting>>();
|
||||
const addEntryToTree = (extensionId: string, extensionName: string, childEntry: ITOCEntry<ISetting>) => {
|
||||
if (!extGroupTree.has(extensionId)) {
|
||||
const rootEntry = {
|
||||
id: extensionId,
|
||||
label: extensionName,
|
||||
children: []
|
||||
};
|
||||
extGroupTree.set(extensionId, rootEntry);
|
||||
}
|
||||
extGroupTree.get(extensionId)!.children!.push(childEntry);
|
||||
};
|
||||
const processGroupEntry = async (group: ISettingsGroup) => {
|
||||
const flatSettings = arrays.flatten(
|
||||
group.sections.map(section => section.settings));
|
||||
|
||||
return {
|
||||
const extensionId = group.extensionInfo!.id;
|
||||
const extension = await extensionService.getExtension(extensionId);
|
||||
const extensionName = extension!.displayName ?? extension!.name;
|
||||
|
||||
const childEntry = {
|
||||
id: group.id,
|
||||
label: group.title,
|
||||
order: group.order,
|
||||
settings: flatSettings
|
||||
};
|
||||
addEntryToTree(extensionId, extensionName, childEntry);
|
||||
};
|
||||
|
||||
const extGroups = groups
|
||||
const processPromises = groups
|
||||
.sort((a, b) => a.title.localeCompare(b.title))
|
||||
.map(g => settingsGroupToEntry(g));
|
||||
.map(g => processGroupEntry(g));
|
||||
|
||||
return {
|
||||
id: 'extensions',
|
||||
label: localize('extensions', "Extensions"),
|
||||
children: extGroups
|
||||
};
|
||||
return Promise.all(processPromises).then(() => {
|
||||
const extGroups: ITOCEntry<ISetting>[] = [];
|
||||
for (const value of extGroupTree.values()) {
|
||||
if (value.children!.length === 1) {
|
||||
// push a flattened setting
|
||||
extGroups.push({
|
||||
id: value.id,
|
||||
label: value.children![0].label,
|
||||
settings: value.children![0].settings
|
||||
});
|
||||
} else {
|
||||
value.children!.sort((a, b) => {
|
||||
if (a.order !== undefined && b.order !== undefined) {
|
||||
return a.order - b.order;
|
||||
} else {
|
||||
// leave things as-is
|
||||
return 0;
|
||||
}
|
||||
});
|
||||
extGroups.push(value);
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
id: 'extensions',
|
||||
label: localize('extensions', "Extensions"),
|
||||
children: extGroups
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
function _resolveSettingsTree(tocData: ITOCEntry<string>, allSettings: Set<ISetting>, logService: ILogService): ITOCEntry<ISetting> {
|
||||
|
||||
@@ -429,9 +429,9 @@ export class SettingsTreeModel {
|
||||
}
|
||||
|
||||
private createSettingsTreeGroupElement(tocEntry: ITOCEntry<ISetting>, parent?: SettingsTreeGroupElement): SettingsTreeGroupElement {
|
||||
|
||||
const depth = parent ? this.getDepth(parent) + 1 : 0;
|
||||
const element = new SettingsTreeGroupElement(tocEntry.id, undefined, tocEntry.label, depth, false);
|
||||
element.parent = parent;
|
||||
|
||||
const children: SettingsTreeGroupChild[] = [];
|
||||
if (tocEntry.settings) {
|
||||
|
||||
@@ -41,6 +41,7 @@ export interface ISettingsGroup {
|
||||
range: IRange;
|
||||
title: string;
|
||||
titleRange: IRange;
|
||||
order: number;
|
||||
sections: ISettingsSection[];
|
||||
extensionInfo?: IConfigurationExtensionInfo;
|
||||
}
|
||||
|
||||
@@ -197,6 +197,7 @@ export class SettingsEditorModel extends AbstractSettingsModel implements ISetti
|
||||
}],
|
||||
title: modelGroup.title,
|
||||
titleRange: modelGroup.titleRange,
|
||||
order: modelGroup.order,
|
||||
extensionInfo: modelGroup.extensionInfo
|
||||
};
|
||||
}
|
||||
@@ -566,7 +567,7 @@ export class DefaultSettings extends Disposable {
|
||||
if (!settingsGroup) {
|
||||
settingsGroup = result.find(g => g.title === title && g.extensionInfo?.id === config.extensionInfo?.id);
|
||||
if (!settingsGroup) {
|
||||
settingsGroup = { sections: [{ settings: [] }], id: config.id || '', title: title || '', titleRange: nullRange, range: nullRange, extensionInfo: config.extensionInfo };
|
||||
settingsGroup = { sections: [{ settings: [] }], id: config.id || '', title: title || '', titleRange: nullRange, order: config.order ?? 0, range: nullRange, extensionInfo: config.extensionInfo };
|
||||
result.push(settingsGroup);
|
||||
}
|
||||
} else {
|
||||
@@ -575,7 +576,7 @@ export class DefaultSettings extends Disposable {
|
||||
}
|
||||
if (config.properties) {
|
||||
if (!settingsGroup) {
|
||||
settingsGroup = { sections: [{ settings: [] }], id: config.id || '', title: config.id || '', titleRange: nullRange, range: nullRange, extensionInfo: config.extensionInfo };
|
||||
settingsGroup = { sections: [{ settings: [] }], id: config.id || '', title: config.id || '', titleRange: nullRange, order: config.order ?? 0, range: nullRange, extensionInfo: config.extensionInfo };
|
||||
result.push(settingsGroup);
|
||||
}
|
||||
const configurationSettings: ISetting[] = [];
|
||||
|
||||
Reference in New Issue
Block a user