LuaLS / LuaLS/lua-language-server

Logic to sort diagnostics by cost doesn't work because of async processing

Aberta
#2,677 0 comentários 0 reações 0 responsáveis Ver no GitHub

Ninguém assumiu esta issue ainda.

Linguagem predominante
Lua
Estrelas
4.4k
Forks
442
Métricas de merge de PRs
Nenhum PR com merge em 30d

Descrição

I found some logic in diagnostics/init.lua that doesn't work as expected: https://github.com/LuaLS/lua-language-server/blob/87abc4245f2a24e1cc35851b6464af9588934286/script/core/diagnostics/init.lua#L158 tries to sort diagnostics by cost to run cheap diags first.

However, the code to measure to runtime at https://github.com/LuaLS/lua-language-server/blob/87abc4245f2a24e1cc35851b6464af9588934286/script/core/diagnostics/init.lua#L180 does to by calling os.clock() before and after invoking a given diagnostic.

This doesn't work if the diagnostic yields during execution, and most diagnostics do exactly that via `await.delay()`. The end result is that the order is pretty much random (which I confirmed by looking at the diagCost arrays with and without await.delay() enabled)

Guia de contribuição

Abrir o guia de contribuição

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Direção de pesquisa

Comece em script/core/diagnostics/init.lua, na lógica de ordenação por volta da linha 158 e na medição do tempo de execução por volta da linha 180. Compare os arrays de custo dos diagnósticos com await.delay() habilitado e desabilitado para reproduzir o problema. Está concluído quando os diagnósticos são ordenados por um custo medido significativo mesmo quando a execução do diagnóstico produz um yield.

Escrita pelo modelo de indexação a partir do texto da issue.

Avaliação

Stack de tecnologia
lua
Domínio
tooling
Tipo de issue
Bug
Dificuldade
3/5
Tempo estimado
1-2 dias
Status de atividade
Estagnada
Clareza
Razoavelmente clara
Facilidade para iniciantes
45/100

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.