In VSCode on linux it's very common to run out of file watchers, because vscode's default behavior is to put a watch on every file in the open directory, recursively (microsoft/vscode#7950). To reproduce this on linux, open DefinitelyTyped in both code and code-insiders -- this should consume all available watchers.
Then open a sample typescript project and open any .ts file. Here's the tsserver.log:
Info 0 [12:38:50.26] Binding...
Info 1 [12:38:50.33] request: {"seq":0,"type":"request","command":"configure","arguments":{"hostInfo":"vscode"}}
Info 2 [12:38:50.33] Host information vscode
Info 3 [12:38:50.34] response: {"seq":0,"type":"response","command":"configure","request_seq":0,"success":true}
Perf 4 [12:38:50.34] 0::configure: async elapsed time (in milliseconds) 0.9927
Info 5 [12:38:50.35] request: {"seq":1,"type":"request","command":"compilerOptionsForInferredProjects","arguments":{"options":{"module":"CommonJS","target":"ES6","allowSyntheticDefaultImports":true,"allowNonTsExtensions":true,"allowJs":true,"jsx":"Preserve","checkJs":false}}}
Info 6 [12:38:50.36] Scheduled: *refreshInferredProjects*
Perf 7 [12:38:50.36] 1::compilerOptionsForInferredProjects: elapsed time (in milliseconds) 1.1392
Info 8 [12:38:50.36] response: {"seq":0,"type":"response","command":"compilerOptionsForInferredProjects","request_seq":1,"success":true,"body":true}
Info 9 [12:38:50.37] request: {"seq":2,"type":"request","command":"open","arguments":{"file":"/home/andy/sample/ts/src/a.ts","fileContent":"declare let ab: A | AB;\nab = { a: '', b: ' ' } as AB; // A | AB why?\nab.b // Error b does not exists on type A | AB\n\ndeclare let x: string | number;\nx = 0;\nx;\n\n","scriptKindName":"TS","projectRootPath":"/home/andy/sample/ts"}}
Info 10 [12:38:50.38] Search path: /home/andy/sample/ts/src
Info 11 [12:38:50.39] ConfigFilePresence:: Current Watches: :: File: /home/andy/sample/ts/src/tsconfig.json Currently impacted open files: RootsOfInferredProjects: OtherOpenFiles: /home/andy/sample/ts/src/a.ts Status: File added to open files impacted by this config file
Info 12 [12:38:50.39] ConfigFilePresence:: Current Watches: :: File: /home/andy/sample/ts/src/jsconfig.json Currently impacted open files: RootsOfInferredProjects: OtherOpenFiles: /home/andy/sample/ts/src/a.ts Status: File added to open files impacted by this config file
Info 13 [12:38:50.39] ConfigFilePresence:: Current Watches: :: File: /home/andy/sample/ts/tsconfig.json Currently impacted open files: RootsOfInferredProjects: OtherOpenFiles: /home/andy/sample/ts/src/a.ts Status: File added to open files impacted by this config file
Info 14 [12:38:50.39] For info: /home/andy/sample/ts/src/a.ts :: Config file name: /home/andy/sample/ts/tsconfig.json
Info 15 [12:38:50.54] Opened configuration file /home/andy/sample/ts/tsconfig.json
Info 16 [12:38:50.105] FileWatcher:: Added: PathInfo: /home/andy/sample/ts/tsconfig.json Project: /home/andy/sample/ts/tsconfig.json WatchType: Config file for the program
Info 17 [12:38:50.106] DirectoryWatcher recursive:: Added: PathInfo: /home/andy/sample/ts Project: /home/andy/sample/ts/tsconfig.json WatchType: Wild card directory
Err 18 [12:38:50.116] Exception on executing command {"seq":2,"type":"request","command":"open","arguments":{"file":"/home/andy/sample/ts/src/a.ts","fileContent":"declare let ab: A | AB;\nab = { a: '', b: ' ' } as AB; // A | AB why?\nab.b // Error b does not exists on type A | AB\n\ndeclare let x: string | number;\nx = 0;\nx;\n\n","scriptKindName":"TS","projectRootPath":"/home/andy/sample/ts"}}:
watch /home/andy/sample/ts ENOSPC
Error: watch /home/andy/sample/ts ENOSPC
at exports._errnoException (util.js:1050:11)
at FSWatcher.start (fs.js:1410:19)
at Object.fs.watch (fs.js:1436:11)
at watchPresentDirectory (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:3637:42)
at fsWatchDirectory (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:3622:21)
at Object.watchDirectory (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:3775:28)
at addDirectoryWatcher (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:80343:21)
at createWatcherWithLogging (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:80354:23)
at Object.addDirectoryWatcherWithLogging (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:80348:16)
at ProjectService.watchDirectory (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:82083:107)
at ProjectService.watchWildcardDirectory (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:82335:29)
at /home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:81816:228
at createWildcardDirectoryWatcher (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:80308:26)
at /home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:8636:30
at Map.forEach (native)
at Object.mutateMap (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:8634:16)
at Object.updateWatchingWildcardDirectories (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:80301:12)
at ConfiguredProject.watchWildcards (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:81816:20)
at ProjectService.createConfiguredProject (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:82801:29)
at ProjectService.openClientFileWithNormalizedPath (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:83110:44)
at IOSession.Session.openClientFile (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:84425:46)
at Session.handlers.ts.createMapFromTemplate._a.(anonymous function) (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:83666:31)
at /home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:85046:88
at IOSession.Session.executeWithRequestId (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:85037:28)
at IOSession.Session.executeCommand (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:85046:33)
at IOSession.Session.onMessage (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:85066:35)
at Interface.<anonymous> (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:86201:27)
at emitOne (events.js:96:13)
at Interface.emit (events.js:191:7)
at Interface._onLine (readline.js:241:10)
at Interface._normalWrite (readline.js:384:12)
at Socket.ondata (readline.js:101:10)
at emitOne (events.js:96:13)
at Socket.emit (events.js:191:7)
at readableAddChunk (_stream_readable.js:178:18)
at Socket.Readable.push (_stream_readable.js:136:10)
at Pipe.onread (net.js:560:20)
Info 19 [12:38:50.117] response: {"seq":0,"type":"response","command":"open","request_seq":2,"success":false,"message":"Error processing request. watch /home/andy/sample/ts ENOSPC\nError: watch /home/andy/sample/ts ENOSPC\n at exports._errnoException (util.js:1050:11)\n at FSWatcher.start (fs.js:1410:19)\n at Object.fs.watch (fs.js:1436:11)\n at watchPresentDirectory (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:3637:42)\n at fsWatchDirectory (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:3622:21)\n at Object.watchDirectory (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:3775:28)\n at addDirectoryWatcher (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:80343:21)\n at createWatcherWithLogging (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:80354:23)\n at Object.addDirectoryWatcherWithLogging (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:80348:16)\n at ProjectService.watchDirectory (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:82083:107)\n at ProjectService.watchWildcardDirectory (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:82335:29)\n at /home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:81816:228\n at createWildcardDirectoryWatcher (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:80308:26)\n at /home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:8636:30\n at Map.forEach (native)\n at Object.mutateMap (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:8634:16)\n at Object.updateWatchingWildcardDirectories (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:80301:12)\n at ConfiguredProject.watchWildcards (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:81816:20)\n at ProjectService.createConfiguredProject (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:82801:29)\n at ProjectService.openClientFileWithNormalizedPath (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:83110:44)\n at IOSession.Session.openClientFile (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:84425:46)\n at Session.handlers.ts.createMapFromTemplate._a.(anonymous function) (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:83666:31)\n at /home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:85046:88\n at IOSession.Session.executeWithRequestId (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:85037:28)\n at IOSession.Session.executeCommand (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:85046:33)\n at IOSession.Session.onMessage (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:85066:35)\n at Interface.<anonymous> (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:86201:27)\n at emitOne (events.js:96:13)\n at Interface.emit (events.js:191:7)\n at Interface._onLine (readline.js:241:10)\n at Interface._normalWrite (readline.js:384:12)\n at Socket.ondata (readline.js:101:10)\n at emitOne (events.js:96:13)\n at Socket.emit (events.js:191:7)\n at readableAddChunk (_stream_readable.js:178:18)\n at Socket.Readable.push (_stream_readable.js:136:10)\n at Pipe.onread (net.js:560:20)"}
Info 20 [12:38:50.117] request: {"seq":3,"type":"request","command":"geterr","arguments":{"delay":0,"files":["/home/andy/sample/ts/src/a.ts"]}}
Info 21 [12:38:50.118] refreshInferredProjects: updating project structure from ...
Info 22 [12:38:50.118] Open files:
Info 22 [12:38:50.118] refreshInferredProjects: updated project structure ...
Info 23 [12:38:50.118] Open files:
Err 23 [12:38:50.118] Exception on executing command delayed processing of request 3:
No Project.
Error: No Project.
at Object.ThrowNoProject (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:79626:23)
at ScriptInfo.getDefaultProject (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:80202:46)
at ProjectService.getDefaultProjectForFile (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:82244:39)
at /home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:84681:74
at Object.mapDefined (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:1604:30)
at IOSession.Session.createCheckList (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:84679:27)
at IOSession.Session.getDiagnostics (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:84686:38)
at /home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:83752:82
at MultistepOperation.executeAction (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:83561:25)
at MultistepOperation.startNew (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:83526:22)
at Session.handlers.ts.createMapFromTemplate._a.(anonymous function) (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:83752:42)
at /home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:85046:88
at IOSession.Session.executeWithRequestId (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:85037:28)
at IOSession.Session.executeCommand (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:85046:33)
at IOSession.Session.onMessage (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:85066:35)
at Interface.<anonymous> (/home/andy/.nvm/versions/node/v8.5.0/lib/node_modules/typescript/lib/tsserver.js:86201:27)
at emitOne (events.js:96:13)
at Interface.emit (events.js:191:7)
at Interface._onLine (readline.js:241:10)
at Interface._normalWrite (readline.js:384:12)
at Socket.ondata (readline.js:101:10)
at emitOne (events.js:96:13)
at Socket.emit (events.js:191:7)
at readableAddChunk (_stream_readable.js:178:18)
at Socket.Readable.push (_stream_readable.js:136:10)
at Pipe.onread (net.js:560:20)
Info 24 [12:38:50.119] event: {"seq":0,"type":"event","event":"requestCompleted","body":{"request_seq":3}}
Perf 25 [12:38:50.119] 3::geterr: async elapsed time (in milliseconds) 1.9146
Info 26 [12:38:50.286] Running: *refreshInferredProjects*
Info 27 [12:38:50.287] got projects updated in background, updating diagnostics for
Previously TypeScript was still able to function even without being able to create all watchers -- is there a way we could still do that?
TypeScript Version: nightly (typescript@2.6.0-dev.20171006)
Code
In VSCode on linux it's very common to run out of file watchers, because vscode's default behavior is to put a watch on every file in the open directory, recursively (microsoft/vscode#7950). To reproduce this on linux, open DefinitelyTyped in both
codeandcode-insiders-- this should consume all available watchers.Then open a sample
typescriptproject and open any.tsfile. Here's thetsserver.log:Previously TypeScript was still able to function even without being able to create all watchers -- is there a way we could still do that?