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