Skip to content

Commit

Permalink
Add support for PHP attributes
Browse files Browse the repository at this point in the history
  • Loading branch information
wouterj committed May 17, 2024
1 parent 9764478 commit 020a281
Show file tree
Hide file tree
Showing 3 changed files with 73 additions and 59 deletions.
50 changes: 33 additions & 17 deletions src/Templates/highlight.php/php.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,23 @@
"php7"
],
"case_insensitive": true,
"keywords": "and include_once list abstract global private echo interface as static endswitch array null if endwhile or const for endforeach self var while isset public protected exit foreach throw elseif include __FILE__ empty require_once do xor return parent clone use __CLASS__ __LINE__ else break print eval new catch __METHOD__ case exception default die require __FUNCTION__ enddeclare final try switch continue endfor endif declare unset true false trait goto instanceof insteadof __DIR__ __NAMESPACE__ yield finally",
"keywords": "and include_once list abstract global private echo interface as static endswitch array null if endwhile or const for endforeach self var while isset public protected exit foreach throw elseif include __FILE__ empty require_once do xor return parent clone use __CLASS__ __LINE__ else break print eval new catch __METHOD__ case exception default die require __FUNCTION__ enddeclare final try match switch continue endfor endif declare unset true false goto instanceof insteadof __DIR__ __NAMESPACE__ yield finally",
"contains": [
{
"className": "php-attribute",
"begin": "#\\[\\s*(\\\\?[A-Z][A-Za-z0-9_\\x7f-\\xff]+|\\\\?[A-Z]+(?=[A-Z][a-z0-9_\\x7f-\\xff])){1,}(?![A-Za-z0-9])(?![$])",
"end": "]",
"contains": [
{
"begin": "\\(",
"end": "\\)",
"keywords": "true false null new array",
"contains": {
"$ref": "#contains.10.contains.1.contains"
}
}
]
},
{
"className": "comment",
"begin": "#",
Expand All @@ -35,7 +50,7 @@
"begin": "<\\?(php)?|\\?>"
},
{
"$ref": "#contains.0.contains.0"
"$ref": "#contains.1.contains.0"
},
{
"className": "doctag",
Expand All @@ -54,7 +69,7 @@
"begin": "@[A-Za-z]+"
},
{
"$ref": "#contains.0.contains.0"
"$ref": "#contains.1.contains.0"
},
{
"className": "doctag",
Expand All @@ -69,7 +84,7 @@
"end": false,
"contains": [
{
"$ref": "#contains.0.contains.0"
"$ref": "#contains.1.contains.0"
},
{
"className": "doctag",
Expand Down Expand Up @@ -105,7 +120,7 @@
]
},
{
"$ref": "#contains.1.contains.0"
"$ref": "#contains.2.contains.0"
},
{
"className": "variable",
Expand Down Expand Up @@ -137,18 +152,19 @@
"className": "params",
"begin": "\\(",
"end": "\\)",
"keywords": "true false null new array",
"contains": [
"self",
{
"$ref": "#contains.7"
"$ref": "#contains.8"
},
{
"className": "comment",
"begin": "/\\*",
"end": "\\*/",
"contains": [
{
"$ref": "#contains.0.contains.0"
"$ref": "#contains.1.contains.0"
},
{
"className": "doctag",
Expand All @@ -161,10 +177,10 @@
"className": "string",
"contains": [
{
"$ref": "#contains.4.contains.0"
"$ref": "#contains.5.contains.0"
},
{
"$ref": "#contains.1.contains.0"
"$ref": "#contains.2.contains.0"
}
],
"variants": [
Expand All @@ -183,7 +199,7 @@
"illegal": null,
"contains": [
{
"$ref": "#contains.4.contains.0"
"$ref": "#contains.5.contains.0"
}
]
},
Expand All @@ -194,7 +210,7 @@
"illegal": null,
"contains": [
{
"$ref": "#contains.4.contains.0"
"$ref": "#contains.5.contains.0"
},
{
"className": "subst",
Expand Down Expand Up @@ -230,7 +246,7 @@
},
{
"className": "class",
"beginKeywords": "class interface",
"beginKeywords": "class interface trait enum",
"end": "{",
"excludeEnd": true,
"illegal": "[:\\(\\$\"]",
Expand All @@ -239,7 +255,7 @@
"beginKeywords": "extends implements"
},
{
"$ref": "#contains.9.contains.0"
"$ref": "#contains.10.contains.0"
}
]
},
Expand All @@ -249,7 +265,7 @@
"illegal": "[\\.']",
"contains": [
{
"$ref": "#contains.9.contains.0"
"$ref": "#contains.10.contains.0"
}
]
},
Expand All @@ -258,18 +274,18 @@
"end": ";",
"contains": [
{
"$ref": "#contains.9.contains.0"
"$ref": "#contains.10.contains.0"
}
]
},
{
"begin": "=>"
},
{
"$ref": "#contains.9.contains.1.contains.3"
"$ref": "#contains.10.contains.1.contains.3"
},
{
"$ref": "#contains.9.contains.1.contains.4"
"$ref": "#contains.10.contains.1.contains.4"
}
]
}
75 changes: 34 additions & 41 deletions tests/fixtures/expected/blocks/code-blocks/php-attributes.html
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<div translate="no" data-loc="48" class="notranslate codeblock codeblock-length-md codeblock-php-attributes codeblock-php">
<div translate="no" data-loc="54" class="notranslate codeblock codeblock-length-md codeblock-php-attributes codeblock-php">
<div class="codeblock-scroll">
<pre class="codeblock-lines">1
2
Expand Down Expand Up @@ -47,7 +47,13 @@
45
46
47
48</pre>
48
49
50
51
52
53
54</pre>
<pre class="codeblock-code">
<code>
<span class="hljs-comment">// src/SomePath/SomeClass.php</span>
Expand All @@ -63,85 +69,72 @@
<span class="hljs-variable">
<span class="hljs-variable-other-marker">$</span> property1</span>
;
<span class="hljs-php-attribute">#[AttributeName(</span>
<span class="hljs-php-attribute">)]</span>
<span class="hljs-php-attribute">#[AttributeName()]</span>
<span class="hljs-keyword">private</span>
<span class="hljs-variable">
<span class="hljs-variable-other-marker">$</span> property2</span>
;
<span class="hljs-php-attribute">#[AttributeName(</span>
<span class="hljs-string">'value'</span>
<span class="hljs-php-attribute">)]</span>
<span class="hljs-php-attribute">#[AttributeName(<span class="hljs-string">'value'</span>)]</span>
<span class="hljs-keyword">private</span>
<span class="hljs-variable">
<span class="hljs-variable-other-marker">$</span> property3</span>
;
<span class="hljs-php-attribute">#[AttributeName(</span>
<span class="hljs-string">'value'</span>
, option:
<span class="hljs-string">'value'</span>
<span class="hljs-php-attribute">)]</span>
<span class="hljs-php-attribute">#[AttributeName(<span class="hljs-string">'value'</span>, option: <span class="hljs-string">'value'</span>)]</span>
<span class="hljs-keyword">private</span>
<span class="hljs-variable">
<span class="hljs-variable-other-marker">$</span> property4</span>
;
<span class="hljs-php-attribute">#[AttributeName(</span>
[<span class="hljs-string">'value'</span> =&gt; <span class="hljs-string">'value'</span>]<span class="hljs-php-attribute">)]</span>
<span class="hljs-php-attribute">#[AttributeName([<span class="hljs-string">'value'</span> =&gt; <span class="hljs-string">'value'</span>])]</span>
<span class="hljs-keyword">private</span>
<span class="hljs-variable">
<span class="hljs-variable-other-marker">$</span> property5</span>
;
<span class="hljs-php-attribute">#[AttributeName(</span>
<span class="hljs-string">'value'</span>
, option:
<span class="hljs-string">'value'</span>
<span class="hljs-php-attribute">)]</span>
<span class="hljs-php-attribute">#[AttributeName(
<span class="hljs-string">'value'</span>,
option: <span class="hljs-string">'value'</span>
)]</span>
<span class="hljs-keyword">private</span>
<span class="hljs-variable">
<span class="hljs-variable-other-marker">$</span> property6</span>
;
<span class="hljs-php-attribute">#[Assert\AttributeName(</span>
<span class="hljs-string">'value'</span>
<span class="hljs-php-attribute">)]</span>
<span class="hljs-php-attribute">#[Assert\AttributeName(<span class="hljs-string">'value'</span>)]</span>
<span class="hljs-keyword">private</span>
<span class="hljs-variable">
<span class="hljs-variable-other-marker">$</span> property7</span>
;
<span class="hljs-php-attribute">#[Assert\AttributeName(</span>
<span class="hljs-string">'value'</span>
, option:
<span class="hljs-string">'value'</span>
<span class="hljs-php-attribute">)]</span>
<span class="hljs-php-attribute">#[Assert\AttributeName(
<span class="hljs-string">'value'</span>,
option: <span class="hljs-string">'value'</span>
)]</span>
<span class="hljs-keyword">private</span>
<span class="hljs-variable">
<span class="hljs-variable-other-marker">$</span> property8</span>
;
<span class="hljs-php-attribute">#[Route(</span>
<span class="hljs-string">'/blog/{page&lt;\d+&gt;}'</span>
, name:
<span class="hljs-string">'blog_list'</span>
<span class="hljs-php-attribute">)]</span>
<span class="hljs-php-attribute">#[Route(<span class="hljs-string">'/blog/{page&lt;\d+&gt;}'</span>, name: <span class="hljs-string">'blog_list'</span>)]</span>
<span class="hljs-keyword">private</span>
<span class="hljs-variable">
<span class="hljs-variable-other-marker">$</span> property9</span>
;
<span class="hljs-php-attribute">#[Assert\GreaterThanOrEqual(</span>
value:
<span class="hljs-number">18</span>
,
<span class="hljs-php-attribute">)]</span>
<span class="hljs-php-attribute">#[Assert\GreaterThanOrEqual(
value: <span class="hljs-number">18</span>,
)]</span>
<span class="hljs-keyword">private</span>
<span class="hljs-variable">
<span class="hljs-variable-other-marker">$</span> property10</span>
;
<span class="hljs-php-attribute">#[ORM\CustomIdGenerator(</span>
class:
<span class="hljs-string">'doctrine.uuid_generator'</span>
<span class="hljs-php-attribute">)]</span>
<span class="hljs-php-attribute">#[ORM\CustomIdGenerator(class: <span class="hljs-string">'doctrine.uuid_generator'</span>)]</span>
<span class="hljs-keyword">private</span>
<span class="hljs-variable">
<span class="hljs-variable-other-marker">$</span> property11</span>
;
<span class="hljs-php-attribute">#[Assert\AtLeastOneOf([
<span class="hljs-keyword">new</span> Assert\Regex(<span class="hljs-string">'/#/'</span>),
<span class="hljs-keyword">new</span> Assert\Length(min: <span class="hljs-number">10</span>),
])]</span>
<span class="hljs-keyword">private</span>
<span class="hljs-variable">
<span class="hljs-variable-other-marker">$</span> property12</span>
;
}</code></pre>
</div>
</div>
7 changes: 6 additions & 1 deletion tests/fixtures/source/blocks/code-blocks/php-attributes.rst
Original file line number Diff line number Diff line change
Expand Up @@ -47,5 +47,10 @@
#[ORM\CustomIdGenerator(class: 'doctrine.uuid_generator')]
private $property11;
}
#[Assert\AtLeastOneOf([
new Assert\Regex('/#/'),
new Assert\Length(min: 10),
])]
private $property12;
}

0 comments on commit 020a281

Please sign in to comment.