133d722a9Sopenharmony_ciuse crate::syntax::check::Check; 233d722a9Sopenharmony_ciuse crate::syntax::{error, Api, Pair}; 333d722a9Sopenharmony_ci 433d722a9Sopenharmony_cifn check(cx: &mut Check, name: &Pair) { 533d722a9Sopenharmony_ci for segment in &name.namespace { 633d722a9Sopenharmony_ci check_cxx_ident(cx, &segment.to_string()); 733d722a9Sopenharmony_ci } 833d722a9Sopenharmony_ci check_cxx_ident(cx, &name.cxx.to_string()); 933d722a9Sopenharmony_ci check_rust_ident(cx, &name.rust.to_string()); 1033d722a9Sopenharmony_ci 1133d722a9Sopenharmony_ci fn check_cxx_ident(cx: &mut Check, ident: &str) { 1233d722a9Sopenharmony_ci if ident.starts_with("cxxbridge") { 1333d722a9Sopenharmony_ci cx.error(ident, error::CXXBRIDGE_RESERVED.msg); 1433d722a9Sopenharmony_ci } 1533d722a9Sopenharmony_ci if ident.contains("__") { 1633d722a9Sopenharmony_ci cx.error(ident, error::DOUBLE_UNDERSCORE.msg); 1733d722a9Sopenharmony_ci } 1833d722a9Sopenharmony_ci } 1933d722a9Sopenharmony_ci 2033d722a9Sopenharmony_ci fn check_rust_ident(cx: &mut Check, ident: &str) { 2133d722a9Sopenharmony_ci if ident.starts_with("cxxbridge") { 2233d722a9Sopenharmony_ci cx.error(ident, error::CXXBRIDGE_RESERVED.msg); 2333d722a9Sopenharmony_ci } 2433d722a9Sopenharmony_ci } 2533d722a9Sopenharmony_ci} 2633d722a9Sopenharmony_ci 2733d722a9Sopenharmony_cipub(crate) fn check_all(cx: &mut Check, apis: &[Api]) { 2833d722a9Sopenharmony_ci for api in apis { 2933d722a9Sopenharmony_ci match api { 3033d722a9Sopenharmony_ci Api::Include(_) | Api::Impl(_) => {} 3133d722a9Sopenharmony_ci Api::Struct(strct) => { 3233d722a9Sopenharmony_ci check(cx, &strct.name); 3333d722a9Sopenharmony_ci for field in &strct.fields { 3433d722a9Sopenharmony_ci check(cx, &field.name); 3533d722a9Sopenharmony_ci } 3633d722a9Sopenharmony_ci } 3733d722a9Sopenharmony_ci Api::Enum(enm) => { 3833d722a9Sopenharmony_ci check(cx, &enm.name); 3933d722a9Sopenharmony_ci for variant in &enm.variants { 4033d722a9Sopenharmony_ci check(cx, &variant.name); 4133d722a9Sopenharmony_ci } 4233d722a9Sopenharmony_ci } 4333d722a9Sopenharmony_ci Api::CxxType(ety) | Api::RustType(ety) => { 4433d722a9Sopenharmony_ci check(cx, &ety.name); 4533d722a9Sopenharmony_ci } 4633d722a9Sopenharmony_ci Api::CxxFunction(efn) | Api::RustFunction(efn) => { 4733d722a9Sopenharmony_ci check(cx, &efn.name); 4833d722a9Sopenharmony_ci for arg in &efn.args { 4933d722a9Sopenharmony_ci check(cx, &arg.name); 5033d722a9Sopenharmony_ci } 5133d722a9Sopenharmony_ci } 5233d722a9Sopenharmony_ci Api::TypeAlias(alias) => { 5333d722a9Sopenharmony_ci check(cx, &alias.name); 5433d722a9Sopenharmony_ci } 5533d722a9Sopenharmony_ci } 5633d722a9Sopenharmony_ci } 5733d722a9Sopenharmony_ci} 58