--- name: Perl fileTypes: - pl - pm - pod - t - PL firstLineMatch: ^#!.*\bperl\b scopeName: source.perl repository: nested_ltgt: captures: "1": name: punctuation.section.scope.perl begin: < end: ">" patterns: - include: "#nested_ltgt" escaped_char: name: constant.character.escape.perl match: \\. nested_brackets: captures: "1": name: punctuation.section.scope.perl begin: \[ end: \] patterns: - include: "#escaped_char" - include: "#nested_brackets" nested_braces: captures: "1": name: punctuation.section.scope.perl begin: \{ end: \} patterns: - include: "#escaped_char" - include: "#nested_braces" line_comment: patterns: - name: meta.comment.full-line.perl captures: "1": name: comment.line.number-sign.perl "2": name: punctuation.definition.comment.perl match: ^((#).*$\n?) - name: comment.line.number-sign.perl captures: "1": name: punctuation.definition.comment.perl match: (#).*$\n? nested_parens_interpolated: captures: "1": name: punctuation.section.scope.perl begin: \( end: \) patterns: - include: "#escaped_char" - include: "#variable" - include: "#nested_parens_interpolated" nested_parens: captures: "1": name: punctuation.section.scope.perl begin: \( end: \) patterns: - include: "#escaped_char" - include: "#nested_parens" nested_brackets_interpolated: captures: "1": name: punctuation.section.scope.perl begin: \[ end: \] patterns: - include: "#escaped_char" - include: "#variable" - include: "#nested_brackets_interpolated" nested_braces_interpolated: captures: "1": name: punctuation.section.scope.perl begin: \{ end: \} patterns: - include: "#escaped_char" - include: "#variable" - include: "#nested_braces_interpolated" nested_ltgt_interpolated: captures: "1": name: punctuation.section.scope.perl begin: < end: ">" patterns: - include: "#variable" - include: "#nested_ltgt_interpolated" variable: patterns: - name: variable.other.regexp.match.perl captures: "1": name: punctuation.definition.variable.perl match: (\$)&(?![A-Za-z0-9_]) - name: variable.other.regexp.pre-match.perl captures: "1": name: punctuation.definition.variable.perl match: (\$)`(?![A-Za-z0-9_]) - name: variable.other.regexp.post-match.perl captures: "1": name: punctuation.definition.variable.perl match: (\$)'(?![A-Za-z0-9_]) - name: variable.other.regexp.last-paren-match.perl captures: "1": name: punctuation.definition.variable.perl match: (\$)\+(?![A-Za-z0-9_]) - name: variable.other.readwrite.list-separator.perl captures: "1": name: punctuation.definition.variable.perl match: (\$)"(?![A-Za-z0-9_]) - name: variable.other.predefined.program-name.perl captures: "1": name: punctuation.definition.variable.perl match: (\$)0(?![A-Za-z0-9_]) - name: variable.other.predefined.perl captures: "1": name: punctuation.definition.variable.perl match: (\$)[_ab\*\.\/\|,\\;#%=\-~^:?!\$<>\(\)\[\]@](?![A-Za-z0-9_]) - name: variable.other.subpattern.perl captures: "1": name: punctuation.definition.variable.perl match: (\$)[0-9]+(?![A-Za-z0-9_]) - name: variable.other.readwrite.global.perl captures: "1": name: punctuation.definition.variable.perl match: ([\$\@\%](#)?)([a-zA-Zx7f-xff\$]|::)([a-zA-Z0-9_x7f-xff\$]|::)*\b - name: variable.other.readwrite.global.perl captures: "1": name: punctuation.definition.variable.perl "2": name: punctuation.definition.variable.perl match: (\$\{)(?:[a-zA-Zx7f-xff\$]|::)(?:[a-zA-Z0-9_x7f-xff\$]|::)*(\}) - name: variable.other.readwrite.global.special.perl captures: "1": name: punctuation.definition.variable.perl match: ([\$\@\%](#)?)[0-9_]\b uuid: EDBFE125-6B1C-11D9-9189-000D93589AF6 foldingStartMarker: (/\*|(\{|\[|\()\s*$) patterns: - include: "#line_comment" - name: comment.block.documentation.perl captures: "0": name: punctuation.definition.comment.perl begin: ^= end: ^=cut - include: "#variable" - endCaptures: "1": name: string.regexp.compile.perl "2": name: punctuation.definition.string.perl "3": name: keyword.control.regexp-option.perl begin: \b(?=qr\s*[^\s\w]) applyEndPatternLast: 1 end: ((([egimosx]*)))(?=(\s+\S|\s*[;\,\#\{\}\)]|$)) patterns: - name: string.regexp.compile.nested_braces.perl captures: "0": name: punctuation.definition.string.perl "1": name: support.function.perl begin: (qr)\s*\{ end: \} patterns: - include: "#escaped_char" - include: "#variable" - include: "#nested_braces_interpolated" - name: string.regexp.compile.nested_brackets.perl captures: "0": name: punctuation.definition.string.perl "1": name: support.function.perl begin: (qr)\s*\[ end: \] patterns: - include: "#escaped_char" - include: "#variable" - include: "#nested_brackets_interpolated" - name: string.regexp.compile.nested_ltgt.perl captures: "0": name: punctuation.definition.string.perl "1": name: support.function.perl begin: (qr)\s*< end: ">" patterns: - include: "#escaped_char" - include: "#variable" - include: "#nested_ltgt_interpolated" - name: string.regexp.compile.nested_parens.perl captures: "0": name: punctuation.definition.string.perl "1": name: support.function.perl begin: (qr)\s*\( end: \) patterns: - include: "#escaped_char" - include: "#variable" - include: "#nested_parens_interpolated" - name: string.regexp.compile.single-quote.perl captures: "0": name: punctuation.definition.string.perl "1": name: support.function.perl begin: (qr)\s*\' end: \' patterns: - include: "#escaped_char" - name: string.regexp.compile.simple-delimiter.perl captures: "0": name: punctuation.definition.string.perl "1": name: support.function.perl begin: (qr)\s*([^\s\w\'\{\[\(\<]) end: \2 patterns: - include: "#escaped_char" - include: "#variable" - include: "#nested_parens_interpolated" comment: string.regexp.compile.perl - endCaptures: "1": name: string.regexp.replace.perl "2": name: punctuation.definition.string.perl "3": name: keyword.control.regexp-option.perl begin: \b(?=(s)(\s+\S|\s*[;\,\#\{\}\(\)\[<]|$)) applyEndPatternLast: 1 end: ((([egimosx]*)))(?=(\s+\S|\s*[;\,\#\{\}\)\]>]|$)) patterns: - name: string.regexp.nested_braces.perl captures: "0": name: punctuation.definition.string.perl "1": name: support.function.perl begin: (s)\s*\{ end: \} patterns: - include: "#escaped_char" - include: "#nested_braces" - name: string.regexp.nested_brackets.perl captures: "0": name: punctuation.definition.string.perl "1": name: support.function.perl begin: (s)\s*\[ end: \] patterns: - include: "#escaped_char" - include: "#nested_brackets" - name: string.regexp.nested_ltgt.perl captures: "0": name: punctuation.definition.string.perl "1": name: support.function.perl begin: (s)\s*< end: ">" patterns: - include: "#escaped_char" - include: "#nested_ltgt" - name: string.regexp.nested_parens.perl captures: "0": name: punctuation.definition.string.perl "1": name: support.function.perl begin: (s)\s*\( end: \) patterns: - include: "#escaped_char" - include: "#nested_parens" - name: string.regexp.format.nested_braces.perl captures: "0": name: punctuation.definition.string.perl begin: \{ end: \} patterns: - include: "#escaped_char" - include: "#variable" - include: "#nested_braces_interpolated" - name: string.regexp.format.nested_brackets.perl captures: "0": name: punctuation.definition.string.perl begin: \[ end: \] patterns: - include: "#escaped_char" - include: "#variable" - include: "#nested_brackets_interpolated" - name: string.regexp.format.nested_ltgt.perl captures: "0": name: punctuation.definition.string.perl begin: < end: ">" patterns: - include: "#escaped_char" - include: "#variable" - include: "#nested_ltgt_interpolated" - name: string.regexp.format.nested_parens.perl captures: "0": name: punctuation.definition.string.perl begin: \( end: \) patterns: - include: "#escaped_char" - include: "#variable" - include: "#nested_parens_interpolated" - name: string.regexp.format.single_quote.perl captures: "0": name: punctuation.definition.string.perl begin: "'" end: "'" patterns: - name: constant.character.escape.perl match: \\['\\] - name: string.regexp.format.simple_delimiter.perl captures: "0": name: punctuation.definition.string.perl begin: ([^\s\w\[({<;]) end: \1 patterns: - include: "#escaped_char" - include: "#variable" - match: \s+ comment: string.regexp.replace.perl - endCaptures: "1": name: string.regexp.replace.perl "2": name: punctuation.definition.string.perl "3": name: keyword.control.regexp-option.perl begin: \b(?=s([^\s\w\[({<]).*\1([egimos]*)([\}\)\;\,]|\s+)) end: ((([egimos]*)))(?=([\}\)\;\,]|\s+|$)) patterns: - name: string.regexp.replaceXXX.simple_delimiter.perl captures: "0": name: punctuation.definition.string.perl "1": name: support.function.perl begin: (s\s*)([^\s\w\[({<]) end: (?=\2) patterns: - include: "#escaped_char" - name: string.regexp.replaceXXX.format.single_quote.perl captures: "0": name: punctuation.definition.string.perl begin: "'" end: "'" patterns: - name: constant.character.escape.perl.perl match: \\['\\] - name: string.regexp.replaceXXX.format.simple_delimiter.perl captures: "0": name: punctuation.definition.string.perl begin: ([^\s\w\[({<]) end: \1 patterns: - include: "#escaped_char" - include: "#variable" comment: string.regexp.replaceXXX - endCaptures: "1": name: string.regexp.replace.perl "2": name: punctuation.definition.string.perl "3": name: keyword.control.regexp-option.perl begin: \b(?=(?) - name: constant.other.bareword.perl match: (?<={)\s*\w+\s*(?=}) - name: string.regexp.find.perl captures: "1": name: punctuation.definition.string.perl "5": name: punctuation.definition.string.perl match: (? patterns: - include: "#escaped_char" - include: "#nested_ltgt_interpolated" - include: "#variable" - name: string.regexp.replace.perl captures: "8": name: punctuation.definition.string.perl "1": name: support.function.perl "2": name: punctuation.definition.string.perl "5": name: punctuation.definition.string.perl match: \b(s|tr|y)\s*([^A-Za-z0-9\s])(.*?)(?| =>|->) - captures: "0": name: punctuation.definition.string.perl "1": name: string.unquoted.heredoc.doublequote.perl "2": name: punctuation.definition.heredoc.perl begin: ((<<) *"HTML").*\n? contentName: text.html.embedded.perl end: (^HTML$) patterns: - include: "#escaped_char" - include: "#variable" - include: text.html.basic - captures: "0": name: punctuation.definition.string.perl "1": name: string.unquoted.heredoc.doublequote.perl "2": name: punctuation.definition.heredoc.perl begin: ((<<) *"XML").*\n? contentName: text.xml.embedded.perl end: (^XML$) patterns: - include: "#escaped_char" - include: "#variable" - include: text.xml - captures: "0": name: punctuation.definition.string.perl "1": name: string.unquoted.heredoc.doublequote.perl "2": name: punctuation.definition.heredoc.perl begin: ((<<) *"CSS").*\n? contentName: text.css.embedded.perl end: (^CSS$) patterns: - include: "#escaped_char" - include: "#variable" - include: source.css - captures: "0": name: punctuation.definition.string.perl "1": name: string.unquoted.heredoc.doublequote.perl "2": name: punctuation.definition.heredoc.perl begin: ((<<) *"JAVASCRIPT").*\n? contentName: text.js.embedded.perl end: (^JAVASCRIPT$) patterns: - include: "#escaped_char" - include: "#variable" - include: source.js - captures: "0": name: punctuation.definition.string.perl "1": name: string.unquoted.heredoc.doublequote.perl "2": name: punctuation.definition.heredoc.perl begin: ((<<) *"SQL").*\n? contentName: source.sql.embedded.perl end: (^SQL$) patterns: - include: "#escaped_char" - include: "#variable" - include: source.sql - captures: "0": name: punctuation.definition.string.perl "1": name: string.unquoted.heredoc.doublequote.perl "2": name: punctuation.definition.heredoc.perl begin: ((<<) *"POSTSCRIPT").*\n? contentName: text.postscript.embedded.perl end: (^POSTSCRIPT$) patterns: - include: "#escaped_char" - include: "#variable" - include: source.postscript - captures: "0": name: punctuation.definition.string.perl "1": name: string.unquoted.heredoc.doublequote.perl "2": name: punctuation.definition.heredoc.perl begin: ((<<) *"([^"]*)").*\n? contentName: string.unquoted.heredoc.doublequote.perl end: (^\3$) patterns: - include: "#escaped_char" - include: "#variable" - captures: "0": name: punctuation.definition.string.perl "1": name: string.unquoted.heredoc.quote.perl "2": name: punctuation.definition.heredoc.perl begin: ((<<) *'HTML').*\n? contentName: text.html.embedded.perl end: (^HTML$) patterns: - include: text.html.basic - captures: "0": name: punctuation.definition.string.perl "1": name: string.unquoted.heredoc.quote.perl "2": name: punctuation.definition.heredoc.perl begin: ((<<) *'XML').*\n? contentName: text.xml.embedded.perl end: (^XML$) patterns: - include: text.xml - captures: "0": name: punctuation.definition.string.perl "1": name: string.unquoted.heredoc.quote.perl "2": name: punctuation.definition.heredoc.perl begin: ((<<) *'CSS').*\n? contentName: text.css.embedded.perl end: (^CSS$) patterns: - include: source.css - captures: "0": name: punctuation.definition.string.perl "1": name: string.unquoted.heredoc.quote.perl "2": name: punctuation.definition.heredoc.perl begin: ((<<) *'JAVASCRIPT').*\n? contentName: text.js.embedded.perl end: (^JAVASCRIPT$) patterns: - include: source.js - captures: "0": name: punctuation.definition.string.perl "1": name: string.unquoted.heredoc.quote.perl "2": name: punctuation.definition.heredoc.perl begin: ((<<) *'SQL').*\n? contentName: source.sql.embedded.perl end: (^SQL$) patterns: - include: source.sql - captures: "0": name: punctuation.definition.string.perl "1": name: string.unquoted.heredoc.quote.perl "2": name: punctuation.definition.heredoc.perl begin: ((<<) *'POSTSCRIPT').*\n? contentName: source.postscript.embedded.perl end: (^POSTSCRIPT) patterns: - include: source.postscript - captures: "0": name: punctuation.definition.string.perl "1": name: string.unquoted.heredoc.quote.perl "2": name: punctuation.definition.heredoc.perl begin: ((<<) *'([^']*)').*\n? contentName: string.unquoted.heredoc.quote.perl end: (^\3$) - captures: "0": name: punctuation.definition.string.perl "1": name: string.unquoted.heredoc.backtick.perl "2": name: punctuation.definition.heredoc.perl begin: ((<<) *`([^`]*)`).*\n? contentName: string.unquoted.heredoc.backtick.perl end: (^\3$) patterns: - include: "#escaped_char" - include: "#variable" - captures: "0": name: punctuation.definition.string.perl "1": name: string.unquoted.heredoc.perl "2": name: punctuation.definition.heredoc.perl begin: ((<<) *HTML\b).*\n? contentName: text.html.embedded.perl end: (^HTML$) patterns: - include: "#escaped_char" - include: "#variable" - include: text.html.basic - captures: "0": name: punctuation.definition.string.perl "1": name: string.unquoted.heredoc.perl "2": name: punctuation.definition.heredoc.perl begin: ((<<) *XML\b).*\n? contentName: text.xml.embedded.perl end: (^XML$) patterns: - include: "#escaped_char" - include: "#variable" - include: text.xml - captures: "0": name: punctuation.definition.string.perl "1": name: string.unquoted.heredoc.perl "2": name: punctuation.definition.heredoc.perl begin: ((<<) *SQL\b).*\n? contentName: source.sql.embedded.perl end: (^SQL$) patterns: - include: "#escaped_char" - include: "#variable" - include: source.sql - captures: "0": name: punctuation.definition.string.perl "1": name: string.unquoted.heredoc.perl "2": name: punctuation.definition.heredoc.perl begin: ((<<) *POSTSCRIPT\b).*\n? contentName: source.postscript.embedded.perl end: (^POSTSCRIPT) patterns: - include: "#escaped_char" - include: "#variable" - include: source.postscript - captures: "0": name: punctuation.definition.string.perl "1": name: string.unquoted.heredoc.perl "2": name: punctuation.definition.heredoc.perl begin: ((<<) *((?![=\d\$ ])[^;,'"`\s)]*)).*\n? contentName: string.unquoted.heredoc.perl end: (^\3$) patterns: - include: "#escaped_char" - include: "#variable" - name: string.quoted.other.qq.perl endCaptures: "0": name: punctuation.definition.string.end.perl begin: \bqq\s*([^\(\{\[\<\w\s]) beginCaptures: "0": name: punctuation.definition.string.begin.perl end: \1 patterns: - include: "#escaped_char" - include: "#variable" - name: string.interpolated.qx.perl endCaptures: "0": name: punctuation.definition.string.end.perl begin: \bqx\s*([^'\(\{\[\<\w\s]) beginCaptures: "0": name: punctuation.definition.string.begin.perl end: \1 patterns: - include: "#escaped_char" - include: "#variable" - name: string.interpolated.qx.single-quote.perl endCaptures: "0": name: punctuation.definition.string.end.perl begin: \bqx\s*' beginCaptures: "0": name: punctuation.definition.string.begin.perl end: "'" patterns: - include: "#escaped_char" - name: string.quoted.double.perl endCaptures: "0": name: punctuation.definition.string.end.perl begin: "\"" beginCaptures: "0": name: punctuation.definition.string.begin.perl end: "\"" patterns: - include: "#escaped_char" - include: "#variable" - name: string.quoted.other.q.perl endCaptures: "0": name: punctuation.definition.string.end.perl begin: \bqw?\s*([^\(\{\[\<\w\s]) beginCaptures: "0": name: punctuation.definition.string.begin.perl end: \1 patterns: - include: "#escaped_char" - name: string.quoted.single.perl endCaptures: "0": name: punctuation.definition.string.end.perl begin: "'" beginCaptures: "0": name: punctuation.definition.string.begin.perl end: "'" patterns: - name: constant.character.escape.perl match: \\['\\] - name: string.interpolated.perl endCaptures: "0": name: punctuation.definition.string.end.perl begin: "`" beginCaptures: "0": name: punctuation.definition.string.begin.perl end: "`" patterns: - include: "#escaped_char" - include: "#variable" - name: string.quoted.other.qq-paren.perl endCaptures: "0": name: punctuation.definition.string.end.perl begin: \bqq\s*\( beginCaptures: "0": name: punctuation.definition.string.begin.perl end: \) patterns: - include: "#escaped_char" - include: "#nested_parens_interpolated" - include: "#variable" - name: string.quoted.other.qq-brace.perl endCaptures: "0": name: punctuation.definition.string.end.perl begin: \bqq\s*\{ beginCaptures: "0": name: punctuation.definition.string.begin.perl end: \} patterns: - include: "#escaped_char" - include: "#nested_braces_interpolated" - include: "#variable" - name: string.quoted.other.qq-bracket.perl endCaptures: "0": name: punctuation.definition.string.end.perl begin: \bqq\s*\[ beginCaptures: "0": name: punctuation.definition.string.begin.perl end: \] patterns: - include: "#escaped_char" - include: "#nested_brackets_interpolated" - include: "#variable" - name: string.quoted.other.qq-ltgt.perl endCaptures: "0": name: punctuation.definition.string.end.perl begin: \bqq\s*\< beginCaptures: "0": name: punctuation.definition.string.begin.perl end: \> patterns: - include: "#escaped_char" - include: "#nested_ltgt_interpolated" - include: "#variable" - name: string.interpolated.qx-paren.perl endCaptures: "0": name: punctuation.definition.string.end.perl begin: \bqx\s*\( beginCaptures: "0": name: punctuation.definition.string.begin.perl end: \) patterns: - include: "#escaped_char" - include: "#nested_parens_interpolated" - include: "#variable" - name: string.interpolated.qx-brace.perl endCaptures: "0": name: punctuation.definition.string.end.perl begin: \bqx\s*\{ beginCaptures: "0": name: punctuation.definition.string.begin.perl end: \} patterns: - include: "#escaped_char" - include: "#nested_braces_interpolated" - include: "#variable" - name: string.interpolated.qx-bracket.perl endCaptures: "0": name: punctuation.definition.string.end.perl begin: \bqx\s*\[ beginCaptures: "0": name: punctuation.definition.string.begin.perl end: \] patterns: - include: "#escaped_char" - include: "#nested_brackets_interpolated" - include: "#variable" - name: string.interpolated.qx-ltgt.perl endCaptures: "0": name: punctuation.definition.string.end.perl begin: \bqx\s*\< beginCaptures: "0": name: punctuation.definition.string.begin.perl end: \> patterns: - include: "#escaped_char" - include: "#nested_ltgt_interpolated" - include: "#variable" - name: string.quoted.other.q-paren.perl endCaptures: "0": name: punctuation.definition.string.end.perl begin: \bqw?\s*\( beginCaptures: "0": name: punctuation.definition.string.begin.perl end: \) patterns: - include: "#escaped_char" - include: "#nested_parens" - name: string.quoted.other.q-brace.perl endCaptures: "0": name: punctuation.definition.string.end.perl begin: \bqw?\s*\{ beginCaptures: "0": name: punctuation.definition.string.begin.perl end: \} patterns: - include: "#escaped_char" - include: "#nested_braces" - name: string.quoted.other.q-bracket.perl endCaptures: "0": name: punctuation.definition.string.end.perl begin: \bqw?\s*\[ beginCaptures: "0": name: punctuation.definition.string.begin.perl end: \] patterns: - include: "#escaped_char" - include: "#nested_brackets" - name: string.quoted.other.q-ltgt.perl endCaptures: "0": name: punctuation.definition.string.end.perl begin: \bqw?\s*\< beginCaptures: "0": name: punctuation.definition.string.begin.perl end: \> patterns: - include: "#escaped_char" - include: "#nested_ltgt" - name: string.unquoted.program-block.perl endCaptures: "0": name: punctuation.definition.string.end.perl begin: ^__\w+__ beginCaptures: "0": name: punctuation.definition.string.begin.perl end: $ - name: meta.format.perl begin: \b(format)\s+([A-Za-z]+)\s*= beginCaptures: "1": name: support.function.perl "2": name: entity.name.function.format.perl end: ^\.\s*$ patterns: - include: "#line_comment" - include: "#variable" - name: support.function.perl match: \b(ARGV|DATA|ENV|SIG|STDERR|STDIN|STDOUT|atan2|bind|binmode|bless|caller|chdir|chmod|chomp|chop|chown|chr|chroot|close|closedir|cmp|connect|cos|crypt|dbmclose|dbmopen|defined|delete|dump|each|endgrent|endhostent|endnetent|endprotoent|endpwent|endservent|eof|eq|eval|exec|exists|exp|fcntl|fileno|flock|fork|format|formline|ge|getc|getgrent|getgrgid|getgrnam|gethostbyaddr|gethostbyname|gethostent|getlogin|getnetbyaddr|getnetbyname|getnetent|getpeername|getpgrp|getppid|getpriority|getprotobyname|getprotobynumber|getprotoent|getpwent|getpwnam|getpwuid|getservbyname|getservbyport|getservent|getsockname|getsockopt|glob|gmtime|grep|gt|hex|import|index|int|ioctl|join|keys|kill|lc|lcfirst|le|length|link|listen|local|localtime|log|lstat|lt|m|map|mkdir|msgctl|msgget|msgrcv|msgsnd|ne|no|oct|open|opendir|ord|pack|pipe|pop|pos|print|printf|push|q|qq|quotemeta|qw|qx|rand|read|readdir|readlink|recv|ref|rename|reset|reverse|rewinddir|rindex|rmdir|s|scalar|seek|seekdir|semctl|semget|semop|send|setgrent|sethostent|setnetent|setpgrp|setpriority|setprotoent|setpwent|setservent|setsockopt|shift|shmctl|shmget|shmread|shmwrite|shutdown|sin|sleep|socket|socketpair|sort|splice|split|sprintf|sqrt|srand|stat|study|substr|symlink|syscall|sysopen|sysread|system|syswrite|tell|telldir|tie|tied|time|times|tr|truncate|uc|ucfirst|umask|undef|unlink|unpack|unshift|untie|utime|values|vec|waitpid|wantarray|warn|write|y|q|qw|qq|qx)\b foldingStopMarker: (\*/|^\s*(\}|\]|\))) keyEquivalent: ^~P comment: | # TODO: Include RegExp syntax