[gtksourceview: 6/13] javascript.lang (and family): Clean up regular expressions
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtksourceview: 6/13] javascript.lang (and family): Clean up regular expressions
- Date: Tue, 2 Jun 2020 18:35:01 +0000 (UTC)
commit 93095079eab32435ec9dbaec59a4759ded172bcb
Author: Jeffery To <jeffery to gmail com>
Date: Tue Jan 21 16:24:47 2020 +0800
javascript.lang (and family): Clean up regular expressions
* Remove unnecessary groupings
* Prefer non-capturing subpatterns/groupings
data/language-specs/javascript-expressions.lang | 36 +++++++++----------
data/language-specs/javascript-literals.lang | 22 +++++-------
data/language-specs/javascript-statements.lang | 12 +++----
data/language-specs/javascript.lang | 41 +++++++++-------------
data/language-specs/jsx.lang | 8 ++---
data/language-specs/objj.lang | 2 +-
data/language-specs/typescript-js-literals.lang | 36 +++----------------
data/language-specs/typescript-js-modules.lang | 8 ++---
data/language-specs/typescript-js-statements.lang | 14 ++++----
.../typescript-type-expressions.lang | 6 ++--
data/language-specs/typescript-type-literals.lang | 32 ++++++++---------
data/language-specs/typescript.lang | 22 +++++-------
12 files changed, 92 insertions(+), 147 deletions(-)
---
diff --git a/data/language-specs/javascript-expressions.lang b/data/language-specs/javascript-expressions.lang
index 57a27972..aebd66fd 100644
--- a/data/language-specs/javascript-expressions.lang
+++ b/data/language-specs/javascript-expressions.lang
@@ -391,7 +391,7 @@
<!-- shared between pre- and post-lhs expressions -->
<context id="_increment-decrement-operators" style-ref="js:increment-decrement-operator">
- <match>(\+\+|--)</match>
+ <match>\+\+|--</match>
</context> <!-- /_increment-decrement-operators -->
@@ -414,12 +414,10 @@
<context id="_unary-operators" style-ref="js:unary-operator">
<match extended="true">
- (
- \+ | # unary plus
- - | # unary negation
- ~ | # bitwise not
- ! # logical not
- )
+ \+ | # unary plus
+ - | # unary negation
+ ~ | # bitwise not
+ ! # logical not
</match>
</context> <!-- /_unary-operators -->
@@ -590,22 +588,20 @@
<!-- # Binary operators -->
<define-regex id="_keyword-binary-operator" extended="true">
- (?: \%[ (?: instanceof | in ) \%] )
+ \%[ (?: instanceof | in ) \%]
</define-regex> <!-- /_keyword-binary-operator -->
<!-- excluding comma operator -->
<define-regex id="_binary-operator" extended="true">
- (?:
- \*\* =? | # exponentiation (assignment) (ES2016)
- [+/*%-] =? | # arithmetic (assignment)
- [!=]==? | # equality
- && | \|\| | # logical
- \?\? | # nullish coalescing (ES2020)
- [&|^] =? | # bitwise logical (assignment)
- (?: << | >>>? ) =? | # bitwise shift (assignment)
- [<>]=? | # relational
- = # assignment
- )
+ \*\* =? | # exponentiation (assignment) (ES2016)
+ [+/*%-] =? | # arithmetic (assignment)
+ [!=]==? | # equality
+ && | \|\| | # logical
+ \?\? | # nullish coalescing (ES2020)
+ [&|^] =? | # bitwise logical (assignment)
+ (?: << | >>>? ) =? | # bitwise shift (assignment)
+ [<>]=? | # relational
+ = # assignment
</define-regex> <!-- /_binary-operator -->
<!-- ## Without comma -->
@@ -664,7 +660,7 @@
</context> <!-- /_keyword-binary-operators-with-comma -->
<context id="_binary-operators-with-comma">
- <start>(\%{_binary-operator}|,)</start>
+ <start>\%{_binary-operator}|,</start>
<end>\%{js:before-next-token}</end>
<include>
<context sub-pattern="0" where="start" style-ref="js:binary-operator"/>
diff --git a/data/language-specs/javascript-literals.lang b/data/language-specs/javascript-literals.lang
index d3c4d51b..0ac51209 100644
--- a/data/language-specs/javascript-literals.lang
+++ b/data/language-specs/javascript-literals.lang
@@ -76,9 +76,7 @@
</context> <!-- /_choice-decimal -->
<define-regex id="_decimal-integer" extended="true">
- (?>
- (?: [1-9][0-9]* | 0 )
- )
+ (?> [1-9][0-9]* | 0 )
</define-regex> <!-- /_decimal-integer -->
<!-- ES2020 -->
@@ -172,7 +170,7 @@
<context id="_legacy-octal-escape-sequences" style-ref="js:escape">
<match extended="true">
\\
- (
+ (?:
0 [0-7]{1,2} | # 0-padded number, not \0 (null character)
[1-3] [0-7]{0,2} | # max \377
[4-7] [0-7]{0,1}
@@ -183,13 +181,11 @@
<!-- <EscapeSequence> (preceeded by backslash) -->
<context id="_escape-sequences" style-ref="js:escape">
<match extended="true">
- (
- \%{js:unicode-escape} |
- \\
- (
- x[0-9a-fA-F]{2} | # hexadecimal escape
- [^1-9xu] # single character escape
- )
+ \%{js:unicode-escape} |
+ \\
+ (?:
+ x[0-9a-fA-F]{2} | # hexadecimal escape
+ [^1-9xu] # single character escape
)
</match>
</context> <!-- /_escape-sequences -->
@@ -314,7 +310,7 @@
<context ref="choice-string"/>
<define-regex id="_special-property-names" extended="true">
- (?: \%[ constructor \%] )
+ \%[ constructor \%]
</define-regex> <!-- /_special-property-names -->
<context id="_choice-special-property-name" style-ref="js:built-in-method" end-parent="true">
@@ -435,7 +431,7 @@
<!-- ES2018 -->
<context id="_unicode-property-escapes" style-ref="js:escape">
<match extended="true">
- \\ [pP] \{ ( [a-zA-Z_]+ = )? [a-zA-Z0-9_]+ \}
+ \\ [pP] \{ (?: [a-zA-Z_]+ = )? [a-zA-Z0-9_]+ \}
</match>
</context> <!-- /_unicode-property-escapes -->
diff --git a/data/language-specs/javascript-statements.lang b/data/language-specs/javascript-statements.lang
index 9ddcd754..8f8c8c1e 100644
--- a/data/language-specs/javascript-statements.lang
+++ b/data/language-specs/javascript-statements.lang
@@ -37,14 +37,10 @@
<!-- # Use strict directive -->
- <!-- apparently, back references are not supported -->
+ <!-- apparently, back references are not supported within the same
+ regex -->
<context id="_use-strict-directives" style-ref="js:directive">
- <start extended="true">
- (?:
- " use [ ] strict " |
- ' use [ ] strict '
- )
- </start>
+ <start>"use strict"|'use strict'</start>
<end>\%{js:statement-end}</end>
</context> <!-- /_use-strict-directives -->
@@ -753,7 +749,7 @@
-->
<define-regex id="_variable-declaration-keyword" extended="true">
- (?: \%[ (?: const | let | var ) \%] )
+ \%[ (?: const | let | var ) \%]
</define-regex> <!-- /_variable-declaration-keyword -->
<context id="_variable-declaration-item-content">
diff --git a/data/language-specs/javascript.lang b/data/language-specs/javascript.lang
index e6f27ff6..d0269216 100644
--- a/data/language-specs/javascript.lang
+++ b/data/language-specs/javascript.lang
@@ -191,12 +191,12 @@
<!-- <UnicodeEscapeSequence> -->
<define-regex id="unicode-escape" extended="true">
- (?: \\u (?: [0-9a-fA-F]{4} | \{ [0-9a-fA-F]{1,} \} ) )
+ \\u (?: [0-9a-fA-F]{4} | \{ [0-9a-fA-F]{1,} \} )
</define-regex> <!-- /unicode-escape -->
<!-- <IdentifierStart> -->
<define-regex id="identifier-start" extended="true">
- (?: \%{def:unicode-id-start} | [$_] | \%{unicode-escape} )
+ \%{def:unicode-id-start} | [$_] | \%{unicode-escape}
</define-regex> <!-- /identifier-start -->
<!-- for lookbehinds
@@ -205,17 +205,17 @@
U+200D Zero-width joiner <ZWJ>
-->
<define-regex id="identifier-char" extended="true">
- (?: \%{def:unicode-id-continue} | [$\x{200C}\x{200D}] )
+ \%{def:unicode-id-continue} | [$\x{200C}\x{200D}]
</define-regex> <!-- /identifier-char -->
<!-- <IdentifierPart> -->
<define-regex id="identifier-part" extended="true">
- (?: \%{identifier-char} | \%{unicode-escape} )
+ \%{identifier-char} | \%{unicode-escape}
</define-regex> <!-- /identifier-part -->
<!-- <IdentifierName> -->
<define-regex id="identifier" extended="true">
- (?: \%{identifier-start} \%{identifier-part}* )
+ \%{identifier-start} \%{identifier-part}*
</define-regex> <!-- /identifier-->
<!-- <WhiteSpace> -->
@@ -253,11 +253,11 @@
</define-regex> <!-- /before-next-token -->
<define-regex id="statement-end" extended="true">
- (?: ; | \%{before-next-token} )
+ ; | \%{before-next-token}
</define-regex> <!-- /statement-end -->
<define-regex id="statement-end-or-end-of-line" extended="true">
- (?: \%{statement-end} | $ )
+ \%{statement-end} | $
</define-regex> <!-- /statement-end-or-end-of-line -->
<!-- wherever this is used, the highlighting will be more brittle,
@@ -276,35 +276,28 @@
-->
<define-regex id="import-function-keyword-suffix" extended="true">
- (?:
- \%{optional-whitespace-or-comments}
- \(
- )
+ \%{optional-whitespace-or-comments} \(
</define-regex> <!-- /import-function-keyword-suffix -->
<define-regex id="new-target-object-keyword-suffix" extended="true">
- (?:
- \%{optional-whitespace-or-comments}
- \.
- \%{optional-whitespace-or-comments}
- target \%]
- )
+ \%{optional-whitespace-or-comments}
+ \.
+ \%{optional-whitespace-or-comments}
+ target \%]
</define-regex> <!-- /new-target-object-keyword-suffix -->
<!-- async function (ES2017)
no line terminator allowed between "async" and "function" -->
<define-regex id="function-expression-keyword" extended="true">
(?:
- (?:
- \%[ async \%]
- \%{optional-whitespace-or-comments}
- )?
- \%[ function \%]
- )
+ \%[ async \%]
+ \%{optional-whitespace-or-comments}
+ )?
+ \%[ function \%]
</define-regex> <!-- /function-expression-keyword -->
<define-regex id="class-expression-keyword" extended="true">
- (?: \%[ class \%] )
+ \%[ class \%]
</define-regex> <!-- /class-expression-keyword -->
<!-- ## Embedded lang hooks
diff --git a/data/language-specs/jsx.lang b/data/language-specs/jsx.lang
index c0f7acb7..a922980e 100644
--- a/data/language-specs/jsx.lang
+++ b/data/language-specs/jsx.lang
@@ -67,13 +67,13 @@
</include>
</context> <!-- /main-lang -->
- <define-regex id="_start-tag-start">(?:<(?!/))</define-regex>
+ <define-regex id="_start-tag-start"><(?!/)</define-regex>
<!-- # Names -->
<define-regex id="_identifier-part" extended="true">
- (?: \%{js:identifier-part} | - )
+ \%{js:identifier-part} | -
</define-regex> <!-- /_identifier-part -->
<!-- <JSXIdentifier> -->
@@ -92,7 +92,7 @@
<!-- <JSXNamespacedName> -->
<define-regex id="_namespaced-name" extended="true">
- (?: \%{_identifier} : \%{_identifier} )
+ \%{_identifier} : \%{_identifier}
</define-regex> <!-- /_namespaced-name -->
<context id="_choice-namespaced-name" end-parent="true">
@@ -102,7 +102,7 @@
<!-- <JSXMemberExpression> -->
<define-regex id="_member-expression" extended="true">
- (?: \%{_identifier} (?: \. \%{_identifier} )+ )
+ \%{_identifier} (?: \. \%{_identifier} )+
</define-regex> <!-- /_member-expression -->
<context id="_choice-member-expression" end-parent="true">
diff --git a/data/language-specs/objj.lang b/data/language-specs/objj.lang
index 0d8fa7d7..b99b0f98 100644
--- a/data/language-specs/objj.lang
+++ b/data/language-specs/objj.lang
@@ -400,7 +400,7 @@
<!-- ## Literals -->
<define-regex id="_at-function-keyword" extended="true">
- (?: @ (?: deref | ref ) \%] )
+ @ (?: deref | ref ) \%]
</define-regex> <!-- /_at-function-keyword -->
<context id="_choice-at-function-keyword" style-ref="js:keyword" end-parent="true">
diff --git a/data/language-specs/typescript-js-literals.lang b/data/language-specs/typescript-js-literals.lang
index 88e16467..60236814 100644
--- a/data/language-specs/typescript-js-literals.lang
+++ b/data/language-specs/typescript-js-literals.lang
@@ -45,13 +45,7 @@
<include>
<define-regex id="_decimal-digits" extended="true">
- (?>
- [0-9]
- (?:
- [0-9]+ |
- (?: _ [0-9] )+
- )*
- )
+ (?> [0-9] (?: [0-9]+ | (?: _ [0-9] )+ )* )
</define-regex> <!-- /_decimal-digits -->
<define-regex id="_decimal" extended="true">
@@ -74,9 +68,7 @@
</context> <!-- /_choice-decimal -->
<define-regex id="_decimal-integer" extended="true">
- (?>
- (?: [1-9] _? \%{_decimal-digits} | [0-9] )
- )
+ (?> [1-9] _? \%{_decimal-digits} | [0-9] )
</define-regex> <!-- /_decimal-integer -->
<context id="_choice-decimal-big-integer" style-ref="js:decimal" end-parent="true">
@@ -91,13 +83,7 @@
</context> <!-- /_choice-decimal-big-integer -->
<define-regex id="_binary-integer" extended="true">
- (?>
- 0 [bB] [01]
- (?:
- [01]+ |
- (?: _ [01] )+
- )*
- )
+ (?> 0 [bB] [01] (?: [01]+ | (?: _ [01] )+ )* )
</define-regex> <!-- /_binary-integer -->
<context id="_choice-binary-integer" style-ref="js:binary-integer" end-parent="true">
@@ -112,13 +98,7 @@
</context> <!-- /_choice-binary-integer -->
<define-regex id="_octal-integer" extended="true">
- (?>
- 0 [oO] [0-7]
- (?:
- [0-7]+ |
- (?: _ [0-7] )+
- )*
- )
+ (?> 0 [oO] [0-7] (?: [0-7]+ | (?: _ [0-7] )+ )* )
</define-regex> <!-- /_octal-integer -->
<context id="_choice-octal-integer" style-ref="js:octal-integer" end-parent="true">
@@ -133,13 +113,7 @@
</context> <!-- /_choice-octal-integer -->
<define-regex id="_hex-integer" extended="true">
- (?>
- 0 [xX] [0-9a-fA-F]
- (?:
- [0-9a-fA-F]+ |
- (?: _ [0-9a-fA-F] )+
- )*
- )
+ (?> 0 [xX] [0-9a-fA-F] (?: [0-9a-fA-F]+ | (?: _ [0-9a-fA-F] )+ )* )
</define-regex> <!-- /_hex-integer -->
<context id="_choice-hex-integer" style-ref="js:hex-integer" end-parent="true">
diff --git a/data/language-specs/typescript-js-modules.lang b/data/language-specs/typescript-js-modules.lang
index e7505bc3..689d2124 100644
--- a/data/language-specs/typescript-js-modules.lang
+++ b/data/language-specs/typescript-js-modules.lang
@@ -196,11 +196,9 @@
<!-- ## Import declaration -->
<define-regex id="_import-declaration-keyword" extended="true">
- (?:
- \%[ import \%]
- (?! \%{js:import-function-keyword-suffix} )
- (?! \%{typescript:import-meta-object-keyword-suffix} )
- )
+ \%[ import \%]
+ (?! \%{js:import-function-keyword-suffix} )
+ (?! \%{typescript:import-meta-object-keyword-suffix} )
</define-regex>
<!-- <ImportDeclaration> -->
diff --git a/data/language-specs/typescript-js-statements.lang
b/data/language-specs/typescript-js-statements.lang
index fe2390d0..70e13fb1 100644
--- a/data/language-specs/typescript-js-statements.lang
+++ b/data/language-specs/typescript-js-statements.lang
@@ -72,7 +72,7 @@
-->
<define-regex id="_ambient-declaration-keyword" extended="true">
- (?: \%[ declare \%] )
+ \%[ declare \%]
</define-regex> <!-- /_ambient-declaration-keyword -->
<context id="_choice-global-augmentation" style-ref="typescript:global-augmentation" end-parent="true">
@@ -136,7 +136,7 @@
-->
<define-regex id="_const-declaration-keyword" extended="true">
- (?: \%[ const \%] )
+ \%[ const \%]
</define-regex> <!-- /_const-declaration-keyword -->
<context id="_const-declaration-content">
@@ -182,7 +182,7 @@
-->
<define-regex id="_enum-declaration-keyword" extended="true">
- (?: \%[ enum \%] )
+ \%[ enum \%]
</define-regex> <!-- /_enum-declaration-keyword -->
<context id="_enum-member-content">
@@ -271,7 +271,7 @@
-->
<define-regex id="_interface-declaration-keyword" extended="true">
- (?: \%[ interface \%] )
+ \%[ interface \%]
</define-regex> <!-- /_interface-declaration-keyword -->
<context id="_interface-extends-clause" once-only="true">
@@ -338,7 +338,7 @@
-->
<define-regex id="_module-declaration-keyword" extended="true">
- (?: \%[ module \%] )
+ \%[ module \%]
</define-regex> <!-- /_module-declaration-keyword -->
<context id="_module-identifier-or-string" once-only="true">
@@ -401,7 +401,7 @@
-->
<define-regex id="_namespace-declaration-keyword" extended="true">
- (?: \%[ namespace \%] )
+ \%[ namespace \%]
</define-regex> <!-- /_namespace-declaration-keyword -->
<context id="_namespace-body" once-only="true">
@@ -468,7 +468,7 @@
-->
<define-regex id="_type-alias-declaration-keyword" extended="true">
- (?: \%[ type \%] )
+ \%[ type \%]
</define-regex> <!-- /_type-alias-declaration-keyword -->
<context id="_type-alias-value" once-only="true">
diff --git a/data/language-specs/typescript-type-expressions.lang
b/data/language-specs/typescript-type-expressions.lang
index 558ce1a0..a3cedbbf 100644
--- a/data/language-specs/typescript-type-expressions.lang
+++ b/data/language-specs/typescript-type-expressions.lang
@@ -115,10 +115,8 @@
<!-- this will only catch simple cases :-( -->
<context id="_choice-type-grouping-this-parameter-or-binding" end-parent="true">
<start extended="true">
- (?:
- (?<= \.\.\. ) (?= \%{js:identifier} ) | # adding js:optional-whitespace-or-comments in between
doesn't work
- (?= \%{js:identifier} \%{js:optional-whitespace-or-comments} [?:,] )
- )
+ (?<= \.\.\. ) (?= \%{js:identifier} ) | # adding js:optional-whitespace-or-comments in between
doesn't work
+ (?= \%{js:identifier} \%{js:optional-whitespace-or-comments} [?:,] )
</start>
<end>\%{js:before-next-token}</end>
<include>
diff --git a/data/language-specs/typescript-type-literals.lang
b/data/language-specs/typescript-type-literals.lang
index 960c8f9c..2ba3ad51 100644
--- a/data/language-specs/typescript-type-literals.lang
+++ b/data/language-specs/typescript-type-literals.lang
@@ -38,24 +38,22 @@
-->
<define-regex id="_basic-types" extended="true">
+ \%[
(?:
- \%[
- (?:
- any |
- bigint |
- boolean |
- never |
- null |
- number |
- object |
- string |
- symbol |
- undefined |
- unknown |
- void
- )
- \%]
+ any |
+ bigint |
+ boolean |
+ never |
+ null |
+ number |
+ object |
+ string |
+ symbol |
+ undefined |
+ unknown |
+ void
)
+ \%]
</define-regex> <!-- /_basic-types -->
<!-- <PredefinedType> -->
@@ -72,7 +70,7 @@
-->
<define-regex id="_boolean-types" extended="true">
- (?: \%[ (?: false | true ) \%] )
+ \%[ (?: false | true ) \%]
</define-regex> <!-- /_boolean-literal-types -->
<!-- <PredefinedType> -->
diff --git a/data/language-specs/typescript.lang b/data/language-specs/typescript.lang
index e065ec7f..f3a25c52 100644
--- a/data/language-specs/typescript.lang
+++ b/data/language-specs/typescript.lang
@@ -112,12 +112,10 @@
-->
<define-regex id="import-meta-object-keyword-suffix" extended="true">
- (?:
- \%{js:optional-whitespace-or-comments}
- \.
- \%{js:optional-whitespace-or-comments}
- meta \%]
- )
+ \%{js:optional-whitespace-or-comments}
+ \.
+ \%{js:optional-whitespace-or-comments}
+ meta \%]
</define-regex> <!-- /import-meta-object-keyword-suffix -->
<!-- no line terminator allowed between "abstract" and "class"
@@ -125,12 +123,10 @@
abstract class expressions -->
<define-regex id="class-expression-keyword" extended="true">
(?:
- (?:
- \%[ abstract \%]
- \%{js:optional-whitespace-or-comments}
- )?
- \%[ class \%]
- )
+ \%[ abstract \%]
+ \%{js:optional-whitespace-or-comments}
+ )?
+ \%[ class \%]
</define-regex> <!-- / -->
<context id="js-ordered-string" once-only="true">
@@ -200,7 +196,7 @@
<context id="_triple-slash-directives" style-ref="js:directive" end-at-line-end="true" class="comment">
<start case-sensitive="false" extended="true">
/// \%{js:whitespace}* <
- (
+ (?:
amd-module |
amd-dependency |
reference
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]