Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

#84678 add language-specific overrides for breadcrumb and outline settings #85081

Merged
merged 7 commits into from
Dec 2, 2019
26 changes: 26 additions & 0 deletions src/vs/workbench/browser/parts/editor/breadcrumbs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -170,131 +170,157 @@ Registry.as<IConfigurationRegistry>(Extensions.Configuration).registerConfigurat
'breadcrumbs.showFiles': {
type: 'boolean',
default: true,
overridable: true,
markdownDescription: localize('filteredTypes.file', "When enabled breadcrumbs show `file`-symbols.")
},
'breadcrumbs.showModules': {
type: 'boolean',
default: true,
overridable: true,
markdownDescription: localize('filteredTypes.module', "When enabled breadcrumbs show `module`-symbols.")
},
'breadcrumbs.showNamespaces': {
type: 'boolean',
default: true,
overridable: true,
markdownDescription: localize('filteredTypes.namespace', "When enabled breadcrumbs show `namespace`-symbols.")
},
'breadcrumbs.showPackages': {
type: 'boolean',
default: true,
overridable: true,
markdownDescription: localize('filteredTypes.package', "When enabled breadcrumbs show `package`-symbols.")
},
'breadcrumbs.showClasses': {
type: 'boolean',
default: true,
overridable: true,
markdownDescription: localize('filteredTypes.class', "When enabled breadcrumbs show `class`-symbols.")
},
'breadcrumbs.showMethods': {
type: 'boolean',
default: true,
overridable: true,
markdownDescription: localize('filteredTypes.method', "When enabled breadcrumbs show `method`-symbols.")
},
'breadcrumbs.showProperties': {
type: 'boolean',
default: true,
overridable: true,
markdownDescription: localize('filteredTypes.property', "When enabled breadcrumbs show `property`-symbols.")
},
'breadcrumbs.showFields': {
type: 'boolean',
default: true,
overridable: true,
markdownDescription: localize('filteredTypes.field', "When enabled breadcrumbs show `field`-symbols.")
},
'breadcrumbs.showConstructors': {
type: 'boolean',
default: true,
overridable: true,
markdownDescription: localize('filteredTypes.constructor', "When enabled breadcrumbs show `constructor`-symbols.")
},
'breadcrumbs.showEnums': {
type: 'boolean',
default: true,
overridable: true,
markdownDescription: localize('filteredTypes.enum', "When enabled breadcrumbs show `enum`-symbols.")
},
'breadcrumbs.showInterfaces': {
type: 'boolean',
default: true,
overridable: true,
markdownDescription: localize('filteredTypes.interface', "When enabled breadcrumbs show `interface`-symbols.")
},
'breadcrumbs.showFunctions': {
type: 'boolean',
default: true,
overridable: true,
markdownDescription: localize('filteredTypes.function', "When enabled breadcrumbs show `function`-symbols.")
},
'breadcrumbs.showVariables': {
type: 'boolean',
default: true,
overridable: true,
markdownDescription: localize('filteredTypes.variable', "When enabled breadcrumbs show `variable`-symbols.")
},
'breadcrumbs.showConstants': {
type: 'boolean',
default: true,
overridable: true,
markdownDescription: localize('filteredTypes.constant', "When enabled breadcrumbs show `constant`-symbols.")
},
'breadcrumbs.showStrings': {
type: 'boolean',
default: true,
overridable: true,
markdownDescription: localize('filteredTypes.string', "When enabled breadcrumbs show `string`-symbols.")
},
'breadcrumbs.showNumbers': {
type: 'boolean',
default: true,
overridable: true,
markdownDescription: localize('filteredTypes.number', "When enabled breadcrumbs show `number`-symbols.")
},
'breadcrumbs.showBooleans': {
type: 'boolean',
default: true,
overridable: true,
markdownDescription: localize('filteredTypes.boolean', "When enabled breadcrumbs show `boolean`-symbols.")
},
'breadcrumbs.showArrays': {
type: 'boolean',
default: true,
overridable: true,
markdownDescription: localize('filteredTypes.array', "When enabled breadcrumbs show `array`-symbols.")
},
'breadcrumbs.showObjects': {
type: 'boolean',
default: true,
overridable: true,
markdownDescription: localize('filteredTypes.object', "When enabled breadcrumbs show `object`-symbols.")
},
'breadcrumbs.showKeys': {
type: 'boolean',
default: true,
overridable: true,
markdownDescription: localize('filteredTypes.key', "When enabled breadcrumbs show `key`-symbols.")
},
'breadcrumbs.showNull': {
type: 'boolean',
default: true,
overridable: true,
markdownDescription: localize('filteredTypes.null', "When enabled breadcrumbs show `null`-symbols.")
},
'breadcrumbs.showEnumMembers': {
type: 'boolean',
default: true,
overridable: true,
markdownDescription: localize('filteredTypes.enumMember', "When enabled breadcrumbs show `enumMember`-symbols.")
},
'breadcrumbs.showStructs': {
type: 'boolean',
default: true,
overridable: true,
markdownDescription: localize('filteredTypes.struct', "When enabled breadcrumbs show `struct`-symbols.")
},
'breadcrumbs.showEvents': {
type: 'boolean',
default: true,
overridable: true,
markdownDescription: localize('filteredTypes.event', "When enabled breadcrumbs show `event`-symbols.")
},
'breadcrumbs.showOperators': {
type: 'boolean',
default: true,
overridable: true,
markdownDescription: localize('filteredTypes.operator', "When enabled breadcrumbs show `operator`-symbols.")
},
'breadcrumbs.showTypeParameters': {
type: 'boolean',
default: true,
overridable: true,
markdownDescription: localize('filteredTypes.typeParameter', "When enabled breadcrumbs show `typeParameter`-symbols.")
}
}
Expand Down
22 changes: 21 additions & 1 deletion src/vs/workbench/browser/parts/editor/breadcrumbsModel.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import { BreadcrumbsConfig } from 'vs/workbench/browser/parts/editor/breadcrumbs
import { FileKind } from 'vs/platform/files/common/files';
import { withNullAsUndefined } from 'vs/base/common/types';
import { OutlineFilter } from 'vs/editor/contrib/documentSymbols/outlineTree';
import { ITextModel } from 'vs/editor/common/model';

