leo_passes/name_validation/
visitor.rs1use leo_ast::*;
18use leo_errors::{Handler, NameValidationError};
19use snarkvm::prelude::{Program, TestnetV0};
20
21pub struct NameValidationVisitor<'a> {
22 pub handler: &'a mut Handler,
23}
24
25impl NameValidationVisitor<'_> {
26 pub fn does_not_contain_aleo(&self, name: Identifier, item_type: &str) {
27 if name.to_string().contains("aleo") {
28 self.handler.emit_err(NameValidationError::illegal_name_content(name, item_type, "aleo", name.span));
29 }
30 }
31
32 pub fn is_not_keyword(&self, name: Identifier, item_type: &str, whitelist: &[&str]) {
33 let restricted = Program::<TestnetV0>::RESTRICTED_KEYWORDS.iter().flat_map(|(_, kws)| kws.iter().copied());
35 let keywords = Program::<TestnetV0>::KEYWORDS.iter().copied();
36 let aleo = std::iter::once("aleo");
37
38 let it = keywords.chain(restricted).chain(aleo).filter(|w| !whitelist.contains(w));
39
40 for word in it {
41 if name.to_string() == word {
42 self.handler.emit_err(NameValidationError::illegal_name(name, item_type, word, name.span));
43 break;
44 }
45 }
46 }
47}