emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] emacs-26 e286b33: Fix more flymake-diag-region eob corner


From: João Távora
Subject: [Emacs-diffs] emacs-26 e286b33: Fix more flymake-diag-region eob corner cases and add tests (bug#29201)
Date: Sat, 11 Nov 2017 18:52:53 -0500 (EST)

branch: emacs-26
commit e286b3381fa1be64174832560da963b1c0191640
Author: João Távora <address@hidden>
Commit: João Távora <address@hidden>

    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 b4ab7f2..241ea00 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 05214e7..bc194b6 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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]