rust-lang / rust-lang/rust-analyzer
Duplicate patterns specified for didChangeWatchedFiles
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 16.9k
- Forks
- 2.2k
- Avg merge
- 1d 12h
- Merged PRs (30d)
- 72
Description
rust-analyzer version: 2023-05-15
rustc version: 1.70.0
relevant settings: defaults
I'm not sure if this is even an issue (might depend on the client) but I've noticed that rust-analyzer sets up didChangeWatchedFiles capability with duplicated patterns. For example:
{
"registrations": [
{
"id": "workspace/didChangeWatchedFiles",
"method": "workspace/didChangeWatchedFiles",
"registerOptions": {
"watchers": [
{
"globPattern": "/usr/local/workspace/temp/peace/examples/download/**/*.rs"
},
{
"globPattern": "/usr/local/workspace/temp/peace/examples/download/**/Cargo.toml"
},
{
"globPattern": "/usr/local/workspace/temp/peace/examples/download/**/Cargo.lock"
},
{
"globPattern": "/usr/local/workspace/temp/peace/examples/envman/**/*.rs"
},
{
"globPattern": "/usr/local/workspace/temp/peace/examples/envman/**/Cargo.toml"
},
{
"globPattern": "/usr/local/workspace/temp/peace/examples/envman/**/Cargo.lock"
},
{
"globPattern": "/usr/local/workspace/temp/peace/**/*.rs"
},
{
"globPattern": "/usr/local/workspace/temp/peace/**/Cargo.toml"
},
{
"globPattern": "/usr/local/workspace/temp/peace/**/Cargo.lock"
},
{
"globPattern": "/usr/local/workspace/temp/peace/crate/cfg/**/*.rs"
},
{
"globPattern": "/usr/local/workspace/temp/peace/crate/cfg/**/Cargo.toml"
},
{
"globPattern": "/usr/local/workspace/temp/peace/crate/cfg/**/Cargo.lock"
},
{
"globPattern": "/usr/local/workspace/temp/peace/crate/cmd/**/*.rs"
},
{
"globPattern": "/usr/local/workspace/temp/peace/crate/cmd/**/Cargo.toml"
},
{
"globPattern": "/usr/local/workspace/temp/peace/crate/cmd/**/Cargo.lock"
},
{
"globPattern": "/usr/local/workspace/temp/peace/crate/code_gen/**/*.rs"
},
{
"globPattern": "/usr/local/workspace/temp/peace/crate/code_gen/**/Cargo.toml"
},
{
"globPattern": "/usr/local/workspace/temp/peace/crate/code_gen/**/Cargo.lock"
},
{
"globPattern": "/usr/local/workspace/temp/peace/crate/core/**/*.rs"
},
{
"globPattern": "/usr/local/workspace/temp/peace/crate/core/**/Cargo.toml"
},
{
"globPattern": "/usr/local/workspace/temp/peace/crate/core/**/Cargo.lock"
},
{
"globPattern": "/usr/local/workspace/temp/peace/crate/data/**/*.rs"
},
{
"globPattern": "/usr/local/workspace/temp/peace/crate/data/**/Cargo.toml"
},
{
"globPattern": "/usr/local/workspace/temp/peace/crate/data/**/Cargo.lock"
},
{
"globPattern": "/usr/local/workspace/temp/peace/crate/data_derive/**/*.rs"
},
{
"globPattern": "/usr/local/workspace/temp/peace/crate/data_derive/**/Cargo.toml"
},
{
"globPattern": "/usr/local/workspace/temp/peace/crate/data_derive/**/Cargo.lock"
},
{
"globPattern": "/usr/local/workspace/temp/peace/crate/diff/**/*.rs"
},
{
"globPattern": "/usr/local/workspace/temp/peace/crate/diff/**/Cargo.toml"
},
{
"globPattern": "/usr/local/workspace/temp/peace/crate/diff/**/Cargo.lock"
},
{
"globPattern": "/usr/local/workspace/temp/peace/crate/fmt/**/*.rs"
},
{
"globPattern": "/usr/local/workspace/temp/peace/crate/fmt/**/Cargo.toml"
},
{
"globPattern": "/usr/local/workspace/temp/peace/crate/fmt/**/Cargo.lock"
},
{
"globPattern": "/usr/local/workspace/temp/peace/items/blank/**/*.rs"
},
{
"globPattern": "/usr/local/workspace/temp/peace/items/blank/**/Cargo.toml"
},
{
"globPattern": "/usr/local/workspace/temp/peace/items/blank/**/Cargo.lock"
},
{
"globPattern": "/usr/local/workspace/temp/peace/items/file_download/**/*.rs"
},
{
"globPattern": "/usr/local/workspace/temp/peace/items/file_download/**/Cargo.toml"
},
{
"globPattern": "/usr/local/workspace/temp/peace/items/file_download/**/Cargo.lock"
},
{
"globPattern": "/usr/local/workspace/temp/peace/items/sh_cmd/**/*.rs"
},
{
"globPattern": "/usr/local/workspace/temp/peace/items/sh_cmd/**/Cargo.toml"
},
{
"globPattern": "/usr/local/workspace/temp/peace/items/sh_cmd/**/Cargo.lock"
},
{
"globPattern": "/usr/local/workspace/temp/peace/items/tar_x/**/*.rs"
},
{
"globPattern": "/usr/local/workspace/temp/peace/items/tar_x/**/Cargo.toml"
},
{
"globPattern": "/usr/local/workspace/temp/peace/items/tar_x/**/Cargo.lock"
},
{
"globPattern": "/usr/local/workspace/temp/peace/items/**/*.rs"
},
{
"globPattern": "/usr/local/workspace/temp/peace/items/**/Cargo.toml"
},
{
"globPattern": "/usr/local/workspace/temp/peace/items/**/Cargo.lock"
},
{
"globPattern": "/usr/local/workspace/temp/peace/crate/params/**/*.rs"
},
{
"globPattern": "/usr/local/workspace/temp/peace/crate/params/**/Cargo.toml"
},
{
"globPattern": "/usr/local/workspace/temp/peace/crate/params/**/Cargo.lock"
},
{
"globPattern": "/usr/local/workspace/temp/peace/crate/params_derive/**/*.rs"
},
{
"globPattern": "/usr/local/workspace/temp/peace/crate/params_derive/**/Cargo.toml"
},
{
"globPattern": "/usr/local/workspace/temp/peace/crate/params_derive/**/Cargo.lock"
},
{
"globPattern": "/usr/local/workspace/temp/peace/crate/resources/**/*.rs"
},
{
"globPattern": "/usr/local/workspace/temp/peace/crate/resources/**/Cargo.toml"
},
{
"globPattern": "/usr/local/workspace/temp/peace/crate/resources/**/Cargo.lock"
},
{
"globPattern": "/usr/local/workspace/temp/peace/crate/rt/**/*.rs"
},
{
"globPattern": "/usr/local/workspace/temp/peace/crate/rt/**/Cargo.toml"
},
{
"globPattern": "/usr/local/workspace/temp/peace/crate/rt/**/Cargo.lock"
},
{
"globPattern": "/usr/local/workspace/temp/peace/crate/rt_model/**/*.rs"
},
{
"globPattern": "/usr/local/workspace/temp/peace/crate/rt_model/**/Cargo.toml"
},
{
"globPattern": "/usr/local/workspace/temp/peace/crate/rt_model/**/Cargo.lock"
},
{
"globPattern": "/usr/local/workspace/temp/peace/crate/rt_model_core/**/*.rs"
},
{
"globPattern": "/usr/local/workspace/temp/peace/crate/rt_model_core/**/Cargo.toml"
},
{
"globPattern": "/usr/local/workspace/temp/peace/crate/rt_model_core/**/Cargo.lock"
},
{
"globPattern": "/usr/local/workspace/temp/peace/crate/rt_model_hack/**/*.rs"
},
{
"globPattern": "/usr/local/workspace/temp/peace/crate/rt_model_hack/**/Cargo.toml"
},
{
"globPattern": "/usr/local/workspace/temp/peace/crate/rt_model_hack/**/Cargo.lock"
},
{
"globPattern": "/usr/local/workspace/temp/peace/crate/rt_model_native/**/*.rs"
},
{
"globPattern": "/usr/local/workspace/temp/peace/crate/rt_model_native/**/Cargo.toml"
},
{
"globPattern": "/usr/local/workspace/temp/peace/crate/rt_model_native/**/Cargo.lock"
},
{
"globPattern": "/usr/local/workspace/temp/peace/crate/rt_model_web/**/*.rs"
},
{
"globPattern": "/usr/local/workspace/temp/peace/crate/rt_model_web/**/Cargo.toml"
},
{
"globPattern": "/usr/local/workspace/temp/peace/crate/rt_model_web/**/Cargo.lock"
},
{
"globPattern": "/usr/local/workspace/temp/peace/crate/static_check_macros/**/*.rs"
},
{
"globPattern": "/usr/local/workspace/temp/peace/crate/static_check_macros/**/Cargo.toml"
},
{
"globPattern": "/usr/local/workspace/temp/peace/crate/static_check_macros/**/Cargo.lock"
},
{
"globPattern": "/usr/local/workspace/temp/peace/workspace_tests/**/*.rs"
},
{
"globPattern": "/usr/local/workspace/temp/peace/workspace_tests/**/Cargo.toml"
},
{
"globPattern": "/usr/local/workspace/temp/peace/workspace_tests/**/Cargo.lock"
}
]
}
}
]
}
If it sets up a generic pattern like /usr/local/workspace/temp/peace/**/*.rs then why it later specifies patterns (for example /usr/local/workspace/temp/peace/crate/rt_model/**/*.rs") that are already included within that generic pattern? In theory that could cause the client to set up duplicate file watchers (depending on implementation).
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by tracing rust-analyzer's workspace/didChangeWatchedFiles registration and how the listed glob patterns are generated. Compare the generic workspace patterns with nested crate patterns, then inspect existing LSP or watcher tests if available. Done means redundant patterns are eliminated without losing file-change coverage, with regression coverage for the reported registration.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- devtools
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 38/100