use mago_database::file::File;
use mago_names::ResolvedNames;
use mago_php_version::PHPVersion;
use mago_reporting::IssueCollection;
use mago_syntax::ast::Program;
use mago_syntax::walker::Walker;
use crate::internal::CheckingWalker;
use crate::internal::context::Context;
mod internal;
#[derive(Debug, Clone, Copy)]
pub struct SemanticsChecker {
version: PHPVersion,
}
impl SemanticsChecker {
#[must_use]
pub fn new(php_version: PHPVersion) -> Self {
Self { version: php_version }
}
#[must_use]
pub fn check<'ast, 'arena>(
&self,
file: &File,
program: &'ast Program<'arena>,
names: &'ast ResolvedNames<'arena>,
) -> IssueCollection {
let mut context = Context::new(self.version, program, names, file);
CheckingWalker.walk_program(program, &mut context);
context.finalize()
}
}