-
Notifications
You must be signed in to change notification settings - Fork 1.9k
Description
Discussed in #18839
Originally posted by hsnoil January 6, 2025
When using theia, and you have something like this it doesn't work.
enum Pet {
Cat,
Dog
}
fn main() {
let pet = Pet::Cat;
match pet {
}
}But if you were to just add like add_label_to_loop, it works:
fn main() {
loop {
break;
continue;
}
}Another interesting case is this one:
struct X();
mod foo {
use super::X;
}If you do "split import" or "remove whole use item" they work but remove all unused imports doesn't.
From the looks of it, replacing with syntax::ted::replace is the issue. Replacing, adding and deleting works unless it touches that function.
Is this an issue with Theia or an underlying issue with how rowan's splice_children works? I know it works with vscode, but sometime things are done in workaround manners (like match arms in analyzer plugin has a bunch of FIXME there)
For now I opened a ticket with Theia:
But it has been a while and likely it being rust and not javascript, if someone isn't explicitly familiar with rust I can understand the hesitation to go through it all. Anyone have any idea what the issue can be?
Edit:
I compiled it with with debug=2 and I got this error:
thread 'Worker' panicked at /home/user/Develop/rowan/src/ast.rs:99:9:
tree is mutable
stack backtrace:
0: rust_begin_unwind
at /rustc/3f5fd8dd41153bc5fdca9427e9e05be2c767ba23/library/std/src/panicking.rs:652:5
1: core::panicking::panic_fmt
at /rustc/3f5fd8dd41153bc5fdca9427e9e05be2c767ba23/library/core/src/panicking.rs:72:14
2: rowan::ast::SyntaxNodePtr<L>::try_to_node
at /home/user/Develop/rowan/src/ast.rs:99:9
3: rowan::ast::SyntaxNodePtr<L>::to_node
at /home/user/Develop/rowan/src/ast.rs:81:9
4: ide_db::source_change::TreeMutator::make_syntax_mut
at /home/user/Develop/rust-analyzer-master/crates/ide-db/src/source_change.rs:230:9
5: ide_db::source_change::SourceChangeBuilder::make_syntax_mut
at /home/user/Develop/rust-analyzer-master/crates/ide-db/src/source_change.rs:282:9
6: ide_assists::handlers::add_missing_match_arms::add_missing_match_arms::{{closure}}
at /home/user/Develop/rust-analyzer-master/crates/ide-assists/src/handlers/add_missing_match_arms.rs:274:53
7: ide_assists::assist_context::Assists::add::{{closure}}
at /home/user/Develop/rust-analyzer-master/crates/ide-assists/src/assist_context.rs:161:65
8: ide_assists::assist_context::Assists::add_impl
at /home/user/Develop/rust-analyzer-master/crates/ide-assists/src/assist_context.rs:191:13
9: ide_assists::assist_context::Assists::add
at /home/user/Develop/rust-analyzer-master/crates/ide-assists/src/assist_context.rs:161:9
10: ide_assists::handlers::add_missing_match_arms::add_missing_match_arms
at /home/user/Develop/rust-analyzer-master/crates/ide-assists/src/handlers/add_missing_match_arms.rs:201:5
11: ide_assists::assists::{{closure}}
at /home/user/Develop/rust-analyzer-master/crates/ide-assists/src/lib.rs:95:9
12: <core::slice::iter::Iter<T> as core::iter::traits::iterator::Iterator>::for_each
at /rustc/3f5fd8dd41153bc5fdca9427e9e05be2c767ba23/library/core/src/slice/iter/macros.rs:252:21
13: ide_assists::assists
at /home/user/Develop/rust-analyzer-master/crates/ide-assists/src/lib.rs:94:5
14: ide::Analysis::assists_with_fixes::{{closure}}
at /home/user/Develop/rust-analyzer-master/crates/ide/src/lib.rs:730:27
15: ide::Analysis::with_db::{{closure}}
at /home/user/Develop/rust-analyzer-master/crates/ide/src/lib.rs:826:29
16: std::panicking::try::do_call
at /rustc/3f5fd8dd41153bc5fdca9427e9e05be2c767ba23/library/std/src/panicking.rs:559:40
17: __rust_try
18: std::panicking::try
at /rustc/3f5fd8dd41153bc5fdca9427e9e05be2c767ba23/library/std/src/panicking.rs:523:19
19: std::panic::catch_unwind
at /rustc/3f5fd8dd41153bc5fdca9427e9e05be2c767ba23/library/std/src/panic.rs:149:14
20: salsa::Cancelled::catch
at /home/user/Develop/rust-analyzer-master/crates/salsa/src/lib.rs:633:15
21: ide::Analysis::with_db
at /home/user/Develop/rust-analyzer-master/crates/ide/src/lib.rs:826:9
22: ide::Analysis::assists_with_fixes
at /home/user/Develop/rust-analyzer-master/crates/ide/src/lib.rs:719:9
23: rust_analyzer::handlers::request::handle_code_action_resolve
at /home/user/Develop/rust-analyzer-master/crates/rust-analyzer/src/handlers/request.rs:1384:19
24: rust_analyzer::handlers::dispatch::RequestDispatcher::on_with_thread_intent::{{closure}}::{{closure}}
at /home/user/Develop/rust-analyzer-master/crates/rust-analyzer/src/handlers/dispatch.rs:219:17
25: std::panicking::try::do_call
at /rustc/3f5fd8dd41153bc5fdca9427e9e05be2c767ba23/library/std/src/panicking.rs:559:40
26: __rust_try
27: std::panicking::try
at /rustc/3f5fd8dd41153bc5fdca9427e9e05be2c767ba23/library/std/src/panicking.rs:523:19
28: std::panic::catch_unwind
at /rustc/3f5fd8dd41153bc5fdca9427e9e05be2c767ba23/library/std/src/panic.rs:149:14
29: rust_analyzer::handlers::dispatch::RequestDispatcher::on_with_thread_intent::{{closure}}
at /home/user/Develop/rust-analyzer-master/crates/rust-analyzer/src/handlers/dispatch.rs:217:26
30: rust_analyzer::task_pool::TaskPool<T>::spawn::{{closure}}
at /home/user/Develop/rust-analyzer-master/crates/rust-analyzer/src/task_pool.rs:26:33
31: stdx::thread::pool::Pool::spawn::{{closure}}
at /home/user/Develop/rust-analyzer-master/crates/stdx/src/thread/pool.rs:82:13
32: core::ops::function::FnOnce::call_once{{vtable.shim}}
at /rustc/3f5fd8dd41153bc5fdca9427e9e05be2c767ba23/library/core/src/ops/function.rs:250:5
33: <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once
at /rustc/3f5fd8dd41153bc5fdca9427e9e05be2c767ba23/library/alloc/src/boxed.rs:2063:9
34: stdx::thread::pool::Pool::new::{{closure}}
at /home/user/Develop/rust-analyzer-master/crates/stdx/src/thread/pool.rs:61:29
35: stdx::thread::Builder::spawn::{{closure}}
at /home/user/Develop/rust-analyzer-master/crates/stdx/src/thread.rs:66:13
```</div>