Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

thread 'Worker' panicked at crates/span/src/ast_id.rs:203:21: #17214

Open
kzhui125 opened this issue May 10, 2024 · 4 comments
Open

thread 'Worker' panicked at crates/span/src/ast_id.rs:203:21: #17214

kzhui125 opened this issue May 10, 2024 · 4 comments
Labels
C-bug Category: bug I-panic

Comments

@kzhui125
Copy link

rust-analyzer 0.3.1950-standalone (c4618fe 2024-05-05)

stderr: thread 'Worker' panicked at crates/span/src/ast_id.rs:203:21:
stderr: Can't find CONST_ARG@2221..2222 in AstIdMap:
stderr: [SyntaxNodePtr { kind: SOURCE_FILE, range: 0..4620 }, SyntaxNodePtr { kind: USE, range: 0..31 }, SyntaxNodePtr { kind: USE, range: 32..70 }, SyntaxNodePtr { kind: USE, range: 71..101 }, SyntaxNodePtr { kind: USE, range: 102..147 }, SyntaxNodePtr { kind: USE, range: 149..209 }, SyntaxNodePtr { kind: MODULE, range: 211..975 }, SyntaxNodePtr { kind: IMPL, range: 977..1703 }, SyntaxNodePtr { kind: IMPL, range: 1705..2801 }, SyntaxNodePtr { kind: IMPL, range: 2803..3097 }, SyntaxNodePtr { kind: IMPL, range: 3099..3270 }, SyntaxNodePtr { kind: IMPL, range: 3272..3613 }, SyntaxNodePtr { kind: IMPL, range: 3615..3977 }, SyntaxNodePtr { kind: STRUCT, range: 3979..3999 }, SyntaxNodePtr { kind: IMPL, range: 4001..4286 }, SyntaxNodePtr { kind: IMPL, range: 4288..4446 }, SyntaxNodePtr { kind: MODULE, range: 4448..4619 }, SyntaxNodePtr { kind: USE, range: 225..238 }, SyntaxNodePtr { kind: TRAIT, range: 244..385 }, SyntaxNodePtr { kind: IMPL, range: 391..767 }, SyntaxNodePtr { kind: IMPL, range: 773..973 }, SyntaxNodePtr { kind: FN, range: 1077..1422 }, SyntaxNodePtr { kind: FN, range: 1428..1701 }, SyntaxNodePtr { kind: FN, range: 2163..2508 }, SyntaxNodePtr { kind: FN, range: 2514..2799 }, SyntaxNodePtr { kind: FN, range: 2885..3095 }, SyntaxNodePtr { kind: FN, range: 3169..3268 }, SyntaxNodePtr { kind: FN, range: 3370..3457 }, SyntaxNodePtr { kind: FN, range: 3463..3611 }, SyntaxNodePtr { kind: FN, range: 3687..3824 }, SyntaxNodePtr { kind: FN, range: 3830..3975 }, SyntaxNodePtr { kind: TUPLE_FIELD, range: 3996..3997 }, SyntaxNodePtr { kind: FN, range: 4057..4284 }, SyntaxNodePtr { kind: FN, range: 4341..4444 }, SyntaxNodePtr { kind: USE, range: 4477..4490 }, SyntaxNodePtr { kind: TRAIT, range: 4496..4515 }, SyntaxNodePtr { kind: IMPL, range: 4521..4581 }, SyntaxNodePtr { kind: IMPL, range: 4586..4617 }, SyntaxNodePtr { kind: FN, range: 273..379 }, SyntaxNodePtr { kind: FN, range: 520..761 }, SyntaxNodePtr { kind: FN, range: 807..967 }, SyntaxNodePtr { kind: SELF_PARAM, range: 1091..1095 }, SyntaxNodePtr { kind: PARAM, range: 1097..1107 }, SyntaxNodePtr { kind: BLOCK_EXPR, range: 1187..1422 }, SyntaxNodePtr { kind: SELF_PARAM, range: 1450..1454 }, SyntaxNodePtr { kind: PARAM, range: 1456..1466 }, SyntaxNodePtr { kind: BLOCK_EXPR, range: 1572..1701 }, SyntaxNodePtr { kind: SELF_PARAM, range: 2177..2181 }, SyntaxNodePtr { kind: PARAM, range: 2183..2193 }, SyntaxNodePtr { kind: BLOCK_EXPR, range: 2273..2508 }, SyntaxNodePtr { kind: SELF_PARAM, range: 2536..2540 }, SyntaxNodePtr { kind: PARAM, range: 2542..2552 }, SyntaxNodePtr { kind: BLOCK_EXPR, range: 2658..2799 }, SyntaxNodePtr { kind: SELF_PARAM, range: 2892..2897 }, SyntaxNodePtr { kind: PARAM, range: 2899..2921 }, SyntaxNodePtr { kind: BLOCK_EXPR, range: 2938..3095 }, SyntaxNodePtr { kind: SELF_PARAM, range: 3176..3181 }, SyntaxNodePtr { kind: PARAM, range: 3183..3205 }, SyntaxNodePtr { kind: BLOCK_EXPR, range: 3222..3268 }, SyntaxNodePtr { kind: SELF_PARAM, range: 3380..3385 }, SyntaxNodePtr { kind: BLOCK_EXPR, range: 3424..3457 }, SyntaxNodePtr { kind: SELF_PARAM, range: 3518..3526 }, SyntaxNodePtr { kind: PARAM, range: 3528..3553 }, SyntaxNodePtr { kind: BLOCK_EXPR, range: 3555..3611 }, SyntaxNodePtr { kind: SELF_PARAM, range: 3697..3702 }, SyntaxNodePtr { kind: BLOCK_EXPR, range: 3741..3824 }, SyntaxNodePtr { kind: SELF_PARAM, range: 3885..3893 }, SyntaxNodePtr { kind: PARAM, range: 3895..3920 }, SyntaxNodePtr { kind: BLOCK_EXPR, range: 3922..3975 }, SyntaxNodePtr { kind: SELF_PARAM, range: 4064..4069 }, SyntaxNodePtr { kind: PARAM, range: 4071..4101 }, SyntaxNodePtr { kind: BLOCK_EXPR, range: 4118..4284 }, SyntaxNodePtr { kind: SELF_PARAM, range: 4354..4363 }, SyntaxNodePtr { kind: PARAM, range: 4365..4372 }, SyntaxNodePtr { kind: BLOCK_EXPR, range: 4389..4444 }, SyntaxNodePtr { kind: SELF_PARAM, range: 291..295 }, SyntaxNodePtr { kind: PARAM, range: 297..307 }, SyntaxNodePtr { kind: SELF_PARAM, range: 538..542 }, SyntaxNodePtr { kind: PARAM, range: 544..554 }, SyntaxNodePtr { kind: BLOCK_EXPR, range: 635..761 }, SyntaxNodePtr { kind: SELF_PARAM, range: 825..829 }, SyntaxNodePtr { kind: PARAM, range: 831..841 }, SyntaxNodePtr { kind: BLOCK_EXPR, range: 922..967 }, SyntaxNodePtr { kind: MACRO_CALL, range: 2477..2489 }, SyntaxNodePtr { kind: MACRO_CALL, range: 2768..2780 }, SyntaxNodePtr { kind: BLOCK_EXPR, range: 3756..3817 }, SyntaxNodePtr { kind: MACRO_CALL, range: 4198..4224 }, SyntaxNodePtr { kind: MACRO_CALL, range: 665..692 }]
stderr: stack backtrace:
stderr: 0: _rust_begin_unwind
stderr: 1: core::panicking::panic_fmt
stderr: 2: span::ast_id::AstIdMap::erased_ast_id
stderr: 3: hir_def::hir::type_ref::ConstRef::from_const_arg
stderr: 4: hir_def::hir::type_ref::TypeRef::from_ast
stderr: 5: hir_def::path::lower::lower_generic_args
stderr: 6: hir_def::path::lower::lower_path
stderr: 7: hir_def::hir::type_ref::TypeRef::from_ast
stderr: 8: hir_def::path::lower::lower_generic_args
stderr: 9: hir_def::path::lower::lower_path
stderr: 10: hir::semantics::SemanticsScope::speculative_resolve
stderr: 11: ide_db::path_transform::Ctx::transform_path
stderr: 12: ide_db::path_transform::Ctx::apply
stderr: 13: ide_db::path_transform::PathTransform::apply
stderr: 14: ide_assists::handlers::generate_delegate_trait::transform_impl
stderr: 15: ide_assists::handlers::generate_delegate_trait::generate_impl
stderr: 16: ide_assists::handlers::generate_delegate_trait::generate_delegate_trait
stderr: 17: ide_assists::assists
stderr: 18: std::panicking::try
stderr: 19: ide::Analysis::assists_with_fixes
stderr: 20: rust_analyzer::handlers::request::handle_code_action
stderr: 21: std::panicking::try
stderr: 22: core::ops::function::FnOnce::call_once{{vtable.shim}}
stderr: note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
@kzhui125 kzhui125 added the C-bug Category: bug label May 10, 2024
@roife
Copy link
Contributor

