uqbar-project / wollok-lsp-ide

IDE for Wollok - LSP node-based
GNU General Public License v3.0
7 stars 3 forks source link

Renombrar un archivo con errores deja Problems zombies #149

Closed PalumboN closed 4 months ago

PalumboN commented 6 months ago

Tenía 2 packages con el mismo nombre:

- pepita.wlk
- pepita.wtest

Y renombre el test a -> pepitaTest.wtest -> y luego le fui agregando un número.

Este es el resultado en la tab de Problems:

image

Los problemas de archivos que ya no existen (con el nombre viejo) quedan por siempre.

PalumboN commented 6 months ago

Creo que habría que tocar esta función (que dispara cada vez que se renombra o elimina un archivo) para que limpie todo los Problems antes de volver a validar los documents.

https://github.com/uqbar-project/wollok-lsp-ide/blob/933cba92f34f5a737c39ce2041d2dd4b9f4ac062/server/src/server.ts#L165-L168

fdodino commented 5 months ago

Efectivamente, venía complicado el tema porque la API de VSC está mal diseñada, no tiene un método para hacer un resetDiagnostics y te obligan a que vos te encargues de manejar todo con un solo método setDiagnostics({ uri, diagnostics }). Para colmo, el método documents.keys() que te devuelve la lista de los archivos de un proyecto, con el rename se trula un poco y te devuelve tanto el archivo antes de renombrar como el nuevo, por eso te quedan los problemas zombies.

La forma en que finalmente logré resolverlo fue meter un setTimeout, para asegurarme que

Bastante choto el comportamiento de este componente de VCS, me hizo extrañar bocha al Eclipse que los centennials tanto bardean.

PalumboN commented 4 months ago

Para colmo, el método documents.keys() que te devuelve la lista de los archivos de un proyecto, con el rename se trula un poco y te devuelve tanto el archivo antes de renombrar como el nuevo, por eso te quedan los problemas zombies.

Claro, por eso proponía borrar todos los diagnostics (mandar una lista vacía) de todos los archivos registrados (incluyendo viejos y nuevos) antes de re-validar. Luego el validador debería solamente crear diagnostics para los archivos que tienen un nodo asociado, así que el viejo no me importa si queda ahí.

Después se podría implementar algo para limpiarlo, si es que molesta. Pero yo trataría de evitar los timeouts.

fdodino commented 4 months ago

Para colmo, el método documents.keys() que te devuelve la lista de los archivos de un proyecto, con el rename se trula un poco y te devuelve tanto el archivo antes de renombrar como el nuevo, por eso te quedan los problemas zombies.

Claro, por eso proponía borrar todos los diagnostics (mandar una lista vacía) de todos los archivos registrados (incluyendo viejos y nuevos) antes de re-validar. Luego el validador debería solamente crear diagnostics para los archivos que tienen un nodo asociado, así que el viejo no me importa si queda ahí.

Después se podría implementar algo para limpiarlo, si es que molesta. Pero yo trataría de evitar los timeouts.

Solo podés borrar los diagnostics si le pasás la lista de keys. Y no tenés forma de conocer los keys la primera vez, de todas las opciones el timeout (que solo encola el laburo de recrear los diagnostics) fue lo que mejor anduvo.