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

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.
@@ -0,0 +1,477 @@
1
+ import { __decorate, __param } from '../../../../../../../external/tslib/tslib.es6.js';
2
+ import { localizeWithPath } from 'vscode/vscode/vs/nls';
3
+ import { append, $ as $$1, findParentWithClass } from 'vscode/vscode/vs/base/browser/dom';
4
+ import { Event } from 'vscode/vscode/vs/base/common/event';
5
+ import { DisposableStore, Disposable } from 'vscode/vscode/vs/base/common/lifecycle';
6
+ import { IInstantiationService } from 'vscode/vscode/vs/platform/instantiation/common/instantiation';
7
+ import { WorkbenchTable } from 'vscode/vscode/vs/platform/list/browser/listService';
8
+ import { HighlightedLabel } from 'vscode/vscode/vs/base/browser/ui/highlightedlabel/highlightedLabel';
9
+ import { MarkerTableItem, compareMarkersByUri, Marker } from './markersModel.js';
10
+ import { MarkerSeverity } from 'vscode/vscode/vs/platform/markers/common/markers';
11
+ import { SeverityIcon } from 'vscode/vscode/vs/platform/severityIcon/browser/severityIcon';
12
+ import { ActionBar } from 'vscode/vscode/vs/base/browser/ui/actionbar/actionbar';
13
+ import { ILabelService } from 'vscode/vscode/vs/platform/label/common/label';
14
+ import { FilterOptions } from './markersFilterOptions.js';
15
+ import { Link } from 'vscode/vscode/vs/platform/opener/browser/link';
16
+ import { IOpenerService } from 'vscode/vscode/vs/platform/opener/common/opener';
17
+ import { QuickFixAction, QuickFixActionViewItem } from './markersViewActions.js';
18
+ import { DomEmitter } from 'vscode/vscode/vs/base/browser/event';
19
+ import Messages from './messages.js';
20
+ import { isUndefinedOrNull } from 'vscode/vscode/vs/base/common/types';
21
+ import { Range } from 'vscode/vscode/vs/editor/common/core/range';
22
+ import { unsupportedSchemas } from 'vscode/vscode/vs/platform/markers/common/markerService';
23
+ import Severity$1 from 'vscode/vscode/vs/base/common/severity';
24
+
25
+ var MarkerSeverityColumnRenderer_1, MarkerCodeColumnRenderer_1, MarkerFileColumnRenderer_1;
26
+ const $ = $$1;
27
+ let MarkerSeverityColumnRenderer = class MarkerSeverityColumnRenderer {
28
+ static { MarkerSeverityColumnRenderer_1 = this; }
29
+ static { this.TEMPLATE_ID = 'severity'; }
30
+ constructor(markersViewModel, instantiationService) {
31
+ this.markersViewModel = markersViewModel;
32
+ this.instantiationService = instantiationService;
33
+ this.templateId = MarkerSeverityColumnRenderer_1.TEMPLATE_ID;
34
+ }
35
+ renderTemplate(container) {
36
+ const severityColumn = append(container, $('.severity'));
37
+ const icon = append(severityColumn, $(''));
38
+ const actionBarColumn = append(container, $('.actions'));
39
+ const actionBar = ( new ActionBar(actionBarColumn, {
40
+ actionViewItemProvider: (action, options) => action.id === QuickFixAction.ID ? this.instantiationService.createInstance(QuickFixActionViewItem, action, options) : undefined
41
+ }));
42
+ return { actionBar, icon };
43
+ }
44
+ renderElement(element, index, templateData, height) {
45
+ const toggleQuickFix = (enabled) => {
46
+ if (!isUndefinedOrNull(enabled)) {
47
+ const container = findParentWithClass(templateData.icon, 'monaco-table-td');
48
+ container.classList.toggle('quickFix', enabled);
49
+ }
50
+ };
51
+ templateData.icon.title = ( MarkerSeverity.toString(element.marker.severity));
52
+ templateData.icon.className = `marker-icon ${( Severity$1.toString(MarkerSeverity.toSeverity(element.marker.severity)))} codicon ${SeverityIcon.className(MarkerSeverity.toSeverity(element.marker.severity))}`;
53
+ templateData.actionBar.clear();
54
+ const viewModel = this.markersViewModel.getViewModel(element);
55
+ if (viewModel) {
56
+ const quickFixAction = viewModel.quickFixAction;
57
+ templateData.actionBar.push([quickFixAction], { icon: true, label: false });
58
+ toggleQuickFix(viewModel.quickFixAction.enabled);
59
+ quickFixAction.onDidChange(({ enabled }) => toggleQuickFix(enabled));
60
+ quickFixAction.onShowQuickFixes(() => {
61
+ const quickFixActionViewItem = templateData.actionBar.viewItems[0];
62
+ if (quickFixActionViewItem) {
63
+ quickFixActionViewItem.showQuickFixes();
64
+ }
65
+ });
66
+ }
67
+ }
68
+ disposeTemplate(templateData) { }
69
+ };
70
+ MarkerSeverityColumnRenderer = MarkerSeverityColumnRenderer_1 = ( __decorate([
71
+ ( __param(1, IInstantiationService))
72
+ ], MarkerSeverityColumnRenderer));
73
+ let MarkerCodeColumnRenderer = class MarkerCodeColumnRenderer {
74
+ static { MarkerCodeColumnRenderer_1 = this; }
75
+ static { this.TEMPLATE_ID = 'code'; }
76
+ constructor(openerService) {
77
+ this.openerService = openerService;
78
+ this.templateId = MarkerCodeColumnRenderer_1.TEMPLATE_ID;
79
+ }
80
+ renderTemplate(container) {
81
+ const templateDisposable = ( new DisposableStore());
82
+ const codeColumn = append(container, $('.code'));
83
+ const sourceLabel = templateDisposable.add(( new HighlightedLabel(codeColumn)));
84
+ sourceLabel.element.classList.add('source-label');
85
+ const codeLabel = templateDisposable.add(( new HighlightedLabel(codeColumn)));
86
+ codeLabel.element.classList.add('code-label');
87
+ const codeLink = templateDisposable.add(( new Link(codeColumn, { href: '', label: '' }, {}, this.openerService)));
88
+ return { codeColumn, sourceLabel, codeLabel, codeLink, templateDisposable };
89
+ }
90
+ renderElement(element, index, templateData, height) {
91
+ templateData.codeColumn.classList.remove('code-label');
92
+ templateData.codeColumn.classList.remove('code-link');
93
+ if (element.marker.source && element.marker.code) {
94
+ if (typeof element.marker.code === 'string') {
95
+ templateData.codeColumn.classList.add('code-label');
96
+ templateData.codeColumn.title = `${element.marker.source} (${element.marker.code})`;
97
+ templateData.sourceLabel.set(element.marker.source, element.sourceMatches);
98
+ templateData.codeLabel.set(element.marker.code, element.codeMatches);
99
+ }
100
+ else {
101
+ templateData.codeColumn.classList.add('code-link');
102
+ templateData.codeColumn.title = `${element.marker.source} (${element.marker.code.value})`;
103
+ templateData.sourceLabel.set(element.marker.source, element.sourceMatches);
104
+ const codeLinkLabel = templateData.templateDisposable.add(( new HighlightedLabel($('.code-link-label'))));
105
+ codeLinkLabel.set(element.marker.code.value, element.codeMatches);
106
+ templateData.codeLink.link = {
107
+ href: ( element.marker.code.target.toString()),
108
+ title: ( element.marker.code.target.toString()),
109
+ label: codeLinkLabel.element,
110
+ };
111
+ }
112
+ }
113
+ else {
114
+ templateData.codeColumn.title = '';
115
+ templateData.sourceLabel.set('-');
116
+ }
117
+ }
118
+ disposeTemplate(templateData) {
119
+ templateData.templateDisposable.dispose();
120
+ }
121
+ };
122
+ MarkerCodeColumnRenderer = MarkerCodeColumnRenderer_1 = ( __decorate([
123
+ ( __param(0, IOpenerService))
124
+ ], MarkerCodeColumnRenderer));
125
+ class MarkerMessageColumnRenderer {
126
+ constructor() {
127
+ this.templateId = MarkerMessageColumnRenderer.TEMPLATE_ID;
128
+ }
129
+ static { this.TEMPLATE_ID = 'message'; }
130
+ renderTemplate(container) {
131
+ const columnElement = append(container, $('.message'));
132
+ const highlightedLabel = ( new HighlightedLabel(columnElement));
133
+ return { columnElement, highlightedLabel };
134
+ }
135
+ renderElement(element, index, templateData, height) {
136
+ templateData.columnElement.title = element.marker.message;
137
+ templateData.highlightedLabel.set(element.marker.message, element.messageMatches);
138
+ }
139
+ disposeTemplate(templateData) {
140
+ templateData.highlightedLabel.dispose();
141
+ }
142
+ }
143
+ let MarkerFileColumnRenderer = class MarkerFileColumnRenderer {
144
+ static { MarkerFileColumnRenderer_1 = this; }
145
+ static { this.TEMPLATE_ID = 'file'; }
146
+ constructor(labelService) {
147
+ this.labelService = labelService;
148
+ this.templateId = MarkerFileColumnRenderer_1.TEMPLATE_ID;
149
+ }
150
+ renderTemplate(container) {
151
+ const columnElement = append(container, $('.file'));
152
+ const fileLabel = ( new HighlightedLabel(columnElement));
153
+ fileLabel.element.classList.add('file-label');
154
+ const positionLabel = ( new HighlightedLabel(columnElement));
155
+ positionLabel.element.classList.add('file-position');
156
+ return { columnElement, fileLabel, positionLabel };
157
+ }
158
+ renderElement(element, index, templateData, height) {
159
+ const positionLabel = Messages.MARKERS_PANEL_AT_LINE_COL_NUMBER(element.marker.startLineNumber, element.marker.startColumn);
160
+ templateData.columnElement.title = `${this.labelService.getUriLabel(element.marker.resource, { relative: false })} ${positionLabel}`;
161
+ templateData.fileLabel.set(this.labelService.getUriLabel(element.marker.resource, { relative: true }), element.fileMatches);
162
+ templateData.positionLabel.set(positionLabel, undefined);
163
+ }
164
+ disposeTemplate(templateData) {
165
+ templateData.fileLabel.dispose();
166
+ templateData.positionLabel.dispose();
167
+ }
168
+ };
169
+ MarkerFileColumnRenderer = MarkerFileColumnRenderer_1 = ( __decorate([
170
+ ( __param(0, ILabelService))
171
+ ], MarkerFileColumnRenderer));
172
+ class MarkerOwnerColumnRenderer {
173
+ constructor() {
174
+ this.templateId = MarkerOwnerColumnRenderer.TEMPLATE_ID;
175
+ }
176
+ static { this.TEMPLATE_ID = 'owner'; }
177
+ renderTemplate(container) {
178
+ const columnElement = append(container, $('.owner'));
179
+ const highlightedLabel = ( new HighlightedLabel(columnElement));
180
+ return { columnElement, highlightedLabel };
181
+ }
182
+ renderElement(element, index, templateData, height) {
183
+ templateData.columnElement.title = element.marker.owner;
184
+ templateData.highlightedLabel.set(element.marker.owner, element.ownerMatches);
185
+ }
186
+ disposeTemplate(templateData) {
187
+ templateData.highlightedLabel.dispose();
188
+ }
189
+ }
190
+ class MarkersTableVirtualDelegate {
191
+ constructor() {
192
+ this.headerRowHeight = MarkersTableVirtualDelegate.HEADER_ROW_HEIGHT;
193
+ }
194
+ static { this.HEADER_ROW_HEIGHT = 24; }
195
+ static { this.ROW_HEIGHT = 24; }
196
+ getHeight(item) {
197
+ return MarkersTableVirtualDelegate.ROW_HEIGHT;
198
+ }
199
+ }
200
+ let MarkersTable = class MarkersTable extends Disposable {
201
+ constructor(container, markersViewModel, resourceMarkers, filterOptions, options, instantiationService, labelService) {
202
+ super();
203
+ this.container = container;
204
+ this.markersViewModel = markersViewModel;
205
+ this.resourceMarkers = resourceMarkers;
206
+ this.filterOptions = filterOptions;
207
+ this.instantiationService = instantiationService;
208
+ this.labelService = labelService;
209
+ this._itemCount = 0;
210
+ this.table = this.instantiationService.createInstance(WorkbenchTable, 'Markers', this.container, ( new MarkersTableVirtualDelegate()), [
211
+ {
212
+ label: '',
213
+ tooltip: '',
214
+ weight: 0,
215
+ minimumWidth: 36,
216
+ maximumWidth: 36,
217
+ templateId: MarkerSeverityColumnRenderer.TEMPLATE_ID,
218
+ project(row) { return row; }
219
+ },
220
+ {
221
+ label: ( localizeWithPath(
222
+ 'vs/workbench/contrib/markers/browser/markersTable',
223
+ 'codeColumnLabel',
224
+ "Code"
225
+ )),
226
+ tooltip: '',
227
+ weight: 1,
228
+ minimumWidth: 100,
229
+ maximumWidth: 300,
230
+ templateId: MarkerCodeColumnRenderer.TEMPLATE_ID,
231
+ project(row) { return row; }
232
+ },
233
+ {
234
+ label: ( localizeWithPath(
235
+ 'vs/workbench/contrib/markers/browser/markersTable',
236
+ 'messageColumnLabel',
237
+ "Message"
238
+ )),
239
+ tooltip: '',
240
+ weight: 4,
241
+ templateId: MarkerMessageColumnRenderer.TEMPLATE_ID,
242
+ project(row) { return row; }
243
+ },
244
+ {
245
+ label: ( localizeWithPath(
246
+ 'vs/workbench/contrib/markers/browser/markersTable',
247
+ 'fileColumnLabel',
248
+ "File"
249
+ )),
250
+ tooltip: '',
251
+ weight: 2,
252
+ templateId: MarkerFileColumnRenderer.TEMPLATE_ID,
253
+ project(row) { return row; }
254
+ },
255
+ {
256
+ label: ( localizeWithPath(
257
+ 'vs/workbench/contrib/markers/browser/markersTable',
258
+ 'sourceColumnLabel',
259
+ "Source"
260
+ )),
261
+ tooltip: '',
262
+ weight: 1,
263
+ minimumWidth: 100,
264
+ maximumWidth: 300,
265
+ templateId: MarkerOwnerColumnRenderer.TEMPLATE_ID,
266
+ project(row) { return row; }
267
+ }
268
+ ], [
269
+ this.instantiationService.createInstance(MarkerSeverityColumnRenderer, this.markersViewModel),
270
+ this.instantiationService.createInstance(MarkerCodeColumnRenderer),
271
+ this.instantiationService.createInstance(MarkerMessageColumnRenderer),
272
+ this.instantiationService.createInstance(MarkerFileColumnRenderer),
273
+ this.instantiationService.createInstance(MarkerOwnerColumnRenderer),
274
+ ], options);
275
+ const list = this.table.domNode.querySelector('.monaco-list-rows');
276
+ const onRowHover = Event.chain(this._register(( new DomEmitter(list, 'mouseover'))).event, $ => ( ( $.map(
277
+ e => findParentWithClass(e.target, 'monaco-list-row', 'monaco-list-rows')
278
+ ))
279
+ .filter(((e) => !!e))
280
+ .map(e => parseInt(e.getAttribute('data-index')))));
281
+ const onListLeave = ( Event.map(this._register(( new DomEmitter(list, 'mouseleave'))).event, () => -1));
282
+ const onRowHoverOrLeave = Event.latch(Event.any(onRowHover, onListLeave));
283
+ const onRowPermanentHover = Event.debounce(onRowHoverOrLeave, (_, e) => e, 500);
284
+ this._register(onRowPermanentHover(e => {
285
+ if (e !== -1 && this.table.row(e)) {
286
+ this.markersViewModel.onMarkerMouseHover(this.table.row(e));
287
+ }
288
+ }));
289
+ }
290
+ get contextKeyService() {
291
+ return this.table.contextKeyService;
292
+ }
293
+ get onContextMenu() {
294
+ return this.table.onContextMenu;
295
+ }
296
+ get onDidOpen() {
297
+ return this.table.onDidOpen;
298
+ }
299
+ get onDidChangeFocus() {
300
+ return this.table.onDidChangeFocus;
301
+ }
302
+ get onDidChangeSelection() {
303
+ return this.table.onDidChangeSelection;
304
+ }
305
+ collapseMarkers() { }
306
+ domFocus() {
307
+ this.table.domFocus();
308
+ }
309
+ filterMarkers(resourceMarkers, filterOptions) {
310
+ this.filterOptions = filterOptions;
311
+ this.reset(resourceMarkers);
312
+ }
313
+ getFocus() {
314
+ const focus = this.table.getFocus();
315
+ return focus.length > 0 ? [...( focus.map(f => this.table.row(f)))] : [];
316
+ }
317
+ getHTMLElement() {
318
+ return this.table.getHTMLElement();
319
+ }
320
+ getRelativeTop(marker) {
321
+ return marker ? this.table.getRelativeTop(this.table.indexOf(marker)) : null;
322
+ }
323
+ getSelection() {
324
+ const selection = this.table.getSelection();
325
+ return selection.length > 0 ? [...( selection.map(i => this.table.row(i)))] : [];
326
+ }
327
+ getVisibleItemCount() {
328
+ return this._itemCount;
329
+ }
330
+ isVisible() {
331
+ return !this.container.classList.contains('hidden');
332
+ }
333
+ layout(height, width) {
334
+ this.container.style.height = `${height}px`;
335
+ this.table.layout(height, width);
336
+ }
337
+ reset(resourceMarkers) {
338
+ this.resourceMarkers = resourceMarkers;
339
+ const items = [];
340
+ for (const resourceMarker of this.resourceMarkers) {
341
+ for (const marker of resourceMarker.markers) {
342
+ if (( unsupportedSchemas.has(marker.resource.scheme))) {
343
+ continue;
344
+ }
345
+ if (this.filterOptions.excludesMatcher.matches(marker.resource)) {
346
+ continue;
347
+ }
348
+ if (this.filterOptions.includesMatcher.matches(marker.resource)) {
349
+ items.push(( new MarkerTableItem(marker)));
350
+ continue;
351
+ }
352
+ const matchesSeverity = this.filterOptions.showErrors && MarkerSeverity.Error === marker.marker.severity ||
353
+ this.filterOptions.showWarnings && MarkerSeverity.Warning === marker.marker.severity ||
354
+ this.filterOptions.showInfos && MarkerSeverity.Info === marker.marker.severity;
355
+ if (!matchesSeverity) {
356
+ continue;
357
+ }
358
+ if (this.filterOptions.textFilter.text) {
359
+ const sourceMatches = marker.marker.source ? FilterOptions._filter(this.filterOptions.textFilter.text, marker.marker.source) ?? undefined : undefined;
360
+ const codeMatches = marker.marker.code ? FilterOptions._filter(this.filterOptions.textFilter.text, typeof marker.marker.code === 'string' ? marker.marker.code : marker.marker.code.value) ?? undefined : undefined;
361
+ const messageMatches = FilterOptions._messageFilter(this.filterOptions.textFilter.text, marker.marker.message) ?? undefined;
362
+ const fileMatches = FilterOptions._messageFilter(this.filterOptions.textFilter.text, this.labelService.getUriLabel(marker.resource, { relative: true })) ?? undefined;
363
+ const ownerMatches = FilterOptions._messageFilter(this.filterOptions.textFilter.text, marker.marker.owner) ?? undefined;
364
+ const matched = sourceMatches || codeMatches || messageMatches || fileMatches || ownerMatches;
365
+ if ((matched && !this.filterOptions.textFilter.negate) || (!matched && this.filterOptions.textFilter.negate)) {
366
+ items.push(( new MarkerTableItem(
367
+ marker,
368
+ sourceMatches,
369
+ codeMatches,
370
+ messageMatches,
371
+ fileMatches,
372
+ ownerMatches
373
+ )));
374
+ }
375
+ continue;
376
+ }
377
+ items.push(( new MarkerTableItem(marker)));
378
+ }
379
+ }
380
+ this._itemCount = items.length;
381
+ this.table.splice(0, Number.POSITIVE_INFINITY, items.sort((a, b) => {
382
+ let result = MarkerSeverity.compare(a.marker.severity, b.marker.severity);
383
+ if (result === 0) {
384
+ result = compareMarkersByUri(a.marker, b.marker);
385
+ }
386
+ if (result === 0) {
387
+ result = Range.compareRangesUsingStarts(a.marker, b.marker);
388
+ }
389
+ return result;
390
+ }));
391
+ }
392
+ revealMarkers(activeResource, focus, lastSelectedRelativeTop) {
393
+ if (activeResource) {
394
+ const activeResourceIndex = this.resourceMarkers.indexOf(activeResource);
395
+ if (activeResourceIndex !== -1) {
396
+ if (this.hasSelectedMarkerFor(activeResource)) {
397
+ const tableSelection = this.table.getSelection();
398
+ this.table.reveal(tableSelection[0], lastSelectedRelativeTop);
399
+ if (focus) {
400
+ this.table.setFocus(tableSelection);
401
+ }
402
+ }
403
+ else {
404
+ this.table.reveal(activeResourceIndex, 0);
405
+ if (focus) {
406
+ this.table.setFocus([activeResourceIndex]);
407
+ this.table.setSelection([activeResourceIndex]);
408
+ }
409
+ }
410
+ }
411
+ }
412
+ else if (focus) {
413
+ this.table.setSelection([]);
414
+ this.table.focusFirst();
415
+ }
416
+ }
417
+ setAriaLabel(label) {
418
+ this.table.domNode.ariaLabel = label;
419
+ }
420
+ setMarkerSelection(selection, focus) {
421
+ if (this.isVisible()) {
422
+ if (selection && selection.length > 0) {
423
+ this.table.setSelection(( selection.map(m => this.findMarkerIndex(m))));
424
+ if (focus && focus.length > 0) {
425
+ this.table.setFocus(( focus.map(f => this.findMarkerIndex(f))));
426
+ }
427
+ else {
428
+ this.table.setFocus([this.findMarkerIndex(selection[0])]);
429
+ }
430
+ this.table.reveal(this.findMarkerIndex(selection[0]));
431
+ }
432
+ else if (this.getSelection().length === 0 && this.getVisibleItemCount() > 0) {
433
+ this.table.setSelection([0]);
434
+ this.table.setFocus([0]);
435
+ this.table.reveal(0);
436
+ }
437
+ }
438
+ }
439
+ toggleVisibility(hide) {
440
+ this.container.classList.toggle('hidden', hide);
441
+ }
442
+ update(resourceMarkers) {
443
+ for (const resourceMarker of resourceMarkers) {
444
+ const index = this.resourceMarkers.indexOf(resourceMarker);
445
+ this.resourceMarkers.splice(index, 1, resourceMarker);
446
+ }
447
+ this.reset(this.resourceMarkers);
448
+ }
449
+ updateMarker(marker) {
450
+ this.table.rerender();
451
+ }
452
+ findMarkerIndex(marker) {
453
+ for (let index = 0; index < this.table.length; index++) {
454
+ if (this.table.row(index).marker === marker.marker) {
455
+ return index;
456
+ }
457
+ }
458
+ return -1;
459
+ }
460
+ hasSelectedMarkerFor(resource) {
461
+ const selectedElement = this.getSelection();
462
+ if (selectedElement && selectedElement.length > 0) {
463
+ if (selectedElement[0] instanceof Marker) {
464
+ if (( resource.has(selectedElement[0].marker.resource))) {
465
+ return true;
466
+ }
467
+ }
468
+ }
469
+ return false;
470
+ }
471
+ };
472
+ MarkersTable = ( __decorate([
473
+ ( __param(5, IInstantiationService)),
474
+ ( __param(6, ILabelService))
475
+ ], MarkersTable));
476
+
477
+ export { MarkersTable };