| 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 | 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 | |
| David Tolnay | 8faec77 | 2020-11-02 00:18:19 -0800 | [diff] [blame] | 15 | fn check_ident(cx: &mut Check, name: &Pair) { |
| 16 | for segment in &name.namespace { |
| David Tolnay | 6b6423e | 2020-04-30 20:46:24 -0700 | [diff] [blame] | 17 | check(cx, segment); |
| 18 | } |
| David Tolnay | 8faec77 | 2020-11-02 00:18:19 -0800 | [diff] [blame] | 19 | check(cx, &name.cxx); |
| Adrian Taylor | c871343 | 2020-10-21 18:20:55 -0700 | [diff] [blame] | 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) => { |
| David Tolnay | 17a934c | 2020-11-02 00:40:04 -0800 | [diff] [blame] | 27 | check_ident(cx, &strct.name); |
| David Tolnay | 7db7369 | 2019-10-20 14:51:12 -0400 | [diff] [blame] | 28 | for field in &strct.fields { |
| David Tolnay | 84ed6ad | 2021-01-01 15:30:14 -0800 | [diff] [blame] | 29 | check_ident(cx, &field.name); |
| 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) => { |
| David Tolnay | 17a934c | 2020-11-02 00:40:04 -0800 | [diff] [blame] | 33 | check_ident(cx, &enm.name); |
| Joel Galenson | c03402a | 2020-04-23 17:31:09 -0700 | [diff] [blame] | 34 | for variant in &enm.variants { |
| David Tolnay | e6f6214 | 2020-12-21 16:00:41 -0800 | [diff] [blame] | 35 | check(cx, &variant.name.rust); |
| 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) => { |
| David Tolnay | 17a934c | 2020-11-02 00:40:04 -0800 | [diff] [blame] | 39 | check_ident(cx, &ety.name); |
| David Tolnay | 7db7369 | 2019-10-20 14:51:12 -0400 | [diff] [blame] | 40 | } |
| 41 | Api::CxxFunction(efn) | Api::RustFunction(efn) => { |
| David Tolnay | 17a934c | 2020-11-02 00:40:04 -0800 | [diff] [blame] | 42 | check(cx, &efn.name.rust); |
| David Tolnay | 7db7369 | 2019-10-20 14:51:12 -0400 | [diff] [blame] | 43 | for arg in &efn.args { |
| David Tolnay | 84ed6ad | 2021-01-01 15:30:14 -0800 | [diff] [blame] | 44 | check_ident(cx, &arg.name); |
| 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) => { |
| David Tolnay | 17a934c | 2020-11-02 00:40:04 -0800 | [diff] [blame] | 48 | check_ident(cx, &alias.name); |
| 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 | } |