| David Tolnay | a83301c | 2020-04-30 20:32:37 -0700 | [diff] [blame] | 1 | use crate::syntax::check::Check; |
| David Tolnay | 6b6423e | 2020-04-30 20:46:24 -0700 | [diff] [blame] | 2 | use crate::syntax::namespace::Namespace; |
| David Tolnay | 7db7369 | 2019-10-20 14:51:12 -0400 | [diff] [blame] | 3 | use crate::syntax::{error, Api}; |
| 4 | use proc_macro2::Ident; |
| David Tolnay | 7db7369 | 2019-10-20 14:51:12 -0400 | [diff] [blame] | 5 | |
| David Tolnay | 6b6423e | 2020-04-30 20:46:24 -0700 | [diff] [blame] | 6 | fn check(cx: &mut Check, ident: &Ident) { |
| David Tolnay | 7db7369 | 2019-10-20 14:51:12 -0400 | [diff] [blame] | 7 | let s = ident.to_string(); |
| David Tolnay | a83301c | 2020-04-30 20:32:37 -0700 | [diff] [blame] | 8 | if s.starts_with("cxxbridge") { |
| 9 | cx.error(ident, error::CXXBRIDGE_RESERVED.msg); |
| 10 | } |
| David Tolnay | 7db7369 | 2019-10-20 14:51:12 -0400 | [diff] [blame] | 11 | if s.contains("__") { |
| David Tolnay | a83301c | 2020-04-30 20:32:37 -0700 | [diff] [blame] | 12 | cx.error(ident, error::DOUBLE_UNDERSCORE.msg); |
| David Tolnay | 7db7369 | 2019-10-20 14:51:12 -0400 | [diff] [blame] | 13 | } |
| 14 | } |
| 15 | |
| David Tolnay | 6b6423e | 2020-04-30 20:46:24 -0700 | [diff] [blame] | 16 | pub(crate) fn check_all(cx: &mut Check, namespace: &Namespace, apis: &[Api]) { |
| 17 | for segment in namespace { |
| 18 | check(cx, segment); |
| 19 | } |
| 20 | |
| David Tolnay | 7db7369 | 2019-10-20 14:51:12 -0400 | [diff] [blame] | 21 | for api in apis { |
| 22 | match api { |
| 23 | Api::Include(_) => {} |
| 24 | Api::Struct(strct) => { |
| David Tolnay | a83301c | 2020-04-30 20:32:37 -0700 | [diff] [blame] | 25 | check(cx, &strct.ident); |
| David Tolnay | 7db7369 | 2019-10-20 14:51:12 -0400 | [diff] [blame] | 26 | for field in &strct.fields { |
| David Tolnay | a83301c | 2020-04-30 20:32:37 -0700 | [diff] [blame] | 27 | check(cx, &field.ident); |
| David Tolnay | 7db7369 | 2019-10-20 14:51:12 -0400 | [diff] [blame] | 28 | } |
| 29 | } |
| Joel Galenson | c03402a | 2020-04-23 17:31:09 -0700 | [diff] [blame] | 30 | Api::Enum(enm) => { |
| David Tolnay | a83301c | 2020-04-30 20:32:37 -0700 | [diff] [blame] | 31 | check(cx, &enm.ident); |
| Joel Galenson | c03402a | 2020-04-23 17:31:09 -0700 | [diff] [blame] | 32 | for variant in &enm.variants { |
| David Tolnay | a83301c | 2020-04-30 20:32:37 -0700 | [diff] [blame] | 33 | check(cx, &variant.ident); |
| Joel Galenson | c03402a | 2020-04-23 17:31:09 -0700 | [diff] [blame] | 34 | } |
| 35 | } |
| David Tolnay | 7db7369 | 2019-10-20 14:51:12 -0400 | [diff] [blame] | 36 | Api::CxxType(ety) | Api::RustType(ety) => { |
| David Tolnay | a83301c | 2020-04-30 20:32:37 -0700 | [diff] [blame] | 37 | check(cx, &ety.ident); |
| David Tolnay | 7db7369 | 2019-10-20 14:51:12 -0400 | [diff] [blame] | 38 | } |
| 39 | Api::CxxFunction(efn) | Api::RustFunction(efn) => { |
| David Tolnay | a83301c | 2020-04-30 20:32:37 -0700 | [diff] [blame] | 40 | check(cx, &efn.ident); |
| David Tolnay | 7db7369 | 2019-10-20 14:51:12 -0400 | [diff] [blame] | 41 | for arg in &efn.args { |
| David Tolnay | a83301c | 2020-04-30 20:32:37 -0700 | [diff] [blame] | 42 | check(cx, &arg.ident); |
| David Tolnay | 7db7369 | 2019-10-20 14:51:12 -0400 | [diff] [blame] | 43 | } |
| 44 | } |
| David Tolnay | 3118fa6 | 2020-05-07 17:10:39 -0700 | [diff] [blame^] | 45 | Api::TypeAlias(alias) => { |
| 46 | check(cx, &alias.ident); |
| 47 | } |
| David Tolnay | 7db7369 | 2019-10-20 14:51:12 -0400 | [diff] [blame] | 48 | } |
| 49 | } |
| 50 | } |