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

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

[elpa] master d2e08e8 62/79: Improve and test lazy coloring.


From: Jackson Ray Hamilton
Subject: [elpa] master d2e08e8 62/79: Improve and test lazy coloring.
Date: Sun, 14 Jun 2015 00:05:43 +0000

branch: master
commit d2e08e874ced07c2b3372df23f338910fda240c4
Author: Jackson Ray Hamilton <address@hidden>
Commit: Jackson Ray Hamilton <address@hidden>

    Improve and test lazy coloring.
---
 context-coloring.el           |   20 ++++++++++++++------
 test/context-coloring-test.el |   31 +++++++++++++++++++++++++++++++
 test/fixtures/changed.el      |    5 +++++
 3 files changed, 50 insertions(+), 6 deletions(-)

diff --git a/context-coloring.el b/context-coloring.el
index 0d860ac..b57cfb3 100644
--- a/context-coloring.el
+++ b/context-coloring.el
@@ -951,12 +951,20 @@ scopes and variables."
       (cond
        ;; Just colorize the changed region.
        (context-coloring-changed-p
-        (let ((start (progn (goto-char context-coloring-changed-start)
-                            (beginning-of-defun)
-                            (point)))
-              (end (progn (goto-char context-coloring-changed-end)
-                          (end-of-defun)
-                          (point))))
+        (let* (;; Prevent `beginning-of-defun' from making poor assumptions.
+               (open-paren-in-column-0-is-defun-start nil)
+               ;; Seek the beginning and end of the previous and next offscreen
+               ;; defuns, so just enough is colored.
+               (start (progn (goto-char context-coloring-changed-start)
+                             (while (and (< (point-min) (point))
+                                         (pos-visible-in-window-p))
+                               (beginning-of-defun))
+                             (point)))
+               (end (progn (goto-char context-coloring-changed-end)
+                           (while (and (> (point-max) (point))
+                                       (pos-visible-in-window-p))
+                             (end-of-defun))
+                           (point))))
           (context-coloring-elisp-colorize-region-initially start end)))
        (t
         (context-coloring-elisp-colorize-region-initially (point-min) 
(point-max)))))))
diff --git a/test/context-coloring-test.el b/test/context-coloring-test.el
index 0d226ba..deb40fb 100644
--- a/test/context-coloring-test.el
+++ b/test/context-coloring-test.el
@@ -25,6 +25,7 @@
 
 ;;; Code:
 
+(require 'cl-lib)
 (require 'context-coloring)
 (require 'ert-async)
 (require 'js2-mode)
@@ -1214,6 +1215,36 @@ cc `CC' `CC'
 cc `CC' `CC'
 nnnnnn n nnn"))))
 
+(context-coloring-test-deftest-emacs-lisp changed
+  (lambda ()
+    (context-coloring-test-remove-faces)
+    ;; Goto line 3.
+    (goto-char (point-min))
+    (forward-line (1- 3))
+    (insert " ")
+    ;; Mock `pos-visible-in-window-p' because in batch mode `get-buffer-window'
+    ;; returns nil.  Emacs must not have a window in that environment.
+    (cl-letf (((symbol-function 'pos-visible-in-window-p)
+               (let ((calls 0))
+                 (lambda ()
+                   (prog1
+                       ;; First and third calls start from center.  Second and
+                       ;; fourth calls are made immediately after moving past
+                       ;; the first defun in either direction "off screen".
+                       (cond
+                        ((= calls 0) t)
+                        ((= calls 1) nil)
+                        ((= calls 2) t)
+                        ((= calls 4) nil))
+                     (setq calls (1+ calls)))))))
+      (context-coloring-colorize))
+    (context-coloring-test-assert-coloring "
+nnnn  n nnn nnnnnnnn
+0000
+
+0000
+nnnnn n nnn nnnnnnnn")))
+
 (provide 'context-coloring-test)
 
 ;;; context-coloring-test.el ends here
diff --git a/test/fixtures/changed.el b/test/fixtures/changed.el
new file mode 100644
index 0000000..28c9602
--- /dev/null
+++ b/test/fixtures/changed.el
@@ -0,0 +1,5 @@
+(l1)  ; Not colored.
+(l2)
+
+(l4)
+(l5)  ; Not colored.



reply via email to

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