LuaLS / LuaLS/lua-language-server

[Feature Request] Setting for case-insensitive require resolution?

Aberta
#2,845 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

Priority
Low

Description
On Windows and Mac, file systems are case-insensitive by default. Lua's filepath resolution is based on the OS, so I feel like while only the exact spelling for a file should be autocompleted, when actually resolving the type of a module, lua-language-server should have an option to be case-insensitive.

Example

root/
├── myscript.lua
└── mymod.lua
-- myscript.lua --
local myMod = require "myMod"

Currently you can write a plugin similar to the one below using ResolveRequire

local libRoot = fs.current_path() / "library"

local function resolveCaseInsensitive(root, moduleName)
    for file in fs.pairs(root) do
        if fs.is_regular_file(file) then
            local fileName = file:filename():string()
            if fileName:lower() == (moduleName .. ".lua"):lower() then
                return file:string()
            end
        end
    end
end

---@param  uri  string # The URI of file
---@param  name string # Argument of require()
---@return string[]?
function ResolveRequire(uri, name)
    local libModuleFile = resolveCaseInsensitive(libRoot, name)
    local localModuleFile = resolveCaseInsensitive(fs.path(furi.decode(uri)), name)

    local result = {}
    if libModuleFile then
        result[#result+1] = furi.encode(libModuleFile)
    end
    if localModuleFile then
        result[#result+1] = furi.encode(localModuleFile)
    end

    if #result ~= 0 then
        return result
    end
end

Alternatively, I propose that a spellchecking diagnostic could be introduced for resolving module names. If a name matches the name of a known module in all except its case, a blue or yellow squiggly would underline the string, and the message could be something like "did you mean 'otherName'". This could be an opt-in diagnostic if it is considered a breaking change.

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 pelo hook de plugin ResolveRequire existente e trace o caminho de resolução de módulos de require(). Determine se o projeto deve implementar uma configuração que não diferencie maiúsculas de minúsculas ou um diagnóstico opt-in; em seguida, localize os testes relevantes. Está concluído quando o comportamento selecionado trata nomes de módulos com diferenças entre maiúsculas e minúsculas no Windows e no macOS e é coberto por testes.

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

Avaliação

Stack de tecnologia
lua
Domínio
devtools
Tipo de issue
Funcionalidade
Dificuldade
5/5
Tempo estimado
Mais de uma semana
Status de atividade
Estagnada
Clareza
Precisa de esclarecimento
Facilidade para iniciantes
25/100

Receba novas issues na sua caixa de entrada

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