Skip to content

Commit

Permalink
[VarDumper] Add support for new DOM extension classes in DOMCaster
Browse files Browse the repository at this point in the history
  • Loading branch information
alexandre-daubois committed Mar 21, 2024
1 parent 099daf5 commit 5faf325
Show file tree
Hide file tree
Showing 4 changed files with 397 additions and 18 deletions.
5 changes: 5 additions & 0 deletions src/Symfony/Component/VarDumper/CHANGELOG.md
@@ -1,6 +1,11 @@
CHANGELOG
=========

7.1
---

* Add support for new DOM extension classes in `DOMCaster`

7.0
---

Expand Down
92 changes: 74 additions & 18 deletions src/Symfony/Component/VarDumper/Caster/DOMCaster.php
Expand Up @@ -63,7 +63,7 @@ class DOMCaster
\XML_NAMESPACE_DECL_NODE => 'XML_NAMESPACE_DECL_NODE',
];

public static function castException(\DOMException $e, array $a, Stub $stub, bool $isNested): array
public static function castException(\DOMException|\DOM\Exception $e, array $a, Stub $stub, bool $isNested): array

Check failure on line 66 in src/Symfony/Component/VarDumper/Caster/DOMCaster.php

View workflow job for this annotation

GitHub Actions / Psalm

UndefinedClass

