aboutsummaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
...
* | Merge #1685bors[bot]2019-08-155-1/+142
|\ \ | | | | | | | | | | | | | | | | | | | | | 1685: fix error of RangeFrom in for-loop r=DJMcNab a=bravomikekilo fix [issue-1542](https://github.com/rust-analyzer/rust-analyzer/issues/1542) @matklad Co-authored-by: bravomikekilo <[email protected]>
| * | fix test positionbravomikekilo2019-08-146-118/+130
| | |
| * | fix testbravomikekilo2019-08-141-2/+2
| | |
| * | fix error of RangeFrom in for-loopbravomikekilo2019-08-143-1/+130
| | |
* | | Merge #1676bors[bot]2019-08-1410-13/+100
|\ \ \ | |/ / |/| | | | | | | | | | | | | | | | | 1676: Fix for<'lifetime> for types specified by path r=matklad a=eupn Fixes #1467. Co-authored-by: Evgenii P <[email protected]>
| * | Fix is_path_start to accept T![<], fix is_path_start usagesEvgenii P2019-08-138-13/+17
| | |
| * | Fix for<'lifetime> for types specified by pathEvgenii P2019-08-113-2/+85
| | |
* | | Merge #1636bors[bot]2019-08-133-7/+81
|\ \ \ | |_|/ |/| | | | | | | | | | | | | | | | | 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 <[email protected]>
| * | add inline testbravomikekilo2019-08-133-0/+75
| | |
| * | fix block parse problembravomikekilo2019-08-031-7/+6
| | |
* | | Merge #1677bors[bot]2019-08-1210-38/+405
|\ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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 <[email protected]>
| * | | Handle placeholder assoc types when Chalk produces themFlorian Diebold2019-08-122-3/+67
| | | |
| * | | Normalize assoc types in more placesFlorian Diebold2019-08-122-12/+27
| | | |
| * | | Improve debug logging a bitFlorian Diebold2019-08-122-4/+18
| | | |
| * | | Normalize associated types during inferenceFlorian Diebold2019-08-123-9/+25
| | | |
| * | | Lower fully qualified associated type pathsFlorian Diebold2019-08-125-23/+128
| | | | | | | | | | | | | | | | I.e. `<T as Trait>::Foo`.
| * | | Add representations of associated typesFlorian Diebold2019-08-123-0/+113
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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`.
| * | | Add another test for assoc type resolutionFlorian Diebold2019-08-121-6/+46
|/ / /
* | | Merge #1683bors[bot]2019-08-122-24/+16
|\ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | 1683: Use Source in Diagnostic r=matklad a=eupn Closes #1681. Co-authored-by: Evgenii P <[email protected]>
| * | | Use Source in Diagnostic and implementEvgenii P2019-08-122-24/+16
|/ / /
* | | Merge #1682bors[bot]2019-08-124-73/+4
|\ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 1682: Drop support for old extendSelection API r=matklad a=matklad Emacs now handles this via native LSP request https://github.com/emacs-lsp/lsp-mode/commit/dc86bbb227147aa8141e690ad5648fdbd2ebdb9f r? @flodiebold (Have not actually tried elisp code) Co-authored-by: Aleksey Kladov <[email protected]>
| * | | Drop support for old extendSelection APIAleksey Kladov2019-08-124-73/+4
|/ / / | | | | | | | | | | | | | | | Emacs now handles this via native LSP request https://github.com/emacs-lsp/lsp-mode/commit/dc86bbb227147aa8141e690ad5648fdbd2ebdb9f
* | | Merge #1667bors[bot]2019-08-121-52/+43
|\ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | 1667: Show backtraces in lens runnables r=matklad a=SomeoneToIgnore Co-authored-by: Kirill Bulatov <[email protected]>
| * | | Always set the runnable nameKirill Bulatov2019-08-091-11/+11
| | | |
| * | | Extract common logicKirill Bulatov2019-08-091-55/+42
| | | |
| * | | Show backtraces in lens runnablesKirill Bulatov2019-08-091-1/+5
| | |/ | |/|
* | | Merge #1675bors[bot]2019-08-121-17/+24
|\ \ \ | |/ / |/| | | | | | | | | | | | | | | | | | | | | | | 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 <[email protected]>
| * | Improvements to emacs inlay hintsFlorian Diebold2019-08-101-17/+24
|/ / | | | | | | | | | | - 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
* | Merge #1673bors[bot]2019-08-0910-37/+52
|\ \ | | | | | | | | | | | | | | | | | | | | | 1673: Move numeric names inside of `NameRef` r=matklad a=matklad Co-authored-by: Aleksey Kladov <[email protected]>
| * | Move numeric names inside of `NameRef`Aleksey Kladov2019-08-0910-37/+52
|/ /
* | Merge #1669bors[bot]2019-08-097-16/+39
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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 <[email protected]>
| * | Make name_ref to accept numeric names optionallyEvgenii P2019-08-095-9/+9
| | |
| * | Parse tuple struct field initializationEvgenii P2019-08-094-8/+31
|/ /
* | Merge #1668bors[bot]2019-08-091-20/+15
|\ \ | | | | | | | | | | | | | | | | | | | | | 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 <[email protected]>
| * | Change macro to functionEvgenii P2019-08-091-15/+13
| | |
| * | rustfmtEvgenii P2019-08-091-10/+10
| | |
| * | Reduce code duplication in lexer by introducing small macroEvgenii P2019-08-091-20/+17
|/ /
* | Merge #1661bors[bot]2019-08-089-1/+571
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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 <[email protected]>
| * | Fix parser tests according to reviewEvgenii P2019-08-0819-498/+580
| | |
| * | Deduplicate while loop break conditionEvgenii P2019-08-081-2/+2
| | |
| * | Fix parser to correctly consume outer attrs before ellipsis paramEvgenii P2019-08-071-0/+4
| | |
| * | Fix variadic arg inline testEvgenii P2019-08-073-25/+25
| | |
| * | Add function parameters attributesEvgenii P2019-08-0715-21/+505
| | |
* | | Merge #1664bors[bot]2019-08-073-0/+63
|\ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | 1664: assoc types bounds r=matklad a=matklad Co-authored-by: Aleksey Kladov <[email protected]>
| * | | assoc types boundsAleksey Kladov2019-08-073-0/+63
|/ / /
* | | Merge #1663bors[bot]2019-08-071-2/+2
|\ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | 1663: architecture.md: update path to parser tests r=matklad a=eupn Co-authored-by: eupn <[email protected]>
| * | | architecture.md: update path to parser testseupn2019-08-071-2/+2
| | | |
* | | | Merge #1662bors[bot]2019-08-071-1/+1
|\ \ \ \ | |/ / / |/| | | | | | | | | | | | | | | | | | | | | | | 1662: architecture.md: "finish not Y" -> "finish node Y" r=matklad a=eupn Is this a typo? Co-authored-by: eupn <[email protected]>
| * | | architecture.md: "finish not Y" -> "finish node Y"eupn2019-08-071-1/+1
|/ / / | | | | | | Is this a typo?
* | | Merge #1660bors[bot]2019-08-074-51/+109
|\ \ \ | |/ / |/| | | | | | | | | | | | | | | | | 1660: implement while let desugaring r=matklad a=matklad Co-authored-by: Aleksey Kladov <[email protected]>