[gtksourceview: 2/14] javascript.lang: Fix highlighting for new.target spanning multiple lines
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtksourceview: 2/14] javascript.lang: Fix highlighting for new.target spanning multiple lines
- Date: Thu, 11 Jun 2020 17:26:28 +0000 (UTC)
commit 7b0524135bd988ff8029f122d2377e15b7bc136a
Author: Jeffery To <jeffery to gmail com>
Date: Thu Jun 4 02:11:47 2020 +0800
javascript.lang: Fix highlighting for new.target spanning multiple lines
data/language-specs/javascript-expressions.lang | 115 ++++++++++++++++--------
data/language-specs/javascript-values.lang | 23 -----
data/language-specs/javascript.lang | 7 --
tests/syntax-highlighting/file.j | 11 +--
tests/syntax-highlighting/file.js | 11 +--
tests/syntax-highlighting/file.jsx | 11 +--
tests/syntax-highlighting/file.ts | 11 +--
tests/syntax-highlighting/file.tsx | 11 +--
8 files changed, 98 insertions(+), 102 deletions(-)
---
diff --git a/data/language-specs/javascript-expressions.lang b/data/language-specs/javascript-expressions.lang
index bc11e09a..13175eb1 100644
--- a/data/language-specs/javascript-expressions.lang
+++ b/data/language-specs/javascript-expressions.lang
@@ -37,11 +37,11 @@
<!--
Expression / context structure:
- left-hand side (lhs) expression: new Array ()
- === ===== ==
- / | \
- pre-primary primary post-primary
- expression expression expression
+ left-hand side (lhs) expression: Array ()
+ ===== ==
+ / \
+ primary post-primary
+ expression expression
expression: - obj.count + 1
= ========= ===
@@ -51,49 +51,70 @@
-->
- <!-- # Pre-primary expression -->
+ <!-- # "new" expression
- <context id="_pre-primary-expression">
+ new Array()
+ new.target
+ -->
+
+ <!-- <NewTarget> (part of) -->
+ <context id="_choice-new-target-expression" end-parent="true">
+ <start>\.</start>
+ <end>\%{js:before-next-token}</end>
<include>
+ <context sub-pattern="0" where="start" style-ref="js:keyword"/>
<context ref="js:embedded-lang-hooks"/>
+ <context ref="js:comments"/>
- <!-- ES2017, cannot be followed by line terminator -->
- <context id="_async-pre-primary-expression-keywords" style-ref="js:keyword">
- <match extended="true">
- \%{js:keyword-start} async \%{js:keyword-end}
- (?= # preceeds arrow function
- \%{js:optional-whitespace-or-comments}
- (?:
- \%{js:identifier}
- \%{js:optional-whitespace-or-comments}
- => |
- \( # can this be better?
- )
- )
- (?! # does not preceed "function" (leave to function
expression)
- \%{js:optional-whitespace-or-comments}
- \%{js:keyword-start} function \%{js:keyword-end}
- )
- </match>
- </context> <!-- /_async-pre-primary-expression-keywords -->
+ <context id="_new-target-expression-content">
+ <include>
- <context id="_new-pre-primary-expression-keywords" style-ref="js:keyword">
- <match extended="true">
- \%{js:keyword-start} new \%{js:keyword-end}
- (?! \%{js:new-target-object-keyword-suffix} )
- </match>
- </context> <!-- /_new-pre-primary-expression-keywords -->
+ <context id="_new-target-expression-keyword" style-ref="js:keyword" once-only="true">
+ <match extended="true">
+ \%{js:keyword-start} target \%{js:keyword-end}
+ </match>
+ </context> <!-- /_new-target-expression-keyword -->
+
+ </include>
+ </context> <!-- /_new-target-expression-content -->
</include>
- </context> <!-- /_pre-primary-expression -->
+ </context> <!-- /_choice-new-target-expression -->
- <context id="_ordered-pre-primary-expression" once-only="true">
+ <context id="_choice-new-object-expression" end-parent="true">
<start>\%{js:before-next-token}</start>
<end>\%{js:before-next-token}</end>
<include>
- <context ref="_pre-primary-expression"/>
+ <context ref="js:embedded-lang-hooks"/>
+ <context ref="js:comments"/>
+
+ <context id="_new-object-expression-content">
+ <include>
+ <context ref="_primary-expression"/>
+ </include>
+ </context> <!-- /_new-object-expression-content -->
+ </include>
+ </context> <!-- /_choice-new-object-expression -->
+
+ <context id="_choice-new-expression" end-parent="true">
+ <start extended="true">
+ \%{js:keyword-start} new \%{js:keyword-end}
+ </start>
+ <end>\%{js:before-next-token}</end>
+ <include>
+ <context sub-pattern="0" where="start" style-ref="js:keyword"/>
+ <context ref="js:embedded-lang-hooks"/>
+ <context ref="js:comments"/>
+
+ <context id="_new-expression-content">
+ <include>
+ <context ref="_choice-new-target-expression"/>
+ <context ref="_choice-new-object-expression"/>
+ </include>
+ </context> <!-- /_new-expression-content -->
+
</include>
- </context> <!-- /_ordered-pre-primary-expression -->
+ </context> <!-- /_choice-new-expression -->
<!-- # Grouping / arrow function parameters
@@ -182,6 +203,7 @@
<context ref="js-lit:choice-template-literal"/>
<context ref="js-fn:choice-function-expression"/>
<context ref="js-fn:choice-class-expression"/>
+ <context ref="_choice-new-expression"/>
<context ref="_choice-grouping"/>
<context ref="js-lit:choice-number"/>
<context ref="js-lit:choice-string"/>
@@ -403,6 +425,26 @@
<context ref="js:embedded-lang-hooks"/>
<context ref="_increment-decrement-operators"/>
+ <!-- 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}
+ # preceeds arrow function
+ (?=
+ \%{js:optional-whitespace-or-comments}
+ (?:
+ \%{js:identifier} \%{js:optional-whitespace-or-comments} => |
+ \( # can this be better?
+ )
+ )
+ # does not preceed "function" (leave to function expression)
+ (?!
+ \%{js:optional-whitespace-or-comments}
+ \%{js:keyword-start} function \%{js:keyword-end}
+ )
+ </match>
+ </context> <!-- /_async-keywords -->
+
<context id="_keyword-unary-operators" style-ref="js:keyword">
<prefix>\%{js:keyword-start}</prefix>
<suffix>\%{js:keyword-end}</suffix>
@@ -462,7 +504,6 @@
<context id="_lhs-expression-content">
<include>
- <context ref="_ordered-pre-primary-expression"/>
<context ref="_ordered-primary-expression"/>
<context ref="_ordered-post-primary-expression"/>
</include>
diff --git a/data/language-specs/javascript-values.lang b/data/language-specs/javascript-values.lang
index 3224afd6..8dd510f0 100644
--- a/data/language-specs/javascript-values.lang
+++ b/data/language-specs/javascript-values.lang
@@ -143,29 +143,6 @@
</include>
</context> <!-- /_import-function-keywords -->
- <context id="_new-target-object-keywords">
- <start extended="true">
- \%{js:keyword-start} new \%{js:keyword-end}
- (?= \%{js:new-target-object-keyword-suffix} )
- </start>
- <end extended="true">
- \%{js:keyword-start} target \%{js:keyword-end}
- </end>
- <include>
- <context sub-pattern="0" where="start" style-ref="js:keyword"/>
- <context sub-pattern="0" where="end" style-ref="js:keyword"/>
- <!-- no embedded-lang-hooks here -->
- <context ref="js:comments"/>
-
- <context id="_new-target-object-keyword-content">
- <include>
- <context ref="js:ordered-keyword-dot"/>
- </include>
- </context> <!-- /_new-target-object-keyword-content -->
-
- </include>
- </context> <!-- /_new-target-object-keywords -->
-
</include>
</context> <!-- /global-values -->
diff --git a/data/language-specs/javascript.lang b/data/language-specs/javascript.lang
index 503dc0ee..089bba6a 100644
--- a/data/language-specs/javascript.lang
+++ b/data/language-specs/javascript.lang
@@ -291,13 +291,6 @@
\%{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 \%{keyword-end}
- </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">
diff --git a/tests/syntax-highlighting/file.j b/tests/syntax-highlighting/file.j
index 3b96edba..d46990f7 100644
--- a/tests/syntax-highlighting/file.j
+++ b/tests/syntax-highlighting/file.j
@@ -526,15 +526,12 @@ Math.random();
// object keywords
arguments;
globalThis; // ES2020
-new.target;
-new . /* comment */ target;
super;
this;
-// incorrectly highlighted
-new .
-target;
-new . /* comment
-*/ target;
+
+// new.target
+new.target;
+new . /* comment */ target;
new // comment
.target;
diff --git a/tests/syntax-highlighting/file.js b/tests/syntax-highlighting/file.js
index e3f2de2d..9a5dd5dc 100644
--- a/tests/syntax-highlighting/file.js
+++ b/tests/syntax-highlighting/file.js
@@ -225,15 +225,12 @@ Math.random();
// object keywords
arguments;
globalThis; // ES2020
-new.target;
-new . /* comment */ target;
super;
this;
-// incorrectly highlighted
-new .
-target;
-new . /* comment
-*/ target;
+
+// new.target
+new.target;
+new . /* comment */ target;
new // comment
.target;
diff --git a/tests/syntax-highlighting/file.jsx b/tests/syntax-highlighting/file.jsx
index 5da9cc5a..d7c32319 100644
--- a/tests/syntax-highlighting/file.jsx
+++ b/tests/syntax-highlighting/file.jsx
@@ -282,15 +282,12 @@ Math.random();
// object keywords
arguments;
globalThis; // ES2020
-new.target;
-new . /* comment */ target;
super;
this;
-// incorrectly highlighted
-new .
-target;
-new . /* comment
-*/ target;
+
+// new.target
+new.target;
+new . /* comment */ target;
new // comment
.target;
diff --git a/tests/syntax-highlighting/file.ts b/tests/syntax-highlighting/file.ts
index 47887693..b80e7d57 100644
--- a/tests/syntax-highlighting/file.ts
+++ b/tests/syntax-highlighting/file.ts
@@ -822,15 +822,12 @@ Math.random();
// object keywords
arguments;
globalThis; // ES2020
-new.target;
-new . /* comment */ target;
super;
this;
-// incorrectly highlighted
-new .
-target;
-new . /* comment
-*/ target;
+
+// new.target
+new.target;
+new . /* comment */ target;
new // comment
.target;
diff --git a/tests/syntax-highlighting/file.tsx b/tests/syntax-highlighting/file.tsx
index caab96c1..a681d28b 100644
--- a/tests/syntax-highlighting/file.tsx
+++ b/tests/syntax-highlighting/file.tsx
@@ -930,15 +930,12 @@ Math.random();
// object keywords
arguments;
globalThis; // ES2020
-new.target;
-new . /* comment */ target;
super;
this;
-// incorrectly highlighted
-new .
-target;
-new . /* comment
-*/ target;
+
+// new.target
+new.target;
+new . /* comment */ target;
new // comment
.target;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]