summaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
authorVladimir Kazanov <vekazanov@gmail.com>2024-03-12 11:14:54 +0000
committerEli Zaretskii <eliz@gnu.org>2024-03-28 11:40:27 +0200
commitcdd7093e17a33a6efc4721af461af180e5af602d (patch)
treea9b5fc7f0faeeca3c2739da076f2cc038a9b4298 /doc
parent35ae2c576b8570da7b2e791991ad852c648be896 (diff)
downloademacs-cdd7093e17a33a6efc4721af461af180e5af602d.tar.gz
Improve ert-font-lock assertion parser (Bug#69714)
Fail on files with no assertions, parser now accepts multiple carets per line and face lists: * lisp/emacs-lisp/ert-font-lock.el: Assertion parser fix. * test/lisp/emacs-lisp/ert-font-lock-resources/no-asserts.js: * test/lisp/emacs-lisp/ert-font-lock-tests.el (test-parse-comments--no-assertion-error) (test-syntax-highlight-inline--caret-negated-wrong-face) (test-macro-test--file-no-asserts): New test cases. * doc/misc/ert.texi (Syntax Highlighting Tests): More syntax examples.
Diffstat (limited to 'doc')
-rw-r--r--doc/misc/ert.texi45
1 files changed, 40 insertions, 5 deletions
diff --git a/doc/misc/ert.texi b/doc/misc/ert.texi
index bd2ad495142..8767de71496 100644
--- a/doc/misc/ert.texi
+++ b/doc/misc/ert.texi
@@ -951,11 +951,13 @@ that assigns face properties to parts of the buffer. The
@code{ert-font-lock} package makes it possible to introduce unit tests
checking face assignment. Test assertions are included in code-level
comments directly and can be read either from inline strings or files.
+The parser expects the input string to contain at least one assertion.
Test assertion parser extracts tests from comment-only lines. Every
-comment assertion line starts either with a caret (@samp{^}) or an
-arrow (@samp{<-}). A caret/arrow should be followed immediately by the
-name of a face to be checked.
+comment assertion line starts either with a caret (@samp{^}) or an arrow
+(@samp{<-}). A single caret/arrow or carets should be followed
+immediately by the name of a face or a list of faces to be checked
+against the @code{:face} property at point.
The test then checks if the first non-assertion column above the caret
contains a face expected by the assertion:
@@ -967,10 +969,43 @@ var variable = 11;
// ^ font-lock-punctuation-face
// this is not an assertion, it's just a comment
// ^ font-lock-comment-face
+
+// multiple carets per line
+// ^^^^ ^ ^ font-lock-comment-face
+@end example
+
+Both symbol-only @code{:face} property values and assertion face values
+are normalized to single element lists so assertions below are
+equivalent:
+
+@example
+// single
+// ^ font-lock-comment-face
+// single
+// ^ (font-lock-comment-face)
+@end example
+
+Assertions can be negated:
+
+@example
+var variable = 11;
+// ^ !font-lock-comment-face
+@end example
+
+It is possible to specify face lists in assertions:
+
+@example
+// TODO
+// ^^^^ (font-lock-comment-face hl-todo)
+ var test = 1;
+// ^ ()
+// ^ nil
+// negation works as expected
+// ^ !nil
@end example
-The arrow means that the first non-empty column of the assertion line
-will be used for the check:
+The arrow (@samp{<-}) means that the first non-empty column of the
+assertion line will be used for the check:
@example
var variable = 1;