[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
master 55083d9: Avoid jumping too far in checkdoc-in-abbreviation-p
From: |
Stefan Kangas |
Subject: |
master 55083d9: Avoid jumping too far in checkdoc-in-abbreviation-p |
Date: |
Thu, 23 Sep 2021 16:36:44 -0400 (EDT) |
branch: master
commit 55083d90a30628d9eaa5b94196291ca15098aed0
Author: Stefan Kangas <stefan@marxist.se>
Commit: Stefan Kangas <stefan@marxist.se>
Avoid jumping too far in checkdoc-in-abbreviation-p
* lisp/emacs-lisp/checkdoc.el (checkdoc-in-abbreviation-p): Use
'forward-ward' instead of 'forward-sexp' to avoid jumping too far in
some situations. (Bug#50731)
* test/lisp/emacs-lisp/checkdoc-tests.el
(checkdoc-tests--abbrev-test): New helper function.
(checkdoc-tests-in-abbrevation-p/basic-case): Rename from
'checkdoc-tests-in-abbrevation-p'.
(checkdoc-tests-in-abbrevation-p/with-parens)
(checkdoc-tests-in-abbrevation-p/with-escaped-parens): Use above new
helper function.
(checkdoc-tests-in-abbrevation-p/single-char)
(checkdoc-tests-in-abbrevation-p/with-em-dash)
(checkdoc-tests-in-abbrevation-p/incorrect-abbreviation): New tests.
---
lisp/emacs-lisp/checkdoc.el | 42 +++++++++++++++++++---------------
test/lisp/emacs-lisp/checkdoc-tests.el | 34 ++++++++++++++-------------
2 files changed, 41 insertions(+), 35 deletions(-)
diff --git a/lisp/emacs-lisp/checkdoc.el b/lisp/emacs-lisp/checkdoc.el
index 5224a94..4243e82 100644
--- a/lisp/emacs-lisp/checkdoc.el
+++ b/lisp/emacs-lisp/checkdoc.el
@@ -2097,27 +2097,31 @@ Examples of abbreviations handled: \"e.g.\", \"i.e.\",
\"cf.\"."
(save-excursion
(goto-char begin)
(condition-case nil
- (progn
- (forward-sexp -1)
+ (let ((single-letter t))
+ (forward-word -1)
+ ;; Skip over all dots backwards, as `forward-word' will only
+ ;; go one dot at a time in a string like "e.g.".
+ (while (save-excursion (forward-char -1)
+ (looking-at (rx ".")))
+ (setq single-letter nil)
+ (forward-word -1))
;; Piece of an abbreviation.
(looking-at
- (rx (or letter ; single letter, as in "a."
- (seq
- ;; There might exist an escaped parenthesis, as
- ;; this is often used in docstrings. In this
- ;; case, `forward-sexp' will have skipped over it,
- ;; so we need to skip it here too.
- (? "\\(")
- ;; The abbreviations:
- (or (seq (any "cC") "f") ; cf.
- (seq (any "eE") ".g") ; e.g.
- (seq (any "iI") "." (any "eE")))) ; i.e.
- "etc" ; etc.
- "vs" ; vs.
- ;; Some non-standard or less common ones that we
- ;; might as well ignore.
- "Inc" "Univ" "misc" "resp")
- ".")))
+ (if single-letter
+ ;; Handle a single letter, as in "a.", as this might be
+ ;; a part of a list.
+ (rx letter ".")
+ (rx (or
+ ;; The abbreviations:
+ (seq (or (seq (any "cC") "f") ; cf.
+ (seq (any "eE") ".g") ; e.g.
+ (seq (any "iI") "." (any "eE")))) ; i.e.
+ "etc" ; etc.
+ "vs" ; vs.
+ ;; Some non-standard or less common ones that we
+ ;; might as well ignore.
+ "Inc" "Univ" "misc" "resp")
+ "."))))
(error t))))
(defun checkdoc-proper-noun-region-engine (begin end)
diff --git a/test/lisp/emacs-lisp/checkdoc-tests.el
b/test/lisp/emacs-lisp/checkdoc-tests.el
index 3eb7da3..13b6d13 100644
--- a/test/lisp/emacs-lisp/checkdoc-tests.el
+++ b/test/lisp/emacs-lisp/checkdoc-tests.el
@@ -122,29 +122,31 @@ See the comments in Bug#24998."
(should (looking-at-p "\"baz\")"))
(should-not (checkdoc-next-docstring))))
-(ert-deftest checkdoc-tests-in-abbrevation-p ()
+(defun checkdoc-tests--abbrev-test (buffer-contents goto-string)
(with-temp-buffer
(emacs-lisp-mode)
- (insert "foo bar e.g. baz")
+ (insert buffer-contents)
(goto-char (point-min))
- (re-search-forward "e.g")
- (should (checkdoc-in-abbreviation-p (point)))))
+ (re-search-forward goto-string)
+ (checkdoc-in-abbreviation-p (point))))
+
+(ert-deftest checkdoc-tests-in-abbrevation-p/basic-case ()
+ (should (checkdoc-tests--abbrev-test "foo bar e.g. baz" "e.g")))
(ert-deftest checkdoc-tests-in-abbrevation-p/with-parens ()
- (with-temp-buffer
- (emacs-lisp-mode)
- (insert "foo bar (e.g. baz)")
- (goto-char (point-min))
- (re-search-forward "e.g")
- (should (checkdoc-in-abbreviation-p (point)))))
+ (should (checkdoc-tests--abbrev-test "foo bar (e.g. baz)" "e.g")))
(ert-deftest checkdoc-tests-in-abbrevation-p/with-escaped-parens ()
- (with-temp-buffer
- (emacs-lisp-mode)
- (insert "foo\n\\(e.g. baz)")
- (goto-char (point-min))
- (re-search-forward "e.g")
- (should (checkdoc-in-abbreviation-p (point)))))
+ (should (checkdoc-tests--abbrev-test "foo\n\\(e.g. baz)" "e.g")))
+
+(ert-deftest checkdoc-tests-in-abbrevation-p/single-char ()
+ (should (checkdoc-tests--abbrev-test "a. foo bar" "a")))
+
+(ert-deftest checkdoc-tests-in-abbrevation-p/with-em-dash ()
+ (should (checkdoc-tests--abbrev-test "foo bar baz---e.g." "e.g")))
+
+(ert-deftest checkdoc-tests-in-abbrevation-p/incorrect-abbreviation ()
+ (should-not (checkdoc-tests--abbrev-test "foo bar a.b.c." "a.b.c")))
(ert-deftest checkdoc-tests-fix-y-or-n-p ()
(with-temp-buffer
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- master 55083d9: Avoid jumping too far in checkdoc-in-abbreviation-p,
Stefan Kangas <=