perf: Filters:custom calls getcwd for every file, even with no custom filters
Mantenedores costumam responder em até 1 dia
Avaliação
- Dificuldade
- 2/5
- Tempo estimado
- 1-3 horas
- Facilidade para iniciantes
- 25/100
- Tipo de issue
- Bug
- Clareza
- Claramente especificada
- Status de atividade
- Estagnada
- Stack de tecnologia
- lua, neovim
- Domínio
- performance
Direção de pesquisa
Start with lua/nvim-tree/explorer/filters.lua, especially Filters:custom and Filters:prepare; the issue identifies the repeated vim.uv.cwd() call and proposes resolving it once per directory only when custom patterns exist. Check the existing filtering tests and add coverage for empty and nonempty custom patterns. Done when filtering behavior stays the same and the unnecessary cwd calls are avoided; pull request #3387 is already open for this issue.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
Problem
Filters:custom calls vim.uv.cwd() for every file that gets scanned, via utils.path_relative(path, vim.uv.cwd()) (lua/nvim-tree/explorer/filters.lua:180). This happens even when filters.custom is empty, the default, so the result is never used.
getcwd is slow on some platforms: about 61µs per call on macOS.
Impact (profile on master)
| Operation | Share of time on this line |
|---|---|
api.tree.expand_all() |
33% |
Explorer:reload_explorer() |
42% |
Proposed fix
- Return early from
Filters:customwhen there are no custom patterns. - Resolve the cwd once per directory in
Filters:prepare, and only when there are custom patterns.
Filtering behaviour stays the same.
Happy to follow up with a PR as soon as I get some time.
Environment: macOS, Nvim v0.13.0-dev, LuaJIT 2.1. Test repo: 16.8k files and folders, 3.1k git status entries (modified, untracked, ignored). Measured headless with vim.uv.hrtime() and the LuaJIT profiler (jit.p).
- Linguagem predominante
- Lua
- Estrelas
- 8.7k
- Forks
- 642
- Merge médio
- 23h 23min
- PRs com merge (30d)
- 11
Preparar o ambiente
- Sem Dockerfile nem arquivo Docker Compose
- Sem modelo de pull request
- Ler o guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de nvim-tree/nvim-tree.lua
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
nvim-tree/nvim-tree.lua#3383 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 77/100
nvim-tree/nvim-tree.lua#3382 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
nvim-tree/nvim-tree.lua#3381 ·
Mantenedores costumam responder em até 1 dia
-
Use vim.Option getters and setters instead of directly settingTalvez já em andamento Um pull request vinculado a esta issue está aberto ou já foi mesclado. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
nvim-tree/nvim-tree.lua#3357 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
Migrate To vim.packAbertadocumentation PR please
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 65/100
nvim-tree/nvim-tree.lua#3179 · 6 comentários ·
Mantenedores costumam responder em até 1 dia
Todas as issues de nvim-tree/nvim-tree.lua
Issues semelhantes
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
Mantenedores costumam responder em até 2 dias
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
Balatro-Multiplayer/BalatroMultiplayerAPI#67 ·
Mantenedores costumam responder em até 2 dias
-
Unconfirmed bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
luanti-org/luanti#17736 ·
Mantenedores costumam responder em até 1 dia
-
bug(bufdelete): all()/other() abort with "Invalid buffer id" when a buffer is wiped during the loopAberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 82/100
folke/snacks.nvim#2986 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 79/100
PlotJuggler/PlotJuggler#1464 ·