Commit graph

4750 commits

Author SHA1 Message Date
Evgenii P
8222a1fddf Fix is_path_start to accept T![<], fix is_path_start usages 2019-08-13 22:36:01 +07:00
bors[bot]
978e3e384b Merge #1636
1636: fix block parse problem r=matklad a=bravomikekilo

try to fix [issue-1598](https://github.com/rust-analyzer/rust-analyzer/issues/1598).

Co-authored-by: bravomikekilo <bmk1221@126.com>
2019-08-13 12:46:47 +00:00
bravomikekilo
eb0e9bd981 add inline test 2019-08-13 18:17:10 +08:00
bors[bot]
2c65a05984 Merge #1677
1677: Associated types r=flodiebold a=flodiebold

This implements basic support for (fully qualified) associated type projections:
 - handle fully qualified paths like `<T as Trait>::AssocType` (basically desugaring to something like `Trait<Self=T>::AssocType`)
 - lower these to a new `Ty::Projection` enum variant
 - also introduce `Ty::UnselectedProjection` for cases like `T::AssocType` where the trait from which the type comes isn't specified, but these aren't handled further so far
 - in inference, normalize these projections using Chalk: basically, when encountering a type e.g. from a type annotation or signature, we replace these `Ty::Projection`s by type variables and add obligations to normalize the associated type

Co-authored-by: Florian Diebold <flodiebold@gmail.com>
2019-08-12 19:43:57 +00:00
Florian Diebold
5af9691dc9 Handle placeholder assoc types when Chalk produces them 2019-08-12 21:43:00 +02:00
Florian Diebold
9d72b14cfe Normalize assoc types in more places 2019-08-12 21:43:00 +02:00
Florian Diebold
11b9845afd Improve debug logging a bit 2019-08-12 21:43:00 +02:00
Florian Diebold
6265497523 Normalize associated types during inference 2019-08-12 21:43:00 +02:00
Florian Diebold
22724f37f3 Lower fully qualified associated type paths
I.e. `<T as Trait>::Foo`.
2019-08-12 21:43:00 +02:00
Florian Diebold
6cfdfdecba Add representations of associated types
This adds three different representations, copied from the Chalk model:
 - `Ty::Projection` is an associated type projection written somewhere in the
   code, like `<Foo as Trait>::Bar`.
 - `Ty::UnselectedProjection` is similar, but we don't know the trait
   yet (`Foo::Bar`).
 - The above representations are normalized to their actual types during type
   inference. When that isn't possible, for example for `T::Item` inside an `fn
   foo<T: Iterator>`, the type is normalized to an application type with
   `TypeCtor::AssociatedType`.
2019-08-12 21:43:00 +02:00
Florian Diebold
3a9a0bc968 Add another test for assoc type resolution 2019-08-12 21:43:00 +02:00
bors[bot]
0cf48e48d7 Merge #1683
1683: Use Source in Diagnostic r=matklad a=eupn

Closes #1681.

Co-authored-by: Evgenii P <eupn@protonmail.com>
2019-08-12 16:22:58 +00:00
Evgenii P
475a93097f Use Source in Diagnostic and implement 2019-08-12 23:06:08 +07:00
bors[bot]
d5e8fa606d Merge #1682
1682: Drop support for old extendSelection API r=matklad a=matklad

Emacs now handles this via native LSP request

dc86bbb227

r? @flodiebold 

(Have not actually tried elisp code)

Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2019-08-12 10:49:59 +00:00
Aleksey Kladov
13eddd7c49 Drop support for old extendSelection API
Emacs now handles this via native LSP request

dc86bbb227
2019-08-12 13:49:28 +03:00
bors[bot]
cce31580e1 Merge #1667
1667: Show backtraces in lens runnables r=matklad a=SomeoneToIgnore



Co-authored-by: Kirill Bulatov <mail4score@gmail.com>
2019-08-12 10:33:59 +00:00
bors[bot]
b8627d8c10 Merge #1675
1675: Improvements to emacs inlay hints r=matklad a=flodiebold

 - only send request if workspace is initialized (emacs-lsp doesn't seem to
   prevent sending requests before the initialized notification is sent)
 - check whether we're still in the correct buffer before sending request

Co-authored-by: Florian Diebold <flodiebold@gmail.com>
2019-08-12 10:23:33 +00:00
Evgenii P
f1e62501c3 Fix for<'lifetime> for types specified by path 2019-08-11 16:56:05 +07:00
Florian Diebold
e51c1d6bff Improvements to emacs inlay hints
- only send request if workspace is initialized (emacs-lsp doesn't seem to
   prevent sending requests before the initialized notification is sent)
 - check whether we're still in the correct buffer before sending request
2019-08-10 20:35:10 +02:00
Kirill Bulatov
2c5c35bdae Always set the runnable name 2019-08-09 23:34:14 +03:00
Kirill Bulatov
726535a44e Extract common logic 2019-08-09 22:19:34 +03:00
Kirill Bulatov
918addee23 Show backtraces in lens runnables 2019-08-09 21:42:04 +03:00
bors[bot]
e3f8e6023d Merge #1673
1673: Move numeric names inside of `NameRef` r=matklad a=matklad



Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2019-08-09 10:17:47 +00:00
Aleksey Kladov
f3ee5a1509 Move numeric names inside of NameRef 2019-08-09 12:16:47 +02:00
bors[bot]
5f82012779 Merge #1669
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>
2019-08-09 09:21:50 +00:00
Evgenii P
fa24e20867 Make name_ref to accept numeric names optionally 2019-08-09 16:08:36 +07:00
Evgenii P
957b5ed23a Parse tuple struct field initialization 2019-08-09 15:38:52 +07:00
bors[bot]
2fbec23d99 Merge #1668
1668: Reduce code duplication in lexer r=matklad a=eupn

During an investigation of a fix for #1218, I stumbled upon some code duplication in the lexer.

Co-authored-by: Evgenii P <eupn@protonmail.com>
2019-08-09 08:11:26 +00:00
Evgenii P
db4839033c Change macro to function 2019-08-09 15:04:13 +07:00
Evgenii P
073cf42391 rustfmt 2019-08-09 14:23:13 +07:00
Evgenii P
f4a6d92050 Reduce code duplication in lexer by introducing small macro 2019-08-09 14:08:34 +07:00
bors[bot]
87608904f6 Merge #1661
1661: Parse function parameters attributes r=matklad a=eupn

Fixes #1397. The [RFC-2565](https://github.com/rust-lang/rfcs/blob/master/text/2565-formal-function-parameter-attributes.md) specifies `#[attributes]` to function parameters:

```rust
fn foo(#[attr] a, #[unused] b, #[must_use] ...) {
    // ...
}
```

This PR adds those attributes into grammar and to the parser, extending corresponding inline tests.

Co-authored-by: Evgenii P <eupn@protonmail.com>
2019-08-08 13:04:28 +00:00
Evgenii P
6fa2d82147 Fix parser tests according to review 2019-08-08 09:12:07 +07:00
Evgenii P
77f4ab3e9b Deduplicate while loop break condition 2019-08-08 08:58:28 +07:00
bors[bot]
de4523fae0 Merge #1664
1664: assoc types bounds r=matklad a=matklad



Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2019-08-07 19:00:38 +00:00
Aleksey Kladov
d6ab1af086 assoc types bounds 2019-08-07 21:00:02 +02:00
bors[bot]
fc40e42003 Merge #1663
1663: architecture.md: update path to parser tests r=matklad a=eupn



Co-authored-by: eupn <36292692+eupn@users.noreply.github.com>
2019-08-07 18:31:37 +00:00
bors[bot]
d74af56248 Merge #1662
1662: architecture.md: "finish not Y" -> "finish node Y" r=matklad a=eupn

Is this a typo?

Co-authored-by: eupn <36292692+eupn@users.noreply.github.com>
2019-08-07 18:21:33 +00:00
Evgenii P
79d4202194 Fix parser to correctly consume outer attrs before ellipsis param 2019-08-08 00:36:19 +07:00
eupn
3c09c8105d
architecture.md: update path to parser tests 2019-08-08 00:23:10 +07:00
eupn
61f42cc647
architecture.md: "finish not Y" -> "finish node Y"
Is this a typo?
2019-08-08 00:18:47 +07:00
Evgenii P
9ea36703d2 Fix variadic arg inline test 2019-08-07 23:48:21 +07:00
Evgenii P
3fb58c620c Add function parameters attributes 2019-08-07 23:42:28 +07:00
bors[bot]
c5b44975b8 Merge #1660
1660: implement while let desugaring r=matklad a=matklad



Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2019-08-07 13:16:06 +00:00
Aleksey Kladov
6efc79b89d implement while let desugaring 2019-08-07 15:14:22 +02:00
Aleksey Kladov
39967a85e1 refactor if-let lowering
mainly to get rid of unwraps
2019-08-07 13:57:24 +02:00
Aleksey Kladov
4d6475ada0 refactor if lowering 2019-08-07 12:32:32 +02:00
bors[bot]
9ea4ae680a Merge #1659
1659: install server first r=matklad a=matklad



Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2019-08-07 10:25:22 +00:00
Aleksey Kladov
a2966944a8 install server first
closes #1658
2019-08-07 12:12:23 +02:00
bors[bot]
7e12422fa2 Merge #1652
1652: Improve type hints behavior r=matklad a=SomeoneToIgnore

This PR fixed the following type hints issues:

* Restructures the `InlayKind` enum contents based on the discussion here: https://github.com/rust-analyzer/rust-analyzer/pull/1606#issuecomment-515968055
* Races described in #1639 
* Caches the latest decorations received for each file to show them the next time the file is opened (instead of a new server request)

Co-authored-by: Kirill Bulatov <mail4score@gmail.com>
2019-08-06 16:50:49 +00:00