@@ -29,22 +29,38 @@ export class MarkerList {
29
29
private readonly _onDidChange = new Emitter < void > ( ) ;
30
30
readonly onDidChange : Event < void > = this . _onDidChange . event ;
31
31
32
+ private readonly _resourceFilter ?: ( uri : URI ) => boolean ;
32
33
private readonly _dispoables = new DisposableStore ( ) ;
33
34
34
35
private _markers : IMarker [ ] = [ ] ;
35
36
private _nextIdx : number = - 1 ;
36
37
37
38
constructor (
38
- private readonly _scope : URI | undefined ,
39
+ resourceFilter : URI | ( ( uri : URI ) => boolean ) | undefined ,
39
40
@IMarkerService private readonly _markerService : IMarkerService ,
40
41
) {
42
+ if ( URI . isUri ( resourceFilter ) ) {
43
+ this . _resourceFilter = uri => uri . toString ( ) === resourceFilter . toString ( ) ;
44
+ } else if ( resourceFilter ) {
45
+ this . _resourceFilter = resourceFilter ;
46
+ }
47
+
48
+ const updateMarker = ( ) => {
49
+ this . _markers = this . _markerService . read ( {
50
+ resource : URI . isUri ( resourceFilter ) ? resourceFilter : undefined ,
51
+ severities : MarkerSeverity . Error | MarkerSeverity . Warning | MarkerSeverity . Info
52
+ } ) ;
53
+ if ( typeof resourceFilter === 'function' ) {
54
+ this . _markers = this . _markers . filter ( m => this . _resourceFilter ! ( m . resource ) ) ;
55
+ }
56
+ this . _markers . sort ( MarkerList . _compareMarker ) ;
57
+ } ;
41
58
42
- const filter = { resource : this . _scope , severities : MarkerSeverity . Error | MarkerSeverity . Warning | MarkerSeverity . Info } ;
43
- this . _markers = this . _markerService . read ( filter ) . sort ( MarkerList . _compareMarker ) ;
59
+ updateMarker ( ) ;
44
60
45
- this . _dispoables . add ( _markerService . onMarkerChanged ( e => {
46
- if ( ! this . _scope || e . some ( e => e . toString ( ) === _scope ?. toString ( ) ) ) {
47
- this . _markers = this . _markerService . read ( filter ) . sort ( MarkerList . _compareMarker ) ;
61
+ this . _dispoables . add ( _markerService . onMarkerChanged ( uris => {
62
+ if ( ! this . _resourceFilter || uris . some ( uri => this . _resourceFilter ! ( uri ) ) ) {
63
+ updateMarker ( ) ;
48
64
this . _nextIdx = - 1 ;
49
65
this . _onDidChange . fire ( ) ;
50
66
}
@@ -57,13 +73,10 @@ export class MarkerList {
57
73
}
58
74
59
75
matches ( uri : URI | undefined ) {
60
- if ( this . _scope === uri ) {
76
+ if ( ! this . _resourceFilter ) {
61
77
return true ;
62
78
}
63
- if ( this . _scope && uri && this . _scope . toString ( ) === uri . toString ( ) ) {
64
- return true ;
65
- }
66
- return false ;
79
+ return uri && this . _resourceFilter ( uri ) ;
67
80
}
68
81
69
82
get selected ( ) : MarkerCoordinate | undefined {
0 commit comments