Skip to content

Commit 5fccb4f

Browse files
[TASK] Add SchemaGenerator evaluation for "@see" (#1047)
The phpDoc annotation "@see" contains valuable information for the XSD schema generation for future reading. Even though some IDEs like PHPStorm will not expose these links as being clickable, they can be copied+pasted from a tooltip in the IDE, and opened in the browser (instead of needing to find and open a PHP classfile to get to that link). Some IDEs (eclipse?) seem to be able to parse a HTML subset for annotations, so maybe this will find future adoption (or markdown rendering might get available). Since also neither ReST nor Markdown is parsed in the XSD element `xsd:documentation` by PHPStorm either.... plaintext it is!
1 parent 0b88dfd commit 5fccb4f

File tree

2 files changed

+61
-0
lines changed

2 files changed

+61
-0
lines changed

src/Schema/SchemaGenerator.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,12 @@ public function generate(string $xmlNamespace, array $viewHelpers): \SimpleXMLEl
3030
if (isset($metadata->docTags['@deprecated'])) {
3131
$documentation .= "\n@deprecated " . $metadata->docTags['@deprecated'];
3232
}
33+
// Add links from "@see" annotations. No HTML formatting means
34+
// non-clickable links, but copy+paste from a URL is then possible
35+
// for further reading
36+
if (isset($metadata->docTags['@see'])) {
37+
$documentation .= "\n@see " . $metadata->docTags['@see'];
38+
}
3339
$documentation = trim($documentation);
3440

3541
// Add documentation to xml

tests/Unit/Schema/SchemaGeneratorTest.php

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,61 @@ public static function generateSchemaDataProvider(): iterable
101101
'</xsd:element>' .
102102
'</xsd:schema>' . "\n",
103103
],
104+
'deprecatedViewHelperWithFurtherReading' => [
105+
'http://typo3.org/ns/Vendor/Package/ViewHelpers',
106+
[
107+
new ViewHelperMetadata(
108+
'Vendor\\Package\\ViewHelpers\\MyViewHelper',
109+
'Vendor\\Package',
110+
'MyViewHelper',
111+
'myViewHelper',
112+
'',
113+
'http://typo3.org/ns/Vendor/Package/ViewHelpers',
114+
[
115+
'@deprecated' => 'since 1.2.3, will be removed in 2.0.0',
116+
'@see' => 'https://docs.typo3.org/somelink',
117+
],
118+
[],
119+
false,
120+
),
121+
],
122+
'<?xml version="1.0" encoding="UTF-8"?>' . "\n" .
123+
'<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://typo3.org/ns/Vendor/Package/ViewHelpers">' .
124+
'<xsd:element name="myViewHelper">' .
125+
'<xsd:annotation><xsd:documentation><![CDATA[@deprecated since 1.2.3, will be removed in 2.0.0' . "\n" . '@see https://docs.typo3.org/somelink]]></xsd:documentation></xsd:annotation>' .
126+
'<xsd:complexType mixed="true">' .
127+
'<xsd:sequence><xsd:any minOccurs="0"/></xsd:sequence>' .
128+
'</xsd:complexType>' .
129+
'</xsd:element>' .
130+
'</xsd:schema>' . "\n",
131+
],
132+
'viewHelperWithFurtherReading' => [
133+
'http://typo3.org/ns/Vendor/Package/ViewHelpers',
134+
[
135+
new ViewHelperMetadata(
136+
'Vendor\\Package\\ViewHelpers\\MyViewHelper',
137+
'Vendor\\Package',
138+
'MyViewHelper',
139+
'myViewHelper',
140+
'',
141+
'http://typo3.org/ns/Vendor/Package/ViewHelpers',
142+
[
143+
'@see' => 'https://docs.typo3.org/somelink',
144+
],
145+
[],
146+
false,
147+
),
148+
],
149+
'<?xml version="1.0" encoding="UTF-8"?>' . "\n" .
150+
'<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://typo3.org/ns/Vendor/Package/ViewHelpers">' .
151+
'<xsd:element name="myViewHelper">' .
152+
'<xsd:annotation><xsd:documentation><![CDATA[@see https://docs.typo3.org/somelink]]></xsd:documentation></xsd:annotation>' .
153+
'<xsd:complexType mixed="true">' .
154+
'<xsd:sequence><xsd:any minOccurs="0"/></xsd:sequence>' .
155+
'</xsd:complexType>' .
156+
'</xsd:element>' .
157+
'</xsd:schema>' . "\n",
158+
],
104159
'argumentTypes' => [
105160
'http://typo3.org/ns/Vendor/Package/ViewHelpers',
106161
[

0 commit comments

Comments
 (0)