@codingame/monaco-vscode-markers-service-override 3.2.3 → 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,689 +0,0 @@
1
- import { __decorate, __param } from '../../../../../../../external/tslib/tslib.es6.js';
2
- import { append, $, clearNode, addDisposableListener, EventType } from 'vscode/vscode/vs/base/browser/dom';
3
- import { Schemas } from 'vscode/vscode/vs/base/common/network';
4
- import { dirname, basename as basename$1 } from 'vscode/vscode/vs/base/common/path';
5
- import { CountBadge } from 'vscode/vscode/vs/base/browser/ui/countBadge/countBadge';
6
- import { HighlightedLabel } from 'vscode/vscode/vs/base/browser/ui/highlightedlabel/highlightedLabel';
7
- import { MarkerSeverity } from 'vscode/vscode/vs/platform/markers/common/markers';
8
- import { ResourceMarkers, Marker, MarkerTableItem, RelatedInformation } from './markersModel.js';
9
- import Messages from './messages.js';
10
- import { IInstantiationService } from 'vscode/vscode/vs/platform/instantiation/common/instantiation';
11
- import { ThemeIcon } from 'vscode/vscode/vs/base/common/themables';
12
- import { DisposableStore, Disposable, toDisposable, dispose } from 'vscode/vscode/vs/base/common/lifecycle';
13
- import { ActionBar } from 'vscode/vscode/vs/base/browser/ui/actionbar/actionbar';
14
- import { QuickFixAction, QuickFixActionViewItem } from './markersViewActions.js';
15
- import { ILabelService } from 'vscode/vscode/vs/platform/label/common/label';
16
- import { dirname as dirname$1, basename, isEqual } from 'vscode/vscode/vs/base/common/resources';
17
- import { FilterOptions } from './markersFilterOptions.js';
18
- import { Emitter } from 'vscode/vscode/vs/base/common/event';
19
- import { isUndefinedOrNull } from 'vscode/vscode/vs/base/common/types';
20
- import { Action } from 'vscode/vscode/vs/base/common/actions';
21
- import { localizeWithPath } from 'vscode/vscode/vs/nls';
22
- import { createCancelablePromise, Delayer } from 'vscode/vscode/vs/base/common/async';
23
- import { IModelService } from 'vscode/vscode/vs/editor/common/services/model';
24
- import { Range } from 'vscode/vscode/vs/editor/common/core/range';
25
- import { getCodeActions, applyCodeAction, ApplyCodeActionReason } from 'vscode/vscode/vs/editor/contrib/codeAction/browser/codeAction';
26
- import { CodeActionTriggerSource, CodeActionKind } from 'vscode/vscode/vs/editor/contrib/codeAction/common/types';
27
- import { ACTIVE_GROUP, IEditorService } from 'vscode/vscode/vs/workbench/services/editor/common/editorService';
28
- import { SeverityIcon } from 'vscode/vscode/vs/platform/severityIcon/browser/severityIcon';
29
- import { IOpenerService } from 'vscode/vscode/vs/platform/opener/common/opener';
30
- import { IFileService } from 'vscode/vscode/vs/platform/files/common/files';
31
- import { Progress } from 'vscode/vscode/vs/platform/progress/common/progress';
32
- import { ActionViewItem } from 'vscode/vscode/vs/base/browser/ui/actionbar/actionViewItems';
33
- import { Codicon } from 'vscode/vscode/vs/base/common/codicons';
34
- import { registerIcon } from 'vscode/vscode/vs/platform/theme/common/iconRegistry';
35
- import { Link } from 'vscode/vscode/vs/platform/opener/browser/link';
36
- import { ILanguageFeaturesService } from 'vscode/vscode/vs/editor/common/services/languageFeatures';
37
- import { IContextKeyService } from 'vscode/vscode/vs/platform/contextkey/common/contextkey';
38
- import { MarkersContextKeys } from 'vscode/vscode/vs/workbench/contrib/markers/common/markers';
39
- import { unsupportedSchemas } from 'vscode/vscode/vs/platform/markers/common/markerService';
40
- import { defaultCountBadgeStyles } from 'vscode/vscode/vs/platform/theme/browser/defaultStyles';
41
- import Severity from 'vscode/vscode/vs/base/common/severity';
42
-
43
- let MarkersWidgetAccessibilityProvider = class MarkersWidgetAccessibilityProvider {
44
- constructor(labelService) {
45
- this.labelService = labelService;
46
- }
47
- getWidgetAriaLabel() {
48
- return ( localizeWithPath(
49
- 'vs/workbench/contrib/markers/browser/markersTreeViewer',
50
- 'problemsView',
51
- "Problems View"
52
- ));
53
- }
54
- getAriaLabel(element) {
55
- if (element instanceof ResourceMarkers) {
56
- const path = this.labelService.getUriLabel(element.resource, { relative: true }) || element.resource.fsPath;
57
- return Messages.MARKERS_TREE_ARIA_LABEL_RESOURCE(element.markers.length, element.name, dirname(path));
58
- }
59
- if (element instanceof Marker || element instanceof MarkerTableItem) {
60
- return Messages.MARKERS_TREE_ARIA_LABEL_MARKER(element);
61
- }
62
- if (element instanceof RelatedInformation) {
63
- return Messages.MARKERS_TREE_ARIA_LABEL_RELATED_INFORMATION(element.raw);
64
- }
65
- return null;
66
- }
67
- };
68
- MarkersWidgetAccessibilityProvider = ( __decorate([
69
- ( __param(0, ILabelService))
70
- ], MarkersWidgetAccessibilityProvider));
71
- class VirtualDelegate {
72
- static { this.LINE_HEIGHT = 22; }
73
- constructor(markersViewState) {
74
- this.markersViewState = markersViewState;
75
- }
76
- getHeight(element) {
77
- if (element instanceof Marker) {
78
- const viewModel = this.markersViewState.getViewModel(element);
79
- const noOfLines = !viewModel || viewModel.multiline ? element.lines.length : 1;
80
- return noOfLines * VirtualDelegate.LINE_HEIGHT;
81
- }
82
- return VirtualDelegate.LINE_HEIGHT;
83
- }
84
- getTemplateId(element) {
85
- if (element instanceof ResourceMarkers) {
86
- return "rm" ;
87
- }
88
- else if (element instanceof Marker) {
89
- return "m" ;
90
- }
91
- else {
92
- return "ri" ;
93
- }
94
- }
95
- }
96
- let ResourceMarkersRenderer = class ResourceMarkersRenderer {
97
- constructor(labels, onDidChangeRenderNodeCount, labelService, fileService) {
98
- this.labels = labels;
99
- this.labelService = labelService;
100
- this.fileService = fileService;
101
- this.renderedNodes = ( new Map());
102
- this.disposables = ( new DisposableStore());
103
- this.templateId = "rm" ;
104
- onDidChangeRenderNodeCount(this.onDidChangeRenderNodeCount, this, this.disposables);
105
- }
106
- renderTemplate(container) {
107
- const resourceLabelContainer = append(container, $('.resource-label-container'));
108
- const resourceLabel = this.labels.create(resourceLabelContainer, { supportHighlights: true });
109
- const badgeWrapper = append(container, $('.count-badge-wrapper'));
110
- const count = ( new CountBadge(badgeWrapper, {}, defaultCountBadgeStyles));
111
- return { count, resourceLabel };
112
- }
113
- renderElement(node, _, templateData) {
114
- const resourceMarkers = node.element;
115
- const uriMatches = node.filterData && node.filterData.uriMatches || [];
116
- if (this.fileService.hasProvider(resourceMarkers.resource) || resourceMarkers.resource.scheme === Schemas.untitled) {
117
- templateData.resourceLabel.setFile(resourceMarkers.resource, { matches: uriMatches });
118
- }
119
- else {
120
- templateData.resourceLabel.setResource({ name: resourceMarkers.name, description: this.labelService.getUriLabel(dirname$1(resourceMarkers.resource), { relative: true }), resource: resourceMarkers.resource }, { matches: uriMatches });
121
- }
122
- this.updateCount(node, templateData);
123
- const nodeRenders = this.renderedNodes.get(resourceMarkers) ?? [];
124
- this.renderedNodes.set(resourceMarkers, [...nodeRenders, templateData]);
125
- }
126
- disposeElement(node, index, templateData) {
127
- const nodeRenders = this.renderedNodes.get(node.element) ?? [];
128
- const nodeRenderIndex = nodeRenders.findIndex(nodeRender => templateData === nodeRender);
129
- if (nodeRenderIndex < 0) {
130
- throw new Error('Disposing unknown resource marker');
131
- }
132
- if (nodeRenders.length === 1) {
133
- this.renderedNodes.delete(node.element);
134
- }
135
- else {
136
- nodeRenders.splice(nodeRenderIndex, 1);
137
- }
138
- }
139
- disposeTemplate(templateData) {
140
- templateData.resourceLabel.dispose();
141
- }
142
- onDidChangeRenderNodeCount(node) {
143
- const nodeRenders = this.renderedNodes.get(node.element);
144
- if (!nodeRenders) {
145
- return;
146
- }
147
- nodeRenders.forEach(nodeRender => this.updateCount(node, nodeRender));
148
- }
149
- updateCount(node, templateData) {
150
- templateData.count.setCount(node.children.reduce((r, n) => r + (n.visible ? 1 : 0), 0));
151
- }
152
- dispose() {
153
- this.disposables.dispose();
154
- }
155
- };
156
- ResourceMarkersRenderer = ( __decorate([
157
- ( __param(2, ILabelService)),
158
- ( __param(3, IFileService))
159
- ], ResourceMarkersRenderer));
160
- let MarkerRenderer = class MarkerRenderer {
161
- constructor(markersViewState, instantiationService, openerService) {
162
- this.markersViewState = markersViewState;
163
- this.instantiationService = instantiationService;
164
- this.openerService = openerService;
165
- this.templateId = "m" ;
166
- }
167
- renderTemplate(container) {
168
- const data = Object.create(null);
169
- data.markerWidget = ( new MarkerWidget(
170
- container,
171
- this.markersViewState,
172
- this.openerService,
173
- this.instantiationService
174
- ));
175
- return data;
176
- }
177
- renderElement(node, _, templateData) {
178
- templateData.markerWidget.render(node.element, node.filterData);
179
- }
180
- disposeTemplate(templateData) {
181
- templateData.markerWidget.dispose();
182
- }
183
- };
184
- MarkerRenderer = ( __decorate([
185
- ( __param(1, IInstantiationService)),
186
- ( __param(2, IOpenerService))
187
- ], MarkerRenderer));
188
- const expandedIcon = registerIcon('markers-view-multi-line-expanded', Codicon.chevronUp, ( localizeWithPath(
189
- 'vs/workbench/contrib/markers/browser/markersTreeViewer',
190
- 'expandedIcon',
191
- 'Icon indicating that multiple lines are shown in the markers view.'
192
- )));
193
- const collapsedIcon = registerIcon('markers-view-multi-line-collapsed', Codicon.chevronDown, ( localizeWithPath(
194
- 'vs/workbench/contrib/markers/browser/markersTreeViewer',
195
- 'collapsedIcon',
196
- 'Icon indicating that multiple lines are collapsed in the markers view.'
197
- )));
198
- const toggleMultilineAction = 'problems.action.toggleMultiline';
199
- class ToggleMultilineActionViewItem extends ActionViewItem {
200
- render(container) {
201
- super.render(container);
202
- this.updateExpandedAttribute();
203
- }
204
- updateClass() {
205
- super.updateClass();
206
- this.updateExpandedAttribute();
207
- }
208
- updateExpandedAttribute() {
209
- this.element?.setAttribute('aria-expanded', `${this._action.class === ThemeIcon.asClassName(expandedIcon)}`);
210
- }
211
- }
212
- class MarkerWidget extends Disposable {
213
- constructor(parent, markersViewModel, _openerService, _instantiationService) {
214
- super();
215
- this.parent = parent;
216
- this.markersViewModel = markersViewModel;
217
- this._openerService = _openerService;
218
- this.disposables = this._register(( new DisposableStore()));
219
- this.actionBar = this._register(( new ActionBar(append(parent, $('.actions')), {
220
- actionViewItemProvider: (action) => action.id === QuickFixAction.ID ? _instantiationService.createInstance(QuickFixActionViewItem, action) : undefined
221
- })));
222
- this.iconContainer = append(parent, $(''));
223
- this.icon = append(this.iconContainer, $(''));
224
- this.messageAndDetailsContainer = append(parent, $('.marker-message-details-container'));
225
- }
226
- render(element, filterData) {
227
- this.actionBar.clear();
228
- this.disposables.clear();
229
- clearNode(this.messageAndDetailsContainer);
230
- this.iconContainer.className = `marker-icon ${( Severity.toString(MarkerSeverity.toSeverity(element.marker.severity)))}`;
231
- this.icon.className = `codicon ${SeverityIcon.className(MarkerSeverity.toSeverity(element.marker.severity))}`;
232
- this.renderQuickfixActionbar(element);
233
- this.renderMessageAndDetails(element, filterData);
234
- this.disposables.add(addDisposableListener(this.parent, EventType.MOUSE_OVER, () => this.markersViewModel.onMarkerMouseHover(element)));
235
- this.disposables.add(addDisposableListener(this.parent, EventType.MOUSE_LEAVE, () => this.markersViewModel.onMarkerMouseLeave(element)));
236
- }
237
- renderQuickfixActionbar(marker) {
238
- const viewModel = this.markersViewModel.getViewModel(marker);
239
- if (viewModel) {
240
- const quickFixAction = viewModel.quickFixAction;
241
- this.actionBar.push([quickFixAction], { icon: true, label: false });
242
- this.iconContainer.classList.toggle('quickFix', quickFixAction.enabled);
243
- quickFixAction.onDidChange(({ enabled }) => {
244
- if (!isUndefinedOrNull(enabled)) {
245
- this.iconContainer.classList.toggle('quickFix', enabled);
246
- }
247
- }, this, this.disposables);
248
- quickFixAction.onShowQuickFixes(() => {
249
- const quickFixActionViewItem = this.actionBar.viewItems[0];
250
- if (quickFixActionViewItem) {
251
- quickFixActionViewItem.showQuickFixes();
252
- }
253
- }, this, this.disposables);
254
- }
255
- }
256
- renderMultilineActionbar(marker, parent) {
257
- const multilineActionbar = this.disposables.add(( new ActionBar(append(parent, $('.multiline-actions')), {
258
- actionViewItemProvider: (action) => {
259
- if (action.id === toggleMultilineAction) {
260
- return ( new ToggleMultilineActionViewItem(undefined, action, { icon: true }));
261
- }
262
- return undefined;
263
- }
264
- })));
265
- this.disposables.add(toDisposable(() => multilineActionbar.dispose()));
266
- const viewModel = this.markersViewModel.getViewModel(marker);
267
- const multiline = viewModel && viewModel.multiline;
268
- const action = ( new Action(toggleMultilineAction));
269
- action.enabled = !!viewModel && marker.lines.length > 1;
270
- action.tooltip = multiline ? ( localizeWithPath(
271
- 'vs/workbench/contrib/markers/browser/markersTreeViewer',
272
- 'single line',
273
- "Show message in single line"
274
- )) : ( localizeWithPath(
275
- 'vs/workbench/contrib/markers/browser/markersTreeViewer',
276
- 'multi line',
277
- "Show message in multiple lines"
278
- ));
279
- action.class = ThemeIcon.asClassName(multiline ? expandedIcon : collapsedIcon);
280
- action.run = () => { if (viewModel) {
281
- viewModel.multiline = !viewModel.multiline;
282
- } return Promise.resolve(); };
283
- multilineActionbar.push([action], { icon: true, label: false });
284
- }
285
- renderMessageAndDetails(element, filterData) {
286
- const { marker, lines } = element;
287
- const viewState = this.markersViewModel.getViewModel(element);
288
- const multiline = !viewState || viewState.multiline;
289
- const lineMatches = filterData && filterData.lineMatches || [];
290
- this.messageAndDetailsContainer.title = element.marker.message;
291
- const lineElements = [];
292
- for (let index = 0; index < (multiline ? lines.length : 1); index++) {
293
- const lineElement = append(this.messageAndDetailsContainer, $('.marker-message-line'));
294
- const messageElement = append(lineElement, $('.marker-message'));
295
- const highlightedLabel = ( new HighlightedLabel(messageElement));
296
- highlightedLabel.set(lines[index].length > 1000 ? `${lines[index].substring(0, 1000)}...` : lines[index], lineMatches[index]);
297
- if (lines[index] === '') {
298
- lineElement.style.height = `${VirtualDelegate.LINE_HEIGHT}px`;
299
- }
300
- lineElements.push(lineElement);
301
- }
302
- this.renderDetails(marker, filterData, lineElements[0]);
303
- this.renderMultilineActionbar(element, lineElements[0]);
304
- }
305
- renderDetails(marker, filterData, parent) {
306
- parent.classList.add('details-container');
307
- if (marker.source || marker.code) {
308
- const source = ( new HighlightedLabel(append(parent, $('.marker-source'))));
309
- const sourceMatches = filterData && filterData.sourceMatches || [];
310
- source.set(marker.source, sourceMatches);
311
- if (marker.code) {
312
- if (typeof marker.code === 'string') {
313
- const code = ( new HighlightedLabel(append(parent, $('.marker-code'))));
314
- const codeMatches = filterData && filterData.codeMatches || [];
315
- code.set(marker.code, codeMatches);
316
- }
317
- else {
318
- const container = $('.marker-code');
319
- const code = ( new HighlightedLabel(container));
320
- const link = ( marker.code.target.toString(true));
321
- this.disposables.add(( new Link(
322
- parent,
323
- { href: link, label: container, title: link },
324
- undefined,
325
- this._openerService
326
- )));
327
- const codeMatches = filterData && filterData.codeMatches || [];
328
- code.set(marker.code.value, codeMatches);
329
- }
330
- }
331
- }
332
- const lnCol = append(parent, $('span.marker-line'));
333
- lnCol.textContent = Messages.MARKERS_PANEL_AT_LINE_COL_NUMBER(marker.startLineNumber, marker.startColumn);
334
- }
335
- }
336
- let RelatedInformationRenderer = class RelatedInformationRenderer {
337
- constructor(labelService) {
338
- this.labelService = labelService;
339
- this.templateId = "ri" ;
340
- }
341
- renderTemplate(container) {
342
- const data = Object.create(null);
343
- append(container, $('.actions'));
344
- append(container, $('.icon'));
345
- data.resourceLabel = ( new HighlightedLabel(append(container, $('.related-info-resource'))));
346
- data.lnCol = append(container, $('span.marker-line'));
347
- const separator = append(container, $('span.related-info-resource-separator'));
348
- separator.textContent = ':';
349
- separator.style.paddingRight = '4px';
350
- data.description = ( new HighlightedLabel(append(container, $('.marker-description'))));
351
- return data;
352
- }
353
- renderElement(node, _, templateData) {
354
- const relatedInformation = node.element.raw;
355
- const uriMatches = node.filterData && node.filterData.uriMatches || [];
356
- const messageMatches = node.filterData && node.filterData.messageMatches || [];
357
- templateData.resourceLabel.set(basename(relatedInformation.resource), uriMatches);
358
- templateData.resourceLabel.element.title = this.labelService.getUriLabel(relatedInformation.resource, { relative: true });
359
- templateData.lnCol.textContent = Messages.MARKERS_PANEL_AT_LINE_COL_NUMBER(relatedInformation.startLineNumber, relatedInformation.startColumn);
360
- templateData.description.set(relatedInformation.message, messageMatches);
361
- templateData.description.element.title = relatedInformation.message;
362
- }
363
- disposeTemplate(templateData) {
364
- }
365
- };
366
- RelatedInformationRenderer = ( __decorate([
367
- ( __param(0, ILabelService))
368
- ], RelatedInformationRenderer));
369
- class Filter {
370
- constructor(options) {
371
- this.options = options;
372
- }
373
- filter(element, parentVisibility) {
374
- if (element instanceof ResourceMarkers) {
375
- return this.filterResourceMarkers(element);
376
- }
377
- else if (element instanceof Marker) {
378
- return this.filterMarker(element, parentVisibility);
379
- }
380
- else {
381
- return this.filterRelatedInformation(element, parentVisibility);
382
- }
383
- }
384
- filterResourceMarkers(resourceMarkers) {
385
- if (( unsupportedSchemas.has(resourceMarkers.resource.scheme))) {
386
- return false;
387
- }
388
- if (this.options.excludesMatcher.matches(resourceMarkers.resource)) {
389
- return false;
390
- }
391
- if (this.options.includesMatcher.matches(resourceMarkers.resource)) {
392
- return true;
393
- }
394
- if (this.options.textFilter.text && !this.options.textFilter.negate) {
395
- const uriMatches = FilterOptions._filter(this.options.textFilter.text, basename(resourceMarkers.resource));
396
- if (uriMatches) {
397
- return { visibility: true, data: { type: 0 , uriMatches: uriMatches || [] } };
398
- }
399
- }
400
- return 2 ;
401
- }
402
- filterMarker(marker, parentVisibility) {
403
- const matchesSeverity = this.options.showErrors && MarkerSeverity.Error === marker.marker.severity ||
404
- this.options.showWarnings && MarkerSeverity.Warning === marker.marker.severity ||
405
- this.options.showInfos && MarkerSeverity.Info === marker.marker.severity;
406
- if (!matchesSeverity) {
407
- return false;
408
- }
409
- if (!this.options.textFilter.text) {
410
- return true;
411
- }
412
- const lineMatches = [];
413
- for (const line of marker.lines) {
414
- const lineMatch = FilterOptions._messageFilter(this.options.textFilter.text, line);
415
- lineMatches.push(lineMatch || []);
416
- }
417
- const sourceMatches = marker.marker.source ? FilterOptions._filter(this.options.textFilter.text, marker.marker.source) : undefined;
418
- const codeMatches = marker.marker.code ? FilterOptions._filter(this.options.textFilter.text, typeof marker.marker.code === 'string' ? marker.marker.code : marker.marker.code.value) : undefined;
419
- const matched = sourceMatches || codeMatches || ( lineMatches.some(lineMatch => lineMatch.length > 0));
420
- if (matched && !this.options.textFilter.negate) {
421
- return { visibility: true, data: { type: 1 , lineMatches, sourceMatches: sourceMatches || [], codeMatches: codeMatches || [] } };
422
- }
423
- if (matched && this.options.textFilter.negate && parentVisibility === 2 ) {
424
- return false;
425
- }
426
- if (!matched && this.options.textFilter.negate && parentVisibility === 2 ) {
427
- return true;
428
- }
429
- return parentVisibility;
430
- }
431
- filterRelatedInformation(relatedInformation, parentVisibility) {
432
- if (!this.options.textFilter.text) {
433
- return true;
434
- }
435
- const uriMatches = FilterOptions._filter(this.options.textFilter.text, basename(relatedInformation.raw.resource));
436
- const messageMatches = FilterOptions._messageFilter(this.options.textFilter.text, basename$1(relatedInformation.raw.message));
437
- const matched = uriMatches || messageMatches;
438
- if (matched && !this.options.textFilter.negate) {
439
- return { visibility: true, data: { type: 2 , uriMatches: uriMatches || [], messageMatches: messageMatches || [] } };
440
- }
441
- if (matched && this.options.textFilter.negate && parentVisibility === 2 ) {
442
- return false;
443
- }
444
- if (!matched && this.options.textFilter.negate && parentVisibility === 2 ) {
445
- return true;
446
- }
447
- return parentVisibility;
448
- }
449
- }
450
- let MarkerViewModel = class MarkerViewModel extends Disposable {
451
- constructor(marker, modelService, instantiationService, editorService, languageFeaturesService) {
452
- super();
453
- this.marker = marker;
454
- this.modelService = modelService;
455
- this.instantiationService = instantiationService;
456
- this.editorService = editorService;
457
- this.languageFeaturesService = languageFeaturesService;
458
- this._onDidChange = this._register(( new Emitter()));
459
- this.onDidChange = this._onDidChange.event;
460
- this.modelPromise = null;
461
- this.codeActionsPromise = null;
462
- this._multiline = true;
463
- this._quickFixAction = null;
464
- this._register(toDisposable(() => {
465
- if (this.modelPromise) {
466
- this.modelPromise.cancel();
467
- }
468
- if (this.codeActionsPromise) {
469
- this.codeActionsPromise.cancel();
470
- }
471
- }));
472
- }
473
- get multiline() {
474
- return this._multiline;
475
- }
476
- set multiline(value) {
477
- if (this._multiline !== value) {
478
- this._multiline = value;
479
- this._onDidChange.fire();
480
- }
481
- }
482
- get quickFixAction() {
483
- if (!this._quickFixAction) {
484
- this._quickFixAction = this._register(this.instantiationService.createInstance(QuickFixAction, this.marker));
485
- }
486
- return this._quickFixAction;
487
- }
488
- showLightBulb() {
489
- this.setQuickFixes(true);
490
- }
491
- async setQuickFixes(waitForModel) {
492
- const codeActions = await this.getCodeActions(waitForModel);
493
- this.quickFixAction.quickFixes = codeActions ? this.toActions(codeActions) : [];
494
- this.quickFixAction.autoFixable(!!codeActions && codeActions.hasAutoFix);
495
- }
496
- getCodeActions(waitForModel) {
497
- if (this.codeActionsPromise !== null) {
498
- return this.codeActionsPromise;
499
- }
500
- return this.getModel(waitForModel)
501
- .then(model => {
502
- if (model) {
503
- if (!this.codeActionsPromise) {
504
- this.codeActionsPromise = createCancelablePromise(cancellationToken => {
505
- return getCodeActions(this.languageFeaturesService.codeActionProvider, model, ( new Range(
506
- this.marker.range.startLineNumber,
507
- this.marker.range.startColumn,
508
- this.marker.range.endLineNumber,
509
- this.marker.range.endColumn
510
- )), {
511
- type: 1 , triggerAction: CodeActionTriggerSource.ProblemsView, filter: { include: CodeActionKind.QuickFix }
512
- }, Progress.None, cancellationToken).then(actions => {
513
- return this._register(actions);
514
- });
515
- });
516
- }
517
- return this.codeActionsPromise;
518
- }
519
- return null;
520
- });
521
- }
522
- toActions(codeActions) {
523
- return ( codeActions.validActions.map(item => ( new Action(
524
- item.action.command ? item.action.command.id : item.action.title,
525
- item.action.title,
526
- undefined,
527
- true,
528
- () => {
529
- return this.openFileAtMarker(this.marker)
530
- .then(() => this.instantiationService.invokeFunction(applyCodeAction, item, ApplyCodeActionReason.FromProblemsView));
531
- }
532
- ))));
533
- }
534
- openFileAtMarker(element) {
535
- const { resource, selection } = { resource: element.resource, selection: element.range };
536
- return this.editorService.openEditor({
537
- resource,
538
- options: {
539
- selection,
540
- preserveFocus: true,
541
- pinned: false,
542
- revealIfVisible: true
543
- },
544
- }, ACTIVE_GROUP).then(() => undefined);
545
- }
546
- getModel(waitForModel) {
547
- const model = this.modelService.getModel(this.marker.resource);
548
- if (model) {
549
- return Promise.resolve(model);
550
- }
551
- if (waitForModel) {
552
- if (!this.modelPromise) {
553
- this.modelPromise = createCancelablePromise(cancellationToken => {
554
- return ( new Promise((c) => {
555
- this._register(this.modelService.onModelAdded(model => {
556
- if (isEqual(model.uri, this.marker.resource)) {
557
- c(model);
558
- }
559
- }));
560
- }));
561
- });
562
- }
563
- return this.modelPromise;
564
- }
565
- return Promise.resolve(null);
566
- }
567
- };
568
- MarkerViewModel = ( __decorate([
569
- ( __param(1, IModelService)),
570
- ( __param(2, IInstantiationService)),
571
- ( __param(3, IEditorService)),
572
- ( __param(4, ILanguageFeaturesService))
573
- ], MarkerViewModel));
574
- let MarkersViewModel = class MarkersViewModel extends Disposable {
575
- constructor(multiline = true, viewMode = "tree" , contextKeyService, instantiationService) {
576
- super();
577
- this.contextKeyService = contextKeyService;
578
- this.instantiationService = instantiationService;
579
- this._onDidChange = this._register(( new Emitter()));
580
- this.onDidChange = this._onDidChange.event;
581
- this._onDidChangeViewMode = this._register(( new Emitter()));
582
- this.onDidChangeViewMode = this._onDidChangeViewMode.event;
583
- this.markersViewStates = ( new Map());
584
- this.markersPerResource = ( new Map());
585
- this.bulkUpdate = false;
586
- this.hoveredMarker = null;
587
- this.hoverDelayer = ( new Delayer(300));
588
- this._multiline = true;
589
- this._viewMode = "tree" ;
590
- this._multiline = multiline;
591
- this._viewMode = viewMode;
592
- this.viewModeContextKey = MarkersContextKeys.MarkersViewModeContextKey.bindTo(this.contextKeyService);
593
- this.viewModeContextKey.set(viewMode);
594
- }
595
- add(marker) {
596
- if (!( this.markersViewStates.has(marker.id))) {
597
- const viewModel = this.instantiationService.createInstance(MarkerViewModel, marker);
598
- const disposables = [viewModel];
599
- viewModel.multiline = this.multiline;
600
- viewModel.onDidChange(() => {
601
- if (!this.bulkUpdate) {
602
- this._onDidChange.fire(marker);
603
- }
604
- }, this, disposables);
605
- this.markersViewStates.set(marker.id, { viewModel, disposables });
606
- const markers = this.markersPerResource.get(( marker.resource.toString())) || [];
607
- markers.push(marker);
608
- this.markersPerResource.set(( marker.resource.toString()), markers);
609
- }
610
- }
611
- remove(resource) {
612
- const markers = this.markersPerResource.get(( resource.toString())) || [];
613
- for (const marker of markers) {
614
- const value = this.markersViewStates.get(marker.id);
615
- if (value) {
616
- dispose(value.disposables);
617
- }
618
- this.markersViewStates.delete(marker.id);
619
- if (this.hoveredMarker === marker) {
620
- this.hoveredMarker = null;
621
- }
622
- }
623
- this.markersPerResource.delete(( resource.toString()));
624
- }
625
- getViewModel(marker) {
626
- const value = this.markersViewStates.get(marker.id);
627
- return value ? value.viewModel : null;
628
- }
629
- onMarkerMouseHover(marker) {
630
- this.hoveredMarker = marker;
631
- this.hoverDelayer.trigger(() => {
632
- if (this.hoveredMarker) {
633
- const model = this.getViewModel(this.hoveredMarker);
634
- if (model) {
635
- model.showLightBulb();
636
- }
637
- }
638
- });
639
- }
640
- onMarkerMouseLeave(marker) {
641
- if (this.hoveredMarker === marker) {
642
- this.hoveredMarker = null;
643
- }
644
- }
645
- get multiline() {
646
- return this._multiline;
647
- }
648
- set multiline(value) {
649
- let changed = false;
650
- if (this._multiline !== value) {
651
- this._multiline = value;
652
- changed = true;
653
- }
654
- this.bulkUpdate = true;
655
- this.markersViewStates.forEach(({ viewModel }) => {
656
- if (viewModel.multiline !== value) {
657
- viewModel.multiline = value;
658
- changed = true;
659
- }
660
- });
661
- this.bulkUpdate = false;
662
- if (changed) {
663
- this._onDidChange.fire(undefined);
664
- }
665
- }
666
- get viewMode() {
667
- return this._viewMode;
668
- }
669
- set viewMode(value) {
670
- if (this._viewMode === value) {
671
- return;
672
- }
673
- this._viewMode = value;
674
- this._onDidChangeViewMode.fire(value);
675
- this.viewModeContextKey.set(value);
676
- }
677
- dispose() {
678
- this.markersViewStates.forEach(({ disposables }) => dispose(disposables));
679
- this.markersViewStates.clear();
680
- this.markersPerResource.clear();
681
- super.dispose();
682
- }
683
- };
684
- MarkersViewModel = ( __decorate([
685
- ( __param(2, IContextKeyService)),
686
- ( __param(3, IInstantiationService))
687
- ], MarkersViewModel));
688
-
689
- export { Filter, MarkerRenderer, MarkerViewModel, MarkersViewModel, MarkersWidgetAccessibilityProvider, RelatedInformationRenderer, ResourceMarkersRenderer, VirtualDelegate };