[gtksourceview: 7/14] javascript.lang, typescript.lang: Centralize keyword regexes
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtksourceview: 7/14] javascript.lang, typescript.lang: Centralize keyword regexes
- Date: Thu, 11 Jun 2020 17:26:53 +0000 (UTC)
commit 4ad9814eded1be81b15caddba57949f9ef45374a
Author: Jeffery To <jeffery to gmail com>
Date: Mon Jun 8 06:51:02 2020 +0800
javascript.lang, typescript.lang: Centralize keyword regexes
Instead of spreading literal keywords in different files, define keyword
regexes in the main language definition files (javascript.lang,
typescript.lang).
Some keyword regexes are reused in different places; having a general
rule (all keywords defined in one place) should make maintenance easier.
data/language-specs/javascript-expressions.lang | 40 ++--
.../javascript-functions-classes.lang | 47 ++---
data/language-specs/javascript-literals.lang | 11 +-
data/language-specs/javascript-modules.lang | 28 +--
data/language-specs/javascript-statements.lang | 86 +++------
data/language-specs/javascript-values.lang | 13 +-
data/language-specs/javascript.lang | 202 ++++++++++++++++++++-
data/language-specs/typescript-js-expressions.lang | 4 +-
.../typescript-js-functions-classes.lang | 36 ++--
data/language-specs/typescript-js-modules.lang | 16 +-
data/language-specs/typescript-js-statements.lang | 56 ++----
data/language-specs/typescript-jsx.lang | 6 +-
.../typescript-type-expressions.lang | 32 +---
data/language-specs/typescript-type-generics.lang | 10 +-
data/language-specs/typescript-type-literals.lang | 55 +++---
data/language-specs/typescript.lang | 139 ++++++++++++--
16 files changed, 458 insertions(+), 323 deletions(-)
---
diff --git a/data/language-specs/javascript-expressions.lang b/data/language-specs/javascript-expressions.lang
index 772b2d61..db13c1d8 100644
--- a/data/language-specs/javascript-expressions.lang
+++ b/data/language-specs/javascript-expressions.lang
@@ -91,9 +91,7 @@
<include>
<context id="_import-meta-expression-keyword" style-ref="js:keyword" once-only="true">
- <match extended="true">
- \%{js:keyword-start} meta \%{js:keyword-end}
- </match>
+ <match>\%{js:meta-keyword}</match>
</context> <!-- /_import-meta-expression-keyword -->
</include>
@@ -103,9 +101,7 @@
</context> <!-- /_choice-import-meta-expression -->
<context id="_choice-import-expression" end-parent="true">
- <start extended="true">
- \%{js:keyword-start} import \%{js:keyword-end}
- </start>
+ <start>\%{js:import-keyword}</start>
<end>\%{js:before-next-token}</end>
<include>
<context sub-pattern="0" where="start" style-ref="js:keyword"/>
@@ -142,9 +138,7 @@
<include>
<context id="_new-target-expression-keyword" style-ref="js:keyword" once-only="true">
- <match extended="true">
- \%{js:keyword-start} target \%{js:keyword-end}
- </match>
+ <match>\%{js:target-keyword}</match>
</context> <!-- /_new-target-expression-keyword -->
</include>
@@ -169,9 +163,7 @@
</context> <!-- /_choice-new-object-expression -->
<context id="_choice-new-expression" end-parent="true">
- <start extended="true">
- \%{js:keyword-start} new \%{js:keyword-end}
- </start>
+ <start>\%{js:new-keyword}</start>
<end>\%{js:before-next-token}</end>
<include>
<context sub-pattern="0" where="start" style-ref="js:keyword"/>
@@ -501,7 +493,7 @@
<!-- ES2017, cannot be followed by line terminator -->
<context id="_async-keywords" style-ref="js:keyword">
<match extended="true">
- \%{js:keyword-start} async \%{js:keyword-end}
+ \%{js:async-keyword}
# preceeds arrow function
(?=
\%{js:optional-whitespace-or-comments}
@@ -511,21 +503,19 @@
)
)
# does not preceed "function" (leave to function expression)
- (?!
- \%{js:optional-whitespace-or-comments}
- \%{js:keyword-start} function \%{js:keyword-end}
- )
+ (?! \%{js:optional-whitespace-or-comments} \%{js:function-keyword} )
</match>
</context> <!-- /_async-keywords -->
+ <!-- await: ES2017 -->
<context id="_keyword-unary-operators" style-ref="js:keyword">
- <prefix>\%{js:keyword-start}</prefix>
- <suffix>\%{js:keyword-end}</suffix>
- <keyword>await</keyword> <!-- ES2017 -->
- <keyword>delete</keyword>
- <keyword>typeof</keyword>
- <keyword>void</keyword>
- <keyword>yield</keyword>
+ <match extended="true">
+ \%{js:await-keyword} |
+ \%{js:delete-keyword} |
+ \%{js:typeof-keyword} |
+ \%{js:void-keyword} |
+ \%{js:yield-keyword}
+ </match>
</context> <!-- /_keyword-unary-operators -->
<context ref="js:generator-modifier"/> <!-- for yield* -->
@@ -705,7 +695,7 @@
<!-- # Binary operators -->
<define-regex id="_keyword-binary-operator" extended="true">
- \%{js:keyword-start} (?: instanceof | in ) \%{js:keyword-end}
+ \%{js:instanceof-keyword} | \%{js:in-keyword}
</define-regex> <!-- /_keyword-binary-operator -->
<!-- excluding comma operator -->
diff --git a/data/language-specs/javascript-functions-classes.lang
b/data/language-specs/javascript-functions-classes.lang
index 067e5a9f..8e1307c7 100644
--- a/data/language-specs/javascript-functions-classes.lang
+++ b/data/language-specs/javascript-functions-classes.lang
@@ -44,9 +44,7 @@
<!-- ## Function expression keyword -->
<context id="_function-expression-async-keyword" style-ref="js:keyword" once-only="true">
- <match extended="true">
- \%{js:keyword-start} async \%{js:keyword-end}
- </match>
+ <match>\%{js:async-keyword}</match>
</context> <!-- /_function-expression-async-keyword -->
<context id="_ordered-function-expression-async-keyword" once-only="true">
@@ -58,9 +56,7 @@
</context> <!-- /_ordered-function-expression-async-keyword -->
<context id="_function-expression-function-keyword" style-ref="js:keyword" once-only="true">
- <match extended="true">
- \%{js:keyword-start} function \%{js:keyword-end}
- </match>
+ <match>\%{js:function-keyword}</match>
</context> <!-- /_function-expression-function-keyword -->
<context id="_ordered-function-expression-function-keyword" once-only="true">
@@ -242,24 +238,24 @@
<include>
<context id="_choice-method-definition-modifier-keyword" style-ref="js:keyword"
end-parent="true">
- <prefix>\%{js:keyword-start}</prefix>
- <suffix>\%{js:keyword-end}</suffix>
- <keyword>get</keyword>
- <keyword>set</keyword>
+ <start extended="true">
+ (?= \%{js:get-keyword} | \%{js:set-keyword} )
+ </start>
+ <end extended="true">
+ \%{js:get-keyword} | \%{js:set-keyword}
+ </end>
</context> <!-- /_choice-method-definition-modifier-keyword -->
<!-- ES2017, cannot be followed by line terminator -->
<context id="_choice-async-method-definition-modifier-keyword" style-ref="js:keyword"
end-parent="true">
- <match extended="true">
- \%{js:keyword-start} async \%{js:keyword-end}
+ <start extended="true">
(?=
+ \%{js:async-keyword}
\%{js:optional-whitespace-or-comments}
- (?:
- \%{js:identifier-start} |
- \%{js:generator-modifier}
- )
+ (?: \%{js:identifier-start} | \%{js:generator-modifier} )
)
- </match>
+ </start>
+ <end>\%{js:async-keyword}</end>
</context> <!-- /_choice-async-method-definition-modifier-keyword -->
</include>
@@ -328,9 +324,7 @@
<include>
<context id="_choice-class-optional-name-ignore-extends" end-parent="true">
- <start extended="true">
- (?= \%{js:keyword-start} extends \%{js:keyword-end} )
- </start>
+ <start>(?=\%{js:extends-keyword})</start>
<end>\%{def:always-match}</end>
</context> <!-- /_choice-class-optional-name-ignore-extends -->
@@ -352,9 +346,7 @@
<!-- ## Class extends clause -->
<context id="_class-extends-clause" once-only="true">
- <start extended="true">
- \%{js:keyword-start} extends \%{js:keyword-end}
- </start>
+ <start>\%{js:extends-keyword}</start>
<end>\%{js:before-next-token}</end>
<include>
<context sub-pattern="0" where="start" style-ref="js:keyword"/>
@@ -391,9 +383,8 @@
<include>
<context id="_choice-class-body-member-modifier-keyword" style-ref="js:keyword"
end-parent="true">
- <prefix>\%{js:keyword-start}</prefix>
- <suffix>\%{js:keyword-end}</suffix>
- <keyword>static</keyword>
+ <start>(?=\%{js:static-keyword})</start>
+ <end>\%{js:static-keyword}</end>
</context> <!-- /_choice-class-body-member-modifier-keyword -->
</include>
@@ -455,7 +446,7 @@
<!-- <ClassExpression> / <ClassDeclaration> -->
<context id="choice-class-expression" style-ref="js:class-expression" end-parent="true">
- <start>\%{js:class-expression-keyword}</start>
+ <start>\%{js:class-keyword}</start>
<end>\%{js:before-next-token}</end>
<include>
<context sub-pattern="0" where="start" style-ref="js:keyword"/>
@@ -475,7 +466,7 @@
<!-- <ClassExpression> / <ClassDeclaration> -->
<context id="choice-class-expression-required-name" style-ref="js:class-expression" end-parent="true">
- <start>\%{js:class-expression-keyword}</start>
+ <start>\%{js:class-keyword}</start>
<end>\%{js:before-next-token}</end>
<include>
<context sub-pattern="0" where="start" style-ref="js:keyword"/>
diff --git a/data/language-specs/javascript-literals.lang b/data/language-specs/javascript-literals.lang
index c711cd71..56b11466 100644
--- a/data/language-specs/javascript-literals.lang
+++ b/data/language-specs/javascript-literals.lang
@@ -39,17 +39,14 @@
<!-- <NullLiteral> -->
<context id="null-value" style-ref="js:null-value">
- <match extended="true">
- \%{js:keyword-start} null \%{js:keyword-end}
- </match>
+ <match>\%{js:null-keyword}</match>
</context> <!-- /null-value -->
<!-- <BooleanLiteral> -->
<context id="boolean" style-ref="js:boolean">
- <prefix>\%{js:keyword-start}</prefix>
- <suffix>\%{js:keyword-end}</suffix>
- <keyword>false</keyword>
- <keyword>true</keyword>
+ <match extended="true">
+ \%{js:false-keyword} | \%{js:true-keyword}
+ </match>
</context> <!-- /boolean -->
diff --git a/data/language-specs/javascript-modules.lang b/data/language-specs/javascript-modules.lang
index 89c93cb9..8517403a 100644
--- a/data/language-specs/javascript-modules.lang
+++ b/data/language-specs/javascript-modules.lang
@@ -43,9 +43,7 @@
-->
<context id="_from-module" once-only="true">
- <start extended="true">
- \%{js:keyword-start} from \%{js:keyword-end}
- </start>
+ <start>\%{js:from-keyword}</start>
<end>\%{js:before-next-token}</end>
<include>
<context sub-pattern="0" where="start" style-ref="js:keyword"/>
@@ -76,9 +74,7 @@
-->
<context id="_as-namespace" once-only="true">
- <start extended="true">
- \%{js:keyword-start} as \%{js:keyword-end}
- </start>
+ <start>\%{js:as-keyword}</start>
<end>\%{js:before-next-token}</end>
<include>
<context sub-pattern="0" where="start" style-ref="js:keyword"/>
@@ -140,9 +136,7 @@
<include>
<context id="_name-group-keywords" style-ref="js:keyword">
- <prefix>\%{js:keyword-start}</prefix>
- <suffix>\%{js:keyword-end}</suffix>
- <keyword>default</keyword>
+ <match>\%{js:default-keyword}</match>
</context> <!-- /_name-group-keywords -->
<context ref="js:identifier"/>
@@ -153,9 +147,7 @@
</context> <!-- /_name-group-identifier -->
<context id="_name-group-as-identifier" once-only="true">
- <start extended="true">
- \%{js:keyword-start} as \%{js:keyword-end}
- </start>
+ <start>\%{js:as-keyword}</start>
<end>\%{js:before-next-token}</end>
<include>
<context sub-pattern="0" where="start" style-ref="js:keyword"/>
@@ -258,9 +250,7 @@
-->
<context id="_choice-export-default" end-parent="true">
- <start extended="true">
- \%{js:keyword-start} default \%{js:keyword-end}
- </start>
+ <start>\%{js:default-keyword}</start>
<end>\%{js:statement-end}</end>
<include>
<context sub-pattern="0" where="start" style-ref="js:keyword"/>
@@ -289,9 +279,7 @@
<!-- <ExportDeclaration> -->
<context id="export-declarations" style-ref="js:export-import-declaration">
- <start extended="true">
- \%{js:keyword-start} export \%{js:keyword-end}
- </start>
+ <start>\%{js:export-keyword}</start>
<end>\%{js:before-next-token}</end>
<include>
<context sub-pattern="0" where="start" style-ref="js:keyword"/>
@@ -406,9 +394,7 @@
<!-- <ImportDeclaration> -->
<!-- also matches import() and import.meta -->
<context id="import-declarations" style-ref="js:export-import-declaration">
- <start extended="true">
- \%{js:keyword-start} import \%{js:keyword-end}
- </start>
+ <start>\%{js:import-keyword}</start>
<end>\%{js:before-next-token}</end>
<include>
<context sub-pattern="0" where="start" style-ref="js:keyword"/>
diff --git a/data/language-specs/javascript-statements.lang b/data/language-specs/javascript-statements.lang
index e37f0565..fe225f49 100644
--- a/data/language-specs/javascript-statements.lang
+++ b/data/language-specs/javascript-statements.lang
@@ -117,9 +117,7 @@
<!-- <BreakStatement> -->
<context id="_break-statements" style-ref="js:break-statement">
- <start extended="true">
- \%{js:keyword-start} break \%{js:keyword-end}
- </start>
+ <start>\%{js:break-keyword}</start>
<end>\%{js:statement-end-or-end-of-line}</end>
<include>
<context sub-pattern="0" where="start" style-ref="js:keyword"/>
@@ -143,7 +141,7 @@
<!-- <ClassExpression> / <ClassDeclaration> -->
<context id="_class-declarations">
- <start>(?=\%{js:class-expression-keyword})</start>
+ <start>(?=\%{js:class-keyword})</start>
<end>\%{js:before-next-token}</end>
<include>
<context ref="js:embedded-lang-hooks"/>
@@ -167,9 +165,7 @@
<!-- <ContinueStatement> -->
<context id="_continue-statements" style-ref="js:continue-statement">
- <start extended="true">
- \%{js:keyword-start} continue \%{js:keyword-end}
- </start>
+ <start>\%{js:continue-keyword}</start>
<end>\%{js:statement-end-or-end-of-line}</end>
<include>
<context sub-pattern="0" where="start" style-ref="js:keyword"/>
@@ -193,9 +189,7 @@
<!-- <DebuggerStatement> -->
<context id="_debugger-statements" style-ref="js:debugger-statement">
- <start extended="true">
- \%{js:keyword-start} debugger \%{js:keyword-end}
- </start>
+ <start>\%{js:debugger-keyword}</start>
<end>\%{js:statement-end}</end>
<include>
<context sub-pattern="0" where="start" style-ref="js:keyword"/>
@@ -250,10 +244,10 @@
<context id="_for-statement-modifier-content">
<include>
+ <!-- await: ES2018 -->
<context id="_choice-for-statement-modifier-keyword" style-ref="js:keyword" end-parent="true">
- <prefix>\%{js:keyword-start}</prefix>
- <suffix>\%{js:keyword-end}</suffix>
- <keyword>await</keyword> <!-- ES2018 -->
+ <start>(?=\%{js:await-keyword})</start>
+ <end>\%{js:await-keyword}</end>
</context> <!-- /_choice-for-statement-modifier-keyword -->
</include>
@@ -326,9 +320,7 @@
</context> <!-- /_for-statement-test -->
<context id="_for-statement-in" once-only="true">
- <start extended="true">
- \%{js:keyword-start} in \%{js:keyword-end}
- </start>
+ <start>\%{js:in-keyword}</start>
<end>\%{js:before-next-token}</end>
<include>
<context sub-pattern="0" where="start" style-ref="js:keyword"/>
@@ -345,9 +337,7 @@
</context> <!-- /_for-statement-in -->
<context id="_for-statement-of" once-only="true">
- <start extended="true">
- \%{js:keyword-start} of \%{js:keyword-end}
- </start>
+ <start>\%{js:of-keyword}</start>
<end>\%{js:before-next-token}</end>
<include>
<context sub-pattern="0" where="start" style-ref="js:keyword"/>
@@ -391,9 +381,7 @@
<!-- <IterationStatement> (part of) -->
<context id="_for-statements" style-ref="js:for-statement">
- <start extended="true">
- \%{js:keyword-start} for \%{js:keyword-end}
- </start>
+ <start>\%{js:for-keyword}</start>
<end>\%{js:before-next-token}</end>
<include>
<context sub-pattern="0" where="start" style-ref="js:keyword"/>
@@ -442,9 +430,7 @@
<!-- <IfStatement> (part of) -->
<context id="_if-statements" style-ref="js:if-statement">
- <start extended="true">
- \%{js:keyword-start} if \%{js:keyword-end}
- </start>
+ <start>\%{js:if-keyword}</start>
<end>\%{js:before-next-token}</end>
<include>
<context sub-pattern="0" where="start" style-ref="js:keyword"/>
@@ -462,9 +448,7 @@
<!-- <IfStatement> (part of) -->
<context id="_else-statements" style-ref="js:else-statement">
- <start extended="true">
- \%{js:keyword-start} else \%{js:keyword-end}
- </start>
+ <start>\%{js:else-keyword}</start>
<end>\%{js:before-next-token}</end>
<include>
<context sub-pattern="0" where="start" style-ref="js:keyword"/>
@@ -524,9 +508,7 @@
<!-- <ReturnStatement> -->
<context id="_return-statements" style-ref="js:return-statement">
- <start extended="true">
- \%{js:keyword-start} return \%{js:keyword-end}
- </start>
+ <start>\%{js:return-keyword}</start>
<end>\%{js:statement-end-or-end-of-line}</end>
<include>
<context sub-pattern="0" where="start" style-ref="js:keyword"/>
@@ -553,9 +535,7 @@
-->
<context id="_case-clauses">
- <start extended="true">
- \%{js:keyword-start} case \%{js:keyword-end}
- </start>
+ <start>\%{js:case-keyword}</start>
<end>:</end>
<include>
<context sub-pattern="0" where="start" style-ref="js:keyword"/>
@@ -572,9 +552,7 @@
</context> <!-- /_case-clauses -->
<context id="_default-clauses">
- <start extended="true">
- \%{js:keyword-start} default \%{js:keyword-end}
- </start>
+ <start>\%{js:default-keyword}</start>
<end>:</end>
<include>
<context sub-pattern="0" where="start" style-ref="js:keyword"/>
@@ -614,9 +592,7 @@
<!-- <SwitchStatement> -->
<context id="_switch-statements" style-ref="js:switch-statement">
- <start extended="true">
- \%{js:keyword-start} switch \%{js:keyword-end}
- </start>
+ <start>\%{js:switch-keyword}</start>
<end>\%{js:before-next-token}</end>
<include>
<context sub-pattern="0" where="start" style-ref="js:keyword"/>
@@ -641,9 +617,7 @@
<!-- <ThrowStatement> -->
<context id="_throw-statements" style-ref="js:throw-statement">
- <start extended="true">
- \%{js:keyword-start} throw \%{js:keyword-end}
- </start>
+ <start>\%{js:throw-keyword}</start>
<end>\%{js:statement-end-or-end-of-line}</end>
<include>
<context sub-pattern="0" where="start" style-ref="js:keyword"/>
@@ -691,9 +665,7 @@
<!-- <TryStatement> -->
<context id="_try-statements" style-ref="js:try-catch-statement">
- <start extended="true">
- \%{js:keyword-start} try \%{js:keyword-end}
- </start>
+ <start>\%{js:try-keyword}</start>
<end>\%{js:before-next-token}</end>
<include>
<context sub-pattern="0" where="start" style-ref="js:keyword"/>
@@ -736,9 +708,7 @@
<!-- <Catch> -->
<context id="_catch-statements" style-ref="js:try-catch-statement">
- <start extended="true">
- \%{js:keyword-start} catch \%{js:keyword-end}
- </start>
+ <start>\%{js:catch-keyword}</start>
<end>\%{js:before-next-token}</end>
<include>
<context sub-pattern="0" where="start" style-ref="js:keyword"/>
@@ -757,9 +727,7 @@
<!-- <Finally> -->
<context id="_finally-statements" style-ref="js:try-catch-statement">
- <start extended="true">
- \%{js:keyword-start} finally \%{js:keyword-end}
- </start>
+ <start>\%{js:finally-keyword}</start>
<end>\%{js:before-next-token}</end>
<include>
<context sub-pattern="0" where="start" style-ref="js:keyword"/>
@@ -784,7 +752,7 @@
-->
<define-regex id="_variable-declaration-keyword" extended="true">
- \%{js:keyword-start} (?: const | let | var ) \%{js:keyword-end}
+ \%{js:const-keyword} | \%{js:let-keyword} | \%{js:var-keyword}
</define-regex> <!-- /_variable-declaration-keyword -->
<context id="_variable-declaration-item-content">
@@ -865,9 +833,7 @@
<!-- <IterationStatement> (part of) -->
<context id="_while-statements" style-ref="js:while-statement">
- <start extended="true">
- \%{js:keyword-start} while \%{js:keyword-end}
- </start>
+ <start>\%{js:while-keyword}</start>
<end>\%{js:statement-end}</end>
<include>
<context sub-pattern="0" where="start" style-ref="js:keyword"/>
@@ -885,9 +851,7 @@
<!-- <IterationStatement> (part of) -->
<context id="_do-statements" style-ref="js:while-statement">
- <start extended="true">
- \%{js:keyword-start} do \%{js:keyword-end}
- </start>
+ <start>\%{js:do-keyword}</start>
<end>\%{js:before-next-token}</end>
<include>
<context sub-pattern="0" where="start" style-ref="js:keyword"/>
@@ -908,9 +872,7 @@
<!-- <WithStatement> -->
<context id="_with-statements" style-ref="js:with-statement">
- <start extended="true">
- \%{js:keyword-start} with \%{js:keyword-end}
- </start>
+ <start>\%{js:with-keyword}</start>
<end>\%{js:before-next-token}</end>
<include>
<context sub-pattern="0" where="start" style-ref="js:keyword"/>
diff --git a/data/language-specs/javascript-values.lang b/data/language-specs/javascript-values.lang
index 4ee2b319..911a3e7c 100644
--- a/data/language-specs/javascript-values.lang
+++ b/data/language-specs/javascript-values.lang
@@ -121,13 +121,14 @@
<keyword>WebAssembly</keyword>
</context> <!-- /_objects -->
+ <!-- globalThis: ES2020 -->
<context id="_object-keywords" style-ref="js:keyword">
- <prefix>\%{js:keyword-start}</prefix>
- <suffix>\%{js:keyword-end}</suffix>
- <keyword>arguments</keyword>
- <keyword>globalThis</keyword> <!-- ES2020 -->
- <keyword>super</keyword>
- <keyword>this</keyword>
+ <match extended="true">
+ \%{js:keyword-start} arguments \%{js:keyword-end} |
+ \%{js:keyword-start} globalThis \%{js:keyword-end} |
+ \%{js:super-keyword} |
+ \%{js:this-keyword}
+ </match>
</context> <!-- /_object-keywords -->
</include>
diff --git a/data/language-specs/javascript.lang b/data/language-specs/javascript.lang
index f2736729..eb63b5c6 100644
--- a/data/language-specs/javascript.lang
+++ b/data/language-specs/javascript.lang
@@ -295,20 +295,204 @@
(?! \%{identifier-part} | \. )
</define-regex> <!-- /number-end -->
+ <!-- these regexes are keywords that appear as literals in the
+ grammar -->
+
+ <define-regex id="as-keyword" extended="true">
+ \%{keyword-start} as \%{keyword-end}
+ </define-regex> <!-- /as-keyword -->
+
+ <define-regex id="async-keyword" extended="true">
+ \%{keyword-start} async \%{keyword-end}
+ </define-regex> <!-- /async-keyword -->
+
+ <define-regex id="await-keyword" extended="true">
+ \%{keyword-start} await \%{keyword-end}
+ </define-regex> <!-- /await-keyword -->
+
+ <define-regex id="break-keyword" extended="true">
+ \%{keyword-start} break \%{keyword-end}
+ </define-regex> <!-- /break-keyword -->
+
+ <define-regex id="case-keyword" extended="true">
+ \%{keyword-start} case \%{keyword-end}
+ </define-regex> <!-- /case-keyword -->
+
+ <define-regex id="catch-keyword" extended="true">
+ \%{keyword-start} catch \%{keyword-end}
+ </define-regex> <!-- /catch-keyword -->
+
+ <define-regex id="class-keyword" extended="true">
+ \%{keyword-start} class \%{keyword-end}
+ </define-regex> <!-- /class-keyword -->
+
+ <define-regex id="const-keyword" extended="true">
+ \%{keyword-start} const \%{keyword-end}
+ </define-regex> <!-- /const-keyword -->
+
+ <define-regex id="continue-keyword" extended="true">
+ \%{keyword-start} continue \%{keyword-end}
+ </define-regex> <!-- /continue-keyword -->
+
+ <define-regex id="debugger-keyword" extended="true">
+ \%{keyword-start} debugger \%{keyword-end}
+ </define-regex> <!-- /debugger-keyword -->
+
+ <define-regex id="default-keyword" extended="true">
+ \%{keyword-start} default \%{keyword-end}
+ </define-regex> <!-- /default-keyword -->
+
+ <define-regex id="delete-keyword" extended="true">
+ \%{keyword-start} delete \%{keyword-end}
+ </define-regex> <!-- /delete-keyword -->
+
+ <define-regex id="do-keyword" extended="true">
+ \%{keyword-start} do \%{keyword-end}
+ </define-regex> <!-- /do-keyword -->
+
+ <define-regex id="else-keyword" extended="true">
+ \%{keyword-start} else \%{keyword-end}
+ </define-regex> <!-- /else-keyword -->
+
+ <define-regex id="export-keyword" extended="true">
+ \%{keyword-start} export \%{keyword-end}
+ </define-regex> <!-- /export-keyword -->
+
+ <define-regex id="extends-keyword" extended="true">
+ \%{keyword-start} extends \%{keyword-end}
+ </define-regex> <!-- /extends-keyword -->
+
+ <define-regex id="false-keyword" extended="true">
+ \%{keyword-start} false \%{keyword-end}
+ </define-regex> <!-- /false-keyword -->
+
+ <define-regex id="finally-keyword" extended="true">
+ \%{keyword-start} finally \%{keyword-end}
+ </define-regex> <!-- /finally-keyword -->
+
+ <define-regex id="for-keyword" extended="true">
+ \%{keyword-start} for \%{keyword-end}
+ </define-regex> <!-- /for-keyword -->
+
+ <define-regex id="from-keyword" extended="true">
+ \%{keyword-start} from \%{keyword-end}
+ </define-regex> <!-- /from-keyword -->
+
+ <define-regex id="function-keyword" extended="true">
+ \%{keyword-start} function \%{keyword-end}
+ </define-regex> <!-- /function-keyword -->
+
+ <define-regex id="get-keyword" extended="true">
+ \%{keyword-start} get \%{keyword-end}
+ </define-regex> <!-- /get-keyword -->
+
+ <define-regex id="if-keyword" extended="true">
+ \%{keyword-start} if \%{keyword-end}
+ </define-regex> <!-- /if-keyword -->
+
+ <define-regex id="import-keyword" extended="true">
+ \%{keyword-start} import \%{keyword-end}
+ </define-regex> <!-- /import-keyword -->
+
+ <define-regex id="in-keyword" extended="true">
+ \%{keyword-start} in \%{keyword-end}
+ </define-regex> <!-- /in-keyword -->
+
+ <define-regex id="instanceof-keyword" extended="true">
+ \%{keyword-start} instanceof \%{keyword-end}
+ </define-regex> <!-- /instanceof-keyword -->
+
+ <define-regex id="let-keyword" extended="true">
+ \%{keyword-start} let \%{keyword-end}
+ </define-regex> <!-- /let-keyword -->
+
+ <define-regex id="meta-keyword" extended="true">
+ \%{keyword-start} meta \%{keyword-end}
+ </define-regex> <!-- /meta-keyword -->
+
+ <define-regex id="new-keyword" extended="true">
+ \%{keyword-start} new \%{keyword-end}
+ </define-regex> <!-- /new-keyword -->
+
+ <define-regex id="null-keyword" extended="true">
+ \%{keyword-start} null \%{keyword-end}
+ </define-regex> <!-- /null-keyword -->
+
+ <define-regex id="of-keyword" extended="true">
+ \%{keyword-start} of \%{keyword-end}
+ </define-regex> <!-- /of-keyword -->
+
+ <define-regex id="return-keyword" extended="true">
+ \%{keyword-start} return \%{keyword-end}
+ </define-regex> <!-- /return-keyword -->
+
+ <define-regex id="set-keyword" extended="true">
+ \%{keyword-start} set \%{keyword-end}
+ </define-regex> <!-- /set-keyword -->
+
+ <define-regex id="static-keyword" extended="true">
+ \%{keyword-start} static \%{keyword-end}
+ </define-regex> <!-- /static-keyword -->
+
+ <define-regex id="super-keyword" extended="true">
+ \%{keyword-start} super \%{keyword-end}
+ </define-regex> <!-- /super-keyword -->
+
+ <define-regex id="switch-keyword" extended="true">
+ \%{keyword-start} switch \%{keyword-end}
+ </define-regex> <!-- /switch-keyword -->
+
+ <define-regex id="target-keyword" extended="true">
+ \%{keyword-start} target \%{keyword-end}
+ </define-regex> <!-- /target-keyword -->
+
+ <define-regex id="this-keyword" extended="true">
+ \%{keyword-start} this \%{keyword-end}
+ </define-regex> <!-- /this-keyword -->
+
+ <define-regex id="throw-keyword" extended="true">
+ \%{keyword-start} throw \%{keyword-end}
+ </define-regex> <!-- /throw-keyword -->
+
+ <define-regex id="true-keyword" extended="true">
+ \%{keyword-start} true \%{keyword-end}
+ </define-regex> <!-- /true-keyword -->
+
+ <define-regex id="try-keyword" extended="true">
+ \%{keyword-start} try \%{keyword-end}
+ </define-regex> <!-- /try-keyword -->
+
+ <define-regex id="typeof-keyword" extended="true">
+ \%{keyword-start} typeof \%{keyword-end}
+ </define-regex> <!-- /typeof-keyword -->
+
+ <define-regex id="var-keyword" extended="true">
+ \%{keyword-start} var \%{keyword-end}
+ </define-regex> <!-- /var-keyword -->
+
+ <define-regex id="void-keyword" extended="true">
+ \%{keyword-start} void \%{keyword-end}
+ </define-regex> <!-- /void-keyword -->
+
+ <define-regex id="while-keyword" extended="true">
+ \%{keyword-start} while \%{keyword-end}
+ </define-regex> <!-- /while-keyword -->
+
+ <define-regex id="with-keyword" extended="true">
+ \%{keyword-start} with \%{keyword-end}
+ </define-regex> <!-- /with-keyword -->
+
+ <define-regex id="yield-keyword" extended="true">
+ \%{keyword-start} yield \%{keyword-end}
+ </define-regex> <!-- /yield-keyword -->
+
<!-- async function (ES2017)
no line terminator allowed between "async" and "function" -->
<define-regex id="function-expression-keyword" extended="true">
- (?:
- \%{keyword-start} async \%{keyword-end}
- \%{optional-whitespace-or-comments}
- )?
- \%{keyword-start} function \%{keyword-end}
+ (?: \%{async-keyword} \%{optional-whitespace-or-comments} )?
+ \%{function-keyword}
</define-regex> <!-- /function-expression-keyword -->
- <define-regex id="class-expression-keyword" extended="true">
- \%{keyword-start} class \%{keyword-end}
- </define-regex> <!-- /class-expression-keyword -->
-
<!-- ## Embedded lang hooks
a placeholder context where an embedding language (e.g. html)
diff --git a/data/language-specs/typescript-js-expressions.lang
b/data/language-specs/typescript-js-expressions.lang
index b81a9698..407c23bf 100644
--- a/data/language-specs/typescript-js-expressions.lang
+++ b/data/language-specs/typescript-js-expressions.lang
@@ -167,9 +167,7 @@
-->
<context id="_as-operators">
- <start extended="true">
- \%{js:keyword-start} as \%{js:keyword-end}
- </start>
+ <start>\%{js:as-keyword}</start>
<end>\%{js:before-next-token}</end>
<include>
<context sub-pattern="0" where="start" style-ref="typescript:type-keyword"/>
diff --git a/data/language-specs/typescript-js-functions-classes.lang
b/data/language-specs/typescript-js-functions-classes.lang
index bced506a..c16f4f9c 100644
--- a/data/language-specs/typescript-js-functions-classes.lang
+++ b/data/language-specs/typescript-js-functions-classes.lang
@@ -34,11 +34,11 @@
<!-- # Accessibility modifier -->
<context id="_accessibility-modifier" style-ref="js:keyword" once-only="true">
- <prefix>\%{js:keyword-start}</prefix>
- <suffix>\%{js:keyword-end}</suffix>
- <keyword>private</keyword>
- <keyword>protected</keyword>
- <keyword>public</keyword>
+ <match extended="true">
+ \%{typescript:private-keyword} |
+ \%{typescript:protected-keyword} |
+ \%{typescript:public-keyword}
+ </match>
</context> <!-- /_accessibility-modifier -->
<context id="_ordered-accessibility-modifier" once-only="true">
@@ -173,9 +173,7 @@
<!-- ## Class expression keyword -->
<context id="_class-expression-abstract-keyword" style-ref="js:keyword" once-only="true">
- <match extended="true">
- \%{js:keyword-start} abstract \%{js:keyword-end}
- </match>
+ <match>\%{typescript:abstract-keyword}</match>
</context> <!-- /_class-expression-abstract-keyword -->
<context id="_ordered-class-expression-abstract-keyword" once-only="true">
@@ -187,9 +185,7 @@
</context> <!-- /_ordered-class-expression-abstract-keyword -->
<context id="_class-expression-class-keyword" style-ref="js:keyword" once-only="true">
- <match extended="true">
- \%{js:keyword-start} class \%{js:keyword-end}
- </match>
+ <match>\%{js:class-keyword}</match>
</context> <!-- /_class-expression-class-keyword -->
<context id="_ordered-class-expression-class-keyword" once-only="true">
@@ -207,9 +203,7 @@
<include>
<context id="_choice-class-optional-name-ignore-implements" end-parent="true">
- <start extended="true">
- (?= \%{js:keyword-start} implements \%{js:keyword-end} )
- </start>
+ <start>(?=\%{typescript:implements-keyword})</start>
<end>\%{def:always-match}</end>
</context> <!-- /_choice-class-optional-name-ignore-implements -->
@@ -230,9 +224,7 @@
<!-- ## Class implements clause -->
<context id="_class-implements-clause" once-only="true">
- <start extended="true">
- \%{js:keyword-start} implements \%{js:keyword-end}
- </start>
+ <start>\%{typescript:implements-keyword}</start>
<end>\%{js:before-next-token}</end>
<include>
<context sub-pattern="0" where="start" style-ref="typescript:type-keyword"/>
@@ -267,11 +259,11 @@
<include>
<context id="_class-body-member-modifier-keywords" style-ref="js:keyword">
- <prefix>\%{js:keyword-start}</prefix>
- <suffix>\%{js:keyword-end}</suffix>
- <keyword>abstract</keyword>
- <keyword>declare</keyword>
- <keyword>readonly</keyword>
+ <match extended="true">
+ \%{typescript:abstract-keyword} |
+ \%{typescript:declare-keyword} |
+ \%{typescript:readonly-keyword}
+ </match>
</context> <!-- /_class-body-member-modifier-keywords -->
</include>
diff --git a/data/language-specs/typescript-js-modules.lang b/data/language-specs/typescript-js-modules.lang
index e943160c..fa246c59 100644
--- a/data/language-specs/typescript-js-modules.lang
+++ b/data/language-specs/typescript-js-modules.lang
@@ -39,9 +39,7 @@
-->
<context id="_export-as-namespace-keyword" style-ref="js:keyword" once-only="true">
- <match extended="true">
- \%{js:keyword-start} namespace \%{js:keyword-end}
- </match>
+ <match>\%{typescript:namespace-keyword}</match>
</context> <!-- /_export-as-namespace-keyword -->
<context id="_ordered-export-as-namespace-keyword" once-only="true">
@@ -53,9 +51,7 @@
</context> <!-- /_ordered-export-as-namespace-keyword -->
<context id="_choice-export-as-namespace" end-parent="true">
- <start extended="true">
- \%{js:keyword-start} as \%{js:keyword-end}
- </start>
+ <start>\%{js:as-keyword}</start>
<end>\%{js:statement-end}</end>
<include>
<context sub-pattern="0" where="start" style-ref="js:keyword"/>
@@ -160,9 +156,7 @@
-->
<context id="_choice-import-require" end-parent="true">
- <start extended="true">
- \%{js:keyword-start} require \%{js:keyword-end}
- </start>
+ <start>\%{typescript:require-keyword}</start>
<end>\%{js:statement-end}</end>
<include>
<context sub-pattern="0" where="start" style-ref="js:keyword"/>
@@ -263,9 +257,7 @@
<!-- this is like js-mod:import-declarations but only matches import
default (for import alias) -->
<context id="_choice-import-default-declaration" style-ref="js:export-import-declaration"
end-parent="true">
- <start extended="true">
- \%{js:keyword-start} import \%{js:keyword-end}
- </start>
+ <start>\%{js:import-keyword}</start>
<end>\%{js:before-next-token}</end>
<include>
<context sub-pattern="0" where="start" style-ref="js:keyword"/>
diff --git a/data/language-specs/typescript-js-statements.lang
b/data/language-specs/typescript-js-statements.lang
index 1559be19..7e276b61 100644
--- a/data/language-specs/typescript-js-statements.lang
+++ b/data/language-specs/typescript-js-statements.lang
@@ -71,14 +71,8 @@
declare global { ... }
-->
- <define-regex id="_ambient-declaration-keyword" extended="true">
- \%{js:keyword-start} declare \%{js:keyword-end}
- </define-regex> <!-- /_ambient-declaration-keyword -->
-
<context id="_choice-global-augmentation" style-ref="typescript:global-augmentation" end-parent="true">
- <start extended="true">
- \%{js:keyword-start} global \%{js:keyword-end}
- </start>
+ <start>\%{typescript:global-keyword}</start>
<end>\%{js:before-next-token}</end>
<include>
<context sub-pattern="0" where="start" style-ref="js:keyword"/>
@@ -108,7 +102,7 @@
<!-- <AmbientDeclaration> -->
<context id="_ambient-declarations" style-ref="typescript:ambient-declaration">
- <start>\%{_ambient-declaration-keyword}</start>
+ <start>\%{typescript:declare-keyword}</start>
<end>\%{js:before-next-token}</end>
<include>
<context sub-pattern="0" where="start" style-ref="typescript:type-keyword"/>
@@ -119,7 +113,7 @@
<!-- <AmbientDeclaration> -->
<context id="choice-ambient-declaration" style-ref="typescript:ambient-declaration" end-parent="true">
- <start>\%{_ambient-declaration-keyword}</start>
+ <start>\%{typescript:declare-keyword}</start>
<end>\%{js:before-next-token}</end>
<include>
<context sub-pattern="0" where="start" style-ref="typescript:type-keyword"/>
@@ -137,10 +131,6 @@
we need a custom const declaration to handle "const enum"
-->
- <define-regex id="_const-declaration-keyword" extended="true">
- \%{js:keyword-start} const \%{js:keyword-end}
- </define-regex> <!-- /_const-declaration-keyword -->
-
<context id="_const-declaration-content">
<include>
<context ref="choice-enum-declaration"/>
@@ -158,7 +148,7 @@
</context> <!-- /_const-declaration-content -->
<context id="_const-declarations" style-ref="js:variable-declaration">
- <start>\%{_const-declaration-keyword}</start>
+ <start>\%{js:const-keyword}</start>
<end>\%{js:before-next-token}</end>
<include>
<context sub-pattern="0" where="start" style-ref="js:keyword"/>
@@ -168,7 +158,7 @@
</context> <!-- /_const-declarations -->
<context id="choice-const-declaration" style-ref="js:variable-declaration" end-parent="true">
- <start>\%{_const-declaration-keyword}</start>
+ <start>\%{js:const-keyword}</start>
<end>\%{js:before-next-token}</end>
<include>
<context sub-pattern="0" where="start" style-ref="js:keyword"/>
@@ -183,10 +173,6 @@
enum Foo { A = 1, B, C }
-->
- <define-regex id="_enum-declaration-keyword" extended="true">
- \%{js:keyword-start} enum \%{js:keyword-end}
- </define-regex> <!-- /_enum-declaration-keyword -->
-
<context id="_enum-member-content">
<include>
<context ref="typescript-type-lit:ordered-property-name"/>
@@ -244,7 +230,7 @@
<!-- <EnumDeclaration> -->
<context id="_enum-declarations" style-ref="typescript:enum-declaration">
- <start>\%{_enum-declaration-keyword}</start>
+ <start>\%{typescript:enum-keyword}</start>
<end>\%{js:before-next-token}</end>
<include>
<context sub-pattern="0" where="start" style-ref="js:keyword"/>
@@ -255,7 +241,7 @@
<!-- <EnumDeclaration> -->
<context id="choice-enum-declaration" style-ref="typescript:enum-declaration" end-parent="true">
- <start>\%{_enum-declaration-keyword}</start>
+ <start>\%{typescript:enum-keyword}</start>
<end>\%{js:before-next-token}</end>
<include>
<context sub-pattern="0" where="start" style-ref="js:keyword"/>
@@ -272,14 +258,8 @@
AnotherThing<string, number> { ... }
-->
- <define-regex id="_interface-declaration-keyword" extended="true">
- \%{js:keyword-start} interface \%{js:keyword-end}
- </define-regex> <!-- /_interface-declaration-keyword -->
-
<context id="_interface-extends-clause" once-only="true">
- <start extended="true">
- \%{js:keyword-start} extends \%{js:keyword-end}
- </start>
+ <start>\%{js:extends-keyword}</start>
<end>\%{js:before-next-token}</end>
<include>
<context sub-pattern="0" where="start" style-ref="typescript:type-keyword"/>
@@ -313,7 +293,7 @@
<!-- <InterfaceDeclaration> -->
<context id="_interface-declarations" style-ref="typescript:interface-declaration">
- <start>\%{_interface-declaration-keyword}</start>
+ <start>\%{typescript:interface-keyword}</start>
<end>\%{js:before-next-token}</end>
<include>
<context sub-pattern="0" where="start" style-ref="typescript:type-keyword"/>
@@ -324,7 +304,7 @@
<!-- <InterfaceDeclaration> -->
<context id="choice-interface-declaration" style-ref="typescript:interface-declaration"
end-parent="true">
- <start>\%{_interface-declaration-keyword}</start>
+ <start>\%{typescript:interface-keyword}</start>
<end>\%{js:before-next-token}</end>
<include>
<context sub-pattern="0" where="start" style-ref="typescript:type-keyword"/>
@@ -341,10 +321,6 @@
module "foo.bar" { ... } // "external module" for d.ts files
-->
- <define-regex id="_module-declaration-keyword" extended="true">
- \%{js:keyword-start} module \%{js:keyword-end}
- </define-regex> <!-- /_module-declaration-keyword -->
-
<context id="_module-identifier-or-string" once-only="true">
<start>\%{js:before-next-token}</start>
<end>\%{js:before-next-token}</end>
@@ -378,7 +354,7 @@
<!-- <NamespaceDeclaration> -->
<context id="_module-declarations" style-ref="typescript:module-declaration">
- <start>\%{_module-declaration-keyword}</start>
+ <start>\%{typescript:module-keyword}</start>
<end>\%{js:before-next-token}</end>
<include>
<context sub-pattern="0" where="start" style-ref="js:keyword"/>
@@ -389,7 +365,7 @@
<!-- <NamespaceDeclaration> -->
<context id="choice-module-declaration" style-ref="typescript:module-declaration" end-parent="true">
- <start>\%{_module-declaration-keyword}</start>
+ <start>\%{typescript:module-keyword}</start>
<end>\%{js:before-next-token}</end>
<include>
<context sub-pattern="0" where="start" style-ref="js:keyword"/>
@@ -404,10 +380,6 @@
namespace Foo.Bar { ... }
-->
- <define-regex id="_namespace-declaration-keyword" extended="true">
- \%{js:keyword-start} namespace \%{js:keyword-end}
- </define-regex> <!-- /_namespace-declaration-keyword -->
-
<context id="_namespace-body" once-only="true">
<start>{</start>
<end>}</end>
@@ -442,7 +414,7 @@
<!-- <NamespaceDeclaration> -->
<context id="_namespace-declarations" style-ref="typescript:namespace-declaration">
- <start>\%{_namespace-declaration-keyword}</start>
+ <start>\%{typescript:namespace-keyword}</start>
<end>\%{js:before-next-token}</end>
<include>
<context sub-pattern="0" where="start" style-ref="js:keyword"/>
@@ -453,7 +425,7 @@
<!-- <NamespaceDeclaration> -->
<context id="choice-namespace-declaration" style-ref="typescript:namespace-declaration"
end-parent="true">
- <start>\%{_namespace-declaration-keyword}</start>
+ <start>\%{typescript:namespace-keyword}</start>
<end>\%{js:before-next-token}</end>
<include>
<context sub-pattern="0" where="start" style-ref="js:keyword"/>
diff --git a/data/language-specs/typescript-jsx.lang b/data/language-specs/typescript-jsx.lang
index 1ca6ade8..635c7cea 100644
--- a/data/language-specs/typescript-jsx.lang
+++ b/data/language-specs/typescript-jsx.lang
@@ -131,11 +131,7 @@
\%{js:optional-whitespace-or-comments}
\%{js:identifier}
\%{js:optional-whitespace-or-comments}
- (?:
- \%{js:keyword-start} extends \%{js:keyword-end} |
- , |
- =
- )
+ (?: \%{js:extends-keyword} | [,=] )
)
</start>
<end>\%{js:before-next-token}</end>
diff --git a/data/language-specs/typescript-type-expressions.lang
b/data/language-specs/typescript-type-expressions.lang
index a3d6fca8..6a2f6c15 100644
--- a/data/language-specs/typescript-type-expressions.lang
+++ b/data/language-specs/typescript-type-expressions.lang
@@ -41,9 +41,7 @@
-->
<context id="_choice-infer-declaration" end-parent="true">
- <start extended="true">
- \%{js:keyword-start} infer \%{js:keyword-end}
- </start>
+ <start>\%{typescript:infer-keyword}</start>
<end>\%{js:before-next-token}</end>
<include>
<context sub-pattern="0" where="start" style-ref="typescript:type-keyword"/>
@@ -74,29 +72,21 @@
<context ref="typescript-type-gen:type-parameters-list"/>
<context id="_asserts-type-predicate" style-ref="typescript:type-keyword" once-only="true">
- <match extended="true">
- \%{js:keyword-start} asserts \%{js:keyword-end}
- </match>
+ <match>\%{typescript:asserts-keyword}</match>
</context> <!-- /_asserts-type-predicate -->
<context id="_indexed-type-query" style-ref="typescript:type-keyword" once-only="true">
- <match extended="true">
- \%{js:keyword-start} keyof \%{js:keyword-end}
- </match>
+ <match>\%{typescript:keyof-keyword}</match>
</context> <!-- /_indexed-type-query -->
<context id="_readonly-type-modifier" style-ref="typescript:type-keyword" once-only="true">
- <match extended="true">
- \%{js:keyword-start} readonly \%{js:keyword-end}
- </match>
+ <match>\%{typescript:readonly-keyword}</match>
</context> <!-- /_readonly-type-modifier -->
<!-- for unique symbol subtype, can contain newlines between
"unique" and "symbol" -->
<context id="_unique-symbol-subtype" style-ref="typescript:basic-type" once-only="true">
- <match extended="true">
- \%{js:keyword-start} unique \%{js:keyword-end}
- </match>
+ <match>\%{typescript:unique-keyword}</match>
</context> <!-- /_unique-symbol-subtype -->
</include>
@@ -291,9 +281,7 @@
<!-- <TypeQuery> -->
<context id="_choice-type-query" style-ref="typescript:type-query" end-parent="true">
- <start extended="true">
- \%{js:keyword-start} typeof \%{js:keyword-end}
- </start>
+ <start>\%{js:typeof-keyword}</start>
<end>\%{js:before-next-token}</end>
<include>
<context sub-pattern="0" where="start" style-ref="typescript:type-keyword"/>
@@ -408,9 +396,7 @@
</context> <!-- /_choice-conditional-type-operator-super-type -->
<context id="_conditional-type-operators">
- <start extended="true">
- \%{js:keyword-start} extends \%{js:keyword-end}
- </start>
+ <start>\%{js:extends-keyword}</start>
<end>\%{js:before-next-token}</end>
<include>
<context sub-pattern="0" where="start" style-ref="typescript:type-keyword"/>
@@ -477,9 +463,7 @@
</context> <!-- /_union-intersection-type-operators -->
<context id="_type-predicate-operators">
- <start extended="true">
- \%{js:keyword-start} is \%{js:keyword-end}
- </start>
+ <start>\%{typescript:is-keyword}</start>
<end>\%{js:before-next-token}</end>
<include>
<context sub-pattern="0" where="start" style-ref="typescript:type-keyword"/>
diff --git a/data/language-specs/typescript-type-generics.lang
b/data/language-specs/typescript-type-generics.lang
index d1c24001..f51fd0eb 100644
--- a/data/language-specs/typescript-type-generics.lang
+++ b/data/language-specs/typescript-type-generics.lang
@@ -39,9 +39,7 @@
<!-- <Constraint> -->
<context id="_type-parameter-constraint" once-only="true">
- <start extended="true">
- \%{js:keyword-start} extends \%{js:keyword-end}
- </start>
+ <start>\%{js:extends-keyword}</start>
<end>\%{js:before-next-token}</end>
<include>
<context sub-pattern="0" where="start" style-ref="typescript:type-keyword"/>
@@ -153,10 +151,8 @@
-->
<context id="const-type-assertion-keyword-end-parent" style-ref="typescript:type-keyword"
end-parent="true">
- <start extended="true">
- (?= \%{js:keyword-start} const \%{js:keyword-end} )
- </start>
- <end>const</end>
+ <start>(?=\%{js:const-keyword})</start>
+ <end>\%{js:const-keyword}</end>
</context> <!-- /const-type-assertion-keyword-end-parent -->
<context id="_type-parameters-list-or-type-assertion-first-parameter" once-only="true">
diff --git a/data/language-specs/typescript-type-literals.lang
b/data/language-specs/typescript-type-literals.lang
index 50f99ecb..1b1b9014 100644
--- a/data/language-specs/typescript-type-literals.lang
+++ b/data/language-specs/typescript-type-literals.lang
@@ -38,22 +38,18 @@
-->
<define-regex id="_basic-types" extended="true">
- \%{js:keyword-start}
- (?:
- any |
- bigint |
- boolean |
- never |
- null |
- number |
- object |
- string |
- symbol |
- undefined |
- unknown |
- void
- )
- \%{js:keyword-end}
+ \%{typescript:any-keyword} |
+ \%{typescript:bigint-keyword} |
+ \%{typescript:boolean-keyword} |
+ \%{typescript:never-keyword} |
+ \%{js:null-keyword} |
+ \%{typescript:number-keyword} |
+ \%{typescript:object-keyword} |
+ \%{typescript:string-keyword} |
+ \%{typescript:symbol-keyword} |
+ \%{typescript:undefined-keyword} |
+ \%{typescript:unknown-keyword} |
+ \%{js:void-keyword}
</define-regex> <!-- /_basic-types -->
<!-- <PredefinedType> -->
@@ -69,14 +65,14 @@
false
-->
- <define-regex id="_boolean-types" extended="true">
- \%{js:keyword-start} (?: false | true ) \%{js:keyword-end}
- </define-regex> <!-- /_boolean-literal-types -->
-
<!-- <PredefinedType> -->
<context id="choice-boolean-type" style-ref="typescript:boolean-type" end-parent="true">
- <start>(?=\%{_boolean-types})</start>
- <end>\%{_boolean-types}</end>
+ <start extended="true">
+ (?= \%{js:false-keyword} | \%{js:true-keyword} )
+ </start>
+ <end extended="true">
+ \%{js:false-keyword} | \%{js:true-keyword}
+ </end>
</context> <!-- /choice-boolean-type -->
@@ -107,10 +103,8 @@
<!-- <ThisType> -->
<context id="choice-this-type" style-ref="typescript:basic-type" end-parent="true">
- <start extended="true">
- (?= \%{js:keyword-start} this \%{js:keyword-end} )
- </start>
- <end>this</end>
+ <start>(?=\%{js:this-keyword})</start>
+ <end>\%{js:this-keyword}</end>
</context> <!-- /choice-this-type -->
@@ -203,9 +197,8 @@
<include>
<context id="_choice-object-type-literal-modifier-keyword" style-ref="typescript:type-keyword"
end-parent="true">
- <prefix>\%{js:keyword-start}</prefix>
- <suffix>\%{js:keyword-end}</suffix>
- <keyword>readonly</keyword>
+ <start>(?=\%{typescript:readonly-keyword})</start>
+ <end>\%{typescript:readonly-keyword}</end>
</context> <!-- /_choice-object-type-literal-modifier-keyword -->
</include>
@@ -239,9 +232,7 @@
<context ref="typescript:choice-type-annotation"/>
<context id="_choice-mapped-type" end-parent="true">
- <start extended="true">
- \%{js:keyword-start} in \%{js:keyword-end}
- </start>
+ <start>\%{js:in-keyword}</start>
<end>\%{js:before-next-token}</end>
<include>
<context sub-pattern="0" where="start" style-ref="typescript:type-keyword"/>
diff --git a/data/language-specs/typescript.lang b/data/language-specs/typescript.lang
index 1c6c3471..f2fccdff 100644
--- a/data/language-specs/typescript.lang
+++ b/data/language-specs/typescript.lang
@@ -111,21 +111,130 @@
so we move the definitions of these regexes here
-->
+ <define-regex id="abstract-keyword" extended="true">
+ \%{js:keyword-start} abstract \%{js:keyword-end}
+ </define-regex> <!-- /abstract-keyword -->
+
+ <define-regex id="any-keyword" extended="true">
+ \%{js:keyword-start} any \%{js:keyword-end}
+ </define-regex> <!-- /any-keyword -->
+
+ <define-regex id="asserts-keyword" extended="true">
+ \%{js:keyword-start} asserts \%{js:keyword-end}
+ </define-regex> <!-- /asserts-keyword -->
+
+ <define-regex id="bigint-keyword" extended="true">
+ \%{js:keyword-start} bigint \%{js:keyword-end}
+ </define-regex> <!-- /bigint-keyword -->
+
+ <define-regex id="boolean-keyword" extended="true">
+ \%{js:keyword-start} boolean \%{js:keyword-end}
+ </define-regex> <!-- /boolean-keyword -->
+
+ <define-regex id="declare-keyword" extended="true">
+ \%{js:keyword-start} declare \%{js:keyword-end}
+ </define-regex> <!-- /declare-keyword -->
+
+ <define-regex id="enum-keyword" extended="true">
+ \%{js:keyword-start} enum \%{js:keyword-end}
+ </define-regex> <!-- /enum-keyword -->
+
+ <define-regex id="global-keyword" extended="true">
+ \%{js:keyword-start} global \%{js:keyword-end}
+ </define-regex> <!-- /global-keyword -->
+
+ <define-regex id="implements-keyword" extended="true">
+ \%{js:keyword-start} implements \%{js:keyword-end}
+ </define-regex> <!-- /implements-keyword -->
+
+ <define-regex id="infer-keyword" extended="true">
+ \%{js:keyword-start} infer \%{js:keyword-end}
+ </define-regex> <!-- /infer-keyword -->
+
+ <define-regex id="interface-keyword" extended="true">
+ \%{js:keyword-start} interface \%{js:keyword-end}
+ </define-regex> <!-- /interface-keyword -->
+
+ <define-regex id="is-keyword" extended="true">
+ \%{js:keyword-start} is \%{js:keyword-end}
+ </define-regex> <!-- /is-keyword -->
+
+ <define-regex id="keyof-keyword" extended="true">
+ \%{js:keyword-start} keyof \%{js:keyword-end}
+ </define-regex> <!-- /keyof-keyword -->
+
+ <define-regex id="module-keyword" extended="true">
+ \%{js:keyword-start} module \%{js:keyword-end}
+ </define-regex> <!-- /module-keyword -->
+
+ <define-regex id="namespace-keyword" extended="true">
+ \%{js:keyword-start} namespace \%{js:keyword-end}
+ </define-regex> <!-- /namespace-keyword -->
+
+ <define-regex id="never-keyword" extended="true">
+ \%{js:keyword-start} never \%{js:keyword-end}
+ </define-regex> <!-- /never-keyword -->
+
+ <define-regex id="number-keyword" extended="true">
+ \%{js:keyword-start} number \%{js:keyword-end}
+ </define-regex> <!-- /number-keyword -->
+
+ <define-regex id="object-keyword" extended="true">
+ \%{js:keyword-start} object \%{js:keyword-end}
+ </define-regex> <!-- /object-keyword -->
+
+ <define-regex id="private-keyword" extended="true">
+ \%{js:keyword-start} private \%{js:keyword-end}
+ </define-regex> <!-- /private-keyword -->
+
+ <define-regex id="protected-keyword" extended="true">
+ \%{js:keyword-start} protected \%{js:keyword-end}
+ </define-regex> <!-- /protected-keyword -->
+
+ <define-regex id="public-keyword" extended="true">
+ \%{js:keyword-start} public \%{js:keyword-end}
+ </define-regex> <!-- /public-keyword -->
+
+ <define-regex id="readonly-keyword" extended="true">
+ \%{js:keyword-start} readonly \%{js:keyword-end}
+ </define-regex> <!-- /readonly-keyword -->
+
+ <define-regex id="require-keyword" extended="true">
+ \%{js:keyword-start} require \%{js:keyword-end}
+ </define-regex> <!-- /require-keyword -->
+
+ <define-regex id="string-keyword" extended="true">
+ \%{js:keyword-start} string \%{js:keyword-end}
+ </define-regex> <!-- /string-keyword -->
+
+ <define-regex id="symbol-keyword" extended="true">
+ \%{js:keyword-start} symbol \%{js:keyword-end}
+ </define-regex> <!-- /symbol-keyword -->
+
+ <define-regex id="type-keyword" extended="true">
+ \%{js:keyword-start} type \%{js:keyword-end}
+ </define-regex> <!-- /type-keyword -->
+
+ <define-regex id="undefined-keyword" extended="true">
+ \%{js:keyword-start} undefined \%{js:keyword-end}
+ </define-regex> <!-- /undefined-keyword -->
+
+ <define-regex id="unique-keyword" extended="true">
+ \%{js:keyword-start} unique \%{js:keyword-end}
+ </define-regex> <!-- /unique-keyword -->
+
+ <define-regex id="unknown-keyword" extended="true">
+ \%{js:keyword-start} unknown \%{js:keyword-end}
+ </define-regex> <!-- /unknown-keyword -->
+
<!-- no line terminator allowed between "abstract" and "class"
technically, there can be abstract class declarations but not
abstract class expressions -->
<define-regex id="class-expression-keyword" extended="true">
- (?:
- \%{js:keyword-start} abstract \%{js:keyword-end}
- \%{js:optional-whitespace-or-comments}
- )?
- \%{js:keyword-start} class \%{js:keyword-end}
+ (?: \%{abstract-keyword} \%{js:optional-whitespace-or-comments} )?
+ \%{js:class-keyword}
</define-regex> <!-- /class-expression-keyword -->
- <define-regex id="type-keyword" extended="true">
- \%{js:keyword-start} type \%{js:keyword-end}
- </define-regex> <!-- /type-keyword -->
-
<context id="js-ordered-string" once-only="true">
<start>\%{js:before-next-token}</start>
<end>\%{js:before-next-token}</end>
@@ -259,9 +368,7 @@
<!-- ## Constructor modifier -->
<context id="constructor-modifier" style-ref="type-keyword" once-only="true">
- <prefix>\%{js:keyword-start}</prefix>
- <suffix>\%{js:keyword-end}</suffix>
- <keyword>new</keyword>
+ <match>\%{js:new-keyword}</match>
</context> <!-- /constructor-modifier -->
<context id="ordered-constructor-modifier" once-only="true">
@@ -323,9 +430,7 @@
<include>
<context id="_choice-this-parameter" style-ref="js:keyword" end-parent="true">
- <match extended="true">
- \%{js:keyword-start} this \%{js:keyword-end}
- </match>
+ <match>\%{js:this-keyword}</match>
</context> <!-- /_choice-this-parameter -->
<context id="_js-choice-binding" end-parent="true">
@@ -552,9 +657,7 @@
</context> <!-- /_ordered-import-type-trailing-dot -->
<context id="_import-type" once-only="true">
- <start extended="true">
- \%{js:keyword-start} import \%{js:keyword-end}
- </start>
+ <start>\%{js:import-keyword}</start>
<end>\%{js:before-next-token}</end>
<include>
<context sub-pattern="0" where="start" style-ref="type-keyword"/>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]