diff options
author | bors[bot] <bors[bot]@users.noreply.github.com> | 2019-02-17 13:56:22 +0000 |
---|---|---|
committer | bors[bot] <bors[bot]@users.noreply.github.com> | 2019-02-17 13:56:22 +0000 |
commit | f937d11ad892036fa93b25a2c19d10dcebe4ab24 (patch) | |
tree | 71f3719509f3fb46f5d2ce5a93da42ea67b23b70 /crates/ra_syntax/src | |
parent | edd4c1d8a6c270fe39ae881c23c722c658c87c32 (diff) | |
parent | 3c7c7e5a04306f8b68dffef2b5ca84628ed81ce2 (diff) |
Merge #843
843: Impl generics r=matklad a=flodiebold
This handles type parameters on impls when typing method calls.
~One remaining problem is that the autoderefs aren't applied during the unification of the method receiver type with the actual receiver type, which means that the type parameters are only correctly inferred if no autoderefs happened.~
Co-authored-by: Florian Diebold <[email protected]>
Diffstat (limited to 'crates/ra_syntax/src')
-rw-r--r-- | crates/ra_syntax/src/ast/generated.rs | 5 | ||||
-rw-r--r-- | crates/ra_syntax/src/grammar.ron | 4 |
2 files changed, 7 insertions, 2 deletions
diff --git a/crates/ra_syntax/src/ast/generated.rs b/crates/ra_syntax/src/ast/generated.rs index 7c5e8ce5e..dd91b5063 100644 --- a/crates/ra_syntax/src/ast/generated.rs +++ b/crates/ra_syntax/src/ast/generated.rs | |||
@@ -1352,6 +1352,7 @@ impl ToOwned for ImplBlock { | |||
1352 | } | 1352 | } |
1353 | 1353 | ||
1354 | 1354 | ||
1355 | impl ast::TypeParamsOwner for ImplBlock {} | ||
1355 | impl ImplBlock { | 1356 | impl ImplBlock { |
1356 | pub fn item_list(&self) -> Option<&ItemList> { | 1357 | pub fn item_list(&self) -> Option<&ItemList> { |
1357 | super::child_opt(self) | 1358 | super::child_opt(self) |
@@ -2094,6 +2095,10 @@ impl MethodCallExpr { | |||
2094 | pub fn name_ref(&self) -> Option<&NameRef> { | 2095 | pub fn name_ref(&self) -> Option<&NameRef> { |
2095 | super::child_opt(self) | 2096 | super::child_opt(self) |
2096 | } | 2097 | } |
2098 | |||
2099 | pub fn type_arg_list(&self) -> Option<&TypeArgList> { | ||
2100 | super::child_opt(self) | ||
2101 | } | ||
2097 | } | 2102 | } |
2098 | 2103 | ||
2099 | // Module | 2104 | // Module |
diff --git a/crates/ra_syntax/src/grammar.ron b/crates/ra_syntax/src/grammar.ron index 304bc5909..27a123681 100644 --- a/crates/ra_syntax/src/grammar.ron +++ b/crates/ra_syntax/src/grammar.ron | |||
@@ -322,7 +322,7 @@ Grammar( | |||
322 | ], | 322 | ], |
323 | options: ["TypeRef"] | 323 | options: ["TypeRef"] |
324 | ), | 324 | ), |
325 | "ImplBlock": (options: ["ItemList"]), | 325 | "ImplBlock": (options: ["ItemList"], traits: ["TypeParamsOwner"]), |
326 | 326 | ||
327 | "ParenType": (options: ["TypeRef"]), | 327 | "ParenType": (options: ["TypeRef"]), |
328 | "TupleType": ( collections: [["fields", "TypeRef"]] ), | 328 | "TupleType": ( collections: [["fields", "TypeRef"]] ), |
@@ -431,7 +431,7 @@ Grammar( | |||
431 | ), | 431 | ), |
432 | "MethodCallExpr": ( | 432 | "MethodCallExpr": ( |
433 | traits: ["ArgListOwner"], | 433 | traits: ["ArgListOwner"], |
434 | options: [ "Expr", "NameRef" ], | 434 | options: [ "Expr", "NameRef", "TypeArgList" ], |
435 | ), | 435 | ), |
436 | "IndexExpr": (), | 436 | "IndexExpr": (), |
437 | "FieldExpr": (options: ["Expr", "NameRef"]), | 437 | "FieldExpr": (options: ["Expr", "NameRef"]), |