]> git.lizzy.rs Git - rust.git/blobdiff - crates/parser/src/grammar.rs
Wrap remaining self/super/crate in Name{Ref}
[rust.git] / crates / parser / src / grammar.rs
index 63cc900272ce9c3e833c7e39fc8faf1c9372870a..6913e9ec2f3fbb31382f7c989caff5c9abf49809 100644 (file)
@@ -66,6 +66,10 @@ pub(crate) fn stmt(p: &mut Parser) {
         expressions::stmt(p, expressions::StmtWithSemi::No)
     }
 
+    pub(crate) fn stmt_optional_semi(p: &mut Parser) {
+        expressions::stmt(p, expressions::StmtWithSemi::Optional)
+    }
+
     pub(crate) fn opt_visibility(p: &mut Parser) {
         let _ = super::opt_visibility(p);
     }
@@ -186,17 +190,25 @@ fn opt_visibility(p: &mut Parser) -> bool {
                     // test crate_visibility
                     // pub(crate) struct S;
                     // pub(self) struct S;
-                    // pub(self) struct S;
-                    // pub(self) struct S;
+                    // pub(super) struct S;
 
                     // test pub_parens_typepath
                     // struct B(pub (super::A));
                     // struct B(pub (crate::A,));
                     T![crate] | T![self] | T![super] if p.nth(2) != T![:] => {
                         p.bump_any();
+                        let path_m = p.start();
+                        let path_segment_m = p.start();
+                        let name_ref_m = p.start();
                         p.bump_any();
+                        name_ref_m.complete(p, NAME_REF);
+                        path_segment_m.complete(p, PATH_SEGMENT);
+                        path_m.complete(p, PATH);
                         p.expect(T![')']);
                     }
+                    // test crate_visibility_in
+                    // pub(in super::A) struct S;
+                    // pub(in crate) struct S;
                     T![in] => {
                         p.bump_any();
                         p.bump_any();