exprs as $expr) { if (!isset($expr->inferredType) || $expr->inferredType->isMixed()) { if (IssueBuffer::accepts( new TypeCoercion( 'Echo requires an unescaped string, ' . $expr->inferredType . ' provided', new CodeLocation($statements_checker->getSource(), $expr) ), $statements_checker->getSuppressedIssues() )) { // keep soldiering on } continue; } $types = $expr->inferredType->getTypes(); foreach ($types as $type) { if ($type instanceof \Psalm\Type\Atomic\TString && !$type instanceof \Psalm\Type\Atomic\TLiteralString && !$type instanceof \Psalm\Type\Atomic\THtmlEscapedString ) { if (IssueBuffer::accepts( new TypeCoercion( 'Echo requires an unescaped string, ' . $expr->inferredType . ' provided', new CodeLocation($statements_checker->getSource(), $expr) ), $statements_checker->getSuppressedIssues() )) { // keep soldiering on } } } } } } }