roife commented May 11, 2024

Can you provide code snippets for reproduction? A minimal reproducible example would be helpful for us to identify the bug.

@kzhui125
Copy link
Author

@roife the original code changed, can't reproduce now, thanks.

@Veykril
Copy link
Member

Veykril commented May 13, 2024

Putting the cursor on the DeriveMacroInvocation in

derive_macros: FxHashMap<AstId<ast::Adt>, SmallVec<[DeriveMacroInvocation; 1]>>,
causes this for me

@roife
Copy link
Contributor

roife commented May 15, 2024

I investigated the issue and found that the problem lies with PathTransform.

Suppose we need to transform two paths: K (a generic argument) and its parent Trait<K>. Since we use a reverse preorder traversal, we process K first and then Trait<K>.

Let’s say we replace K with [i32; 1]. This replacement will apply to all occurrences of K, so Trait<K> is transformed into Trait<[i32; 1]> first.

The issue arises when we process Trait<K> (now Trait<[i32; 1]>). It tries to locate the positions of the elements within Trait<[i32; 1]> in the source_scope, but it can't find the AstId corresponding to the const_arg 1. This is because the source_scope only contains the original Trait<K>, which leading to an error. And this's why this error says "Can't find CONST_ARG."

I haven't yet come up with a particularly good solution to this problem.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
C-bug Category: bug I-panic
Projects
None yet
Development

No branches or pull requests

3 participants