@@ -43,6 +43,19 @@ export const loadAndWatch = (
43
43
createFileWatcher ( patterns , leadingDebounce ( load , debounceTime ) , events ) ;
44
44
} ;
45
45
46
+ const patternWatchers : Record <
47
+ string ,
48
+ {
49
+ watcher : vscode . FileSystemWatcher ;
50
+ callbacks : [
51
+ {
52
+ callback : ( e : vscode . Uri ) => void ;
53
+ events : FileEvent [ ] ;
54
+ } ,
55
+ ] ;
56
+ }
57
+ > = { } ;
58
+
46
59
export const createFileWatcher = (
47
60
patterns : string | string [ ] ,
48
61
callback : ( e : vscode . Uri ) => void ,
@@ -55,24 +68,47 @@ export const createFileWatcher = (
55
68
patterns = typeof patterns === "string" ? [ patterns ] : patterns ;
56
69
57
70
return patterns . map ( ( pattern ) => {
71
+ if ( patternWatchers [ pattern ] ) {
72
+ patternWatchers [ pattern ] . callbacks . push ( { callback, events } ) ;
73
+
74
+ return patternWatchers [ pattern ] . watcher ;
75
+ }
76
+
58
77
const watcher = vscode . workspace . createFileSystemWatcher (
59
78
new vscode . RelativePattern ( getWorkspaceFolders ( ) [ 0 ] , pattern ) ,
60
79
! events . includes ( "create" ) ,
61
80
! events . includes ( "change" ) ,
62
81
! events . includes ( "delete" ) ,
63
82
) ;
64
83
65
- if ( events . includes ( "change" ) ) {
66
- watcher . onDidChange ( callback ) ;
67
- }
84
+ watcher . onDidChange ( ( ...args ) => {
85
+ patternWatchers [ pattern ] . callbacks . forEach ( ( cb ) => {
86
+ if ( cb . events . includes ( "change" ) ) {
87
+ cb . callback ( ...args ) ;
88
+ }
89
+ } ) ;
90
+ } ) ;
68
91
69
- if ( events . includes ( "create" ) ) {
70
- watcher . onDidCreate ( callback ) ;
71
- }
92
+ watcher . onDidCreate ( ( ...args ) => {
93
+ patternWatchers [ pattern ] . callbacks . forEach ( ( cb ) => {
94
+ if ( cb . events . includes ( "create" ) ) {
95
+ cb . callback ( ...args ) ;
96
+ }
97
+ } ) ;
98
+ } ) ;
72
99
73
- if ( events . includes ( "delete" ) ) {
74
- watcher . onDidDelete ( callback ) ;
75
- }
100
+ watcher . onDidDelete ( ( ...args ) => {
101
+ patternWatchers [ pattern ] . callbacks . forEach ( ( cb ) => {
102
+ if ( cb . events . includes ( "delete" ) ) {
103
+ cb . callback ( ...args ) ;
104
+ }
105
+ } ) ;
106
+ } ) ;
107
+
108
+ patternWatchers [ pattern ] = {
109
+ watcher,
110
+ callbacks : [ { callback, events } ] ,
111
+ } ;
76
112
77
113
registerWatcher ( watcher ) ;
78
114
0 commit comments