about summary refs log tree commit diff
diff options
context:
space:
mode:
authorRyo Yoshida <low.ryoshida@gmail.com>2023-05-04 20:57:10 +0900
committerRyo Yoshida <low.ryoshida@gmail.com>2023-05-06 20:30:17 +0900
commitd7d89712032e367b0eb8bafe9192403eef1ef4b2 (patch)
tree6bfbf6454c26b46bd7fb68771e1a912b1c045a39
parenta4966c92829f945d3846eb0ca0e240ac7f7c8c60 (diff)
downloadrust-d7d89712032e367b0eb8bafe9192403eef1ef4b2.tar.gz
rust-d7d89712032e367b0eb8bafe9192403eef1ef4b2.zip
Remove `(..)`-style return type notation
-rw-r--r--crates/hir-def/src/path/lower.rs3
-rw-r--r--crates/parser/src/grammar/generic_args.rs18
-rw-r--r--crates/parser/test_data/parser/inline/ok/0206_return_type_arg.rast33
-rw-r--r--crates/parser/test_data/parser/inline/ok/0206_return_type_arg.rs1
-rw-r--r--crates/syntax/rust.ungram4
-rw-r--r--crates/syntax/src/ast/generated/nodes.rs44
6 files changed, 2 insertions, 101 deletions
diff --git a/crates/hir-def/src/path/lower.rs b/crates/hir-def/src/path/lower.rs
index 721f9b76804..7e4b7ac34bf 100644
--- a/crates/hir-def/src/path/lower.rs
+++ b/crates/hir-def/src/path/lower.rs
@@ -216,9 +216,6 @@ pub(super) fn lower_generic_args(
                 let arg = ConstRefOrPath::from_expr_opt(arg.expr());
                 args.push(GenericArg::Const(arg))
             }
-            ast::GenericArg::ReturnTypeArg(_) => {
-                // FIXME: return type notation is experimental, we don't do anything with it yet.
-            }
         }
     }
 
diff --git a/crates/parser/src/grammar/generic_args.rs b/crates/parser/src/grammar/generic_args.rs
index 4cac04a32a4..e583a4de711 100644
--- a/crates/parser/src/grammar/generic_args.rs
+++ b/crates/parser/src/grammar/generic_args.rs
@@ -76,7 +76,6 @@ fn generic_arg(p: &mut Parser<'_>) -> bool {
                 }
             }
         }
-        IDENT if p.nth(1) == T!['('] && p.nth_at(2, T![..]) => return_type_arg(p),
         _ if p.at_ts(types::TYPE_FIRST) => type_arg(p),
         _ => return false,
     }
@@ -140,20 +139,3 @@ fn type_arg(p: &mut Parser<'_>) {
     types::type_(p);
     m.complete(p, TYPE_ARG);
 }
-
-// test return_type_arg
-// type T = S<foo(..): Send>;
-pub(super) fn return_type_arg(p: &mut Parser<'_>) {
-    let m = p.start();
-    p.expect(IDENT);
-    p.expect(T!['(']);
-    p.expect(T![..]);
-    p.expect(T![')']);
-    if !p.at(T![:]) {
-        p.error("expected :");
-        m.abandon(p);
-        return;
-    }
-    generic_params::bounds(p);
-    m.complete(p, RETURN_TYPE_ARG);
-}
diff --git a/crates/parser/test_data/parser/inline/ok/0206_return_type_arg.rast b/crates/parser/test_data/parser/inline/ok/0206_return_type_arg.rast
deleted file mode 100644
index 26d474f54f4..00000000000
--- a/crates/parser/test_data/parser/inline/ok/0206_return_type_arg.rast
+++ /dev/null
@@ -1,33 +0,0 @@
-SOURCE_FILE
-  TYPE_ALIAS
-    TYPE_KW "type"
-    WHITESPACE " "
-    NAME
-      IDENT "T"
-    WHITESPACE " "
-    EQ "="
-    WHITESPACE " "
-    PATH_TYPE
-      PATH
-        PATH_SEGMENT
-          NAME_REF
-            IDENT "S"
-          GENERIC_ARG_LIST
-            L_ANGLE "<"
-            RETURN_TYPE_ARG
-              IDENT "foo"
-              L_PAREN "("
-              DOT2 ".."
-              R_PAREN ")"
-              COLON ":"
-              WHITESPACE " "
-              TYPE_BOUND_LIST
-                TYPE_BOUND
-                  PATH_TYPE
-                    PATH
-                      PATH_SEGMENT
-                        NAME_REF
-                          IDENT "Send"
-            R_ANGLE ">"
-    SEMICOLON ";"
-  WHITESPACE "\n"
diff --git a/crates/parser/test_data/parser/inline/ok/0206_return_type_arg.rs b/crates/parser/test_data/parser/inline/ok/0206_return_type_arg.rs
deleted file mode 100644
index 2a9ff270839..00000000000
--- a/crates/parser/test_data/parser/inline/ok/0206_return_type_arg.rs
+++ /dev/null
@@ -1 +0,0 @@
-type T = S<foo(..): Send>;
diff --git a/crates/syntax/rust.ungram b/crates/syntax/rust.ungram
index 08c8749e36c..1c15a606f95 100644
--- a/crates/syntax/rust.ungram
+++ b/crates/syntax/rust.ungram
@@ -46,7 +46,6 @@ GenericArg =
 | AssocTypeArg
 | LifetimeArg
 | ConstArg
