提交 67b42309 编写于 作者: S Sandeep Somavarapu

Group all filters under single filter action

上级 a2d85697
......@@ -14,18 +14,18 @@ export class FilterOptions {
static readonly _filter: IFilter = matchesFuzzy2;
static readonly _messageFilter: IFilter = matchesFuzzy;
readonly _showWarnings: boolean = false;
readonly _showErrors: boolean = false;
readonly _showInfos: boolean = false;
readonly showWarnings: boolean = false;
readonly showErrors: boolean = false;
readonly showInfos: boolean = false;
readonly textFilter: string = '';
readonly excludesMatcher: ResourceGlobMatcher;
readonly includesMatcher: ResourceGlobMatcher;
constructor(readonly filter: string = '', filesExclude: { root: URI, expression: IExpression }[] | IExpression = [], readonly showWarnings: boolean = false, readonly showErrors: boolean = false, readonly showInfos: boolean = false) {
constructor(readonly filter: string = '', filesExclude: { root: URI, expression: IExpression }[] | IExpression = [], showWarnings: boolean = false, showErrors: boolean = false, showInfos: boolean = false) {
filter = filter.trim();
this._showWarnings = showWarnings;
this._showErrors = showErrors;
this._showInfos = showInfos;
this.showWarnings = showWarnings;
this.showErrors = showErrors;
this.showInfos = showInfos;
const filesExcludeByRoot = Array.isArray(filesExclude) ? filesExclude : [];
const excludesExpression: IExpression = Array.isArray(filesExclude) ? getEmptyExpression() : filesExclude;
......
......@@ -37,8 +37,7 @@ import { IContextMenuService } from 'vs/platform/contextview/browser/contextView
import { Separator, ActionViewItem, ActionBar } from 'vs/base/browser/ui/actionbar/actionbar';
import { IMenuService, MenuId } from 'vs/platform/actions/common/actions';
import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';
import { IKeyboardEvent, StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent';
import { KeyCode } from 'vs/base/common/keyCodes';
import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent';
import { domEvent } from 'vs/base/browser/event';
import { ResourceLabels } from 'vs/workbench/browser/labels';
import { IMarker } from 'vs/platform/markers/common/markers';
......@@ -119,7 +118,14 @@ export class MarkersPanel extends Panel implements IMarkerFilterController {
// actions
this.collapseAllAction = this._register(new Action('vs.tree.collapse', localize('collapseAll', "Collapse All"), 'monaco-tree-action codicon-collapse-all', true, async () => this.collapseAll()));
this.filterAction = this._register(this.instantiationService.createInstance(MarkersFilterAction, { filterText: this.panelState['filter'] || '', filterHistory: this.panelState['filterHistory'] || [], useFilesExclude: !!this.panelState['useFilesExclude'] }));
this.filterAction = this._register(this.instantiationService.createInstance(MarkersFilterAction, {
filterText: this.panelState['filter'] || '',
filterHistory: this.panelState['filterHistory'] || [],
showErrors: this.panelState['showErrors'] !== false,
showWarnings: this.panelState['showWarnings'] !== false,
showInfos: this.panelState['showInfos'] !== false,
useFilesExclude: !!this.panelState['useFilesExclude']
}));
}
public create(parent: HTMLElement): void {
......@@ -497,11 +503,7 @@ export class MarkersPanel extends Panel implements IMarkerFilterController {
this.messageBoxContainer.style.display = 'block';
this.messageBoxContainer.setAttribute('tabIndex', '0');
if (total > 0) {
if (this.filter.options.filter) {
this.renderFilteredByFilterMessage(this.messageBoxContainer);
} else {
this.renderFilteredByFilesExcludeMessage(this.messageBoxContainer);
}
this.renderFilteredByFilterMessage(this.messageBoxContainer);
} else {
this.renderNoProblemsMessage(this.messageBoxContainer);
}
......@@ -516,37 +518,9 @@ export class MarkersPanel extends Panel implements IMarkerFilterController {
}
}
private renderFilteredByFilesExcludeMessage(container: HTMLElement) {
const span1 = dom.append(container, dom.$('span'));
span1.textContent = Messages.MARKERS_PANEL_NO_PROBLEMS_FILE_EXCLUSIONS_FILTER;
const link = dom.append(container, dom.$('a.messageAction'));
link.textContent = localize('disableFilesExclude', "Disable Files Exclude Filter.");
link.setAttribute('tabIndex', '0');
dom.addStandardDisposableListener(link, dom.EventType.CLICK, () => this.filterAction.useFilesExclude = false);
dom.addStandardDisposableListener(link, dom.EventType.KEY_DOWN, (e: IKeyboardEvent) => {
if (e.equals(KeyCode.Enter) || e.equals(KeyCode.Space)) {
this.filterAction.useFilesExclude = false;
e.stopPropagation();
}
});
this.ariaLabelElement.setAttribute('aria-label', Messages.MARKERS_PANEL_NO_PROBLEMS_FILE_EXCLUSIONS_FILTER);
}
private renderFilteredByFilterMessage(container: HTMLElement) {
const span1 = dom.append(container, dom.$('span'));
span1.textContent = Messages.MARKERS_PANEL_NO_PROBLEMS_FILTERS;
const link = dom.append(container, dom.$('a.messageAction'));
link.textContent = localize('clearFilter', "Clear Filter");
link.setAttribute('tabIndex', '0');
const span2 = dom.append(container, dom.$('span'));
span2.textContent = '.';
dom.addStandardDisposableListener(link, dom.EventType.CLICK, () => this.filterAction.filterText = '');
dom.addStandardDisposableListener(link, dom.EventType.KEY_DOWN, (e: IKeyboardEvent) => {
if (e.equals(KeyCode.Enter) || e.equals(KeyCode.Space)) {
this.filterAction.filterText = '';
e.stopPropagation();
}
});
this.ariaLabelElement.setAttribute('aria-label', Messages.MARKERS_PANEL_NO_PROBLEMS_FILTERS);
}
......@@ -728,6 +702,9 @@ export class MarkersPanel extends Panel implements IMarkerFilterController {
protected saveState(): void {
this.panelState['filter'] = this.filterAction.filterText;
this.panelState['filterHistory'] = this.filterAction.filterHistory;
this.panelState['showErrors'] = this.filterAction.showErrors;
this.panelState['showWarnings'] = this.filterAction.showWarnings;
this.panelState['showInfos'] = this.filterAction.showInfos;
this.panelState['useFilesExclude'] = this.filterAction.useFilesExclude;
this.panelState['multiline'] = this.markersViewModel.multiline;
......
......@@ -5,7 +5,7 @@
import { Delayer } from 'vs/base/common/async';
import * as DOM from 'vs/base/browser/dom';
import { Action, IActionChangeEvent, IAction } from 'vs/base/common/actions';
import { Action, IActionChangeEvent, IAction, IActionRunner } from 'vs/base/common/actions';
import { HistoryInputBox } from 'vs/base/browser/ui/inputbox/inputBox';
import { KeyCode } from 'vs/base/common/keyCodes';
import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent';
......@@ -15,14 +15,12 @@ import Messages from 'vs/workbench/contrib/markers/browser/messages';
import Constants from 'vs/workbench/contrib/markers/browser/constants';
import { IWorkbenchLayoutService } from 'vs/workbench/services/layout/browser/layoutService';
import { IPanelService } from 'vs/workbench/services/panel/common/panelService';
import { IThemeService } from 'vs/platform/theme/common/themeService';
import { attachInputBoxStyler, attachStylerCallback, attachCheckboxStyler } from 'vs/platform/theme/common/styler';
import { IMarkersWorkbenchService } from 'vs/workbench/contrib/markers/browser/markers';
import { IThemeService, registerThemingParticipant, ICssStyleCollector, ITheme } from 'vs/platform/theme/common/themeService';
import { attachInputBoxStyler, attachStylerCallback } from 'vs/platform/theme/common/styler';
import { toDisposable } from 'vs/base/common/lifecycle';
import { BaseActionViewItem, ActionViewItem } from 'vs/base/browser/ui/actionbar/actionbar';
import { badgeBackground, badgeForeground, contrastBorder } from 'vs/platform/theme/common/colorRegistry';
import { BaseActionViewItem, ActionViewItem, ActionBar, Separator } from 'vs/base/browser/ui/actionbar/actionbar';
import { badgeBackground, badgeForeground, contrastBorder, inputActiveOptionBorder, inputActiveOptionBackground } from 'vs/platform/theme/common/colorRegistry';
import { localize } from 'vs/nls';
import { Checkbox } from 'vs/base/browser/ui/checkbox/checkbox';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { ContextScopedHistoryInputBox } from 'vs/platform/browser/contextScopedHistoryWidget';
import { Marker } from 'vs/workbench/contrib/markers/browser/markersModel';
......@@ -30,6 +28,8 @@ import { IContextKey, IContextKeyService } from 'vs/platform/contextkey/common/c
import { Event, Emitter } from 'vs/base/common/event';
import { FilterOptions } from 'vs/workbench/contrib/markers/browser/markersFilterOptions';
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
import { DropdownMenuActionViewItem } from 'vs/base/browser/ui/dropdown/dropdown';
import { AnchorAlignment } from 'vs/base/browser/ui/contextview/contextview';
export class ToggleMarkersPanelAction extends TogglePanelAction {
......@@ -38,8 +38,7 @@ export class ToggleMarkersPanelAction extends TogglePanelAction {
constructor(id: string, label: string,
@IWorkbenchLayoutService layoutService: IWorkbenchLayoutService,
@IPanelService panelService: IPanelService,
@IMarkersWorkbenchService markersWorkbenchService: IMarkersWorkbenchService
@IPanelService panelService: IPanelService
) {
super(id, label, Constants.MARKERS_PANEL_ID, panelService, layoutService);
}
......@@ -73,6 +72,9 @@ export interface IMarkersFilterActionChangeEvent extends IActionChangeEvent {
export interface IMarkersFilterActionOptions {
filterText: string;
filterHistory: string[];
showErrors: boolean;
showWarnings: boolean;
showInfos: boolean;
useFilesExclude: boolean;
}
......@@ -86,6 +88,9 @@ export class MarkersFilterAction extends Action {
constructor(options: IMarkersFilterActionOptions) {
super(MarkersFilterAction.ID, Messages.MARKERS_PANEL_ACTION_TOOLTIP_FILTER, 'markers-panel-action-filter', true);
this._filterText = options.filterText;
this._showErrors = options.showErrors;
this._showWarnings = options.showWarnings;
this._showInfos = options.showInfos;
this._useFilesExclude = options.useFilesExclude;
this.filterHistory = options.filterHistory;
}
......@@ -168,6 +173,79 @@ export interface IMarkerFilterController {
getFilterStats(): { total: number, filtered: number };
}
class FiltersDropdownMenuActionViewItem extends DropdownMenuActionViewItem {
constructor(
action: IAction, private filterAction: MarkersFilterAction, actionRunner: IActionRunner,
@IContextMenuService contextMenuService: IContextMenuService
) {
super(action,
{ getActions: () => this.getActions() },
contextMenuService,
action => undefined,
actionRunner!,
undefined,
action.class,
() => { return AnchorAlignment.RIGHT; });
}
render(container: HTMLElement): void {
super.render(container);
this.updateChecked();
}
private getActions(): IAction[] {
return [
{
checked: this.filterAction.showErrors,
class: undefined,
enabled: true,
id: 'showErrors',
label: Messages.MARKERS_PANEL_ACTION_LABEL_SHOW_ERRORS,
run: async () => this.filterAction.showErrors = !this.filterAction.showErrors,
tooltip: '',
dispose: () => null
},
{
checked: this.filterAction.showWarnings,
class: undefined,
enabled: true,
id: 'showWarnings',
label: Messages.MARKERS_PANEL_ACTION_LABEL_SHOW_WARNINGS,
run: async () => this.filterAction.showWarnings = !this.filterAction.showWarnings,
tooltip: '',
dispose: () => null
},
{
checked: this.filterAction.showInfos,
class: undefined,
enabled: true,
id: 'showInfos',
label: Messages.MARKERS_PANEL_ACTION_LABEL_SHOW_INFOS,
run: async () => this.filterAction.showInfos = !this.filterAction.showInfos,
tooltip: '',
dispose: () => null
},
new Separator(),
{
checked: this.filterAction.useFilesExclude,
class: undefined,
enabled: true,
id: 'useFilesExclude',
label: Messages.MARKERS_PANEL_ACTION_LABEL_USE_FILES_EXCLUDE,
run: async () => this.filterAction.useFilesExclude = !this.filterAction.useFilesExclude,
tooltip: '',
dispose: () => null
}
];
}
updateChecked(): void {
DOM.toggleClass(this.element!, 'checked', this._action.checked);
}
}
export class MarkersFilterActionViewItem extends BaseActionViewItem {
private delayedFilterUpdate: Delayer<void>;
......@@ -175,6 +253,7 @@ export class MarkersFilterActionViewItem extends BaseActionViewItem {
private filterInputBox: HistoryInputBox | null = null;
private filterBadge: HTMLElement | null = null;
private focusContextKey: IContextKey<boolean>;
private readonly filtersAction: IAction;
constructor(
readonly action: MarkersFilterAction,
......@@ -190,6 +269,9 @@ export class MarkersFilterActionViewItem extends BaseActionViewItem {
this.delayedFilterUpdate = new Delayer<void>(200);
this._register(toDisposable(() => this.delayedFilterUpdate.cancel()));
this._register(action.onFocus(() => this.focus()));
this.filtersAction = new Action('markersFiltersAction', Messages.MARKERS_PANEL_ACTION_TOOLTIP_MORE_FILTERS, 'markers-filters codicon-filter');
this.filtersAction.checked = this.hasFiltersChanged();
this._register(action.onDidChange(() => this.filtersAction.checked = this.hasFiltersChanged()));
}
render(container: HTMLElement): void {
......@@ -210,6 +292,10 @@ export class MarkersFilterActionViewItem extends BaseActionViewItem {
}
}
private hasFiltersChanged(): boolean {
return !this.action.showErrors || !this.action.showWarnings || !this.action.showInfos || this.action.useFilesExclude;
}
private createInput(container: HTMLElement): void {
this.filterInputBox = this._register(this.instantiationService.createInstance(ContextScopedHistoryInputBox, container, this.contextViewService, {
placeholder: Messages.MARKERS_PANEL_FILTER_PLACEHOLDER,
......@@ -238,10 +324,7 @@ export class MarkersFilterActionViewItem extends BaseActionViewItem {
private createControls(container: HTMLElement): void {
const controlsContainer = DOM.append(container, DOM.$('.markers-panel-filter-controls'));
this.createBadge(controlsContainer);
this.createFilesExcludeCheckbox(controlsContainer);
this.createErrorsCheckbox(controlsContainer);
this.createWarningsCheckbox(controlsContainer);
this.createInfosCheckbox(controlsContainer);
this.createFilters(controlsContainer);
}
private createBadge(container: HTMLElement): void {
......@@ -262,88 +345,16 @@ export class MarkersFilterActionViewItem extends BaseActionViewItem {
this._register(this.filterController.onDidFilter(() => this.updateBadge()));
}
private createFilesExcludeCheckbox(container: HTMLElement): void {
const filesExcludeFilter = this._register(new Checkbox({
actionClassName: 'codicon codicon-exclude',
title: this.action.useFilesExclude ? Messages.MARKERS_PANEL_ACTION_TOOLTIP_DO_NOT_USE_FILES_EXCLUDE : Messages.MARKERS_PANEL_ACTION_TOOLTIP_USE_FILES_EXCLUDE,
isChecked: this.action.useFilesExclude
}));
this._register(filesExcludeFilter.onChange(() => {
filesExcludeFilter.domNode.title = filesExcludeFilter.checked ? Messages.MARKERS_PANEL_ACTION_TOOLTIP_DO_NOT_USE_FILES_EXCLUDE : Messages.MARKERS_PANEL_ACTION_TOOLTIP_USE_FILES_EXCLUDE;
this.action.useFilesExclude = filesExcludeFilter.checked;
this.focus();
}));
this._register(this.action.onDidChange((event: IMarkersFilterActionChangeEvent) => {
if (event.useFilesExclude) {
filesExcludeFilter.checked = this.action.useFilesExclude;
}
}));
this._register(attachCheckboxStyler(filesExcludeFilter, this.themeService));
container.appendChild(filesExcludeFilter.domNode);
}
private createWarningsCheckbox(container: HTMLElement): void {
const warningsFilter = this._register(new Checkbox({
actionClassName: 'codicon codicon-warning',
title: this.action.showWarnings ? Messages.MARKERS_PANEL_ACTION_TOOLTIP_DO_NOT_SHOW_WARNINGS : Messages.MARKERS_PANEL_ACTION_TOOLTIP_SHOW_WARNINGS,
isChecked: this.action.showWarnings
}));
this._register(warningsFilter.onChange(() => {
warningsFilter.domNode.title = warningsFilter.checked ? Messages.MARKERS_PANEL_ACTION_TOOLTIP_DO_NOT_SHOW_WARNINGS : Messages.MARKERS_PANEL_ACTION_TOOLTIP_SHOW_WARNINGS;
this.action.showWarnings = warningsFilter.checked;
this.focus();
}));
this._register(this.action.onDidChange((event: IMarkersFilterActionChangeEvent) => {
if (event.showWarnings) {
warningsFilter.checked = this.action.showWarnings;
}
}));
this._register(attachCheckboxStyler(warningsFilter, this.themeService));
container.appendChild(warningsFilter.domNode);
}
private createErrorsCheckbox(container: HTMLElement): void {
const errorsFilter = this._register(new Checkbox({
actionClassName: 'codicon codicon-error',
title: this.action.showErrors ? Messages.MARKERS_PANEL_ACTION_TOOLTIP_DO_NOT_SHOW_ERRORS : Messages.MARKERS_PANEL_ACTION_TOOLTIP_SHOW_ERRORS,
isChecked: this.action.showErrors
}));
this._register(errorsFilter.onChange(() => {
errorsFilter.domNode.title = errorsFilter.checked ? Messages.MARKERS_PANEL_ACTION_TOOLTIP_DO_NOT_SHOW_ERRORS : Messages.MARKERS_PANEL_ACTION_TOOLTIP_SHOW_ERRORS;
this.action.showErrors = errorsFilter.checked;
this.focus();
}));
this._register(this.action.onDidChange((event: IMarkersFilterActionChangeEvent) => {
if (event.showErrors) {
errorsFilter.checked = this.action.showErrors;
private createFilters(container: HTMLElement): void {
const actionbar = this._register(new ActionBar(container, {
actionViewItemProvider: action => {
if (action.id === this.filtersAction.id) {
return this.instantiationService.createInstance(FiltersDropdownMenuActionViewItem, action, this.action, this.actionRunner);
}
return undefined;
}
}));
this._register(attachCheckboxStyler(errorsFilter, this.themeService));
container.appendChild(errorsFilter.domNode);
}
private createInfosCheckbox(container: HTMLElement): void {
const infosFilter = this._register(new Checkbox({
actionClassName: 'codicon codicon-info',
title: this.action.showInfos ? Messages.MARKERS_PANEL_ACTION_TOOLTIP_DO_NOT_SHOW_INFOS : Messages.MARKERS_PANEL_ACTION_TOOLTIP_SHOW_INFOS,
isChecked: this.action.showInfos
}));
this._register(infosFilter.onChange(() => {
infosFilter.domNode.title = infosFilter.checked ? Messages.MARKERS_PANEL_ACTION_TOOLTIP_DO_NOT_SHOW_INFOS : Messages.MARKERS_PANEL_ACTION_TOOLTIP_SHOW_INFOS;
this.action.showInfos = infosFilter.checked;
this.focus();
}));
this._register(this.action.onDidChange((event: IMarkersFilterActionChangeEvent) => {
if (event.showInfos) {
infosFilter.checked = this.action.showInfos;
}
}));
this._register(attachCheckboxStyler(infosFilter, this.themeService));
container.appendChild(infosFilter.domNode);
actionbar.push(this.filtersAction, { icon: true, label: false });
}
private onDidInputChange(inputbox: HistoryInputBox) {
......@@ -394,9 +405,9 @@ export class MarkersFilterActionViewItem extends BaseActionViewItem {
private reportFilteringUsed(): void {
const filterOptions = this.filterController.getFilterOptions();
const data = {
errors: filterOptions._showErrors,
warnings: filterOptions._showWarnings,
infos: filterOptions._showInfos,
errors: filterOptions.showErrors,
warnings: filterOptions.showWarnings,
infos: filterOptions.showInfos,
};
/* __GDPR__
"problems.filter" : {
......@@ -481,3 +492,14 @@ export class QuickFixActionViewItem extends ActionViewItem {
}
}
}
registerThemingParticipant((theme: ITheme, collector: ICssStyleCollector) => {
const inputActiveOptionBorderColor = theme.getColor(inputActiveOptionBorder);
if (inputActiveOptionBorderColor) {
collector.addRule(`.markers-panel-action-filter > .markers-panel-filter-controls > .monaco-action-bar .action-label.markers-filters.checked { border-color: ${inputActiveOptionBorderColor}; }`);
}
const inputActiveOptionBackgroundColor = theme.getColor(inputActiveOptionBackground);
if (inputActiveOptionBackgroundColor) {
collector.addRule(`.markers-panel-action-filter > .markers-panel-filter-controls > .monaco-action-bar .action-label.markers-filters.checked { background-color: ${inputActiveOptionBackgroundColor}; }`);
}
});
......@@ -426,15 +426,15 @@ export class Filter implements ITreeFilter<TreeElement, FilterData> {
private filterMarker(marker: Marker, parentVisibility: TreeVisibility): TreeFilterResult<FilterData> {
let shouldAppear: boolean = false;
if (this.options._showErrors && MarkerSeverity.Error === marker.marker.severity) {
if (this.options.showErrors && MarkerSeverity.Error === marker.marker.severity) {
shouldAppear = true;
}
if (this.options._showWarnings && MarkerSeverity.Warning === marker.marker.severity) {
if (this.options.showWarnings && MarkerSeverity.Warning === marker.marker.severity) {
shouldAppear = true;
}
if (this.options._showInfos && MarkerSeverity.Info === marker.marker.severity) {
if (this.options.showInfos && MarkerSeverity.Info === marker.marker.severity) {
shouldAppear = true;
}
......
......@@ -29,7 +29,7 @@
position: absolute;
top: 0px;
bottom: 0;
right: 4px;
right: 0px;
display: flex;
align-items: center;
}
......@@ -45,6 +45,14 @@
display: none;
}
.markers-panel-action-filter > .markers-panel-filter-controls > .monaco-action-bar .action-label.markers-filters {
line-height: 20px;
height: 20px;
min-width: 28px;
margin-top: 2px;
margin-left: 4px;
}
.panel > .title .monaco-action-bar .action-item.markers-panel-action-filter-container {
max-width: 600px;
min-width: 300px;
......
......@@ -21,16 +21,12 @@ export default class Messages {
public static MARKERS_PANEL_NO_PROBLEMS_BUILT: string = nls.localize('markers.panel.no.problems.build', "No problems have been detected in the workspace so far.");
public static MARKERS_PANEL_NO_PROBLEMS_FILTERS: string = nls.localize('markers.panel.no.problems.filters', "No results found with provided filter criteria.");
public static MARKERS_PANEL_NO_PROBLEMS_FILE_EXCLUSIONS_FILTER: string = nls.localize('markers.panel.no.problems.file.exclusions', "All problems are hidden because files exclude filter is enabled.");
public static MARKERS_PANEL_ACTION_TOOLTIP_USE_FILES_EXCLUDE: string = nls.localize('markers.panel.action.useFilesExclude', "Filter using Files Exclude Setting");
public static MARKERS_PANEL_ACTION_TOOLTIP_DO_NOT_USE_FILES_EXCLUDE: string = nls.localize('markers.panel.action.donotUseFilesExclude', "Do not use Files Exclude Setting");
public static MARKERS_PANEL_ACTION_TOOLTIP_DO_NOT_SHOW_WARNINGS: string = nls.localize('markers.panel.action.donotShowWarnings', "Do not show warnings");
public static MARKERS_PANEL_ACTION_TOOLTIP_SHOW_WARNINGS: string = nls.localize('markers.panel.action.showWarnings', "Show warnings");
public static MARKERS_PANEL_ACTION_TOOLTIP_DO_NOT_SHOW_ERRORS: string = nls.localize('markers.panel.action.donotShowErrors', "Do not show errors");
public static MARKERS_PANEL_ACTION_TOOLTIP_SHOW_ERRORS: string = nls.localize('markers.panel.action.showErrors', "Show errors");
public static MARKERS_PANEL_ACTION_TOOLTIP_DO_NOT_SHOW_INFOS: string = nls.localize('markers.panel.action.donotShowInfos', "Do not show infos");
public static MARKERS_PANEL_ACTION_TOOLTIP_SHOW_INFOS: string = nls.localize('markers.panel.action.showInfos', "Show infos");
public static MARKERS_PANEL_ACTION_TOOLTIP_MORE_FILTERS: string = nls.localize('markers.panel.action.moreFilters', "More Filters...");
public static MARKERS_PANEL_ACTION_LABEL_SHOW_ERRORS: string = nls.localize('markers.panel.action.showErrors', "Errors");
public static MARKERS_PANEL_ACTION_LABEL_SHOW_WARNINGS: string = nls.localize('markers.panel.action.showWarnings', "Warnings");
public static MARKERS_PANEL_ACTION_LABEL_SHOW_INFOS: string = nls.localize('markers.panel.action.showInfos', "Infos");
public static MARKERS_PANEL_ACTION_LABEL_USE_FILES_EXCLUDE: string = nls.localize('markers.panel.action.useFilesExclude', "Use Files Exclude Setting");
public static MARKERS_PANEL_ACTION_TOOLTIP_FILTER: string = nls.localize('markers.panel.action.filter', "Filter Problems");
public static MARKERS_PANEL_ACTION_TOOLTIP_QUICKFIX: string = nls.localize('markers.panel.action.quickfix', "Show fixes");
public static MARKERS_PANEL_FILTER_ARIA_LABEL: string = nls.localize('markers.panel.filter.ariaLabel', "Filter Problems");
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册