emacs-elpa-diffs
[Top][All Lists]
Advanced

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

[nongnu] elpa/d-mode 46a57f4 310/346: Fontify the special words inside v


From: ELPA Syncer
Subject: [nongnu] elpa/d-mode 46a57f4 310/346: Fontify the special words inside version/debug/extern/pragma/__traits/scope
Date: Sun, 29 Aug 2021 11:00:51 -0400 (EDT)

branch: elpa/d-mode
commit 46a57f4df340bcf3f354515ed9e11a2ff362b942
Author: Vladimir Panteleev <git@thecybershadow.net>
Commit: Vladimir Panteleev <git@thecybershadow.net>

    Fontify the special words inside version/debug/extern/pragma/__traits/scope
---
 d-mode.el          | 34 ++++++++++++++++++++++++++++++++--
 tests/fonts.d      |  3 +++
 tests/fonts.d.html |  9 ++++++---
 3 files changed, 41 insertions(+), 5 deletions(-)

diff --git a/d-mode.el b/d-mode.el
index 2752529..9977ff1 100644
--- a/d-mode.el
+++ b/d-mode.el
@@ -7,7 +7,7 @@
 ;; Maintainer:  Russel Winder <russel@winder.org.uk>
 ;;              Vladimir Panteleev <vladimir@thecybershadow.net>
 ;; Created:  March 2007
-;; Version:  201911112326
+;; Version:  201911120023
 ;; Keywords:  D programming language emacs cc-mode
 ;; Package-Requires: ((emacs "25.1"))
 
@@ -282,7 +282,7 @@ operators."
 (c-lang-defconst c-paren-nontype-kwds
   ;;Keywords that may be followed by a parenthesis expression that doesn't
   ;; contain type identifiers.
-  d '("version" "debug" "extern" "macro" "mixin" "pragma"))
+  d '("version" "debug" "extern" "pragma" "__traits" "scope"))
 
 (c-lang-defconst d-type-modifier-kwds
   ;; D's type modifiers.
@@ -465,6 +465,29 @@ Evaluate OLD-FORM if the Emacs version is older than 
MIN-VERSION,
 
 ;;----------------------------------------------------------------------------
 
+(defun d-forward-keyword-clause (match)
+  "D version (complement) of `c-forward-keyword-clause'." ;; checkdoc-params: 
match
+
+  (let ((kwd-sym (c-keyword-sym (match-string match))) safe-pos pos)
+
+    (when kwd-sym
+      (goto-char (match-end match))
+      (c-forward-syntactic-ws)
+      (setq safe-pos (point))
+
+      (cond
+       ((and (c-keyword-member kwd-sym 'c-paren-nontype-kwds)
+            (eq (char-after) ?\())
+       (forward-char)
+       (c-forward-syntactic-ws)
+       (c-forward-keyword-prefixed-id ref)
+       (goto-char safe-pos)
+       (c-forward-sexp)
+       (c-forward-syntactic-ws)
+       t)))))
+
+;----------------------------------------------------------------------------
+
 (defun d-forward-decl-or-cast-1 (preceding-token-end context last-cast-end)
   "D version of `c-forward-decl-or-cast-1'." ;; checkdoc-params: 
(preceding-token-end context last-cast-end)
   ;; (message "(d-forward-decl-or-cast-1 %S %S %S) @ %S" preceding-token-end 
context last-cast-end (point))
@@ -1694,6 +1717,13 @@ Each list item should be a regexp matching a single 
identifier."
                    (c-make-keywords-re t (c-lang-const c-ref-list-kwds d) 'd))
             '((c-fontify-types-and-refs ()
                (d-forward-module-clause)
+               (if (> (point) limit) (goto-char limit)))))
+
+          (c-make-font-lock-BO-decl-search-function
+           (concat "\\_<"
+                   (c-make-keywords-re t (c-lang-const c-paren-nontype-kwds d) 
'd))
+            '((c-fontify-types-and-refs ()
+               (d-forward-keyword-clause 1)
                (if (> (point) limit) (goto-char limit))))))
      ;; cc-mode defaults
      (c-lang-const c-basic-matchers-after)))
diff --git a/tests/fonts.d b/tests/fonts.d
index 4081f79..509c798 100644
--- a/tests/fonts.d
+++ b/tests/fonts.d
@@ -19,6 +19,9 @@ static if (true) {} else void fun();
 
 scope(exit) fun();
 scope(exit) void fun();
+version(all) void fun();
+pragma(msg, "Hi!");
+enum x = true && __traits(compiles, true) && true;
 
 @property empty() { return false; }
 
diff --git a/tests/fonts.d.html b/tests/fonts.d.html
index 1f27fae..de7f887 100644
--- a/tests/fonts.d.html
+++ b/tests/fonts.d.html
@@ -12,13 +12,16 @@
        run(a ~ b);
 }
 
-<span class="keyword">version</span>(none) <span class="type">string</span> 
<span class="function-name">readLink</span>();
+<span class="keyword">version</span>(<span class="constant">none</span>) <span 
class="type">string</span> <span class="function-name">readLink</span>();
 
 <span class="keyword">static if</span> (<span class="constant">true</span>) {} 
<span class="keyword">else</span> fun();
 <span class="keyword">static if</span> (<span class="constant">true</span>) {} 
<span class="keyword">else</span> <span class="type">void</span> <span 
class="function-name">fun</span>();
 
-<span class="keyword">scope</span>(exit) fun();
-<span class="keyword">scope</span>(exit) <span class="type">void</span> <span 
class="function-name">fun</span>();
+<span class="keyword">scope</span>(<span class="constant">exit</span>) fun();
+<span class="keyword">scope</span>(<span class="constant">exit</span>) <span 
class="type">void</span> <span class="function-name">fun</span>();
+<span class="keyword">version</span>(<span class="constant">all</span>) <span 
class="type">void</span> <span class="function-name">fun</span>();
+<span class="keyword">pragma</span>(<span class="constant">msg</span>, <span 
class="string">&quot;Hi!&quot;</span>);
+<span class="keyword">enum</span> <span class="variable-name">x</span> = <span 
class="constant">true</span> &amp;&amp; <span 
class="keyword">__traits</span>(<span class="constant">compiles</span>, <span 
class="constant">true</span>) &amp;&amp; <span class="constant">true</span>;
 
 <span class="c-annotation-face">@property</span> <span 
class="function-name">empty</span>() { <span class="keyword">return</span> 
<span class="constant">false</span>; }
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]