rust-lang / rust-lang/rust-analyzer
`Semantics::attach_first_edition` hangs, possibly due to blocked communication with the `proc-macro-server` process
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 16.9k
- Forks
- 2.2k
- Avg merge
- 1d 12h
- Merged PRs (30d)
- 72
Description
The call graph below was taking using the sample command and ends with a call to ra_ap_proc_macro_api::legacy_protocol::json::write_json. This makes me think the communication with the macro server got stuck somehow.
This sort of problem occurs on 5 in 5000 repos in our test suite, so it is not very common, but perhaps some sort of timeout could protect against things getting stuck indefinitely .
I am able to reproduce the problem, but could not figure out its cause. For the project I first noticed the error, it appears to be necessary to expand macros in two apparently unrelated files. Skipping either of the files avoid the problem, so they must be interacting in some way.
Call graph:
8427 Thread_10861494 DispatchQueue_1: com.apple.main-thread (serial)
+ 8427 start (in dyld) + 6076 [0x199d12b98]
+ 8427 main (in extractor) + 52 [0x100eb9e60]
+ 8427 std::rt::lang_start_internal::h5f91760815528aa2 (in extractor) + 1092 [0x1019df8d0]
+ 8427 std::rt::lang_start::_$u7b$$u7b$closure$u7d$$u7d$::h62d9966b4e0cce9d (in extractor) + 24 [0x100f00584]
+ 8427 std::sys::backtrace::__rust_begin_short_backtrace::h7361add0f2174cae (in extractor) + 12 [0x100ee66f8]
+ 8427 single_arch_extractor::main::hfd9b8b304562941a (in extractor) + 9704 [0x100eb8dd8]
+ 8427 single_arch_extractor::Extractor::extract::h3119ff338dcc77a6 (in extractor) + 224 [0x100eb4d40]
+ 8427 ra_ap_hir::semantics::SemanticsImpl::attach_first_edition::h82aae237e1606daf (in extractor) + 44 [0x101287cb0]
+ 8427 ra_ap_hir::semantics::SemanticsImpl::file_to_module_defs::h9c0aabbacece65ca (in extractor) + 64 [0x1012888bc]
+ 8427 ra_ap_hir::semantics::source_to_def::SourceToDefCtx::file_to_def::h6212bbf3dac28ee4 (in extractor) + 508 [0x1012c1c2c]
+ 8427 _$LT$DB$u20$as$u20$ra_ap_hir_def..db..DefDatabase$GT$::crate_def_map::crate_def_map_shim::h4ffe3a4b60e1b355 (in extractor) + 140 [0x1016ec6fc]
+ 8427 salsa::function::fetch::_$LT$impl$u20$salsa..function..IngredientImpl$LT$C$GT$$GT$::fetch::h5a50717ffcc10658 (in extractor) + 112 [0x10161a398]
+ 8427 salsa::function::fetch::_$LT$impl$u20$salsa..function..IngredientImpl$LT$C$GT$$GT$::refresh_memo::h849c71eff3083fab (in extractor) + 468 [0x101614cd0]
+ 8427 salsa::function::execute::_$LT$impl$u20$salsa..function..IngredientImpl$LT$C$GT$$GT$::execute::hc210fdf197298973 (in extractor) + 380 [0x1016312c8]
+ 8427 salsa::cycle::Cycle::catch::h8eb18e11a78ce058 (in extractor) + 44 [0x101695c4c]
+ 8427 _$LT$DB$u20$as$u20$ra_ap_hir_def..db..DefDatabase$GT$::crate_local_def_map::crate_local_def_map_shim::hf0a5533edaa290e4 (in extractor) + 64 [0x1016ec324]
+ 8427 salsa::attach::Attached::attach::h03b086e923ae57a6 (in extractor) + 140 [0x10166c244]
+ 8427 salsa::function::fetch::_$LT$impl$u20$salsa..function..IngredientImpl$LT$C$GT$$GT$::fetch::h2b3b68600ecb6744 (in extractor) + 112 [0x101619bd8]
+ 8427 salsa::function::fetch::_$LT$impl$u20$salsa..function..IngredientImpl$LT$C$GT$$GT$::refresh_memo::hc0e68a20992de37e (in extractor) + 468 [0x1016177a4]
+ 8427 salsa::function::execute::_$LT$impl$u20$salsa..function..IngredientImpl$LT$C$GT$$GT$::execute::hc59712f801deb72b (in extractor) + 388 [0x101631c28]
+ 8427 salsa::cycle::Cycle::catch::h900e24cee74f3d0a (in extractor) + 40 [0x101695d54]
+ 8427 ra_ap_hir_def::nameres::DefMap::crate_local_def_map_query::hca6401aa0c8e0038 (in extractor) + 1044 [0x10178a844]
+ 8427 ra_ap_hir_def::nameres::collector::collect_defs::hdbb9b07794d8c480 (in extractor) + 5748 [0x1017679c0]
+ 8427 _$LT$alloc..vec..into_iter..IntoIter$LT$T$C$A$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$::try_fold::hfb3642d7b97b3617 (in extractor) + 288 [0x101713abc]
+ 8427 ra_ap_hir_def::nameres::collector::DefCollector::resolve_import::hb8aba913751937b0 (in extractor) + 604 [0x10176a6b8]
+ 8427 ra_ap_hir_def::nameres::path_resolution::_$LT$impl$u20$ra_ap_hir_def..nameres..DefMap$GT$::resolve_path_fp_with_macro::h70824851dd5cc0cd (in extractor) + 112 [0x101787754]
+ 8427 ra_ap_hir_def::nameres::path_resolution::_$LT$impl$u20$ra_ap_hir_def..nameres..DefMap$GT$::resolve_path_fp_with_macro_single::hf9f5199645a8cf6b (in extractor) + 4396 [0x1017892fc]
+ 8427 ra_ap_hir_def::nameres::path_resolution::_$LT$impl$u20$ra_ap_hir_def..nameres..DefMap$GT$::resolve_remaining_segments::h02488e9ede1a6f03 (in extractor) + 1304 [0x101789b8c]
+ 8427 _$LT$DB$u20$as$u20$ra_ap_hir_def..db..DefDatabase$GT$::crate_def_map::crate_def_map_shim::h4ffe3a4b60e1b355 (in extractor) + 140 [0x1016ec6fc]
+ 8427 salsa::function::fetch::_$LT$impl$u20$salsa..function..IngredientImpl$LT$C$GT$$GT$::fetch::h5a50717ffcc10658 (in extractor) + 112 [0x10161a398]
+ 8427 salsa::function::fetch::_$LT$impl$u20$salsa..function..IngredientImpl$LT$C$GT$$GT$::refresh_memo::h849c71eff3083fab (in extractor) + 468 [0x101614cd0]
+ 8427 salsa::function::execute::_$LT$impl$u20$salsa..function..IngredientImpl$LT$C$GT$$GT$::execute::hc210fdf197298973 (in extractor) + 380 [0x1016312c8]
+ 8427 salsa::cycle::Cycle::catch::h8eb18e11a78ce058 (in extractor) + 44 [0x101695c4c]
+ 8427 _$LT$DB$u20$as$u20$ra_ap_hir_def..db..DefDatabase$GT$::crate_local_def_map::crate_local_def_map_shim::hf0a5533edaa290e4 (in extractor) + 64 [0x1016ec324]
+ 8427 salsa::attach::Attached::attach::h03b086e923ae57a6 (in extractor) + 140 [0x10166c244]
+ 8427 salsa::function::fetch::_$LT$impl$u20$salsa..function..IngredientImpl$LT$C$GT$$GT$::fetch::h2b3b68600ecb6744 (in extractor) + 112 [0x101619bd8]
+ 8427 salsa::function::fetch::_$LT$impl$u20$salsa..function..IngredientImpl$LT$C$GT$$GT$::refresh_memo::hc0e68a20992de37e (in extractor) + 468 [0x1016177a4]
+ 8427 salsa::function::execute::_$LT$impl$u20$salsa..function..IngredientImpl$LT$C$GT$$GT$::execute::hc59712f801deb72b (in extractor) + 388 [0x101631c28]
+ 8427 salsa::cycle::Cycle::catch::h900e24cee74f3d0a (in extractor) + 40 [0x101695d54]
+ 8427 ra_ap_hir_def::nameres::DefMap::crate_local_def_map_query::hca6401aa0c8e0038 (in extractor) + 1044 [0x10178a844]
+ 8427 ra_ap_hir_def::nameres::collector::collect_defs::hdbb9b07794d8c480 (in extractor) + 5748 [0x1017679c0]
+ 8427 _$LT$alloc..vec..into_iter..IntoIter$LT$T$C$A$GT$$u20$as$u20$core..iter..traits..iterator..Iterator$GT$::try_fold::hfb3642d7b97b3617 (in extractor) + 288 [0x101713abc]
+ 8427 ra_ap_hir_def::nameres::collector::DefCollector::resolve_import::hb8aba913751937b0 (in extractor) + 604 [0x10176a6b8]
+ 8427 ra_ap_hir_def::nameres::path_resolution::_$LT$impl$u20$ra_ap_hir_def..nameres..DefMap$GT$::resolve_path_fp_with_macro::h70824851dd5cc0cd (in extractor) + 112 [0x101787754]
+ 8427 ra_ap_hir_def::nameres::path_resolution::_$LT$impl$u20$ra_ap_hir_def..nameres..DefMap$GT$::resolve_path_fp_with_macro_single::hf9f5199645a8cf6b (in extractor) + 4396 [0x1017892fc]
+ 8427 ra_ap_hir_def::nameres::path_resolution::_$LT$impl$u20$ra_ap_hir_def..nameres..DefMap$GT$::resolve_remaining_segments::h02488e9ede1a6f03 (in extractor) + 1304 [0x101789b8c]
+ 8427 _$LT$DB$u20$as$u20$ra_ap_hir_def..db..DefDatabase$GT$::crate_def_map::crate_def_map_shim::h4ffe3a4b60e1b355 (in extractor) + 140 [0x1016ec6fc]
+ 8427 salsa::function::fetch::_$LT$impl$u20$salsa..function..IngredientImpl$LT$C$GT$$GT$::fetch::h5a50717ffcc10658 (in extractor) + 112 [0x10161a398]
+ 8427 salsa::function::fetch::_$LT$impl$u20$salsa..function..IngredientImpl$LT$C$GT$$GT$::refresh_memo::h849c71eff3083fab (in extractor) + 468 [0x101614cd0]
+ 8427 salsa::function::execute::_$LT$impl$u20$salsa..function..IngredientImpl$LT$C$GT$$GT$::execute::hc210fdf197298973 (in extractor) + 380 [0x1016312c8]
+ 8427 salsa::cycle::Cycle::catch::h8eb18e11a78ce058 (in extractor) + 44 [0x101695c4c]
+ 8427 _$LT$DB$u20$as$u20$ra_ap_hir_def..db..DefDatabase$GT$::crate_local_def_map::crate_local_def_map_shim::hf0a5533edaa290e4 (in extractor) + 64 [0x1016ec324]
+ 8427 salsa::attach::Attached::attach::h03b086e923ae57a6 (in extractor) + 140 [0x10166c244]
+ 8427 salsa::function::fetch::_$LT$impl$u20$salsa..function..IngredientImpl$LT$C$GT$$GT$::fetch::h2b3b68600ecb6744 (in extractor) + 112 [0x101619bd8]
+ 8427 salsa::function::fetch::_$LT$impl$u20$salsa..function..IngredientImpl$LT$C$GT$$GT$::refresh_memo::hc0e68a20992de37e (in extractor) + 468 [0x1016177a4]
+ 8427 salsa::function::execute::_$LT$impl$u20$salsa..function..IngredientImpl$LT$C$GT$$GT$::execute::hc59712f801deb72b (in extractor) + 388 [0x101631c28]
+ 8427 salsa::cycle::Cycle::catch::h900e24cee74f3d0a (in extractor) + 40 [0x101695d54]
+ 8427 ra_ap_hir_def::nameres::DefMap::crate_local_def_map_query::hca6401aa0c8e0038 (in extractor) + 1044 [0x10178a844]
+ 8427 ra_ap_hir_def::nameres::collector::collect_defs::hdbb9b07794d8c480 (in extractor) + 6444 [0x101767c78]
+ 8427 ra_ap_hir_def::nameres::collector::DefCollector::collect_macro_expansion::h90d0272b4b73e2be (in extractor) + 112 [0x10176dd84]
+ 8427 _$LT$DB$u20$as$u20$ra_ap_hir_def..db..DefDatabase$GT$::file_item_tree::file_item_tree_shim::h55379504bf2f4985 (in extractor) + 68 [0x1016eb1b4]
+ 8427 salsa::attach::Attached::attach::ha174f20d2ad7dbbf (in extractor) + 236 [0x10166cd68]
+ 8427 salsa::function::fetch::_$LT$impl$u20$salsa..function..IngredientImpl$LT$C$GT$$GT$::fetch::hb6be0db1c1e8021e (in extractor) + 112 [0x10161b600]
+ 8427 salsa::function::fetch::_$LT$impl$u20$salsa..function..IngredientImpl$LT$C$GT$$GT$::refresh_memo::hb711ad52deae94f7 (in extractor) + 468 [0x101617064]
+ 8427 salsa::function::execute::_$LT$impl$u20$salsa..function..IngredientImpl$LT$C$GT$$GT$::execute::h7e237c0d2458ede9 (in extractor) + 380 [0x101629d30]
+ 8427 salsa::cycle::Cycle::catch::h3a750a705f0bfc66 (in extractor) + 56 [0x101695084]
+ 8427 _$LT$DB$u20$as$u20$ra_ap_hir_def..db..DefDatabase$GT$::file_item_tree_with_source_map::file_item_tree_with_source_map_shim::h284b87ddbc0bddff (in extractor) + 68 [0x1016eba88]
+ 8427 salsa::attach::Attached::attach::h3342964fabb7f26f (in extractor) + 240 [0x10166c858]
+ 8427 salsa::function::fetch::_$LT$impl$u20$salsa..function..IngredientImpl$LT$C$GT$$GT$::fetch::haaf4210c24ed155f (in extractor) + 112 [0x10161b220]
+ 8427 salsa::function::fetch::_$LT$impl$u20$salsa..function..IngredientImpl$LT$C$GT$$GT$::refresh_memo::h439f5fd0cf73de9f (in extractor) + 468 [0x101613250]
+ 8427 salsa::function::execute::_$LT$impl$u20$salsa..function..IngredientImpl$LT$C$GT$$GT$::execute::ha10cf06f7137558a (in extractor) + 388 [0x10162cd1c]
+ 8427 salsa::cycle::Cycle::catch::h4288fea32c8921db (in extractor) + 60 [0x1016951a0]
+ 8427 ra_ap_hir_def::item_tree::ItemTree::file_item_tree_with_source_map_query::hd014631d271dabc5 (in extractor) + 324 [0x10178448c]
+ 8427 _$LT$DB$u20$as$u20$ra_ap_hir_expand..db..ExpandDatabase$GT$::ast_id_map::ast_id_map_shim::hcc103f9f594a09f9 (in extractor) + 68 [0x1018acf5c]
+ 8427 salsa::attach::Attached::attach::hbf0acf7add53ce55 (in extractor) + 236 [0x10182cb74]
+ 8427 salsa::function::fetch::_$LT$impl$u20$salsa..function..IngredientImpl$LT$C$GT$$GT$::fetch::h269c131ba151adf3 (in extractor) + 112 [0x1017e0984]
+ 8427 salsa::function::fetch::_$LT$impl$u20$salsa..function..IngredientImpl$LT$C$GT$$GT$::refresh_memo::he998f26ed6d49f55 (in extractor) + 468 [0x1017e01c0]
+ 8427 salsa::function::execute::_$LT$impl$u20$salsa..function..IngredientImpl$LT$C$GT$$GT$::execute::hb03f39faa9b19195 (in extractor) + 380 [0x1017e5500]
+ 8427 salsa::cycle::Cycle::catch::h14a47e11e6866ac8 (in extractor) + 60 [0x1018744bc]
+ 8427 _$LT$$LT$DB$u20$as$u20$ra_ap_hir_expand..db..ExpandDatabase$GT$..ast_id_map..ast_id_map_shim..Configuration_$u20$as$u20$salsa..function..Configuration$GT$::execute::h1dc351c4b1543623 (in extractor) + 28 [0x1018acf84]
+ 8427 ra_ap_hir_expand::db::parse_or_expand::hd840b768113a2a4a (in extractor) + 216 [0x1018aabdc]
+ 8427 _$LT$DB$u20$as$u20$ra_ap_hir_expand..db..ExpandDatabase$GT$::parse_macro_expansion::parse_macro_expansion_shim::hf035e5402d9497ab (in extractor) + 80 [0x1018ad5a8]
+ 8427 salsa::attach::Attached::attach::hffe4da41641f44d7 (in extractor) + 244 [0x10182ccb0]
+ 8427 salsa::function::fetch::_$LT$impl$u20$salsa..function..IngredientImpl$LT$C$GT$$GT$::fetch::h2a54cd0b9efcafea (in extractor) + 112 [0x1017e0a7c]
+ 8427 salsa::function::fetch::_$LT$impl$u20$salsa..function..IngredientImpl$LT$C$GT$$GT$::refresh_memo::h433ccd32542181b5 (in extractor) + 468 [0x1017df34c]
+ 8427 salsa::function::execute::_$LT$impl$u20$salsa..function..IngredientImpl$LT$C$GT$$GT$::execute::h2931de729d4ea436 (in extractor) + 396 [0x1017e1c28]
+ 8427 salsa::cycle::Cycle::catch::haf720384a268929c (in extractor) + 72 [0x101874990]
+ 8427 _$LT$$LT$DB$u20$as$u20$ra_ap_hir_expand..db..ExpandDatabase$GT$..parse_macro_expansion..parse_macro_expansion_shim..Configuration_$u20$as$u20$salsa..function..Configuration$GT$::execute::h3736a9db30dc9f10 (in extractor) + 432 [0x1018ad9e0]
+ 8427 _$LT$DB$u20$as$u20$ra_ap_hir_expand..db..ExpandDatabase$GT$::expand_proc_macro::expand_proc_macro_shim::ha92750e50243b818 (in extractor) + 68 [0x1018b1008]
+ 8427 salsa::attach::Attached::attach::h30a4f3671b3cb427 (in extractor) + 240 [0x10182c4e8]
+ 8427 salsa::function::fetch::_$LT$impl$u20$salsa..function..IngredientImpl$LT$C$GT$$GT$::fetch::h0fefef6ed2d271ca (in extractor) + 112 [0x1017e0794]
+ 8427 salsa::function::fetch::_$LT$impl$u20$salsa..function..IngredientImpl$LT$C$GT$$GT$::refresh_memo::hff8a0fe74ecf24bb (in extractor) + 468 [0x1017e0690]
+ 8427 salsa::function::execute::_$LT$impl$u20$salsa..function..IngredientImpl$LT$C$GT$$GT$::execute::h55ce458b25bc052d (in extractor) + 388 [0x1017e25ac]
+ 8427 salsa::cycle::Cycle::catch::hb047f11858c3fc04 (in extractor) + 64 [0x101874a90]
+ 8427 _$LT$$LT$DB$u20$as$u20$ra_ap_hir_expand..db..ExpandDatabase$GT$..expand_proc_macro..expand_proc_macro_shim..Configuration_$u20$as$u20$salsa..function..Configuration$GT$::execute::h4ee7a6107fe1becb (in extractor) + 544 [0x1018b125c]
+ 8427 ra_ap_hir_expand::proc_macro::CustomProcMacroExpander::expand::h926503020475ddbe (in extractor) + 960 [0x10184c7cc]
+ 8427 _$LT$ra_ap_load_cargo..Expander$u20$as$u20$ra_ap_hir_expand..proc_macro..ProcMacroExpander$GT$::expand::h7732473b464838f7 (in extractor) + 180 [0x10110f050]
+ 8427 ra_ap_proc_macro_api::ProcMacro::expand::hdea44d87c9e223c6 (in extractor) + 928 [0x101206f1c]
+ 8427 ra_ap_proc_macro_api::process::ProcMacroServerProcess::send_task::hf6562cb32c1014d7 (in extractor) + 172 [0x101208508]
+ 8427 ra_ap_proc_macro_api::legacy_protocol::msg::Message::write::ha2f3f1726fc6ad83 (in extractor) + 1376 [0x10120b528]
+ 8427 ra_ap_proc_macro_api::legacy_protocol::json::write_json::h6cde6bdfb20a1a85 (in extractor) + 248 [0x101209c38]
+ 8427 std::io::Write::write_all::h09b7d88c58cb0548 (in extractor) + 84 [0x10120c89c]
+ 8427 _$LT$std..fs..File$u20$as$u20$std..io..Write$GT$::write::h08f3647ba5631374 (in extractor) + 28 [0x1019e2de4]
+
rust-analyzer version: (eg. output of "rust-analyzer: Show RA Version" command, accessible in VSCode via Ctrl/⌘+Shift+P)
[dependencies]
ra_ap_hir = "0.0.273"
ra_ap_load-cargo = "0.0.273"
ra_ap_project_model = "0.0.273"
ra_ap_syntax = "0.0.273"
ra_ap_vfs = "0.0.273"
ra_ap_ide_db = "0.0.273"
rustc version: (eg. output of rustc -V)
rustc 1.85.1 (4eb161250 2025-03-15)
editor or extension: (eg. VSCode, Vim, Emacs, etc. For VSCode users, specify your extension version; for users of other editors, provide the distribution if applicable)
relevant settings: (eg. client settings, or environment variables like CARGO, RUSTC, RUSTUP_HOME or CARGO_HOME)
repository link (if public, optional): (eg. rust-analyzer)
program to reproduce:
Also attached as zip file with cargo project
use ra_ap_hir::Semantics;
use ra_ap_load_cargo::{LoadCargoConfig, load_workspace_at};
use ra_ap_project_model::{CargoConfig, RustLibSource};
use ra_ap_syntax::{
AstNode, SyntaxNode, WalkEvent,
ast::{self},
};
use ra_ap_vfs::VfsPath;
/// After expanding the `crud!` macro call in https://github.com/tdcare/genies/blob/20026d543ed44ccffbb54f739f6cb0d8a686a8b9/crates/genies/src/ddd/message.rs#L53
// The `Semantics::attach_first_edition`` appears to hang on the following file:
/// https://github.com/http-rs/http-client/blob/c776e32a5e4c37160b0c522fc4502c5d6a6ac6fe/src/lib.rs#L47
fn main() {
// git clone https://github.com/tdcare/genies /tmp/genies
// (cd /tmp/genies; git checkout 20026d543ed44ccffbb54f739f6cb0d8a686a8b9)
let root = std::path::Path::new("/tmp/genies/Cargo.toml");
let config = CargoConfig {
sysroot: Some(RustLibSource::Discover),
rustc_source: Some(RustLibSource::Discover),
..Default::default()
};
let load_config = LoadCargoConfig {
load_out_dirs_from_check: true,
with_proc_macro_server: ra_ap_load_cargo::ProcMacroServerChoice::Sysroot,
prefill_caches: false,
};
let progress = |s| {
println!("{}", s);
};
let (db, vfs, _macro_server) =
load_workspace_at(root, &config, &load_config, &progress).unwrap();
let semantics: Semantics<'_, ra_ap_ide_db::RootDatabase> = Semantics::new(&db);
let path = "/tmp/genies/crates/genies/src/ddd/message.rs".to_owned();
let (file_id, _) = vfs.file_id(&VfsPath::new_real_path(path)).unwrap();
if let Some(file_id) = semantics.attach_first_edition(file_id) {
let file_id = ra_ap_ide_db::base_db::EditionedFileId::new(semantics.db, file_id);
let ast = semantics.parse(file_id);
expand_all(&semantics, ast.syntax());
}
println!("done expanding macros in message.rs");
let mut file_id = None;
for (id, file) in vfs.iter() {
if file.to_string().ends_with("http-client-6.5.3/src/lib.rs") {
file_id = Some(id);
break;
}
}
let file_id = file_id.unwrap();
println!("{:#?}", semantics.attach_first_edition(file_id));
}
fn expand_all(semantics: &Semantics<'_, ra_ap_ide_db::RootDatabase>, node: &SyntaxNode) {
for event in node.preorder() {
if let WalkEvent::Enter(node) = event {
if ast::MacroCall::can_cast(node.kind()) {
if let Some(node) =
semantics.expand_macro_call(&ast::MacroCall::cast(node).unwrap())
{
expand_all(semantics, &node);
}
} else if ast::Item::can_cast(node.kind()) {
if let Some(value) = semantics.expand_attr_macro(&ast::Item::cast(node).unwrap()) {
expand_all(semantics, &value.value);
}
}
}
}
}
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 at Semantics::attach_first_edition and trace the provided call graph through ra_ap_proc_macro_api::legacy_protocol::json::write_json and the proc-macro-server communication. Reproduce the hang using the project where expanding two files triggers it, then determine a bounded failure mode and add coverage showing the operation no longer waits indefinitely.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- compilers
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 30/100