mago-analyzer 1.45.0

A PHP static analyzer that can detect type errors in PHP code, and provide suggestions for fixing them.
Documentation
use mago_allocator::Arena;
use mago_codex::ttype::get_nullable_scalar;
use mago_syntax::cst::Echo;
use mago_syntax::cst::EchoTag;

use crate::analyzable::Analyzable;
use crate::artifacts::AnalysisArtifacts;
use crate::common::construct::ConstructInput;
use crate::common::construct::analyze_construct_inputs;
use crate::context::Context;
use crate::context::block::BlockContext;
use crate::error::AnalysisError;

impl<'ast, 'arena> Analyzable<'ast, 'arena> for Echo<'arena> {
    fn analyze<'ctx, A>(
        &'ast self,
        context: &mut Context<'ctx, 'arena, A>,
        block_context: &mut BlockContext<'ctx>,
        artifacts: &mut AnalysisArtifacts,
    ) -> Result<(), AnalysisError>
    where
        A: Arena,
    {
        analyze_construct_inputs(
            context,
            block_context,
            artifacts,
            "echo",
            self.echo.span,
            ConstructInput::ExpressionList(self.values.as_slice()),
            &get_nullable_scalar(),
            true,
            false,
            true,
        )?;

        Ok(())
    }
}

impl<'ast, 'arena> Analyzable<'ast, 'arena> for EchoTag<'arena> {
    fn analyze<'ctx, A>(
        &'ast self,
        context: &mut Context<'ctx, 'arena, A>,
        block_context: &mut BlockContext<'ctx>,
        artifacts: &mut AnalysisArtifacts,
    ) -> Result<(), AnalysisError>
    where
        A: Arena,
    {
        analyze_construct_inputs(
            context,
            block_context,
            artifacts,
            "echo",
            self.tag,
            ConstructInput::ExpressionList(self.values.as_slice()),
            &get_nullable_scalar(),
            true,
            false,
            true,
        )?;

        Ok(())
    }
}