diff --git a/stubs/dom.stub b/stubs/dom.stub index 5f32a4763c..ffc8aff417 100644 --- a/stubs/dom.stub +++ b/stubs/dom.stub @@ -41,6 +41,27 @@ class DOMNode */ public function hasAttributes() {} + /** + * @template TNode of DOMNode + * @param TNode $node + * @return __benevolent + */ + public function insertBefore(DOMNode $node, ?DOMNode $child = null) {} + + /** + * @template TNode of DOMNode + * @param TNode $node + * @return __benevolent + */ + public function removeChild(DOMNode $node) {} + + /** + * @template TNode of DOMNode + * @param TNode $node + * @return __benevolent + */ + public function appendChild(DOMNode $node) {} + } class DOMElement extends DOMNode diff --git a/tests/PHPStan/Analyser/nsrt/bug-9200.php b/tests/PHPStan/Analyser/nsrt/bug-9200.php new file mode 100644 index 0000000000..9ad50e5b83 --- /dev/null +++ b/tests/PHPStan/Analyser/nsrt/bug-9200.php @@ -0,0 +1,16 @@ +appendChild($element)); + assertType('(DOMNode|false)', $element->appendChild($node)); + assertType('(DOMElement|false)', $node->removeChild($element)); + assertType('(DOMNode|false)', $element->removeChild($node)); + assertType('(DOMElement|false)', $node->insertBefore($element, $node)); + assertType('(DOMNode|false)', $node->insertBefore($node, $element)); + assertType('(DOMNode|false)', $element->insertBefore($node, $node)); +}