Skip to content

Commit 5c5a0fd

Browse files
Fix Xml_* function handler phpdoc
1 parent 40dea0d commit 5c5a0fd

File tree

1 file changed

+39
-0
lines changed

1 file changed

+39
-0
lines changed

extractor/extract.php

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -286,6 +286,7 @@ public function clear(): void
286286
continue;
287287
}
288288
$functions[strtolower($namespacedName)] = $pathPart;
289+
$stmt = $this->filterFunctionPhpDocs($stmt);
289290
} else {
290291
throw new \Exception(sprintf('Unhandled node type %s in %s on line %s.', get_class($stmt), $stubPath, $stmt->getLine()));
291292
}
@@ -820,6 +821,44 @@ private function filterClassPhpDocs(Node\Stmt\ClassLike $class): Node\Stmt\Class
820821
return $class;
821822
}
822823

824+
private function filterFunctionPhpDocs(Node\Stmt\Function_ $function): Node\Stmt\Function_
825+
{
826+
$namespacedName = $function->namespacedName->toString();
827+
if (in_array($namespacedName, [
828+
'xml_set_element_handler',
829+
'xml_set_character_data_handler',
830+
'xml_set_processing_instruction_handler',
831+
'xml_set_default_handler',
832+
'xml_set_unparsed_entity_decl_handler',
833+
'xml_set_notation_decl_handler',
834+
'xml_set_external_entity_ref_handler',
835+
'xml_set_start_namespace_decl_handler',
836+
'xml_set_end_namespace_decl_handler',
837+
], true)) {
838+
$comments = $function->getAttribute('comments');
839+
if (null !== $comments) {
840+
$function->setAttribute('comments', array_map(
841+
fn (Comment\Doc $doc): Comment\Doc => new Comment\Doc(
842+
str_replace(
843+
'@param callable $',
844+
'@param callable|string|null $',
845+
$doc->getText(),
846+
),
847+
$doc->getStartLine(),
848+
$doc->getStartFilePos(),
849+
$doc->getStartTokenPos(),
850+
$doc->getEndLine(),
851+
$doc->getEndFilePos(),
852+
$doc->getEndTokenPos(),
853+
),
854+
$comments
855+
));
856+
}
857+
}
858+
859+
return $function;
860+
}
861+
823862
private function parseDocComment(string $docComment): PhpDocNode
824863
{
825864
$tokens = new TokenIterator($this->phpDocLexer->tokenize($docComment));

0 commit comments

Comments
 (0)