]> git.lizzy.rs Git - rust.git/commitdiff
Reject visibilities on `macro_rules!`
authorJonas Schievink <jonasschievink@gmail.com>
Tue, 15 Dec 2020 14:37:49 +0000 (15:37 +0100)
committerJonas Schievink <jonasschievink@gmail.com>
Tue, 15 Dec 2020 14:37:49 +0000 (15:37 +0100)
crates/syntax/src/validation.rs

index 6f45149bf65a85cc42ea3e3a0636b9bec1669e0c..2ddaeb17662974786c8cdaa2d4dad43bdb6e3c35 100644 (file)
@@ -3,7 +3,9 @@
 mod block;
 
 use crate::{
-    algo, ast, match_ast, AstNode, SyntaxError,
+    algo,
+    ast::{self, VisibilityOwner},
+    match_ast, AstNode, SyntaxError,
     SyntaxKind::{CONST, FN, INT_NUMBER, TYPE_ALIAS},
     SyntaxNode, SyntaxToken, TextSize, T,
 };
@@ -99,6 +101,7 @@ pub(crate) fn validate(root: &SyntaxNode) -> Vec<SyntaxError> {
                 ast::RefType(it) => validate_trait_object_ref_ty(it, &mut errors),
                 ast::PtrType(it) => validate_trait_object_ptr_ty(it, &mut errors),
                 ast::FnPtrType(it) => validate_trait_object_fn_ptr_ret_ty(it, &mut errors),
+                ast::MacroRules(it) => validate_macro_rules(it, &mut errors),
                 _ => (),
             }
         }
@@ -350,3 +353,12 @@ fn validate_trait_object_ty(ty: ast::DynTraitType) -> Option<SyntaxError> {
     }
     None
 }
+
+fn validate_macro_rules(mac: ast::MacroRules, errors: &mut Vec<SyntaxError>) {
+    if let Some(vis) = mac.visibility() {
+        errors.push(SyntaxError::new(
+            "visibilities are not allowed on `macro_rules!` items",
+            vis.syntax().text_range(),
+        ));
+    }
+}