I've drafted the code for parsing each file separately in idle handler (#1291), to avoid blocking the UI for too long.
It would actually be great if something like this could be used in Geany itself as well - only the current document needs to be fully parsed when opened, other files might be parsed "in background" to improve start-up / project open times. Too bad that cooperative multitasking/threading is so complicated in C.
BTW, it is funny, that very similar thing (that asynchronous parsing would speed things up), was [mentioned](https://github.com/geany/geany/pull/3571#issuecomment-1793457233) in the LSP pull request just today :slightly_smiling_face: