Skip to content

Commit 1c1e16f

Browse files
committed
feature #195 Support multiple attributes in a single block (wouterj)
This PR was merged into the main branch. Discussion ---------- Support multiple attributes in a single block Fixes #194 `@javiereguiluz` this contains one change for all attribute highlighting: the whole `#[...]` section is now wrapped in a single `.hljs-meta` element. This means that everything without style now also gets the green text color on symfony.com (e.g. parenthesis and commas). Commits ------- 701666f Support multiple attributes in a single block
2 parents b9a83d9 + 701666f commit 1c1e16f

File tree

3 files changed

+62
-67
lines changed

3 files changed

+62
-67
lines changed

src/Templates/highlight.php/php.json

Lines changed: 44 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -12,30 +12,29 @@
1212
"contains": [
1313
{
1414
"className": "meta",
15-
"begin": "#\\[\\s*(\\\\?[A-Z][A-Za-z0-9_\\x7f-\\xff]+)+\\]"
16-
},
17-
{
18-
"begin": "#\\[\\s*(\\\\?[A-Z][A-Za-z0-9_\\x7f-\\xff]+)+(?![A-Za-z0-9])(?![$])",
15+
"begin": "#\\[\\s*(?=\\w)",
1916
"end": "]",
20-
"returnBegin": true,
2117
"contains": [
2218
{
23-
"className": "meta",
24-
"begin": "#\\[\\s*(\\\\?[A-Z][A-Za-z0-9_\\x7f-\\xff]+)+(?![A-Za-z0-9])(?![$])"
25-
},
26-
{
27-
"begin": "\\(",
28-
"end": "\\)",
29-
"keywords": "array bool boolean float int integer new real string false FALSE null NULL true TRUE PHP_VERSION PHP_MAJOR_VERSION PHP_MINOR_VERSION PHP_RELEASE_VERSION PHP_VERSION_ID PHP_EXTRA_VERSION ZEND_THREAD_SAFE ZEND_DEBUG_BUILD PHP_ZTS PHP_DEBUG PHP_MAXPATHLEN PHP_OS PHP_OS_FAMILY PHP_SAPI PHP_EOL PHP_INT_MAX PHP_INT_MIN PHP_INT_SIZE PHP_FLOAT_DIG PHP_FLOAT_EPSILON PHP_FLOAT_MIN PHP_FLOAT_MAX DEFAULT_INCLUDE_PATH PEAR_INSTALL_DIR PEAR_EXTENSION_DIR PHP_EXTENSION_DIR PHP_PREFIX PHP_BINDIR PHP_BINARY PHP_MANDIR PHP_LIBDIR PHP_DATADIR PHP_SYSCONFDIR PHP_LOCALSTATEDIR PHP_CONFIG_FILE_PATH PHP_CONFIG_FILE_SCAN_DIR PHP_SHLIB_SUFFIX PHP_FD_SETSIZE E_ERROR E_WARNING E_PARSE E_NOTICE E_CORE_ERROR E_CORE_WARNING E_COMPILE_ERROR E_COMPILE_WARNING E_USER_ERROR E_USER_WARNING E_USER_NOTICE E_RECOVERABLE_ERROR E_DEPRECATED E_USER_DEPRECATED E_ALL E_STRICT __COMPILER_HALT_OFFSET__ PHP_WINDOWS_EVENT_CTRL_C PHP_WINDOWS_EVENT_CTRL_BREAK PHP_CLI_PROCESS_TITLE STDERR STDIN STDOUT __CLASS__ __DIR__ __FILE__ __FUNCTION__ __LINE__ __METHOD__ __NAMESPACE__ __TRAIT__",
30-
"contains": {
31-
"$ref": "#contains.9.contains.1.contains",
32-
"_": "params"
33-
}
34-
},
35-
{
36-
"className": "meta",
37-
"begin": "]",
38-
"endsParent": true
19+
"variants": [
20+
{
21+
"begin": "\\s*(\\\\?[A-Z][A-Za-z0-9_\\x7f-\\xff]+)+(?=\\()",
22+
"contains": [
23+
{
24+
"begin": "\\(",
25+
"end": "\\)",
26+
"keywords": "array bool boolean float int integer new real string false FALSE null NULL true TRUE PHP_VERSION PHP_MAJOR_VERSION PHP_MINOR_VERSION PHP_RELEASE_VERSION PHP_VERSION_ID PHP_EXTRA_VERSION ZEND_THREAD_SAFE ZEND_DEBUG_BUILD PHP_ZTS PHP_DEBUG PHP_MAXPATHLEN PHP_OS PHP_OS_FAMILY PHP_SAPI PHP_EOL PHP_INT_MAX PHP_INT_MIN PHP_INT_SIZE PHP_FLOAT_DIG PHP_FLOAT_EPSILON PHP_FLOAT_MIN PHP_FLOAT_MAX DEFAULT_INCLUDE_PATH PEAR_INSTALL_DIR PEAR_EXTENSION_DIR PHP_EXTENSION_DIR PHP_PREFIX PHP_BINDIR PHP_BINARY PHP_MANDIR PHP_LIBDIR PHP_DATADIR PHP_SYSCONFDIR PHP_LOCALSTATEDIR PHP_CONFIG_FILE_PATH PHP_CONFIG_FILE_SCAN_DIR PHP_SHLIB_SUFFIX PHP_FD_SETSIZE E_ERROR E_WARNING E_PARSE E_NOTICE E_CORE_ERROR E_CORE_WARNING E_COMPILE_ERROR E_COMPILE_WARNING E_USER_ERROR E_USER_WARNING E_USER_NOTICE E_RECOVERABLE_ERROR E_DEPRECATED E_USER_DEPRECATED E_ALL E_STRICT __COMPILER_HALT_OFFSET__ PHP_WINDOWS_EVENT_CTRL_C PHP_WINDOWS_EVENT_CTRL_BREAK PHP_CLI_PROCESS_TITLE STDERR STDIN STDOUT __CLASS__ __DIR__ __FILE__ __FUNCTION__ __LINE__ __METHOD__ __NAMESPACE__ __TRAIT__",
27+
"contains": {
28+
"$ref": "#contains.8.contains.1.contains",
29+
"_": "params"
30+
}
31+
}
32+
]
33+
},
34+
{
35+
"begin": "\\s*(\\\\?[A-Z][A-Za-z0-9_\\x7f-\\xff]+)+(?!\\()"
36+
}
37+
]
3938
}
4039
]
4140
},
@@ -64,7 +63,7 @@
6463
"begin": "<\\?(php)?|\\?>"
6564
},
6665
{
67-
"$ref": "#contains.2.contains.0"
66+
"$ref": "#contains.1.contains.0"
6867
},
6968
{
7069
"className": "doctag",
@@ -83,7 +82,7 @@
8382
"begin": "@[A-Za-z]+"
8483
},
8584
{
86-
"$ref": "#contains.2.contains.0"
85+
"$ref": "#contains.1.contains.0"
8786
},
8887
{
8988
"className": "doctag",
@@ -98,7 +97,7 @@
9897
"end": false,
9998
"contains": [
10099
{
101-
"$ref": "#contains.2.contains.0"
100+
"$ref": "#contains.1.contains.0"
102101
},
103102
{
104103
"className": "doctag",
@@ -134,7 +133,7 @@
134133
]
135134
},
136135
{
137-
"$ref": "#contains.3.contains.0"
136+
"$ref": "#contains.2.contains.0"
138137
},
139138
{
140139
"className": "variable",
@@ -200,35 +199,35 @@
200199
]
201200
},
202201
{
203-
"$ref": "#contains.8",
202+
"$ref": "#contains.7",
204203
"_": "variable"
205204
},
206205
{
207-
"$ref": "#contains.3",
206+
"$ref": "#contains.2",
208207
"_": "comment"
209208
},
210209
{
211-
"$ref": "#contains.4",
210+
"$ref": "#contains.3",
212211
"_": "comment"
213212
},
214213
{
215-
"$ref": "#contains.5",
214+
"$ref": "#contains.4",
216215
"_": "comment"
217216
},
218217
{
219-
"$ref": "#contains.10.contains.3.contains.3",
218+
"$ref": "#contains.9.contains.3.contains.3",
220219
"_": "string"
221220
},
222221
{
223-
"$ref": "#contains.10.contains.3.contains.4",
222+
"$ref": "#contains.9.contains.3.contains.4",
224223
"_": "number"
225224
},
226225
{
227-
"$ref": "#contains.10",
226+
"$ref": "#contains.9",
228227
"_": "closure"
229228
},
230229
{
231-
"$ref": "#contains.9",
230+
"$ref": "#contains.8",
232231
"_": "invoke"
233232
}
234233
]
@@ -262,21 +261,21 @@
262261
"contains": [
263262
"self",
264263
{
265-
"$ref": "#contains.8",
264+
"$ref": "#contains.7",
266265
"_": "variable"
267266
},
268267
{
269-
"$ref": "#contains.5",
268+
"$ref": "#contains.4",
270269
"_": "comment"
271270
},
272271
{
273272
"className": "string",
274273
"contains": [
275274
{
276-
"$ref": "#contains.6.contains.0"
275+
"$ref": "#contains.5.contains.0"
277276
},
278277
{
279-
"$ref": "#contains.3.contains.0"
278+
"$ref": "#contains.2.contains.0"
280279
}
281280
],
282281
"variants": [
@@ -295,7 +294,7 @@
295294
"illegal": null,
296295
"contains": [
297296
{
298-
"$ref": "#contains.6.contains.0"
297+
"$ref": "#contains.5.contains.0"
299298
}
300299
]
301300
},
@@ -306,7 +305,7 @@
306305
"illegal": null,
307306
"contains": [
308307
{
309-
"$ref": "#contains.6.contains.0"
308+
"$ref": "#contains.5.contains.0"
310309
},
311310
{
312311
"className": "subst",
@@ -338,18 +337,14 @@
338337
},
339338
{
340339
"$ref": "#contains.0",
341-
"_": "simple-attribute"
342-
},
343-
{
344-
"$ref": "#contains.1",
345340
"_": "attribute"
346341
}
347342
]
348343
}
349344
]
350345
},
351346
{
352-
"$ref": "#contains.9.contains.1.contains.1",
347+
"$ref": "#contains.8.contains.1.contains.1",
353348
"_": "constant"
354349
},
355350
{
@@ -371,7 +366,7 @@
371366
"beginKeywords": "extends implements"
372367
},
373368
{
374-
"$ref": "#contains.10.contains.1",
369+
"$ref": "#contains.9.contains.1",
375370
"_": "title"
376371
}
377372
]
@@ -382,7 +377,7 @@
382377
"illegal": "[\\.']",
383378
"contains": [
384379
{
385-
"$ref": "#contains.10.contains.1",
380+
"$ref": "#contains.9.contains.1",
386381
"_": "title"
387382
}
388383
]
@@ -392,7 +387,7 @@
392387
"end": ";",
393388
"contains": [
394389
{
395-
"$ref": "#contains.10.contains.1",
390+
"$ref": "#contains.9.contains.1",
396391
"_": "title"
397392
}
398393
]
@@ -401,11 +396,11 @@
401396
"begin": "=>"
402397
},
403398
{
404-
"$ref": "#contains.10.contains.3.contains.3",
399+
"$ref": "#contains.9.contains.3.contains.3",
405400
"_": "string"
406401
},
407402
{
408-
"$ref": "#contains.10.contains.3.contains.4",
403+
"$ref": "#contains.9.contains.3.contains.4",
409404
"_": "number"
410405
}
411406
]

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

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -80,80 +80,80 @@
8080
<span class="hljs-variable">
8181
<span class="hljs-variable-other-marker">$</span> property1</span>
8282
;
83-
<span class="hljs-meta">#[AttributeName</span>()<span class="hljs-meta">]</span>
83+
<span class="hljs-meta">#[AttributeName()]</span>
8484
<span class="hljs-keyword">private</span>
8585
<span class="hljs-variable">
8686
<span class="hljs-variable-other-marker">$</span> property2</span>
8787
;
88-
<span class="hljs-meta">#[AttributeName</span>(<span class="hljs-string">'value'</span>)<span class="hljs-meta">]</span>
88+
<span class="hljs-meta">#[AttributeName(<span class="hljs-string">'value'</span>)]</span>
8989
<span class="hljs-keyword">private</span>
9090
<span class="hljs-variable">
9191
<span class="hljs-variable-other-marker">$</span> property3</span>
9292
;
93-
<span class="hljs-meta">#[AttributeName</span>(<span class="hljs-string">'value'</span>, <span class="hljs-attr">option</span>: <span class="hljs-string">'value'</span>)<span class="hljs-meta">]</span>
93+
<span class="hljs-meta">#[AttributeName(<span class="hljs-string">'value'</span>, <span class="hljs-attr">option</span>: <span class="hljs-string">'value'</span>)]</span>
9494
<span class="hljs-keyword">private</span>
9595
<span class="hljs-variable">
9696
<span class="hljs-variable-other-marker">$</span> property4</span>
9797
;
98-
<span class="hljs-meta">#[AttributeName</span>([<span class="hljs-string">'value'</span> =&gt; <span class="hljs-string">'value'</span>])<span class="hljs-meta">]</span>
98+
<span class="hljs-meta">#[AttributeName([<span class="hljs-string">'value'</span> =&gt; <span class="hljs-string">'value'</span>])]</span>
9999
<span class="hljs-keyword">private</span>
100100
<span class="hljs-variable">
101101
<span class="hljs-variable-other-marker">$</span> property5</span>
102102
;
103-
<span class="hljs-meta">#[AttributeName</span>(
103+
<span class="hljs-meta">#[AttributeName(
104104
<span class="hljs-string">'value'</span>,
105105
<span class="hljs-attr">option</span>: <span class="hljs-string">'value'</span>
106-
)<span class="hljs-meta">]</span>
106+
)]</span>
107107
<span class="hljs-keyword">private</span>
108108
<span class="hljs-variable">
109109
<span class="hljs-variable-other-marker">$</span> property6</span>
110110
;
111-
<span class="hljs-meta">#[Assert\AttributeName</span>(<span class="hljs-string">'value'</span>)<span class="hljs-meta">]</span>
111+
<span class="hljs-meta">#[Assert\AttributeName(<span class="hljs-string">'value'</span>)]</span>
112112
<span class="hljs-keyword">private</span>
113113
<span class="hljs-variable">
114114
<span class="hljs-variable-other-marker">$</span> property7</span>
115115
;
116-
<span class="hljs-meta">#[Assert\AttributeName</span>(
116+
<span class="hljs-meta">#[Assert\AttributeName(
117117
<span class="hljs-string">'value'</span>,
118118
<span class="hljs-attr">option</span>: <span class="hljs-string">'value'</span>
119-
)<span class="hljs-meta">]</span>
119+
)]</span>
120120
<span class="hljs-keyword">private</span>
121121
<span class="hljs-variable">
122122
<span class="hljs-variable-other-marker">$</span> property8</span>
123123
;
124-
<span class="hljs-meta">#[Route</span>(<span class="hljs-string">'/blog/{page&lt;\d+&gt;}'</span>, <span class="hljs-attr">name</span>: <span class="hljs-string">'blog_list'</span>)<span class="hljs-meta">]</span>
124+
<span class="hljs-meta">#[Route(<span class="hljs-string">'/blog/{page&lt;\d+&gt;}'</span>, <span class="hljs-attr">name</span>: <span class="hljs-string">'blog_list'</span>)]</span>
125125
<span class="hljs-keyword">private</span>
126126
<span class="hljs-variable">
127127
<span class="hljs-variable-other-marker">$</span> property9</span>
128128
;
129-
<span class="hljs-meta">#[Assert\GreaterThanOrEqual</span>(
129+
<span class="hljs-meta">#[Assert\GreaterThanOrEqual(
130130
<span class="hljs-attr">value</span>: <span class="hljs-number">18</span>,
131-
)<span class="hljs-meta">]</span>
131+
)]</span>
132132
<span class="hljs-keyword">private</span>
133133
<span class="hljs-variable">
134134
<span class="hljs-variable-other-marker">$</span> property10</span>
135135
;
136-
<span class="hljs-meta">#[ORM\CustomIdGenerator</span>(<span class="hljs-attr">class</span>: <span class="hljs-string">'doctrine.uuid_generator'</span>)<span class="hljs-meta">]</span>
136+
<span class="hljs-meta">#[ORM\CustomIdGenerator(<span class="hljs-attr">class</span>: <span class="hljs-string">'doctrine.uuid_generator'</span>)]</span>
137137
<span class="hljs-keyword">private</span>
138138
<span class="hljs-variable">
139139
<span class="hljs-variable-other-marker">$</span> property11</span>
140140
;
141-
<span class="hljs-meta">#[Assert\AtLeastOneOf</span>([
141+
<span class="hljs-meta">#[Assert\AtLeastOneOf([
142142
<span class="hljs-keyword">new</span> Assert\<span class="hljs-title invoke__">Regex</span>(<span class="hljs-string">'/#/'</span>),
143143
<span class="hljs-keyword">new</span> Assert\<span class="hljs-title invoke__">Length</span>(<span class="hljs-attr">min</span>: <span class="hljs-number">10</span>),
144-
])<span class="hljs-meta">]</span>
144+
])]</span>
145145
<span class="hljs-keyword">private</span>
146146
<span class="hljs-variable">
147147
<span class="hljs-variable-other-marker">$</span> property12</span>
148148
;
149149
<span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">__construct</span><span class="hljs-params">(
150-
<span class="hljs-meta">#[TaggedIterator</span>(<span class="hljs-string">'app.handlers'</span>)<span class="hljs-meta">]</span>
150+
<span class="hljs-meta">#[TaggedIterator(<span class="hljs-string">'app.handlers'</span>)]</span>
151151
<span class="hljs-keyword">iterable</span> <span class="hljs-variable"><span class="hljs-variable-other-marker">$</span>handlers</span>,
152152
)</span></span>{
153153
}
154154

155155
<span class="hljs-meta">#[AsController]</span>
156-
<span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-title">someAction</span><span class="hljs-params">(<span class="hljs-meta">#[CurrentUser]</span> User <span class="hljs-variable"><span class="hljs-variable-other-marker">$</span>user</span>)</span></span>
156+
<span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-title">someAction</span><span class="hljs-params">(<span class="hljs-meta">#[CurrentUser, AttributeName(<span class="hljs-string">'value'</span>)]</span> User <span class="hljs-variable"><span class="hljs-variable-other-marker">$</span>user</span>)</span></span>
157157
{
158158
}
159159
}</code></pre>

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@
6161
}
6262
6363
#[AsController]
64-
public function someAction(#[CurrentUser] User $user)
64+
public function someAction(#[CurrentUser, AttributeName('value')] User $user)
6565
{
6666
}
6767
}

0 commit comments

Comments
 (0)