src/Symfony/Component/VarDumper/Caster/DOMCaster.php:66:42: UndefinedClass: Class, interface or enum named DOM\Exception does not exist (see https://psalm.dev/019)
{
$k = Caster::PREFIX_PROTECTED.'code';
if (isset($a[$k], self::ERROR_CODES[$a[$k]])) {
Expand All @@ -82,7 +82,7 @@ public static function castLength($dom, array $a, Stub $stub, bool $isNested): a
return $a;
}

public static function castImplementation(\DOMImplementation $dom, array $a, Stub $stub, bool $isNested): array
public static function castImplementation(\DOMImplementation|\DOM\Implementation $dom, array $a, Stub $stub, bool $isNested): array

Check failure on line 85 in src/Symfony/Component/VarDumper/Caster/DOMCaster.php

View workflow job for this annotation

GitHub Actions / Psalm

UndefinedClass

src/Symfony/Component/VarDumper/Caster/DOMCaster.php:85:47: UndefinedClass: Class, interface or enum named DOM\Implementation does not exist (see https://psalm.dev/019)
{
$a += [
Caster::PREFIX_VIRTUAL.'Core' => '1.0',
Expand All @@ -92,7 +92,7 @@ public static function castImplementation(\DOMImplementation $dom, array $a, Stu
return $a;
}

public static function castNode(\DOMNode $dom, array $a, Stub $stub, bool $isNested): array
public static function castNode(\DOMNode|\DOM\Node $dom, array $a, Stub $stub, bool $isNested): array

Check failure on line 95 in src/Symfony/Component/VarDumper/Caster/DOMCaster.php

View workflow job for this annotation

GitHub Actions / Psalm

UndefinedClass

src/Symfony/Component/VarDumper/Caster/DOMCaster.php:95:37: UndefinedClass: Class, interface or enum named DOM\Node does not exist (see https://psalm.dev/019)
{
$a += [
'nodeName' => $dom->nodeName,
Expand All @@ -104,15 +104,20 @@ public static function castNode(\DOMNode $dom, array $a, Stub $stub, bool $isNes
'lastChild' => new CutStub($dom->lastChild),
'previousSibling' => new CutStub($dom->previousSibling),
'nextSibling' => new CutStub($dom->nextSibling),
'attributes' => $dom->attributes,
'ownerDocument' => new CutStub($dom->ownerDocument),
'namespaceURI' => $dom->namespaceURI,
'prefix' => $dom->prefix,
'localName' => $dom->localName,
'baseURI' => $dom->baseURI ? new LinkStub($dom->baseURI) : $dom->baseURI,
'textContent' => new CutStub($dom->textContent),
];

if ($dom instanceof \DOMNode || $dom instanceof \DOM\Element) {
$a += [
'attributes' => $dom->attributes,
'namespaceURI' => $dom->namespaceURI,
'prefix' => $dom->prefix,
'localName' => $dom->localName,
];
}

return $a;
}

Expand Down Expand Up @@ -166,7 +171,48 @@ public static function castDocument(\DOMDocument $dom, array $a, Stub $stub, boo
return $a;
}

public static function castCharacterData(\DOMCharacterData $dom, array $a, Stub $stub, bool $isNested): array
public static function castXMLDocument(\DOM\XMLDocument $dom, array $a, Stub $stub, bool $isNested, int $filter = 0): array

Check failure on line 174 in src/Symfony/Component/VarDumper/Caster/DOMCaster.php

View workflow job for this annotation

GitHub Actions / Psalm

UndefinedClass

src/Symfony/Component/VarDumper/Caster/DOMCaster.php:174:44: UndefinedClass: Class, interface or enum named DOM\XMLDocument does not exist (see https://psalm.dev/019)
{
$a += [
'doctype' => $dom->doctype,
'implementation' => $dom->implementation,
'documentElement' => new CutStub($dom->documentElement),
'inputEncoding' => $dom->inputEncoding,
'xmlEncoding' => $dom->xmlEncoding,
'xmlStandalone' => $dom->xmlStandalone,
'xmlVersion' => $dom->xmlVersion,
'documentURI' => $dom->documentURI ? new LinkStub($dom->documentURI) : $dom->documentURI,
'formatOutput' => $dom->formatOutput,
];

if (!($filter & Caster::EXCLUDE_VERBOSE)) {
$formatOutput = $dom->formatOutput;
$dom->formatOutput = true;
$a += [Caster::PREFIX_VIRTUAL.'xml' => $dom->saveXML()];
$dom->formatOutput = $formatOutput;
}

return $a;
}

public static function castHTMLDocument(\DOM\HTMLDocument $dom, array $a, Stub $stub, bool $isNested, int $filter = 0): array

Check failure on line 198 in src/Symfony/Component/VarDumper/Caster/DOMCaster.php

View workflow job for this annotation

GitHub Actions / Psalm

UndefinedClass

src/Symfony/Component/VarDumper/Caster/DOMCaster.php:198:45: UndefinedClass: Class, interface or enum named DOM\HTMLDocument does not exist (see https://psalm.dev/019)
{
$a += [
'doctype' => $dom->doctype,
'implementation' => $dom->implementation,
'documentElement' => new CutStub($dom->documentElement),
'inputEncoding' => $dom->inputEncoding,
'documentURI' => $dom->documentURI ? new LinkStub($dom->documentURI) : $dom->documentURI,
];

if (!($filter & Caster::EXCLUDE_VERBOSE)) {
$a += [Caster::PREFIX_VIRTUAL.'html' => $dom->saveHTML()];
}

return $a;
}

public static function castCharacterData(\DOMCharacterData|\DOM\CharacterData $dom, array $a, Stub $stub, bool $isNested): array

Check failure on line 215 in src/Symfony/Component/VarDumper/Caster/DOMCaster.php

View workflow job for this annotation

GitHub Actions / Psalm

UndefinedClass

src/Symfony/Component/VarDumper/Caster/DOMCaster.php:215:46: UndefinedClass: Class, interface or enum named DOM\CharacterData does not exist (see https://psalm.dev/019)
{
$a += [
'data' => $dom->data,
Expand All @@ -176,30 +222,40 @@ public static function castCharacterData(\DOMCharacterData $dom, array $a, Stub
return $a;
}

public static function castAttr(\DOMAttr $dom, array $a, Stub $stub, bool $isNested): array
public static function castAttr(\DOMAttr|\DOM\Attr $dom, array $a, Stub $stub, bool $isNested): array

Check failure on line 225 in src/Symfony/Component/VarDumper/Caster/DOMCaster.php

View workflow job for this annotation

GitHub Actions / Psalm

UndefinedClass

src/Symfony/Component/VarDumper/Caster/DOMCaster.php:225:37: UndefinedClass: Class, interface or enum named DOM\Attr does not exist (see https://psalm.dev/019)
{
$a += [
'name' => $dom->name,
'specified' => $dom->specified,
'value' => $dom->value,
'ownerElement' => $dom->ownerElement,
'schemaTypeInfo' => $dom->schemaTypeInfo,
];

if ($dom instanceof \DOMAttr) {
$a += [
'schemaTypeInfo' => $dom->schemaTypeInfo,
];
}

return $a;
}

public static function castElement(\DOMElement $dom, array $a, Stub $stub, bool $isNested): array
public static function castElement(\DOMElement|\DOM\Element $dom, array $a, Stub $stub, bool $isNested): array

Check failure on line 243 in src/Symfony/Component/VarDumper/Caster/DOMCaster.php

View workflow job for this annotation

GitHub Actions / Psalm

UndefinedClass

src/Symfony/Component/VarDumper/Caster/DOMCaster.php:243:40: UndefinedClass: Class, interface or enum named DOM\Element does not exist (see https://psalm.dev/019)
{
$a += [
'tagName' => $dom->tagName,
'schemaTypeInfo' => $dom->schemaTypeInfo,
];

if ($dom instanceof \DOMElement) {
$a += [
'schemaTypeInfo' => $dom->schemaTypeInfo,
];
}

return $a;
}

public static function castText(\DOMText $dom, array $a, Stub $stub, bool $isNested): array
public static function castText(\DOMText|\DOM\Text $dom, array $a, Stub $stub, bool $isNested): array

Check failure on line 258 in src/Symfony/Component/VarDumper/Caster/DOMCaster.php

View workflow job for this annotation

GitHub Actions / Psalm

UndefinedClass

src/Symfony/Component/VarDumper/Caster/DOMCaster.php:258:37: UndefinedClass: Class, interface or enum named DOM\Text does not exist (see https://psalm.dev/019)
{
$a += [
'wholeText' => $dom->wholeText,
Expand All @@ -208,7 +264,7 @@ public static function castText(\DOMText $dom, array $a, Stub $stub, bool $isNes
return $a;
}

public static function castDocumentType(\DOMDocumentType $dom, array $a, Stub $stub, bool $isNested): array
public static function castDocumentType(\DOMDocumentType|\DOM\DocumentType $dom, array $a, Stub $stub, bool $isNested): array

Check failure on line 267 in src/Symfony/Component/VarDumper/Caster/DOMCaster.php

View workflow job for this annotation

GitHub Actions / Psalm

UndefinedClass

src/Symfony/Component/VarDumper/Caster/DOMCaster.php:267:45: UndefinedClass: Class, interface or enum named DOM\DocumentType does not exist (see https://psalm.dev/019)
{
$a += [
'name' => $dom->name,
Expand All @@ -222,7 +278,7 @@ public static function castDocumentType(\DOMDocumentType $dom, array $a, Stub $s
return $a;
}

public static function castNotation(\DOMNotation $dom, array $a, Stub $stub, bool $isNested): array
public static function castNotation(\DOMNotation|\DOM\Notation $dom, array $a, Stub $stub, bool $isNested): array
{
$a += [
'publicId' => $dom->publicId,
Expand All @@ -232,7 +288,7 @@ public static function castNotation(\DOMNotation $dom, array $a, Stub $stub, boo
return $a;
}

public static function castEntity(\DOMEntity $dom, array $a, Stub $stub, bool $isNested): array
public static function castEntity(\DOMEntity|\DOM\Entity $dom, array $a, Stub $stub, bool $isNested): array
{
$a += [
'publicId' => $dom->publicId,
Expand All @@ -246,7 +302,7 @@ public static function castEntity(\DOMEntity $dom, array $a, Stub $stub, bool $i
return $a;
}

public static function castProcessingInstruction(\DOMProcessingInstruction $dom, array $a, Stub $stub, bool $isNested): array
public static function castProcessingInstruction(\DOMProcessingInstruction|\DOM\ProcessingInstruction $dom, array $a, Stub $stub, bool $isNested): array
{
$a += [
'target' => $dom->target,
Expand All @@ -256,7 +312,7 @@ public static function castProcessingInstruction(\DOMProcessingInstruction $dom,
return $a;
}

public static function castXPath(\DOMXPath $dom, array $a, Stub $stub, bool $isNested): array
public static function castXPath(\DOMXPath|\DOM\XPath $dom, array $a, Stub $stub, bool $isNested): array
{
$a += [
'document' => $dom->document,
Expand Down
15 changes: 15 additions & 0 deletions src/Symfony/Component/VarDumper/Cloner/AbstractCloner.php
Expand Up @@ -54,23 +54,38 @@ abstract class AbstractCloner implements ClonerInterface
'Doctrine\Persistence\ObjectManager' => ['Symfony\Component\VarDumper\Caster\StubCaster', 'cutInternals'],

'DOMException' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castException'],
'DOM\Exception' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castException'],
'DOMStringList' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castLength'],
'DOMNameList' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castLength'],
'DOMImplementation' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castImplementation'],
'DOM\Implementation' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castImplementation'],
'DOMImplementationList' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castLength'],
'DOMNode' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castNode'],
'DOM\Node' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castNode'],
'DOMNameSpaceNode' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castNameSpaceNode'],
'DOMDocument' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castDocument'],
'DOM\XMLDocument' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castXMLDocument'],
'DOM\HTMLDocument' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castHTMLDocument'],
'DOMNodeList' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castLength'],
'DOM\NodeList' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castLength'],
'DOMNamedNodeMap' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castLength'],
'DOM\DTDNamedNodeMap' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castLength'],
'DOMCharacterData' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castCharacterData'],
'DOM\CharacterData' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castCharacterData'],
'DOMAttr' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castAttr'],
'DOM\Attr' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castAttr'],
'DOMElement' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castElement'],
'DOM\Element' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castElement'],
'DOMText' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castText'],
'DOM\Text' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castText'],
'DOMDocumentType' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castDocumentType'],
'DOM\DocumentType' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castDocumentType'],
'DOMNotation' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castNotation'],
'DOM\Notation' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castNotation'],
'DOMEntity' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castEntity'],
'DOM\Entity' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castEntity'],
'DOMProcessingInstruction' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castProcessingInstruction'],
'DOM\ProcessingInstruction' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castProcessingInstruction'],
'DOMXPath' => ['Symfony\Component\VarDumper\Caster\DOMCaster', 'castXPath'],

'XMLReader' => ['Symfony\Component\VarDumper\Caster\XmlReaderCaster', 'castXmlReader'],
Expand Down

0 comments on commit 5faf325

Please sign in to comment.