branch: master
commit 08e2981a2a8a2fe816194f1e9ea5021c92c7b754
Author: Jackson Ray Hamilton <jack...@jacksonrayhamilton.com>
Commit: Jackson Ray Hamilton <jack...@jacksonrayhamilton.com>

    Swallow scan errors.
---
 context-coloring.el                     |   44 +++++++++++++++++--------------
 test/context-coloring-test.el           |    6 ++++
 test/fixtures/unbalanced-parenthesis.el |    2 +
 3 files changed, 32 insertions(+), 20 deletions(-)

diff --git a/context-coloring.el b/context-coloring.el
index b57cfb3..d296f0d 100644
--- a/context-coloring.el
+++ b/context-coloring.el
@@ -948,26 +948,30 @@ scopes and variables."
   (interactive)
   (with-silent-modifications
     (save-excursion
-      (cond
-       ;; Just colorize the changed region.
-       (context-coloring-changed-p
-        (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)))))))
+      (condition-case nil
+          (cond
+           ;; Just colorize the changed region.
+           (context-coloring-changed-p
+            (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))))
+        ;; Scan errors can happen virtually anywhere if parenthesis are
+        ;; unbalanced.  Just swallow them.  (`progn' for test coverage.)
+        (scan-error (progn))))))
 
 
 ;;; Shell command scopification / colorization
diff --git a/test/context-coloring-test.el b/test/context-coloring-test.el
index deb40fb..95a081d 100644
--- a/test/context-coloring-test.el
+++ b/test/context-coloring-test.el
@@ -1245,6 +1245,12 @@ nnnn  n nnn nnnnnnnn
 0000
 nnnnn n nnn nnnnnnnn")))
 
+(context-coloring-test-deftest-emacs-lisp unbalanced-parenthesis
+  (lambda ()
+    (context-coloring-test-assert-coloring "
+1111 111
+nnnn nn")))
+
 (provide 'context-coloring-test)
 
 ;;; context-coloring-test.el ends here
diff --git a/test/fixtures/unbalanced-parenthesis.el 
b/test/fixtures/unbalanced-parenthesis.el
new file mode 100644
index 0000000..caaf7e2
--- /dev/null
+++ b/test/fixtures/unbalanced-parenthesis.el
@@ -0,0 +1,2 @@
+(let ())
+(let ()

Reply via email to