[gtksourceview: 6/13] javascript.lang (and family): Clean up regular expressions



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
-        &amp;&amp; | \|\| |                  # logical
-        \?\? |                               # nullish coalescing (ES2020)
-        [&amp;|^] =? |                       # bitwise logical (assignment)
-        (?: &lt;&lt; | &gt;&gt;&gt;? ) =? |  # bitwise shift (assignment)
-        [&lt;&gt;]=? |                       # relational
-        =                                    # assignment
-      )
+      \*\* =? |                            # exponentiation (assignment) (ES2016)
+      [+/*%-] =? |                         # arithmetic (assignment)
+      [!=]==? |                            # equality
+      &amp;&amp; | \|\| |                  # logical
+      \?\? |                               # nullish coalescing (ES2020)
+      [&amp;|^] =? |                       # bitwise logical (assignment)
+      (?: &lt;&lt; | &gt;&gt;&gt;? ) =? |  # bitwise shift (assignment)
+      [&lt;&gt;]=? |                       # 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">
-          (?&gt;
-            (?: [1-9][0-9]* | 0 )
-          )
+          (?&gt; [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">(?:&lt;(?!/))</define-regex>
+    <define-regex id="_start-tag-start">&lt;(?!/)</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">
-          (?&gt;
-            [0-9]
-            (?:
-              [0-9]+ |
-              (?: _ [0-9] )+
-            )*
-          )
+          (?&gt; [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">
-          (?&gt;
-            (?: [1-9] _? \%{_decimal-digits} | [0-9] )
-          )
+          (?&gt; [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">
-          (?&gt;
-            0 [bB] [01]
-            (?:
-              [01]+ |
-              (?: _ [01] )+
-            )*
-          )
+          (?&gt; 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">
-          (?&gt;
-            0 [oO] [0-7]
-            (?:
-              [0-7]+ |
-              (?: _ [0-7] )+
-            )*
-          )
+          (?&gt; 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">
-          (?&gt;
-            0 [xX] [0-9a-fA-F]
-            (?:
-              [0-9a-fA-F]+ |
-              (?: _ [0-9a-fA-F] )+
-            )*
-          )
+          (?&gt; 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">
-        (?:
-          (?&lt;= \.\.\. ) (?= \%{js:identifier} ) |  # adding js:optional-whitespace-or-comments in between 
doesn't work
-          (?= \%{js:identifier} \%{js:optional-whitespace-or-comments} [?:,] )
-        )
+        (?&lt;= \.\.\. ) (?= \%{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}* &lt;
-        (
+        (?:
           amd-module |
           amd-dependency |
           reference


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]