224387a4de
6606: Parse unsafe extern block r=lnicola a=dtolnay `unsafe extern` block is parsed successfully by rustc, which means it is usable in attribute macro input. https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=6f805556f176d082d87255957f16b5f6 ```rust #[cfg(parse)] unsafe extern "C++" { fn demo(); } ``` ```diff SOURCE_FILE@0..52 - ERROR@0..33 + EXTERN_BLOCK@0..52 ATTR@0..13 POUND@0..1 "#" L_BRACK@1..2 "[" PATH@2..5 PATH_SEGMENT@2..5 NAME_REF@2..5 IDENT@2..5 "cfg" TOKEN_TREE@5..12 L_PAREN@5..6 "(" IDENT@6..11 "parse" R_PAREN@11..12 ")" R_BRACK@12..13 "]" WHITESPACE@13..14 "\n" UNSAFE_KW@14..20 "unsafe" WHITESPACE@20..21 " " ABI@21..33 EXTERN_KW@21..27 "extern" WHITESPACE@27..28 " " STRING@28..33 "\"C++\"" - WHITESPACE@33..34 " " - ERROR@34..52 - L_CURLY@34..35 "{" - WHITESPACE@35..40 "\n " - FN@40..50 - FN_KW@40..42 "fn" - WHITESPACE@42..43 " " - NAME@43..47 - IDENT@43..47 "demo" - PARAM_LIST@47..49 - L_PAREN@47..48 "(" - R_PAREN@48..49 ")" - SEMICOLON@49..50 ";" - WHITESPACE@50..51 "\n" - R_CURLY@51..52 "}" + WHITESPACE@33..34 " " + EXTERN_ITEM_LIST@34..52 + L_CURLY@34..35 "{" + WHITESPACE@35..40 "\n " + FN@40..50 + FN_KW@40..42 "fn" + WHITESPACE@42..43 " " + NAME@43..47 + IDENT@43..47 "demo" + PARAM_LIST@47..49 + L_PAREN@47..48 "(" + R_PAREN@48..49 ")" + SEMICOLON@49..50 ";" + WHITESPACE@50..51 "\n" + R_CURLY@51..52 "}" ``` This is of interest for https://github.com/dtolnay/cxx. Co-authored-by: David Tolnay <dtolnay@gmail.com> |
||
---|---|---|
.cargo | ||
.github | ||
.vscode | ||
assets | ||
crates | ||
docs | ||
editors/code | ||
xtask | ||
.gitattributes | ||
.gitignore | ||
bors.toml | ||
Cargo.lock | ||
Cargo.toml | ||
LICENSE-APACHE | ||
LICENSE-MIT | ||
PRIVACY.md | ||
README.md | ||
rustfmt.toml |
rust-analyzer is an experimental modular compiler frontend for the Rust language. It is a part of a larger rls-2.0 effort to create excellent IDE support for Rust.
Work on rust-analyzer is sponsored by
Quick Start
https://rust-analyzer.github.io/manual.html#installation
Documentation
If you want to contribute to rust-analyzer or are just curious about how things work under the hood, check the ./docs/dev folder.
If you want to use rust-analyzer's language server with your editor of choice, check the manual folder. It also contains some tips & tricks to help you be more productive when using rust-analyzer.
Communication
For usage and troubleshooting requests, please use "IDEs and Editors" category of the Rust forum:
https://users.rust-lang.org/c/ide/14
For questions about development and implementation, join rls-2.0 working group on Zulip:
https://rust-lang.zulipchat.com/#narrow/stream/185405-t-compiler.2Frls-2.2E0
Quick Links
- Website: https://rust-analyzer.github.io/
- Metrics: https://rust-analyzer.github.io/metrics/
- API docs: https://rust-analyzer.github.io/rust-analyzer/ide/
License
Rust analyzer is primarily distributed under the terms of both the MIT license and the Apache License (Version 2.0).
See LICENSE-APACHE and LICENSE-MIT for details.