-| ReturnTypeArg
 
 TypeArg =
   Type
@@ -60,9 +59,6 @@ LifetimeArg =
 ConstArg =
   Expr
 
-ReturnTypeArg =
-  NameRef '(' '..' ')' ':' TypeBoundList
-
 MacroCall =
   Attr* Path '!' TokenTree ';'?
 
diff --git a/crates/syntax/src/ast/generated/nodes.rs b/crates/syntax/src/ast/generated/nodes.rs
index 6aa7efd8324..0e84aca5c7d 100644
--- a/crates/syntax/src/ast/generated/nodes.rs
+++ b/crates/syntax/src/ast/generated/nodes.rs
@@ -143,18 +143,6 @@ impl ConstArg {
 }
 
 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
-pub struct ReturnTypeArg {
-    pub(crate) syntax: SyntaxNode,
-}
-impl ast::HasTypeBounds for ReturnTypeArg {}
-impl ReturnTypeArg {
-    pub fn name_ref(&self) -> Option<NameRef> { support::child(&self.syntax) }
-    pub fn l_paren_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['(']) }
-    pub fn dotdot_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![..]) }
-    pub fn r_paren_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![')']) }
-}
-
-#[derive(Debug, Clone, PartialEq, Eq, Hash)]
 pub struct TypeBoundList {
     pub(crate) syntax: SyntaxNode,
 }
@@ -1528,7 +1516,6 @@ pub enum GenericArg {
     AssocTypeArg(AssocTypeArg),
     LifetimeArg(LifetimeArg),
     ConstArg(ConstArg),
-    ReturnTypeArg(ReturnTypeArg),
 }
 
 #[derive(Debug, Clone, PartialEq, Eq, Hash)]
@@ -1878,17 +1865,6 @@ impl AstNode for ConstArg {
     }
     fn syntax(&self) -> &SyntaxNode { &self.syntax }
 }
-impl AstNode for ReturnTypeArg {
-    fn can_cast(kind: SyntaxKind) -> bool { kind == RETURN_TYPE_ARG }
-    fn cast(syntax: SyntaxNode) -> Option<Self> {
-        if Self::can_cast(syntax.kind()) {
-            Some(Self { syntax })
-        } else {
-            None
-        }
-    }
-    fn syntax(&self) -> &SyntaxNode { &self.syntax }
-}
 impl AstNode for TypeBoundList {
     fn can_cast(kind: SyntaxKind) -> bool { kind == TYPE_BOUND_LIST }
     fn cast(syntax: SyntaxNode) -> Option<Self> {
@@ -3243,12 +3219,9 @@ impl From<LifetimeArg> for GenericArg {
 impl From<ConstArg> for GenericArg {
     fn from(node: ConstArg) -> GenericArg { GenericArg::ConstArg(node) }
 }
-impl From<ReturnTypeArg> for GenericArg {
-    fn from(node: ReturnTypeArg) -> GenericArg { GenericArg::ReturnTypeArg(node) }
-}
 impl AstNode for GenericArg {
     fn can_cast(kind: SyntaxKind) -> bool {
-        matches!(kind, TYPE_ARG | ASSOC_TYPE_ARG | LIFETIME_ARG | CONST_ARG | RETURN_TYPE_ARG)
+        matches!(kind, TYPE_ARG | ASSOC_TYPE_ARG | LIFETIME_ARG | CONST_ARG)
     }
     fn cast(syntax: SyntaxNode) -> Option<Self> {
         let res = match syntax.kind() {
@@ -3256,7 +3229,6 @@ impl AstNode for GenericArg {
             ASSOC_TYPE_ARG => GenericArg::AssocTypeArg(AssocTypeArg { syntax }),
             LIFETIME_ARG => GenericArg::LifetimeArg(LifetimeArg { syntax }),
             CONST_ARG => GenericArg::ConstArg(ConstArg { syntax }),
-            RETURN_TYPE_ARG => GenericArg::ReturnTypeArg(ReturnTypeArg { syntax }),
             _ => return None,
         };
         Some(res)
@@ -3267,7 +3239,6 @@ impl AstNode for GenericArg {
             GenericArg::AssocTypeArg(it) => &it.syntax,
             GenericArg::LifetimeArg(it) => &it.syntax,
             GenericArg::ConstArg(it) => &it.syntax,
-            GenericArg::ReturnTypeArg(it) => &it.syntax,
         }
     }
 }
@@ -4199,13 +4170,7 @@ impl AstNode for AnyHasTypeBounds {
     fn can_cast(kind: SyntaxKind) -> bool {
         matches!(
             kind,
-            ASSOC_TYPE_ARG
-                | RETURN_TYPE_ARG
-                | TRAIT
-                | TYPE_ALIAS
-                | LIFETIME_PARAM
-                | TYPE_PARAM
-                | WHERE_PRED
+            ASSOC_TYPE_ARG | TRAIT | TYPE_ALIAS | LIFETIME_PARAM | TYPE_PARAM | WHERE_PRED
         )
     }
     fn cast(syntax: SyntaxNode) -> Option<Self> {
@@ -4368,11 +4333,6 @@ impl std::fmt::Display for ConstArg {
         std::fmt::Display::fmt(self.syntax(), f)
     }
 }
-impl std::fmt::Display for ReturnTypeArg {
-    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
-        std::fmt::Display::fmt(self.syntax(), f)
-    }
-}
 impl std::fmt::Display for TypeBoundList {
     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
         std::fmt::Display::fmt(self.syntax(), f)