From e286b3381fa1be64174832560da963b1c0191640 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jo=C3=A3o=20T=C3=A1vora?= Date: Sat, 11 Nov 2017 23:44:52 +0000 Subject: [PATCH] Fix more flymake-diag-region eob corner cases and add tests (bug#29201) * lisp/progmodes/flymake.el (flymake-diag-region): Correct more eob corner cases. * test/lisp/progmodes/flymake-tests.el (eob-region-and-trailing-newline): New test. --- lisp/progmodes/flymake.el | 16 ++++++++------ test/lisp/progmodes/flymake-tests.el | 32 ++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 6 deletions(-) diff --git a/lisp/progmodes/flymake.el b/lisp/progmodes/flymake.el index b4ab7f223f2..241ea00d645 100644 --- a/lisp/progmodes/flymake.el +++ b/lisp/progmodes/flymake.el @@ -318,7 +318,11 @@ region is invalid." (goto-char (point-min)) (forward-line (1- line)) (cl-flet ((fallback-bol - () (progn (back-to-indentation) (point))) + () + (back-to-indentation) + (if (eobp) + (line-beginning-position 0) + (point))) (fallback-eol (beg) (progn @@ -335,11 +339,11 @@ region is invalid." (not (= sexp-end beg)) sexp-end) (and (< (goto-char (1+ beg)) (point-max)) - (point)))) - (safe-end (or end - (fallback-eol beg)))) - (cons (if end beg (fallback-bol)) - safe-end)) + (point))))) + (if end + (cons beg end) + (cons (setq beg (fallback-bol)) + (fallback-eol beg)))) (let* ((beg (fallback-bol)) (end (fallback-eol beg))) (cons beg end))))))) diff --git a/test/lisp/progmodes/flymake-tests.el b/test/lisp/progmodes/flymake-tests.el index 05214e7a927..bc194b69ccb 100644 --- a/test/lisp/progmodes/flymake-tests.el +++ b/test/lisp/progmodes/flymake-tests.el @@ -333,6 +333,38 @@ SEVERITY-PREDICATE is used to setup (should-error (flymake-goto-prev-error nil nil t)) ))))) +(ert-deftest eob-region-and-trailing-newline () + "`flymake-diag-region' at eob with varying trailing newlines." + (cl-flet ((diag-region-substring + (line col) + (pcase-let + ((`(,a . ,b) (flymake-diag-region (current-buffer) line col))) + (buffer-substring a b)))) + (with-temp-buffer + (insert "beg\nmmm\nend") + (should (equal + (diag-region-substring 3 3) + "d")) + (should (equal + (diag-region-substring 3 nil) + "end")) + (insert "\n") + (should (equal + (diag-region-substring 4 1) + "end")) + (should (equal + (diag-region-substring 4 nil) + "end")) + (insert "\n") + (should (equal + (diag-region-substring 5 1) + "\n")) + (should (equal + (diag-region-substring 5 nil) + "\n"))))) + + + (provide 'flymake-tests) ;;; flymake.el ends here -- 2.39.5