| use crate::gen::Opt; |
| use crate::syntax::report::Errors; |
| use crate::syntax::{error, Api}; |
| use quote::{quote, quote_spanned}; |
| use std::path::{Component, Path}; |
| |
| pub(super) use crate::syntax::check::{typecheck, Generator}; |
| |
| pub(super) fn precheck(cx: &mut Errors, apis: &[Api], opt: &Opt) { |
| if !opt.allow_dot_includes { |
| check_dot_includes(cx, apis); |
| } |
| } |
| |
| fn check_dot_includes(cx: &mut Errors, apis: &[Api]) { |
| for api in apis { |
| if let Api::Include(include) = api { |
| let first_component = Path::new(&include.path).components().next(); |
| if let Some(Component::CurDir) | Some(Component::ParentDir) = first_component { |
| let begin = quote_spanned!(include.begin_span=> .); |
| let end = quote_spanned!(include.end_span=> .); |
| let span = quote!(#begin #end); |
| cx.error(span, error::DOT_INCLUDE.msg); |
| } |
| } |
| } |
| } |