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