]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix more flymake-diag-region eob corner cases and add tests (bug#29201)
authorJoão Távora <joaotavora@gmail.com>
Sat, 11 Nov 2017 23:44:52 +0000 (23:44 +0000)
committerJoão Távora <joaotavora@gmail.com>
Sat, 11 Nov 2017 23:44:52 +0000 (23:44 +0000)
* 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
test/lisp/progmodes/flymake-tests.el

index b4ab7f223f28a3a2addb193cb42c9cdddb5693d1..241ea00d64594fa4f1c746d40ac64d60974d965a 100644 (file)
@@ -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)))))))
index 05214e7a92762ddcaa07b8376528d397336dd5d4..bc194b69ccbd14a4a59f6cc23d78f170cb2012c7 100644 (file)
@@ -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