[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] master 636e6b9 07/47: Add elisp comments and strings support.
From: |
Jackson Ray Hamilton |
Subject: |
[elpa] master 636e6b9 07/47: Add elisp comments and strings support. |
Date: |
Mon, 18 May 2015 09:51:41 +0000 |
branch: master
commit 636e6b9e655724be822605cb2971a2110bbd215f
Author: Jackson Ray Hamilton <address@hidden>
Commit: Jackson Ray Hamilton <address@hidden>
Add elisp comments and strings support.
---
context-coloring.el | 22 ++++++-
test/context-coloring-test.el | 132 +++++++++++++++++++++++++----------------
test/fixtures/comment.el | 3 +
test/fixtures/string.el | 2 +
4 files changed, 104 insertions(+), 55 deletions(-)
diff --git a/context-coloring.el b/context-coloring.el
index d5da9da..92e4578 100644
--- a/context-coloring.el
+++ b/context-coloring.el
@@ -345,6 +345,10 @@ generated by `js2-mode'."
(or (= 2 syntax-code)
(= 3 syntax-code)))
+(defun context-coloring-forward-sws ()
+ "Move forward through whitespace and comments."
+ (while (forward-comment 1)))
+
(defun context-coloring-emacs-lisp-colorize ()
"Color the current buffer by parsing emacs lisp sexps."
(with-silent-modifications
@@ -395,6 +399,18 @@ generated by `js2-mode'."
(1+ token-pos))))
(cond
+ ;; Resolve invalid state
+ ((cond
+ ;; Inside string?
+ ((nth 3 ppss)
+ (skip-syntax-forward "^\"" end)
+ (forward-char)
+ t)
+ ;; Inside comment?
+ ((nth 4 ppss)
+ (skip-syntax-forward "^>" end) ; comment ender
+ t)))
+
;; Expression prefix
;; Has to come first in case of commas
((= 6 token-syntax-code)
@@ -426,7 +442,7 @@ generated by `js2-mode'."
((= 4 token-syntax-code)
(forward-char)
;; Lookahead for scopes / function calls
- (skip-syntax-forward " " end)
+ (context-coloring-forward-sws)
(setq child-0-pos (point))
(setq child-0-syntax (syntax-after child-0-pos))
(setq child-0-syntax-code (logand #xFFFF (car child-0-syntax)))
@@ -463,7 +479,7 @@ generated by `js2-mode'."
(goto-char child-0-end)
(when in-defun-p
;; Lookahead for defun name
- (skip-syntax-forward " " end)
+ (context-coloring-forward-sws)
(setq child-1-pos (point))
(setq child-1-syntax (syntax-after child-1-pos))
(setq child-1-syntax-code (logand #xFFFF (car child-1-syntax)))
@@ -475,7 +491,7 @@ generated by `js2-mode'."
(context-coloring-colorize-region child-1-pos child-1-end 0)
(goto-char child-1-end))))
;; Lookahead for parameters
- (skip-syntax-forward " " end)
+ (context-coloring-forward-sws)
(when (= 4 (logand #xFFFF (car (syntax-after (point)))))
(setq child-2-end (scan-sexps (point) 1))
(setq defun-arglist (read (buffer-substring-no-properties
diff --git a/test/context-coloring-test.el b/test/context-coloring-test.el
index 95c52e0..192d2ef 100644
--- a/test/context-coloring-test.el
+++ b/test/context-coloring-test.el
@@ -44,13 +44,12 @@
(defun context-coloring-test-setup ()
"Prepare before all tests."
- (setq context-coloring-comments-and-strings nil))
+ (setq context-coloring-syntactic-comments nil)
+ (setq context-coloring-syntactic-strings nil))
(defun context-coloring-test-cleanup ()
"Cleanup after all tests."
- (setq context-coloring-comments-and-strings t)
- (setq context-coloring-syntactic-comments nil)
- (setq context-coloring-syntactic-strings nil)
+ (setq context-coloring-comments-and-strings nil)
(setq context-coloring-js-block-scopes nil)
(setq context-coloring-colorize-hook nil)
(setq context-coloring-check-scopifier-version-hook nil)
@@ -167,24 +166,22 @@ format."
',setup-function-name
(,function-name)))))
-(defmacro context-coloring-test-emacs-lisp-mode (fixture &rest body)
- "Use FIXTURE as the subject matter for test logic in BODY."
- `(context-coloring-test-with-fixture
- ,fixture
- (emacs-lisp-mode)
- (context-coloring-mode)
- ,@body))
-
-(defmacro context-coloring-test-deftest-emacs-lisp-mode (name &rest body)
+(cl-defmacro context-coloring-test-deftest-emacs-lisp-mode (name
+ body
+ &key setup)
"Define a test for `emacs-lisp-mode' with name and fixture as
-NAME, with BODY containing the assertions."
+NAME, with BODY containing the assertions, and SETUP defining the
+environment."
(declare (indent defun))
(let ((test-name (intern (format "context-coloring-emacs-lisp-mode-%s"
name)))
(fixture (format "./fixtures/%s.el" name)))
`(ert-deftest ,test-name ()
- (context-coloring-test-emacs-lisp-mode
+ (context-coloring-test-with-fixture
,fixture
- ,@body))))
+ (emacs-lisp-mode)
+ (when ,setup (funcall ,setup))
+ (context-coloring-mode)
+ (funcall ,body)))))
;;; Assertion functions
@@ -1008,46 +1005,77 @@ see that function."
(context-coloring-test-deftest-js2-mode unterminated-comment)
(context-coloring-test-deftest-emacs-lisp-mode defun
- (context-coloring-test-assert-region-level 1 8 1) ; (defun
- (context-coloring-test-assert-region-level 8 11 0) ; abc
- (context-coloring-test-assert-region-level 11 39 1) ; (def ghi &optional
jkl) (
- (context-coloring-test-assert-region-level 39 40 0) ; +
- (context-coloring-test-assert-region-level 40 53 1) ; def ghi jkl
- (context-coloring-test-assert-region-level 53 57 0) ; free
- (context-coloring-test-assert-region-level 57 59 1) ; ))
- (context-coloring-test-assert-region-level 61 72 0) ; (abc 1 2 3)
- (context-coloring-test-assert-region-level 74 81 1) ; (defun
- (context-coloring-test-assert-region-level 81 82 0) ; a
- (context-coloring-test-assert-region-level 82 83 1) ; )
- (context-coloring-test-assert-region-level 84 94 1)) ; (defun ())
+ (lambda ()
+ (context-coloring-test-assert-region-level 1 8 1) ; (defun
+ (context-coloring-test-assert-region-level 8 11 0) ; abc
+ (context-coloring-test-assert-region-level 11 39 1) ; (def ghi &optional
jkl) (
+ (context-coloring-test-assert-region-level 39 40 0) ; +
+ (context-coloring-test-assert-region-level 40 53 1) ; def ghi jkl
+ (context-coloring-test-assert-region-level 53 57 0) ; free
+ (context-coloring-test-assert-region-level 57 59 1) ; ))
+ (context-coloring-test-assert-region-level 61 72 0) ; (abc 1 2 3)
+ (context-coloring-test-assert-region-level 74 81 1) ; (defun
+ (context-coloring-test-assert-region-level 81 82 0) ; a
+ (context-coloring-test-assert-region-level 82 83 1) ; )
+ (context-coloring-test-assert-region-level 84 94 1) ; (defun ())
+ ))
(context-coloring-test-deftest-emacs-lisp-mode lambda
- (context-coloring-test-assert-region-level 1 10 0) ; (funcall
- (context-coloring-test-assert-region-level 10 35 1) ; (lambda (fn) (
- (context-coloring-test-assert-region-level 35 42 0) ; funcall
- (context-coloring-test-assert-region-level 42 46 1) ; fn
- (context-coloring-test-assert-region-level 46 85 2) ; (lambda (fn) (
- (context-coloring-test-assert-region-level 85 87 0) ; fn
- (context-coloring-test-assert-region-level 87 98 2) ; fn fn) fn)
- (context-coloring-test-assert-region-level 98 103 1) ; ) fn)
- (context-coloring-test-assert-region-level 103 106 0)) ; 0)
+ (lambda ()
+ (context-coloring-test-assert-region-level 1 10 0) ; (funcall
+ (context-coloring-test-assert-region-level 10 35 1) ; (lambda (fn) (
+ (context-coloring-test-assert-region-level 35 42 0) ; funcall
+ (context-coloring-test-assert-region-level 42 46 1) ; fn
+ (context-coloring-test-assert-region-level 46 85 2) ; (lambda (fn) (
+ (context-coloring-test-assert-region-level 85 87 0) ; fn
+ (context-coloring-test-assert-region-level 87 98 2) ; fn fn) fn)
+ (context-coloring-test-assert-region-level 98 103 1) ; ) fn)
+ (context-coloring-test-assert-region-level 103 106 0) ; 0)
+ ))
(context-coloring-test-deftest-emacs-lisp-mode quote
- (context-coloring-test-assert-region-level 26 28 1) ; 'b
- (context-coloring-test-assert-region-level 45 51 1) ; '(a b)
- (context-coloring-test-assert-region-level 68 72 1) ; `(,
- (context-coloring-test-assert-region-level 72 78 0) ; append
- (context-coloring-test-assert-region-level 78 90 1) ; () `(a b ,(
- (context-coloring-test-assert-region-level 90 91 0) ; +
- (context-coloring-test-assert-region-level 91 94 1) ; 1
- (context-coloring-test-assert-region-level 94 98 0) ; free
- (context-coloring-test-assert-region-level 98 101 1) ; ) ,
- (context-coloring-test-assert-region-level 101 105 0) ; free
- (context-coloring-test-assert-region-level 105 109 1) ; ) b)
- (context-coloring-test-assert-region-level 109 113 0) ; free
- (context-coloring-test-assert-region-level 113 118 1) ; ) b ,
- (context-coloring-test-assert-region-level 118 122 0) ; ) free
- (context-coloring-test-assert-region-level 122 126 1)) ; ))))
+ (lambda ()
+ (context-coloring-test-assert-region-level 26 28 1) ; 'b
+ (context-coloring-test-assert-region-level 45 51 1) ; '(a b)
+ (context-coloring-test-assert-region-level 68 72 1) ; `(,
+ (context-coloring-test-assert-region-level 72 78 0) ; append
+ (context-coloring-test-assert-region-level 78 90 1) ; () `(a b ,(
+ (context-coloring-test-assert-region-level 90 91 0) ; +
+ (context-coloring-test-assert-region-level 91 94 1) ; 1
+ (context-coloring-test-assert-region-level 94 98 0) ; free
+ (context-coloring-test-assert-region-level 98 101 1) ; ) ,
+ (context-coloring-test-assert-region-level 101 105 0) ; free
+ (context-coloring-test-assert-region-level 105 109 1) ; ) b)
+ (context-coloring-test-assert-region-level 109 113 0) ; free
+ (context-coloring-test-assert-region-level 113 118 1) ; ) b ,
+ (context-coloring-test-assert-region-level 118 122 0) ; ) free
+ (context-coloring-test-assert-region-level 122 126 1) ; ))))
+ ))
+
+(context-coloring-test-deftest-emacs-lisp-mode comment
+ (lambda ()
+ ;; Just check that the comment isn't parsed syntactically.
+ (context-coloring-test-assert-region-comment-delimiter 39 41) ; ;
+ (context-coloring-test-assert-region-comment 41 49) ; 96 = '`'
+ (context-coloring-test-assert-region-level 57 58 0) ; =
+ )
+ :setup (lambda ()
+ (setq context-coloring-syntactic-comments t)))
+
+(context-coloring-test-deftest-emacs-lisp-mode string
+ (lambda ()
+ ;; Ensure the string is evaded.
+ (context-coloring-test-assert-region-string 28 31) ; "("
+ (context-coloring-test-assert-region-level 32 33 1) ; a
+ (context-coloring-test-assert-region-level 34 35 0) ; b
+ (context-coloring-test-assert-region-string 36 41) ; "(\""
+ (context-coloring-test-assert-region-level 42 43 0) ; b
+ (context-coloring-test-assert-region-level 44 45 1) ; a
+ (context-coloring-test-assert-region-string 46 53) ; "(\"\""
+ (context-coloring-test-assert-region-level 53 55 1) ; ))
+ )
+ :setup (lambda ()
+ (setq context-coloring-syntactic-strings t)))
(provide 'context-coloring-test)
diff --git a/test/fixtures/comment.el b/test/fixtures/comment.el
new file mode 100644
index 0000000..c3ba432
--- /dev/null
+++ b/test/fixtures/comment.el
@@ -0,0 +1,3 @@
+(defun a ()
+ (or (= token-char 96) ; 96 = '`'
+ (= token-char 44))) ; 44 = ','
diff --git a/test/fixtures/string.el b/test/fixtures/string.el
new file mode 100644
index 0000000..4172642
--- /dev/null
+++ b/test/fixtures/string.el
@@ -0,0 +1,2 @@
+(defun a (a)
+ (concat a b "(" a b "(\"" b a "(\"\""))
- [elpa] master updated (e42b97b -> b525e2d), Jackson Ray Hamilton, 2015/05/18
- [elpa] master 056be97 01/47: Add URL to header., Jackson Ray Hamilton, 2015/05/18
- [elpa] master eb429df 02/47: Use lowercase for hex codes., Jackson Ray Hamilton, 2015/05/18
- [elpa] master 5e34bec 04/47: Cover malformed defun cases., Jackson Ray Hamilton, 2015/05/18
- [elpa] master d9d901f 03/47: Add basic elisp defun coloring., Jackson Ray Hamilton, 2015/05/18
- [elpa] master 8919acd 05/47: Add lambda coloring., Jackson Ray Hamilton, 2015/05/18
- [elpa] master 62506ae 06/47: Add quote and number coloring., Jackson Ray Hamilton, 2015/05/18
- [elpa] master 284cfa6 08/47: Don't treat unbindables like variables., Jackson Ray Hamilton, 2015/05/18
- [elpa] master 636e6b9 07/47: Add elisp comments and strings support.,
Jackson Ray Hamilton <=
- [elpa] master 3e3141f 09/47: Refactor elisp tests to use visual assertions., Jackson Ray Hamilton, 2015/05/18
- [elpa] master 171883f 13/47: Add let coloring., Jackson Ray Hamilton, 2015/05/18
- [elpa] master 58b7474 11/47: Don't color function calls as level 0., Jackson Ray Hamilton, 2015/05/18
- [elpa] master dd8d491 12/47: Also color defsubst., Jackson Ray Hamilton, 2015/05/18
- [elpa] master 5acd088 10/47: Add non-recursive let* coloring., Jackson Ray Hamilton, 2015/05/18
- [elpa] master c830ae5 15/47: Fix let* test., Jackson Ray Hamilton, 2015/05/18
- [elpa] master b4072c1 14/47: Trivial refactoring for clarity., Jackson Ray Hamilton, 2015/05/18
- [elpa] master 926d74a 17/47: Include binding order in let* test., Jackson Ray Hamilton, 2015/05/18
- [elpa] master 29328af 18/47: Add let test., Jackson Ray Hamilton, 2015/05/18
- [elpa] master ea3ff31 16/47: Pass let* test., Jackson Ray Hamilton, 2015/05/18