Skip to content

Commit 4c325d9

Browse files
committed
Add support for PHP attributes
1 parent 9764478 commit 4c325d9

File tree

4 files changed

+75
-59
lines changed

4 files changed

+75
-59
lines changed

src/Templates/highlight.php/php.json

Lines changed: 33 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,23 @@
88
"php7"
99
],
1010
"case_insensitive": true,
11-
"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",
11+
"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",
1212
"contains": [
13+
{
14+
"className": "php-attribute",
15+
"begin": "#\\[\\s*(\\\\?[A-Z][A-Za-z0-9_\\x7f-\\xff]+|\\\\?[A-Z]+(?=[A-Z][a-z0-9_\\x7f-\\xff])){1,}(?![A-Za-z0-9])(?![$])",
16+
"end": "]",
17+
"contains": [
18+
{
19+
"begin": "\\(",
20+
"end": "\\)",
21+
"keywords": "true false null new array",
22+
"contains": {
23+
"$ref": "#contains.10.contains.1.contains"
24+
}
25+
}
26+
]
27+
},
1328
{
1429
"className": "comment",
1530
"begin": "#",
@@ -35,7 +50,7 @@
3550
"begin": "<\\?(php)?|\\?>"
3651
},
3752
{
38-
"$ref": "#contains.0.contains.0"
53+
"$ref": "#contains.1.contains.0"
3954
},
4055
{
4156
"className": "doctag",
@@ -54,7 +69,7 @@
5469
"begin": "@[A-Za-z]+"
5570
},
5671
{
57-
"$ref": "#contains.0.contains.0"
72+
"$ref": "#contains.1.contains.0"
5873
},
5974
{
6075
"className": "doctag",
@@ -69,7 +84,7 @@
6984
"end": false,
7085
"contains": [
7186
{
72-
"$ref": "#contains.0.contains.0"
87+
"$ref": "#contains.1.contains.0"
7388
},
7489
{
7590
"className": "doctag",
@@ -105,7 +120,7 @@
105120
]
106121
},
107122
{
108-
"$ref": "#contains.1.contains.0"
123+
"$ref": "#contains.2.contains.0"
109124
},
110125
{
111126
"className": "variable",
@@ -137,18 +152,19 @@
137152
"className": "params",
138153
"begin": "\\(",
139154
"end": "\\)",
155+
"keywords": "true false null new array",
140156
"contains": [
141157
"self",
142158
{
143-
"$ref": "#contains.7"
159+
"$ref": "#contains.8"
144160
},
145161
{
146162
"className": "comment",
147163
"begin": "/\\*",
148164
"end": "\\*/",
149165
"contains": [
150166
{
151-
"$ref": "#contains.0.contains.0"
167+
"$ref": "#contains.1.contains.0"
152168
},
153169
{
154170
"className": "doctag",
@@ -161,10 +177,10 @@
161177
"className": "string",
162178
"contains": [
163179
{
164-
"$ref": "#contains.4.contains.0"
180+
"$ref": "#contains.5.contains.0"
165181
},
166182
{
167-
"$ref": "#contains.1.contains.0"
183+
"$ref": "#contains.2.contains.0"
168184
}
169185
],
170186
"variants": [
@@ -183,7 +199,7 @@
183199
"illegal": null,
184200
"contains": [
185201
{
186-
"$ref": "#contains.4.contains.0"
202+
"$ref": "#contains.5.contains.0"
187203
}
188204
]
189205
},
@@ -194,7 +210,7 @@
194210
"illegal": null,
195211
"contains": [
196212
{
197-
"$ref": "#contains.4.contains.0"
213+
"$ref": "#contains.5.contains.0"
198214
},
199215
{
200216
"className": "subst",
@@ -230,7 +246,7 @@
230246
},
231247
{
232248
"className": "class",
233-
"beginKeywords": "class interface",
249+
"beginKeywords": "class interface trait enum",
234250
"end": "{",
235251
"excludeEnd": true,
236252
"illegal": "[:\\(\\$\"]",
@@ -239,7 +255,7 @@
239255
"beginKeywords": "extends implements"
240256
},
241257
{
242-
"$ref": "#contains.9.contains.0"
258+
"$ref": "#contains.10.contains.0"
243259
}
244260
]
245261
},
@@ -249,7 +265,7 @@
249265
"illegal": "[\\.']",
250266
"contains": [
251267
{
252-
"$ref": "#contains.9.contains.0"
268+
"$ref": "#contains.10.contains.0"
253269
}
254270
]
255271
},
@@ -258,18 +274,18 @@
258274
"end": ";",
259275
"contains": [
260276
{
261-
"$ref": "#contains.9.contains.0"
277+
"$ref": "#contains.10.contains.0"
262278
}
263279
]
264280
},
265281
{
266282
"begin": "=>"
267283
},
268284
{
269-
"$ref": "#contains.9.contains.1.contains.3"
285+
"$ref": "#contains.10.contains.1.contains.3"
270286
},
271287
{
272-
"$ref": "#contains.9.contains.1.contains.4"
288+
"$ref": "#contains.10.contains.1.contains.4"
273289
}
274290
]
275291
}

tests/fixtures/expected/blocks/code-blocks/php-attributes.html

Lines changed: 34 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<div translate="no" data-loc="48" class="notranslate codeblock codeblock-length-md codeblock-php-attributes codeblock-php">
1+
<div translate="no" data-loc="54" class="notranslate codeblock codeblock-length-md codeblock-php-attributes codeblock-php">
22
<div class="codeblock-scroll">
33
<pre class="codeblock-lines">1
44
2
@@ -47,7 +47,13 @@
4747
45
4848
46
4949
47
50-
48</pre>
50+
48
51+
49
52+
50
53+
51
54+
52
55+
53
56+
54</pre>
5157
<pre class="codeblock-code">
5258
<code>
5359
<span class="hljs-comment">// src/SomePath/SomeClass.php</span>
@@ -63,85 +69,72 @@
6369
<span class="hljs-variable">
6470
<span class="hljs-variable-other-marker">$</span> property1</span>
6571
;
66-
<span class="hljs-php-attribute">#[AttributeName(</span>
67-
<span class="hljs-php-attribute">)]</span>
72+
<span class="hljs-php-attribute">#[AttributeName()]</span>
6873
<span class="hljs-keyword">private</span>
6974
<span class="hljs-variable">
7075
<span class="hljs-variable-other-marker">$</span> property2</span>
7176
;
72-
<span class="hljs-php-attribute">#[AttributeName(</span>
73-
<span class="hljs-string">'value'</span>
74-
<span class="hljs-php-attribute">)]</span>
77+
<span class="hljs-php-attribute">#[AttributeName(<span class="hljs-string">'value'</span>)]</span>
7578
<span class="hljs-keyword">private</span>
7679
<span class="hljs-variable">
7780
<span class="hljs-variable-other-marker">$</span> property3</span>
7881
;
79-
<span class="hljs-php-attribute">#[AttributeName(</span>
80-
<span class="hljs-string">'value'</span>
81-
, option:
82-
<span class="hljs-string">'value'</span>
83-
<span class="hljs-php-attribute">)]</span>
82+
<span class="hljs-php-attribute">#[AttributeName(<span class="hljs-string">'value'</span>, option: <span class="hljs-string">'value'</span>)]</span>
8483
<span class="hljs-keyword">private</span>
8584
<span class="hljs-variable">
8685
<span class="hljs-variable-other-marker">$</span> property4</span>
8786
;
88-
<span class="hljs-php-attribute">#[AttributeName(</span>
89-
[<span class="hljs-string">'value'</span> =&gt; <span class="hljs-string">'value'</span>]<span class="hljs-php-attribute">)]</span>
87+
<span class="hljs-php-attribute">#[AttributeName([<span class="hljs-string">'value'</span> =&gt; <span class="hljs-string">'value'</span>])]</span>
9088
<span class="hljs-keyword">private</span>
9189
<span class="hljs-variable">
9290
<span class="hljs-variable-other-marker">$</span> property5</span>
9391
;
94-
<span class="hljs-php-attribute">#[AttributeName(</span>
95-
<span class="hljs-string">'value'</span>
96-
, option:
97-
<span class="hljs-string">'value'</span>
98-
<span class="hljs-php-attribute">)]</span>
92+
<span class="hljs-php-attribute">#[AttributeName(
93+
<span class="hljs-string">'value'</span>,
94+
option: <span class="hljs-string">'value'</span>
95+
)]</span>
9996
<span class="hljs-keyword">private</span>
10097
<span class="hljs-variable">
10198
<span class="hljs-variable-other-marker">$</span> property6</span>
10299
;
103-
<span class="hljs-php-attribute">#[Assert\AttributeName(</span>
104-
<span class="hljs-string">'value'</span>
105-
<span class="hljs-php-attribute">)]</span>
100+
<span class="hljs-php-attribute">#[Assert\AttributeName(<span class="hljs-string">'value'</span>)]</span>
106101
<span class="hljs-keyword">private</span>
107102
<span class="hljs-variable">
108103
<span class="hljs-variable-other-marker">$</span> property7</span>
109104
;
110-
<span class="hljs-php-attribute">#[Assert\AttributeName(</span>
111-
<span class="hljs-string">'value'</span>
112-
, option:
113-
<span class="hljs-string">'value'</span>
114-
<span class="hljs-php-attribute">)]</span>
105+
<span class="hljs-php-attribute">#[Assert\AttributeName(
106+
<span class="hljs-string">'value'</span>,
107+
option: <span class="hljs-string">'value'</span>
108+
)]</span>
115109
<span class="hljs-keyword">private</span>
116110
<span class="hljs-variable">
117111
<span class="hljs-variable-other-marker">$</span> property8</span>
118112
;
119-
<span class="hljs-php-attribute">#[Route(</span>
120-
<span class="hljs-string">'/blog/{page&lt;\d+&gt;}'</span>
121-
, name:
122-
<span class="hljs-string">'blog_list'</span>
123-
<span class="hljs-php-attribute">)]</span>
113+
<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>
124114
<span class="hljs-keyword">private</span>
125115
<span class="hljs-variable">
126116
<span class="hljs-variable-other-marker">$</span> property9</span>
127117
;
128-
<span class="hljs-php-attribute">#[Assert\GreaterThanOrEqual(</span>
129-
value:
130-
<span class="hljs-number">18</span>
131-
,
132-
<span class="hljs-php-attribute">)]</span>
118+
<span class="hljs-php-attribute">#[Assert\GreaterThanOrEqual(
119+
value: <span class="hljs-number">18</span>,
120+
)]</span>
133121
<span class="hljs-keyword">private</span>
134122
<span class="hljs-variable">
135123
<span class="hljs-variable-other-marker">$</span> property10</span>
136124
;
137-
<span class="hljs-php-attribute">#[ORM\CustomIdGenerator(</span>
138-
class:
139-
<span class="hljs-string">'doctrine.uuid_generator'</span>
140-
<span class="hljs-php-attribute">)]</span>
125+
<span class="hljs-php-attribute">#[ORM\CustomIdGenerator(class: <span class="hljs-string">'doctrine.uuid_generator'</span>)]</span>
141126
<span class="hljs-keyword">private</span>
142127
<span class="hljs-variable">
143128
<span class="hljs-variable-other-marker">$</span> property11</span>
144129
;
130+
<span class="hljs-php-attribute">#[Assert\AtLeastOneOf([
131+
<span class="hljs-keyword">new</span> Assert\Regex(<span class="hljs-string">'/#/'</span>),
132+
<span class="hljs-keyword">new</span> Assert\Length(min: <span class="hljs-number">10</span>),
133+
])]</span>
134+
<span class="hljs-keyword">private</span>
135+
<span class="hljs-variable">
136+
<span class="hljs-variable-other-marker">$</span> property12</span>
137+
;
145138
}</code></pre>
146139
</div>
147140
</div>

tests/fixtures/source/blocks/code-blocks/php-attributes.rst

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,5 +47,10 @@
4747
4848
#[ORM\CustomIdGenerator(class: 'doctrine.uuid_generator')]
4949
private $property11;
50-
}
5150
51+
#[Assert\AtLeastOneOf([
52+
new Assert\Regex('/#/'),
53+
new Assert\Length(min: 10),
54+
])]
55+
private $property12;
56+
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11

22
.. code-block:: text
33
some text with special chars < > " & and some text with special chars already escaped &lt; &gt; &quot; &amp;
4+
5+
.. image:: image.png

0 commit comments

Comments
 (0)