133d722a9Sopenharmony_ciuse crate::gen::Opt; 233d722a9Sopenharmony_ciuse crate::syntax::report::Errors; 333d722a9Sopenharmony_ciuse crate::syntax::{error, Api}; 433d722a9Sopenharmony_ciuse quote::{quote, quote_spanned}; 533d722a9Sopenharmony_ciuse std::path::{Component, Path}; 633d722a9Sopenharmony_ci 733d722a9Sopenharmony_cipub(super) use crate::syntax::check::{typecheck, Generator}; 833d722a9Sopenharmony_ci 933d722a9Sopenharmony_cipub(super) fn precheck(cx: &mut Errors, apis: &[Api], opt: &Opt) { 1033d722a9Sopenharmony_ci if !opt.allow_dot_includes { 1133d722a9Sopenharmony_ci check_dot_includes(cx, apis); 1233d722a9Sopenharmony_ci } 1333d722a9Sopenharmony_ci} 1433d722a9Sopenharmony_ci 1533d722a9Sopenharmony_cifn check_dot_includes(cx: &mut Errors, apis: &[Api]) { 1633d722a9Sopenharmony_ci for api in apis { 1733d722a9Sopenharmony_ci if let Api::Include(include) = api { 1833d722a9Sopenharmony_ci let first_component = Path::new(&include.path).components().next(); 1933d722a9Sopenharmony_ci if let Some(Component::CurDir) | Some(Component::ParentDir) = first_component { 2033d722a9Sopenharmony_ci let begin = quote_spanned!(include.begin_span=> .); 2133d722a9Sopenharmony_ci let end = quote_spanned!(include.end_span=> .); 2233d722a9Sopenharmony_ci let span = quote!(#begin #end); 2333d722a9Sopenharmony_ci cx.error(span, error::DOT_INCLUDE.msg); 2433d722a9Sopenharmony_ci } 2533d722a9Sopenharmony_ci } 2633d722a9Sopenharmony_ci } 2733d722a9Sopenharmony_ci} 28