* A deleted DIRECTORY arrives as one event on the directory's own path — * no source extension, so the source-file filter drops it, and the files * underneath may never get events of their own (Windows's recursive * watcher reports only the top-most removed entry; macOS FSEvents can * co
(rel: string)
| 655 | * costs at most one no-op scan-diff, absorbed by the debounce. |
| 656 | */ |
| 657 | private maybeScheduleForRemovedDir(rel: string): void { |
| 658 | try { |
| 659 | fs.statSync(path.join(this.projectRoot, rel)); |
| 660 | return; // still on disk — an ordinary non-source change, ignore |
| 661 | } catch { |
| 662 | /* gone — fall through */ |
| 663 | } |
| 664 | logDebug('Non-source path removed; scheduling sync for possible directory removal', { |
| 665 | path: rel, |
| 666 | }); |
| 667 | this.needsFullScan = true; |
| 668 | this.scheduleSync(); |
| 669 | } |
| 670 | |
| 671 | /** Close and forget the watch for a directory that errored/was removed. */ |
| 672 | private unwatchDir(dir: string): void { |
no test coverage detected