Skip to content

Commit 6b640fd

Browse files
azizkprincemaple
authored andcommitted
RegExp: fixed conditional subpattern rule and improved named captures
1 parent 5c7f7aa commit 6b640fd

File tree

1 file changed

+37
-15
lines changed

1 file changed

+37
-15
lines changed

Regular Expressions (Elixir).sublime-syntax

Lines changed: 37 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -263,11 +263,13 @@ contexts:
263263
scope: keyword.control.assertion.regexp.elixir
264264
set: [group_body, unexpected_quantifier_pop]
265265
# Named capture.
266-
- match: \?(?>(?>P?<({{capture_name}})>|'\g<-1>'|P?<({{invalid_capture_name}}?)>|'\g<-1>'))
266+
- match: (?x) \? (?>P?<({{capture_name}})> | '\g<-1>' | (P)(?=') | P?(<>|'') | P?<({{invalid_capture_name}}?)> | P?'\g<-1>')
267267
scope: keyword.other.named-capture-group.regexp.elixir
268268
captures:
269269
1: entity.name.capture-group.regexp.elixir
270270
2: invalid.illegal.named-capture.regexp.elixir
271+
3: invalid.illegal.named-capture.regexp.elixir
272+
4: invalid.illegal.named-capture.regexp.elixir
271273
set: [group_body, unexpected_quantifier_pop]
272274
# Atomic group.
273275
- match: \?>
@@ -290,7 +292,8 @@ contexts:
290292
3: invalid.illegal.inline-option.regexp.elixir
291293
4: storage.modifier.mode.colon.regexp.elixir
292294
set: [group_body, unexpected_quantifier_pop]
293-
- include: conditional_subpattern
295+
- match: (?=\?\()
296+
set: conditional_subpattern_pop
294297
- match: ''
295298
set: [group_body, unexpected_quantifier_pop]
296299

@@ -301,41 +304,60 @@ contexts:
301304
pop: true
302305
- include: expression
303306

307+
conditional_subpattern_pop:
308+
- meta_content_scope: meta.group.regexp.elixir
309+
- include: conditional_subpattern
310+
- match: ''
311+
pop: true
312+
304313
conditional_subpattern:
314+
- match: \?((\()(\)))
315+
scope: keyword.control.conditional.regexp.elixir
316+
captures:
317+
1: invalid.illegal.conditional.regexp.elixir
318+
2: punctuation.definition.conditional.begin.regexp.elixir
319+
3: punctuation.definition.conditional.end.regexp.elixir
305320
- match: \?(\()
306321
scope: keyword.control.conditional.regexp.elixir
307322
captures:
308323
1: punctuation.definition.conditional.begin.regexp.elixir
309324
push:
325+
- meta_scope: meta.conditional.regexp.elixir
310326
# Pseudo-condition called DEFINE.
311327
- match: DEFINE
312328
scope: keyword.other.conditional.definition.regexp
313-
set: [subpattern_condition, unexpected_quantifier_pop]
329+
set: conditional_subpattern_end
314330
# References to recursion.
315-
- match: R(?:\d+|&{{capture_name}})
316-
scope: variable.other.back-reference.recursion.regexp.elixir
317-
set: [subpattern_condition, unexpected_quantifier_pop]
331+
- match: (R)(?:(&)({{capture_name}})|(\d+)|)
332+
captures:
333+
1: keyword.operator.recursion.regexp.elixir
334+
2: keyword.operator.recursion.regexp.elixir
335+
3: variable.other.recursion.regexp.elixir
336+
4: variable.other.recursion.regexp.elixir
337+
set: conditional_subpattern_end
318338
# References to subpatterns.
319339
- match: <({{capture_name}})>|'\g<-1>'|\g<-1>
320340
captures:
321341
1: variable.other.back-reference.regexp.elixir
322-
set: [subpattern_condition, unexpected_quantifier_pop]
342+
set: conditional_subpattern_end
323343
# Assertions: positive or negative lookahead or lookbehind assertion.
324344
- match: \?<?[=!]
325345
scope: keyword.control.assertion.regexp.elixir
326346
set:
327-
- match: \)
328-
scope: keyword.control.group.regexp.elixir punctuation.definition.conditional.end.regexp.elixir
329-
set: [group_body, unexpected_quantifier_pop]
330-
- include: unexpected_quantifier_pop
331-
- include: expression
347+
- include: unexpected_quantifier
348+
- match: ''
349+
set:
350+
- meta_content_scope: meta.conditional.regexp.elixir
351+
- match: (?=\))
352+
set: conditional_subpattern_end
353+
- include: expression
332354
- match: ''
333-
set: [subpattern_condition, unexpected_quantifier_pop]
355+
set: conditional_subpattern_end
334356

335-
subpattern_condition:
357+
conditional_subpattern_end:
336358
- meta_content_scope: meta.conditional.regexp.elixir
337359
- match: \)
338-
scope: keyword.control.conditional.regexp.elixir
360+
scope: keyword.control.conditional.regexp.elixir punctuation.definition.conditional.end.regexp.elixir
339361
set: [group_body, unexpected_quantifier_pop]
340362
- match: '[^)]+'
341363
scope: invalid.illegal.conditional.regexp.elixir

0 commit comments

Comments
 (0)