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