CodeEditApp / CodeEditApp/CodeEdit
🐞 Language Server Requests Should Timeout
- Lingua principale
- Swift
- Stelle
- 23k
- Fork
- 1.2k
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Descrizione
### Description
There is a chance that language servers (maliciously or due to a bug) may not respond to requests made by the client (CodeEdit). This can cause problems, for example:
- Memory build up as syntax token requests pile up with no responses.
- App refusing to quit before the language server exits, but the language server does not respond to the `exit` message.
- UI hanging forever after a request (eg for a definition search).
In each of these cases one solution would be to time out the request. I think our LSP requests should have a default timeout length.
This has the caveat for requests that may take a long time. Those requests will need to be overridable so they can take longer. The same goes for requests that need immediate response (like the `exit` message), which will need to be shorter.
### To Reproduce
The sourcekit-lsp binary that ships with Xcode 16 is bugged, and will not respond to the exit message. This leaves CodeEdit hanging when quitting the app and requires a force quit.
The same LSP does not respond to semantic token requests (despite declaring the capability, this is a bug with sourcekit-lsp). This may cause cached request handlers to build up over time.
### Expected Behavior
Each language server request should have a timeout parameter. This likely means creating a new LanguageServer connection type that passes messages through to another type, but provides a timeout handler for requests. This may be something we can contribute back to the LanguageServer package.
### Version Information
CodeEdit: 0.3.3
### Additional Context
_No response_
### Screenshots
_No response_
Guida per i contributori
Apri la guida per i contributori
Direzione di ricerca
Inizia individuando la gestione delle richieste al language server e dell’arresto in CodeEdit, quindi riproduci il problema con il binario sourcekit-lsp fornito con Xcode 16. Definisci il comportamento del timeout per le richieste ordinarie, di lunga durata e immediate; il lavoro è completato quando le richieste non restano più in attesa indefinitamente e il caso di uscita consente di terminare.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- swift
- Ambito
- devtools
- Tipo di issue
- Bug
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 25/100