Skip to content

Commit 096284d

Browse files
committed
Add stuff and fix some
1 parent aa8c5aa commit 096284d

File tree

3 files changed

+20
-9
lines changed

3 files changed

+20
-9
lines changed

stubs/dom.stub

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ class DOMElement extends DOMNode
4949

5050
/**
5151
* @readonly
52-
* @var DOMNamedNodeMap<DOMAttr>|null
52+
* @var DOMNamedNodeMap<DOMAttr>
5353
*/
5454
public $attributes;
5555

@@ -67,9 +67,14 @@ class DOMElement extends DOMNode
6767
public function getElementsByTagNameNS ($namespaceURI, $localName) {}
6868

6969
/**
70-
* @phpstan-assert-if-true =DOMNamedNodeMap<DOMAttr> $this->attributes
70+
* @phpstan-assert-if-true non-empty-string $this->getAttribute($qualifiedName)
71+
* @phpstan-assert-if-true DOMAttr|DOMNameSpaceNode $this->getAttributeNode($qualifiedName)
7172
*/
7273
public function hasAttribute(string $qualifiedName): bool {}
74+
75+
public function getAttribute(string $qualifiedName): string {}
76+
77+
public function getAttributeNode(string $qualifiedName): DOMAttr|DOMNameSpaceNode|false {}
7378
}
7479

7580
/**

tests/PHPStan/Analyser/nsrt/DOMLegacyNamedNodeNap.php

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,30 +22,27 @@ public function basic_node(DOMNode $node): void {
2222

2323
public function element_node(DOMElement $element): void
2424
{
25-
assertType('DOMNamedNodeMap<DOMAttr>|null', $element->attributes);
25+
assertType('DOMNamedNodeMap<DOMAttr>', $element->attributes);
2626
if ($element->hasAttribute('class')) {
27-
assertType('DOMNamedNodeMap<DOMAttr>', $element->attributes);
2827
$attribute = $element->getAttributeNode('class');
2928
assertType(DOMAttr::class, $attribute);
3029
assertType('string', $attribute->value);
3130
} else {
32-
assertType('DOMNamedNodeMap<DOMAttr>|null', $element->attributes);
31+
$attribute = $element->getAttributeNode('class');
32+
assertType('false', $attribute);
3333
}
3434
}
3535

3636
public function element_node_attribute_fetch_via_attributes_property(DOMElement $element): void
3737
{
38-
assertType('DOMNamedNodeMap<DOMAttr>|null', $element->attributes);
38+
assertType('DOMNamedNodeMap<DOMAttr>', $element->attributes);
3939
if ($element->hasAttribute('class')) {
40-
assertType('DOMNamedNodeMap<DOMAttr>', $element->attributes);
4140
$attribute = $element->attributes->getNamedItem('class');
4241
if ($attribute === null) {
4342
return;
4443
}
4544
assertType(DOMAttr::class, $attribute);
4645
assertType('string', $attribute->value);
47-
} else {
48-
assertType('DOMNamedNodeMap<DOMAttr>|null', $element->attributes);
4946
}
5047
}
5148
}

tests/PHPStan/Rules/Properties/data/dom-legacy-ext-template-nodes.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,12 @@ function element_node_attribute_fetch_via_attributes_property(\DOMElement $eleme
2222
}
2323
echo $attribute->value;
2424
}
25+
26+
function element_node_attribute_fetch_via_getAttributeNode(\DOMElement $element): void
27+
{
28+
$attribute = $element->getAttributeNode('class');
29+
if ($attribute === null) {
30+
return;
31+
}
32+
echo $attribute->value;
33+
}

0 commit comments

Comments
 (0)