5f82012779
1669: Parse tuple struct field initialization r=matklad a=eupn Closes #1218. This PR modifies the parser to accept the following code: ```rust fn main() { struct TupleStruct(usize); let s = TupleStruct { 0: 1usize, }; dbg!(s.0); } ``` <details><summary>with following AST:</summary> ``` SOURCE_FILE@[0; 118) FN_DEF@[0; 116) FN_KW@[0; 2) "fn" WHITESPACE@[2; 3) " " NAME@[3; 7) IDENT@[3; 7) "main" PARAM_LIST@[7; 9) L_PAREN@[7; 8) "(" R_PAREN@[8; 9) ")" WHITESPACE@[9; 10) " " BLOCK@[10; 116) L_CURLY@[10; 11) "{" WHITESPACE@[11; 16) "\n " STRUCT_DEF@[16; 42) STRUCT_KW@[16; 22) "struct" WHITESPACE@[22; 23) " " NAME@[23; 34) IDENT@[23; 34) "TupleStruct" POS_FIELD_DEF_LIST@[34; 41) L_PAREN@[34; 35) "(" POS_FIELD_DEF@[35; 40) PATH_TYPE@[35; 40) PATH@[35; 40) PATH_SEGMENT@[35; 40) NAME_REF@[35; 40) IDENT@[35; 40) "usize" R_PAREN@[40; 41) ")" SEMI@[41; 42) ";" WHITESPACE@[42; 47) "\n " LET_STMT@[47; 94) LET_KW@[47; 50) "let" WHITESPACE@[50; 51) " " BIND_PAT@[51; 52) NAME@[51; 52) IDENT@[51; 52) "s" WHITESPACE@[52; 53) " " EQ@[53; 54) "=" WHITESPACE@[54; 55) " " STRUCT_LIT@[55; 93) PATH@[55; 66) PATH_SEGMENT@[55; 66) NAME_REF@[55; 66) IDENT@[55; 66) "TupleStruct" WHITESPACE@[66; 67) " " NAMED_FIELD_LIST@[67; 93) L_CURLY@[67; 68) "{" WHITESPACE@[68; 77) "\n " NAMED_FIELD@[77; 86) NAME_REF@[77; 78) INT_NUMBER@[77; 78) "0" COLON@[78; 79) ":" WHITESPACE@[79; 80) " " LITERAL@[80; 86) INT_NUMBER@[80; 86) "1usize" COMMA@[86; 87) "," WHITESPACE@[87; 92) "\n " R_CURLY@[92; 93) "}" SEMI@[93; 94) ";" WHITESPACE@[94; 104) "\n \n " EXPR_STMT@[104; 114) MACRO_CALL@[104; 113) PATH@[104; 107) PATH_SEGMENT@[104; 107) NAME_REF@[104; 107) IDENT@[104; 107) "dbg" EXCL@[107; 108) "!" TOKEN_TREE@[108; 113) L_PAREN@[108; 109) "(" IDENT@[109; 110) "s" DOT@[110; 111) "." INT_NUMBER@[111; 112) "0" R_PAREN@[112; 113) ")" SEMI@[113; 114) ";" WHITESPACE@[114; 115) "\n" R_CURLY@[115; 116) "}" WHITESPACE@[116; 118) "\n\n" ``` </summary> Co-authored-by: Evgenii P <eupn@protonmail.com> |
||
---|---|---|
.cargo | ||
.github | ||
.vscode | ||
crates | ||
docs | ||
editors | ||
.gitattributes | ||
.gitignore | ||
.travis.yml | ||
bors.toml | ||
Cargo.lock | ||
Cargo.toml | ||
LICENSE-APACHE | ||
LICENSE-MIT | ||
README.md | ||
rustfmt.toml |
Rust Analyzer
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. If you want to get involved, check the rls-2.0 working group in the compiler-team repository:
https://github.com/rust-lang/compiler-team/tree/master/content/working-groups/rls-2.0
Work on the Rust Analyzer is sponsored by
Language Server Quick Start
Rust Analyzer is a work-in-progress, so you'll have to build it from source, and you might encounter critical bugs. That said, it is complete enough to provide a useful IDE experience and some people use it as a daily driver.
To build rust-analyzer, you need:
- latest stable rust for language server itself
- latest stable npm and VS Code for VS Code extension (
code
should be in path)
For setup for other editors, see ./docs/user.
# clone the repo
$ git clone https://github.com/rust-analyzer/rust-analyzer && cd rust-analyzer
# install both the language server and VS Code extension
$ cargo install-ra
# alternatively, install only the server. Binary name is `ra_lsp_server`.
$ cargo install-ra --server
Documentation
If you want to contribute to rust-analyzer or 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 ./docs/user folder. It also contains some tips & tricks to help you be more productive when using rust-analyzer.
Getting in touch
We are on the rust-lang Zulip!
https://rust-lang.zulipchat.com/#narrow/stream/185405-t-compiler.2Frls-2.2E0
Quick Links
- Work List: https://paper.dropbox.com/doc/RLS-2.0-work-list--AZ3BgHKKCtqszbsi3gi6sjchAQ-42vbnxzuKq2lKwW0mkn8Y
- API docs: https://rust-analyzer.github.io/rust-analyzer/ra_ide_api/index.html
- CI: https://travis-ci.org/rust-analyzer/rust-analyzer
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.