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