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

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

[nongnu] elpa/dart-mode a9899a9 182/192: Fontify abstract methods


From: ELPA Syncer
Subject: [nongnu] elpa/dart-mode a9899a9 182/192: Fontify abstract methods
Date: Sun, 29 Aug 2021 11:02:14 -0400 (EDT)

branch: elpa/dart-mode
commit a9899a9d9c9e6f046eceb868a7e6161c7d94a8d2
Author: Brady Trainor <mail@bradyt.net>
Commit: Brady Trainor <mail@bradyt.net>

    Fontify abstract methods
---
 dart-mode.el                                       | 47 +++++++++++++++++++++-
 .../interfaces-and-abstract-classes.dart.faceup    |  2 +-
 test/test.el                                       |  1 -
 3 files changed, 46 insertions(+), 4 deletions(-)

diff --git a/dart-mode.el b/dart-mode.el
index edffa20..0923fcb 100644
--- a/dart-mode.el
+++ b/dart-mode.el
@@ -268,6 +268,47 @@ For example, \"main\" in \"void main() async\" would be 
matched."
         (goto-char end))
       (throw 'result nil))))
 
+(defun dart--abstract-method-func (limit)
+  "Font-lock matcher function for abstract methods.
+
+Matches function declarations before LIMIT that look like,
+
+  \"  [^ ][^=]* lowercaseIdentifier([...]);\"
+
+For example, \"compareTo\" in \"  int compareTo(num other);\" would be
+matched."
+  (catch 'result
+    (let (beg end)
+      (while (re-search-forward
+              (rx (group (eval (dart--identifier 'lower))) ?\() limit t)
+        (setq beg (match-beginning 1))
+        (setq end (match-end 1))
+        (condition-case nil
+            (progn
+              (up-list)
+              (when (> (point) limit)
+                (throw 'result nil))
+              (unless (= (char-after (point)) ?\;)
+                (throw 'result nil))
+              (goto-char beg)
+              (back-to-indentation)
+              (unless (= (current-column) 2)
+                (throw 'result nil))
+              (unless (string-match-p
+                     " " (buffer-substring-no-properties
+                          (point) beg))
+                (throw 'result nil))
+              (when (string-match-p
+                     "=" (buffer-substring-no-properties
+                          (point) beg))
+                (throw 'result nil))
+              (goto-char end)
+              (set-match-data (list beg end))
+              (throw 'result t))
+          (scan-error nil))
+        (goto-char end))
+      (throw 'result nil))))
+
 (defun dart--declared-identifier-func (limit)
   "Font-lock matcher function for declared identifiers.
 
@@ -465,7 +506,8 @@ untyped parameters. For example, in
 (defvar dart-font-lock-keywords-1
   `((,(regexp-opt dart--file-directives 'words) . font-lock-builtin-face)
     (dart--function-declaration-func            . font-lock-function-name-face)
-    (,dart--operator-declaration-re             . (1 
font-lock-function-name-face))))
+    (,dart--operator-declaration-re             . (1 
font-lock-function-name-face))
+    (dart--abstract-method-func                 . 
font-lock-function-name-face)))
 
 (defvar dart-font-lock-keywords-2
   `(,dart--async-keywords-re
@@ -479,7 +521,8 @@ untyped parameters. For example, in
     (,(regexp-opt dart--types 'words)     . font-lock-type-face)
     (,dart--types-re                      . font-lock-type-face)
     (dart--function-declaration-func      . font-lock-function-name-face)
-    (,dart--operator-declaration-re       . (1 font-lock-function-name-face))))
+    (,dart--operator-declaration-re       . (1 font-lock-function-name-face))
+    (dart--abstract-method-func           . font-lock-function-name-face)))
 
 (defvar dart-font-lock-keywords-3
   (append
diff --git 
a/test/faceup/language-samples/interfaces-and-abstract-classes.dart.faceup 
b/test/faceup/language-samples/interfaces-and-abstract-classes.dart.faceup
index 4d7617c..221d320 100644
--- a/test/faceup/language-samples/interfaces-and-abstract-classes.dart.faceup
+++ b/test/faceup/language-samples/interfaces-and-abstract-classes.dart.faceup
@@ -3,7 +3,7 @@
 »}
 
 «b:abstract» «k:class» «t:Describable» {
-  «t:void» describe();
+  «t:void» «f:describe»();
 
   «t:void» «f:describeWithEmphasis»() {
     print(«s:'========='»);
diff --git a/test/test.el b/test/test.el
index a2b029e..a6e1c84 100644
--- a/test/test.el
+++ b/test/test.el
@@ -23,7 +23,6 @@
   (should (dart-font-lock-test-apps "faceup/language-samples/variables.dart")))
 
 (ert-deftest dart-font-lock-abstract-method-test ()
-  :expected-result :failed
   (should (dart-font-lock-test-apps "faceup/issues/abstract-methods.dart")))
 
 (ert-deftest dart-font-lock-covariant-test ()



reply via email to

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