export class FileElement {
constructor(
Expand Down Expand Up @@ -142,6 +143,16 @@ export class EditorBreadcrumbsModel {
this._disposables.add(this._configurationService.onDidChangeConfiguration(e => {
if (e.affectsConfiguration('breadcrumbs')) {
this._updateOutline(true);
return;
}
if (this._editor && this._editor.getModel()) {
const editorModel = this._editor.getModel() as ITextModel;
const languageName = editorModel.getLanguageIdentifier().language;

// checking for changes in the current language override config
if (e.affectsConfiguration(`[${languageName}]`)) {
this._updateOutline(true);
petevdp marked this conversation as resolved.
Show resolved Hide resolved
}
}
}));

Expand Down Expand Up @@ -250,7 +261,16 @@ export class EditorBreadcrumbsModel {
private _isFiltered(element: TreeElement): boolean {
if (element instanceof OutlineElement) {
const key = `breadcrumbs.${OutlineFilter.kindToConfigName[element.symbol.kind]}`;
return !this._configurationService.getValue<boolean>(key);

// If possible, look for language specific overrides when reading configuration.
if (this._editor && this._editor.getModel()) {
const model = this._editor.getModel() as ITextModel;
return !this._configurationService.getValue<boolean>(key, {
overrideIdentifier: model.getLanguageIdentifier().language
});
}

return this._configurationService.getValue<boolean>(key);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You can use the ITextResourceConfigurationService which makes this a lot simpler

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How's this? 9d9a99d

}
return false;
}
Expand Down