Skip to content

Commit 9d7cddb

Browse files
VincentLangletondrejmirtes
authored andcommitted
Dynamic DOM return type
1 parent f54eeec commit 9d7cddb

File tree

2 files changed

+37
-0
lines changed

2 files changed

+37
-0
lines changed

stubs/dom.stub

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,27 @@ class DOMNode
4141
*/
4242
public function hasAttributes() {}
4343

44+
/**
45+
* @template TNode of DOMNode
46+
* @param TNode $node
47+
* @return __benevolent<TNode|false>
48+
*/
49+
public function insertBefore(DOMNode $node, ?DOMNode $child = null) {}
50+
51+
/**
52+
* @template TNode of DOMNode
53+
* @param TNode $node
54+
* @return __benevolent<TNode|false>
55+
*/
56+
public function removeChild(DOMNode $node) {}
57+
58+
/**
59+
* @template TNode of DOMNode
60+
* @param TNode $node
61+
* @return __benevolent<TNode|false>
62+
*/
63+
public function appendChild(DOMNode $node) {}
64+
4465
}
4566

4667
class DOMElement extends DOMNode
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<?php
2+
3+
namespace Bug9200;
4+
5+
use function PHPStan\Testing\assertType;
6+
7+
function test(\DOMElement $element, \DOMNode $node): void
8+
{
9+
assertType('(DOMElement|false)', $node->appendChild($element));
10+
assertType('(DOMNode|false)', $element->appendChild($node));
11+
assertType('(DOMElement|false)', $node->removeChild($element));
12+
assertType('(DOMNode|false)', $element->removeChild($node));
13+
assertType('(DOMElement|false)', $node->insertBefore($element, $node));
14+
assertType('(DOMNode|false)', $node->insertBefore($node, $element));
15+
assertType('(DOMNode|false)', $element->insertBefore($node, $node));
16+
}

0 commit comments

Comments
 (0)