rust-lang / rust-analyzer

A Rust compiler front-end for IDEs
https://rust-analyzer.github.io/
Apache License 2.0
14.33k stars 1.61k forks source link

rust-analyzer.files.excludeDirs is (still) not working #14734

Open willtunnels opened 1 year ago

willtunnels commented 1 year ago

rust-analyzer.files.excludeDirs does not appear to be working. Issue #7755 discussed this awhile ago and was closed, but the feature is still not working for me. I am using rust-analyzer 0.4.1501-standalone with rustc 1.68.2 in VSCode.

It could be that I misunderstand how to specify directories. My project layout is

.
├── src
        ├── module0

and my rust analyzer setting is

{
  "rust-analyzer.files.excludeDirs: ["src/module0"]
}

I tried also setting files.watcherExclude, as suggested in the documentation, but no luck.

jlevon commented 1 year ago

same here. I have a tests/ directory with a lot of small, non-rust files, that stops rust-analyzer from being able to resolve symbols (no idea why). If I move the directory out of the way, RA works. But no form of excludeDirs I've found has any effect.

I'm using vim-lsp, e.g.

if executable('rust-analyzer')
  au User lsp_setup call lsp#register_server({
        \   'name': 'Rust Language Server',
        \   'cmd': {server_info->['rust-analyzer']},
        \ 'root_uri':{server_info->lsp#utils#get_default_root_uri()},
        \ 'initialization_options': { "rust-analyzer.files.excludeDirs": [ "tests", "vendor" ] },
        \   'whitelist': ['rust'],
        \ })
endif

with no effect.

sinesc commented 1 year ago

I have the same issue with non-rust files I use rust syntax highlighting for. They aren't in src/ and don't initially get checked but as soon as I open one in the editor rust-analyzer generates lot's of syntax errors. excludeDirs does not seem to have any effect at all.

cloutiertyler commented 1 year ago

I am having the same issue.

jlevon commented 1 year ago

This sort of works for me:

if executable('rust-analyzer')
  au User lsp_setup call lsp#register_server({
        \   'name': 'Rust Language Server',
        \   'cmd': {server_info->['rust-analyzer']},
        \   'whitelist': ['rust'],
        \   'initialization_options': {
        \        'files': {
        \            'excludeDirs': ['tests', 'vendor'],
        \        }
        \   }
        \ })
endif
$ rust-analyzer --version
rust-analyzer 1.72.1 (d5c2e9c 2023-09-13)

This does seem to ignore tests/ dir (which happens to basically completely break rust-analyzer, and has no rust sources in it), but rust-analyzer still looks at vendor - presumably because it's referenced from src/

Andrew15-5 commented 10 months ago

I also have this problem. It would be nice if rust-analyzer can also just use entries from the .gitignore.

wiiznokes commented 9 months ago

I'm having the same problem. It would be nice if files are also supported

seanchann commented 8 months ago

same problem. Do you have any suggestions for this?

Sufhal commented 2 months ago

Same problem here.

hhwyt commented 2 months ago

Any workaround for this?

cgubbin commented 2 months ago

Does anyone have a good workaround for this? I'm using a Nix Flake to define my development environment, and although I have added .direnv to excludeDirs rust analyzer continues to scan .direnv, and subsequently the entire nix store. It essentially never finishes.

azizur commented 2 months ago

Does anyone have a good workaround for this? I'm using a Nix Flake to define my development environment, and although I have added .direnv to excludeDirs rust analyzer continues to scan .direnv, and subsequently the entire nix store. It essentially never finishes.

Take a look at the approach I am using to make this work.

See my comments here https://github.com/rust-lang/rust-analyzer/issues/3113#issuecomment-2351704248

cgubbin commented 1 month ago

Does anyone have a good workaround for this? I'm using a Nix Flake to define my development environment, and although I have added .direnv to excludeDirs rust analyzer continues to scan .direnv, and subsequently the entire nix store. It essentially never finishes.

Take a look at the approach I am using to make this work.

See my comments here #3113 (comment)

I saw this yes, I have added the folders to the excludeDirs. I'm using neovim, so this is slightly different, but the expected effect is the same.

opts = {
     default_settings = {
            ["rust-analyzer"] = {
                files = {
                    excludeDirs = {
                        ".cargo",
                        ".direnv",
                        ".git",
                        "target",
                    },
                },
     },
}
azizur commented 1 month ago

Before you open the editor, try running 'cargo clean'.

cgubbin commented 1 month ago

Before you open the editor, try running 'cargo clean'.

I have also tried doing this and it doesn't seem to change the situation.

However I noticed that after cleaning, the progress indicator displayed by rust-analyzer does not reset. For the specific project I am testing with it displays 42/45: .direnv before and after cleaning. Does that mean that the clean command is somehow not resetting the cache in the way it should? I also tried manually deleting the target folder but the behaviour persists.

duncanawoods commented 1 month ago

This bug is preventing working around another bug:

https://github.com/rust-lang/rust-analyzer/issues/8161

In my case, flatpak creates temporary folders containing symbolic links which then breaks RA but can't be excluded.

Does it also mean RA is wandering around horrendous folders like node_modules?

cgubbin commented 1 week ago

This is still an issue for me, but I am currently using a simple fix which I'm posting here in case it helps somebody else.

I couldn't get rust-analyzer to stop scanning the .direnv folder, so in the end I placed my entire crate in a subfolder one level below the flake.nix file and .direnv folder. I did this using cranes guide to placing a Cargo.toml in a non-standard location.

This has stopped the problem for me, as the .direnv folder is no longer in the workspace root. Not an ideal solution but at least something actionable.

uttarayan21 commented 1 week ago

I was actually having this issue due to using rustaceanvim plugin and it fixed itself when I switched to the rust-analyzer lsp plugin instead. Here is my config for both rustaceanvim and nvim-lspconfig.rust_analyzer using nixvim.
Enabling the rustaceanvim plugin makes it also search the .direnv folder even though it's in the excludeDirs