[gtksourceview: 10/13] javascript.lang (and family): Add boundary test at start of identifiers
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtksourceview: 10/13] javascript.lang (and family): Add boundary test at start of identifiers
- Date: Tue, 2 Jun 2020 18:35:21 +0000 (UTC)
commit 0c1cf89d55119944b14bd263dad052294c7da187
Author: Jeffery To <jeffery to gmail com>
Date: Mon Jun 1 15:16:13 2020 +0800
javascript.lang (and family): Add boundary test at start of identifiers
This ensures that identifiers are not partially highlighted/selected in
cases of incorrect syntax.
data/language-specs/javascript-expressions.lang | 4 ++--
data/language-specs/javascript-modules.lang | 4 ++--
data/language-specs/javascript-statements.lang | 1 +
data/language-specs/javascript.lang | 12 +++++++----
data/language-specs/jsx.lang | 24 ++++++++++++++++------
.../typescript-type-expressions.lang | 4 +++-
data/language-specs/typescript.lang | 7 ++++---
7 files changed, 38 insertions(+), 18 deletions(-)
---
diff --git a/data/language-specs/javascript-expressions.lang b/data/language-specs/javascript-expressions.lang
index 75ea7cbb..3964f140 100644
--- a/data/language-specs/javascript-expressions.lang
+++ b/data/language-specs/javascript-expressions.lang
@@ -187,7 +187,7 @@
<context ref="js-lit:choice-string"/>
<context id="_choice-primary-expression-identifier" end-parent="true">
- <start>(?=\%{js:identifier-start})</start>
+ <start>\%{js:identifier-container-start}</start>
<end>\%{def:always-match}</end>
<include>
<!-- no embedded-lang-hooks here -->
@@ -292,7 +292,7 @@
-->
<context id="_choice-property-identifier" end-parent="true">
- <start>(?=\%{js:identifier-start})</start>
+ <start>\%{js:identifier-container-start}</start>
<end>\%{def:always-match}</end>
<include>
<!-- no embedded-lang-hooks here -->
diff --git a/data/language-specs/javascript-modules.lang b/data/language-specs/javascript-modules.lang
index f5e9ca91..7c111ac2 100644
--- a/data/language-specs/javascript-modules.lang
+++ b/data/language-specs/javascript-modules.lang
@@ -128,7 +128,7 @@
-->
<context id="_name-group-identifier" once-only="true">
- <start>(?=\%{js:identifier-start})</start>
+ <start>\%{js:identifier-container-start}</start>
<end>\%{def:always-match}</end>
<include>
<!-- no embedded-lang-hooks here -->
@@ -378,7 +378,7 @@
</context> <!-- /_choice-import-default-only -->
<context id="_choice-import-default" end-parent="true">
- <start>(?=\%{js:identifier-start})</start>
+ <start>\%{js:identifier-container-start}</start>
<end>\%{js:before-next-token}</end>
<include>
<context ref="js:embedded-lang-hooks"/>
diff --git a/data/language-specs/javascript-statements.lang b/data/language-specs/javascript-statements.lang
index 2230b0b9..94a092fa 100644
--- a/data/language-specs/javascript-statements.lang
+++ b/data/language-specs/javascript-statements.lang
@@ -489,6 +489,7 @@
-->
<context id="_label-statements" style-ref="js:label-statement">
<start extended="true">
+ (?<! \%{js:identifier-char} )
(?=
\%{js:identifier}
\%{js:optional-whitespace-or-comments}
diff --git a/data/language-specs/javascript.lang b/data/language-specs/javascript.lang
index 5e409511..3c68d23d 100644
--- a/data/language-specs/javascript.lang
+++ b/data/language-specs/javascript.lang
@@ -218,6 +218,10 @@
\%{identifier-start} \%{identifier-part}*
</define-regex> <!-- /identifier-->
+ <define-regex id="identifier-container-start" extended="true">
+ (?<! \%{identifier-char} ) (?= \%{identifier-start} )
+ </define-regex> <!-- /identifier-container-start -->
+
<define-regex id="keyword-start" extended="true">
(?<! \%{identifier-char} )
</define-regex> <!-- /keyword-start -->
@@ -505,7 +509,7 @@
</context> <!-- /_identifier-name-content -->
<context id="identifier-name" once-only="true">
- <start>(?=\%{identifier-start})</start>
+ <start>\%{identifier-container-start}</start>
<end>\%{def:always-match}</end>
<include>
<!-- no embedded-lang-hooks here -->
@@ -517,7 +521,7 @@
</context> <!-- /choice-identifier-name -->
<context id="choice-identifier-name" end-parent="true">
- <start>(?=\%{identifier-start})</start>
+ <start>\%{identifier-container-start}</start>
<end>\%{def:always-match}</end>
<include>
<!-- no embedded-lang-hooks here -->
@@ -536,7 +540,7 @@
</context> <!-- /_identifier-content -->
<context id="identifier" once-only="true">
- <start>(?=\%{identifier-start})</start>
+ <start>\%{identifier-container-start}</start>
<end>\%{def:always-match}</end>
<include>
<!-- no embedded-lang-hooks here -->
@@ -548,7 +552,7 @@
</context> <!-- /identifier -->
<context id="choice-identifier" end-parent="true">
- <start>(?=\%{identifier-start})</start>
+ <start>\%{identifier-container-start}</start>
<end>\%{def:always-match}</end>
<include>
<!-- no embedded-lang-hooks here -->
diff --git a/data/language-specs/jsx.lang b/data/language-specs/jsx.lang
index a922980e..0be7b516 100644
--- a/data/language-specs/jsx.lang
+++ b/data/language-specs/jsx.lang
@@ -72,8 +72,12 @@
<!-- # Names -->
+ <define-regex id="_identifier-char" extended="true">
+ \%{js:identifier-char} | -
+ </define-regex> <!-- /_identifier-char -->
+
<define-regex id="_identifier-part" extended="true">
- \%{js:identifier-part} | -
+ \%{_identifier-char} | \%{js:unicode-escape}
</define-regex> <!-- /_identifier-part -->
<!-- <JSXIdentifier> -->
@@ -81,12 +85,16 @@
\%{js:identifier-start} \%{_identifier-part}*
</define-regex> <!-- /_identifier -->
+ <define-regex id="_identifier-container-start" extended="true">
+ (?<! \%{_identifier-char} ) (?= \%{js:identifier-start} )
+ </define-regex> <!-- /_identifier-container-start -->
+
<context id="_identifier" once-only="true">
<match>\%{_identifier}</match>
</context> <!-- /_identifier -->
<context id="_choice-identifier" end-parent="true">
- <start>(?=\%{js:identifier-start})</start>
+ <start>\%{_identifier-container-start}</start>
<end>\%{_identifier}</end>
</context> <!-- /_choice-identifier -->
@@ -96,7 +104,9 @@
</define-regex> <!-- /_namespaced-name -->
<context id="_choice-namespaced-name" end-parent="true">
- <start>(?=\%{_namespaced-name})</start>
+ <start extended="true">
+ (?<! \%{_identifier-char} ) (?= \%{_namespaced-name} )
+ </start>
<end>\%{_namespaced-name}</end>
</context> <!-- /_choice-namespaced-name -->
@@ -106,7 +116,9 @@
</define-regex> <!-- /_member-expression -->
<context id="_choice-member-expression" end-parent="true">
- <start>(?=\%{_member-expression})</start>
+ <start extended="true">
+ (?<! \%{_identifier-char} ) (?= \%{_member-expression} )
+ </start>
<end>\%{_member-expression}</end>
</context> <!-- /_choice-member-expression -->
@@ -115,7 +127,7 @@
<!-- <JSXElementName> -->
<context id="_element-name" style-ref="xml:element-name" once-only="true">
- <start>(?=\%{js:identifier-start})</start>
+ <start>\%{_identifier-container-start}</start>
<end>\%{js:before-next-token}</end>
<include>
<context ref="js:comments"/>
@@ -165,7 +177,7 @@
<!-- <JSXAttributeName> -->
<context id="_attribute-names" style-ref="xml:attribute-name">
- <start>(?=\%{js:identifier-start})</start>
+ <start>\%{_identifier-container-start}</start>
<end>\%{js:before-next-token}</end>
<include>
<context ref="js:comments"/>
diff --git a/data/language-specs/typescript-type-expressions.lang
b/data/language-specs/typescript-type-expressions.lang
index 6a5816ad..f1e2375e 100644
--- a/data/language-specs/typescript-type-expressions.lang
+++ b/data/language-specs/typescript-type-expressions.lang
@@ -125,7 +125,9 @@
<!-- 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} ) | # adding js:optional-whitespace-or-comments in between doesn't work
+ (?<! \%{js:identifier-char} )
(?= \%{js:identifier} \%{js:optional-whitespace-or-comments} [?:,] )
</start>
<end>\%{js:before-next-token}</end>
diff --git a/data/language-specs/typescript.lang b/data/language-specs/typescript.lang
index 80160f1f..3fc095c2 100644
--- a/data/language-specs/typescript.lang
+++ b/data/language-specs/typescript.lang
@@ -221,7 +221,7 @@
<!-- <NamespaceName> -->
<context id="choice-namespace-name" end-parent="true">
- <start>(?=\%{js:identifier-start})</start>
+ <start>\%{js:identifier-container-start}</start>
<end>\%{def:always-match}</end>
<include>
<!-- no comments here -->
@@ -469,6 +469,7 @@
<context id="_choice-type-name-identifier-only" end-parent="true">
<start extended="true">
+ (?<! \%{js:identifier-char} )
(?= (?> \%{js:identifier} ) (?! \. ) )
</start>
<end>\%{def:always-match}</end>
@@ -487,7 +488,7 @@
</context> <!-- /_choice-type-name-identifier-only -->
<context id="_type-name" end-parent="true">
- <start>(?=\%{js:identifier-start})</start>
+ <start>\%{js:identifier-container-start}</start>
<end>\%{js:before-next-token}</end>
<include>
<!-- no comments here -->
@@ -584,7 +585,7 @@
<!-- <TypeReference> -->
<context id="choice-type-reference" end-parent="true">
- <start>(?=\%{js:identifier-start})</start>
+ <start>\%{js:identifier-container-start}</start>
<end>\%{js:before-next-token}</end>
<include>
<context ref="js:comments"/>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]