SpyglassMC / Spyglass

Development tools for vanilla Minecraft: Java Edition data pack developers.
https://spyglassmc.com
MIT License
302 stars 31 forks source link

Project `fileModified` events can be emitted before `file:` protocol supporter is registered #1606

Open misode opened 22 hours ago

misode commented 22 hours ago

During project#ready, the listDependencyFiles and listProjectFiles tasks are started in parallel. However a problem occurs when listProjectFiles finished before listDependencyFiles, and the watcher notices a file has been modified. Since this.#watcherReady has been set to true it will emit a fileModified event, which will try to read the file. This in turn will try to find the file: uri protocol, but that is only registered at the end of listDependencyFiles, and it is possible that hasn't finished yet.

[Project] [read] Failed creating TextDocument for file:///<workspace>/spyglass.json Error: The protocol “file:” is unsupported.
    at FileServiceImpl.getSupportedProtocol (c:\<extension>\packages\core\src\service\FileService.ts:102:10)
    at FileServiceImpl.readFile (c:\<extension>\packages\core\src\service\FileService.ts:119:25)
    at createTextDocument (c:\<extension>\packages\core\src\service\Project.ts:713:50)
    at getCacheHandlingPromise (c:\<extension>\packages\core\src\service\Project.ts:741:21)
    at _Project.read (c:\<extension>\packages\core\src\service\Project.ts:772:10)
    at _Project.ensureBindingStarted (c:\<extension>\packages\core\src\service\Project.ts:882:26)
    at EventEmitter.<anonymous> (c:\<extension>\packages\core\src\service\Project.ts:378:16)
    at EventEmitter.emit (node:events:531:35)
    at _Project.emit (c:\<extension>\packages\core\src\service\Project.ts:285:29)
    at ChokidarWatcherWrapper.<anonymous> (c:\<extension>\packages\core\src\service\Project.ts:562:12)