Commit Graph

309 Commits

Author SHA1 Message Date
Aleksey Kladov fd030f9450 Revert "Merge #4233"
This reverts commit a5f2b16366, reversing
changes made to c96b2180c1.
2020-05-02 01:12:37 +02:00
bors[bot] 21588e15df Merge #4246
4246: Validate uses of self and super r=matklad a=djrenren

This change follows on the validation of the `crate` keyword in paths. It verifies the following things:

`super`:
 - May only be preceded by other `super` segments
 - If in a `UseItem` then all semantically preceding paths also consist only of `super`

`self`
 - May only be the start of a path


Just a note, a couple times while working on this I found myself really wanting a Visitor of some sort so that I could traverse descendants while skipping sub-trees that are unimportant. Iterators don't really work for this, so as you can see I reached for recursion. Considering paths are generally small a fancy debounced visitor probably isn't important but figured I'd say something in case we had something like this lying around and I wasn't using it.

Co-authored-by: John Renner <john@jrenner.net>
2020-05-01 19:24:25 +00:00
John Renner 3bb46042fb Validate uses of self and super 2020-05-01 08:59:24 -07:00
Aleksey Kladov 292ba6a1f8 Remove dead code, which elaborately pretends to be alive 2020-04-30 22:41:14 +02:00
Aleksey Kladov 15cfa9a808 Fix a bunch of false-positives in join-lines 2020-04-30 22:08:50 +02:00
Aleksey Kladov 5f0008040e Allow to set env vars and pipe stdin via not_bash 2020-04-30 15:20:47 +02:00
bors[bot] 36775ef0d0 Merge #4219
4219: Avoid `rustup` invocation for non-rustup rust installation r=matklad a=oxalica

Fix #4218 and #3243.



Co-authored-by: oxalica <oxalicc@pm.me>
2020-04-30 11:59:29 +00:00
bors[bot] 95e8766db6 Merge #4178
4178: Validate the location of `crate` in paths r=matklad a=djrenren

**This solution does not fully handle `use` statements. See below**

This pull requests implements simple validation of usages of the `crate` keyword in `Path`s. Specifically it validates that:

- If a `PathSegment` is starts with the `crate` keyword, it is also the first segment of the `Path`
- All other usages of `crate` in `Path`s are considered errors.

This aligns with `rustc`'s rules. Unlike rustc this implementation does not issue a special error message in the case of `::crate` but it does catch the error.

Furthermore, this change does not cover all error cases. Specifically the following is not caught:

```rust
use foo::{crate}
```

This is because this check is context sensitive. From an AST perspective, `crate` is the root of the `Path`. Only by inspecting the full `UseItem` do we see that it is not in fact the root. This problem becomes worse because `UseTree`s are allowed to be arbitrarily nested:

```rust
use {crate, {{crate, foo::{crate}}}
```

So this is a hard problem to solve without essentially a breadth-first search. In a traditional compiler, I'd say this error is most easily found during the AST -> HIR conversion pass but within rust-analyzer I'm not sure where it belongs.  

Under the implementation in this PR, such errors are ignored so we're *more correct* just not *entirely correct*. 

Co-authored-by: John Renner <john@jrenner.net>
2020-04-30 10:17:40 +00:00
oxalica a1e84516e8 Avoid rustup invocation for non-rustup rust installation 2020-04-30 17:53:38 +08:00
John Renner 0af727da91 Validate the location of crate in paths 2020-04-29 11:06:51 -07:00
Laurențiu Nicola 77de40192e Use x86_64-unknown-linux-gnu for releases 2020-04-28 20:47:13 +03:00
kjeremy 4378c63272 Bump required rust to 1.43 2020-04-23 11:56:32 -04:00
veetaha 972d3b2ba3 Group generated ast boilerplate apart from the interesting part 2020-04-18 23:51:13 +03:00
veetaha 21b98d585e Refucktor codegen 2020-04-18 21:46:24 +03:00
Aleksey Kladov 5e5eb6a108 Align grammar for record patterns and literals
The grammar now looks like this

   [name_ref :] pat
