23a1280106
Complete exported macros in `#[macro_use($0)]` Closes https://github.com/rust-lang/rust-analyzer/issues/15657. Originally added a test case for incomplete input: ```rust #[test] fn completes_incomplete_syntax() { check( r#" //- /dep.rs crate:dep #[macro_export] macro_rules! foo { () => {}; } //- /main.rs crate:main deps:dep #[macro_use($0 extern crate dep; "#, expect![[r#" ma foo "#]], ) } ``` but couldn't make it pass and removed it 😅 Our current recovering logic doesn't work for token trees and for this code: ```rust #[macro_use( extern crate lazy_static; fn main() {} ``` we ended up with this syntax tree: ``` SOURCE_FILE@0..53 ATTR@0..52 POUND@0..1 "#" L_BRACK@1..2 "[" META@2..52 PATH@2..11 PATH_SEGMENT@2..11 NAME_REF@2..11 IDENT@2..11 "macro_use" TOKEN_TREE@11..52 L_PAREN@11..12 "(" WHITESPACE@12..13 "\n" EXTERN_KW@13..19 "extern" WHITESPACE@19..20 " " CRATE_KW@20..25 "crate" WHITESPACE@25..26 " " IDENT@26..37 "lazy_static" SEMICOLON@37..38 ";" WHITESPACE@38..40 "\n\n" FN_KW@40..42 "fn" WHITESPACE@42..43 " " IDENT@43..47 "main" TOKEN_TREE@47..49 L_PAREN@47..48 "(" R_PAREN@48..49 ")" WHITESPACE@49..50 " " TOKEN_TREE@50..52 L_CURLY@50..51 "{" R_CURLY@51..52 "}" WHITESPACE@52..53 "\n" ``` Maybe we can try to parse the token tree in `crates/ide-completion/src/context/analysis.rs` but I'm not sure what's the best way forward. |
||
---|---|---|
.. | ||
src | ||
Cargo.toml |