branch: elpa/d-mode
commit c22a8c1f5c4b6042e8673210f45fcd39807af9d2
Author: Vladimir Panteleev <[email protected]>
Commit: Vladimir Panteleev <[email protected]>
Fontify variables in foreach loops
---
d-mode.el | 22 ++++++++++++++--------
tests/fonts_lambda_params.d | 8 ++++++++
tests/fonts_lambda_params.d.html | 8 ++++++++
3 files changed, 30 insertions(+), 8 deletions(-)
diff --git a/d-mode.el b/d-mode.el
index cdd8d79..2752529 100644
--- a/d-mode.el
+++ b/d-mode.el
@@ -7,7 +7,7 @@
;; Maintainer: Russel Winder <[email protected]>
;; Vladimir Panteleev <[email protected]>
;; Created: March 2007
-;; Version: 201911112314
+;; Version: 201911112326
;; Keywords: D programming language emacs cc-mode
;; Package-Requires: ((emacs "25.1"))
@@ -619,7 +619,7 @@ Evaluate OLD-FORM if the Emacs version is older than
MIN-VERSION,
(setq id-start (point))
(cond
;; Type or name only
- ((looking-at "[,=)]")
+ ((looking-at "[,=);]")
(when (eq context 'varlist)
(setq id-start type-start)
(setq type-start nil))
@@ -627,7 +627,7 @@ Evaluate OLD-FORM if the Emacs version is older than
MIN-VERSION,
;; Parameter name
((d-forward-identifier)
(c-forward-syntactic-ws)
- (looking-at "[,=)]")))))
+ (looking-at "[,=);]")))))
;; Valid declaration, process it.
@@ -760,12 +760,18 @@ CONTEXT is as in `c-forward-decl-or-cast-1'."
(eq (char-before) ?\())
(progn
(backward-char)
- (c-forward-sexp)
- (c-forward-syntactic-ws)
- (while (d-forward-attribute-or-storage-class 'top))
(or
- (eq (char-after) ?\{)
- (looking-at "=>"))))))
+ (save-excursion
+ (and
+ (c-backward-token-2)
+ (looking-at (d-make-keywords-re t '("foreach")))))
+ (progn
+ (c-forward-sexp)
+ (c-forward-syntactic-ws)
+ (while (d-forward-attribute-or-storage-class 'top))
+ (or
+ (eq (char-after) ?\{)
+ (looking-at "=>"))))))))
(setq res (cons 'varlist t))
;; (message " patching -> %S" res)
diff --git a/tests/fonts_lambda_params.d b/tests/fonts_lambda_params.d
index bc79b40..45f3902 100644
--- a/tests/fonts_lambda_params.d
+++ b/tests/fonts_lambda_params.d
@@ -3,3 +3,11 @@
auto dg = (Object a, Object b) {};
alias dg2 = (a, b) {};
+
+void fun()
+{
+ foreach (a; c) foo();
+ foreach (a, b; c) foo();
+ foreach (a; c) {}
+ foreach (a, b; c) {}
+}
diff --git a/tests/fonts_lambda_params.d.html b/tests/fonts_lambda_params.d.html
index cc8e711..3bddb49 100644
--- a/tests/fonts_lambda_params.d.html
+++ b/tests/fonts_lambda_params.d.html
@@ -3,3 +3,11 @@
</span>
<span class="keyword">auto</span> <span class="variable-name">dg</span> =
(<span class="type">Object</span> <span class="variable-name">a</span>, <span
class="type">Object</span> <span class="variable-name">b</span>) {};
<span class="keyword">alias</span> <span class="variable-name">dg2</span> =
(<span class="variable-name">a</span>, <span class="variable-name">b</span>) {};
+
+<span class="type">void</span> <span class="function-name">fun</span>()
+{
+ <span class="keyword">foreach</span> (<span
class="variable-name">a</span>; c) foo();
+ <span class="keyword">foreach</span> (<span
class="variable-name">a</span>, <span class="variable-name">b</span>; c) foo();
+ <span class="keyword">foreach</span> (<span
class="variable-name">a</span>; c) {}
+ <span class="keyword">foreach</span> (<span
class="variable-name">a</span>, <span class="variable-name">b</span>; c) {}
+}