Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[VarDumper] Add support for new DOM extension classes in DOMCaster #54320

Merged
merged 1 commit into from Mar 22, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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 @@
\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 @@
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 @@
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 @@
'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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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