blob: 0694e3282f872c1a412cc70bff9bc5c07143c24a [file] [log] [blame]
David Tolnaya83301c2020-04-30 20:32:37 -07001use crate::syntax::check::Check;
David Tolnay7db73692019-10-20 14:51:12 -04002use crate::syntax::{error, Api};
3use proc_macro2::Ident;
David Tolnay7db73692019-10-20 14:51:12 -04004
David Tolnaya83301c2020-04-30 20:32:37 -07005pub(crate) fn check(cx: &mut Check, ident: &Ident) {
David Tolnay7db73692019-10-20 14:51:12 -04006 let s = ident.to_string();
David Tolnaya83301c2020-04-30 20:32:37 -07007 if s.starts_with("cxxbridge") {
8 cx.error(ident, error::CXXBRIDGE_RESERVED.msg);
9 }
David Tolnay7db73692019-10-20 14:51:12 -040010 if s.contains("__") {
David Tolnaya83301c2020-04-30 20:32:37 -070011 cx.error(ident, error::DOUBLE_UNDERSCORE.msg);
David Tolnay7db73692019-10-20 14:51:12 -040012 }
13}
14
David Tolnaya83301c2020-04-30 20:32:37 -070015pub(crate) fn check_all(cx: &mut Check, apis: &[Api]) {
David Tolnay7db73692019-10-20 14:51:12 -040016 for api in apis {
17 match api {
18 Api::Include(_) => {}
19 Api::Struct(strct) => {
David Tolnaya83301c2020-04-30 20:32:37 -070020 check(cx, &strct.ident);
David Tolnay7db73692019-10-20 14:51:12 -040021 for field in &strct.fields {
David Tolnaya83301c2020-04-30 20:32:37 -070022 check(cx, &field.ident);
David Tolnay7db73692019-10-20 14:51:12 -040023 }
24 }
Joel Galensonc03402a2020-04-23 17:31:09 -070025 Api::Enum(enm) => {
David Tolnaya83301c2020-04-30 20:32:37 -070026 check(cx, &enm.ident);
Joel Galensonc03402a2020-04-23 17:31:09 -070027 for variant in &enm.variants {
David Tolnaya83301c2020-04-30 20:32:37 -070028 check(cx, &variant.ident);
Joel Galensonc03402a2020-04-23 17:31:09 -070029 }
30 }
David Tolnay7db73692019-10-20 14:51:12 -040031 Api::CxxType(ety) | Api::RustType(ety) => {
David Tolnaya83301c2020-04-30 20:32:37 -070032 check(cx, &ety.ident);
David Tolnay7db73692019-10-20 14:51:12 -040033 }
34 Api::CxxFunction(efn) | Api::RustFunction(efn) => {
David Tolnaya83301c2020-04-30 20:32:37 -070035 check(cx, &efn.ident);
David Tolnay7db73692019-10-20 14:51:12 -040036 for arg in &efn.args {
David Tolnaya83301c2020-04-30 20:32:37 -070037 check(cx, &arg.ident);
David Tolnay7db73692019-10-20 14:51:12 -040038 }
39 }
40 }
41 }
42}