2020-04-12 00:00:15 +02:00
Aleksey Kladov c476742f47 Simplify 2020-04-10 17:47:49 +02:00
Aleksey Kladov 5c5bde47fb Rename some tokens 2020-04-10 17:07:09 +02:00
Aleksey Kladov d4332760d8 Better readability 2020-04-10 16:10:28 +02:00
Aleksey Kladov e0f02d233f Remove dead code 2020-04-10 16:10:28 +02:00
Aleksey Kladov 4560fe2abf Generate only minimal set of ineresting tokens 2020-04-10 16:10:28 +02:00
Aleksey Kladov 8d71a6bf0c Scale token generation back 2020-04-10 16:10:28 +02:00
Aleksey Kladov 779f06ed77 Convert more tokens 2020-04-10 16:10:28 +02:00
Aleksey Kladov 548f562dda Other delimiters 2020-04-10 16:10:28 +02:00
Aleksey Kladov 460c8bbdec Curley tokens 2020-04-10 16:10:28 +02:00
Aleksey Kladov 1c5d859195 Start replacing tokens 2020-04-10 16:10:28 +02:00
Aleksey Kladov c8b4c36f81 Semicolon token 2020-04-10 16:10:28 +02:00
Aleksey Kladov f89f2e3885 More readable ast_src for keywords 2020-04-10 16:10:28 +02:00
Aleksey Kladov ff5643c524 Simplify 2020-04-10 16:10:27 +02:00
Aleksey Kladov 30084a56a5 Simpler acessors for keywords 2020-04-09 23:42:01 +02:00
Aleksey Kladov 0ed27c388a Drop needless trait 2020-04-09 23:02:10 +02:00
Aleksey Kladov 2bfb65db93 Be consistent about token accesors 2020-04-09 18:48:13 +02:00
Aleksey Kladov e6d22187a6 Add _token suffix to token accessors
I think this makes is more clear which things are : AstNode and which
are : AstToken
2020-04-09 18:25:36 +02:00
Aleksey Kladov 56c8581b90 Put displays at the end 2020-04-09 18:11:16 +02:00
Aleksey Kladov 9285cbffb6 More compact 2020-04-09 18:08:54 +02:00
Aleksey Kladov 6fd2a12495 More compact generated code 2020-04-09 18:07:16 +02:00
Aleksey Kladov 4a063e651f Move the rest of the tokens to generated/tokens 2020-04-09 17:58:15 +02:00
Aleksey Kladov c80795e274 Move generated tokens to a separate file 2020-04-09 17:47:46 +02:00
Aleksey Kladov 59b6b2278b Start ast/generated/tokens 2020-04-09 16:25:06 +02:00
Aleksey Kladov d61932ef7e Prepare for spliting generated into tokens and nodes 2020-04-09 16:17:18 +02:00
Aleksey Kladov 0fc8c5cca0 Reduce visibility 2020-04-09 15:49:17 +02:00
Aleksey Kladov 6379061e21 Cleanup import 2020-04-09 15:47:48 +02:00
Aleksey Kladov 689661c959 Scale back to only two traits 2020-04-09 13:00:09 +02:00
Luca Barbieri 60f4d7bd8c Provide more complete AST accessors to support usage in rustc 2020-04-09 11:50:37 +02:00
Aleksey Kladov 8f01e62bb9 Scale back the traits 2020-04-09 11:04:18 +02:00
Luca Barbieri 68196ccc10 Add AstElement trait, generate tokens, support tokens in enums
- Adds a new AstElement trait that is implemented by all generated
  node, token and enum structs

- Overhauls the code generators to code-generate all tokens, and
  also enhances enums to support including tokens, node, and nested
  enums
2020-04-08 17:15:12 +02:00
Aleksey Kladov 9e3c843847 fmt 2020-04-08 12:19:41 +02:00
Aleksey Kladov ffb7ea678b Don't strip nightly releases 2020-04-08 11:47:40 +02:00
Aleksey Kladov 372e684f6e When making a release, just promote the latest nightly 2020-04-07 11:42:36 +02:00
Aleksey Kladov da8eb29a2f Macro patterns are not confused with expressions.
We treat macro calls as expressions (there's appropriate Into impl),
which causes problem if there's expresison and non-expression macro in
the same node (like in the match arm).

We fix this problem by nesting macor patterns into another node (the
same way we nest path into PathExpr or PathPat). Ideally, we probably
should add a similar nesting for macro expressions, but that needs
some careful thinking about macros in blocks: `{ am_i_expression!() }`.
2020-04-03 16:12:38 +02:00
Aleksey Kladov db34abeb85 Get rid of ItemOrMacro 2020-03-26 16:10:01 +01:00