]> code.delx.au - gnu-emacs/commitdiff
Handle "empty line" regexp in xref searches
authorDmitry Gutov <dgutov@yandex.ru>
Tue, 3 May 2016 22:59:29 +0000 (01:59 +0300)
committerDmitry Gutov <dgutov@yandex.ru>
Tue, 3 May 2016 22:59:29 +0000 (01:59 +0300)
* lisp/progmodes/xref.el (xref--collect-matches-1): Stop after one
match if re-search-forward doesn't move point (bug#23426).

* test/automated/xref-tests.el
(xref-collect-matches-finds-an-empty-line-regexp-match):
Uncomment test.

lisp/progmodes/xref.el
test/automated/xref-tests.el

index 540c7b0e92573e518fc8910a0ac63479d860bf01..62cef23598873805e0d5efabd2009e0a4f8d3d3f 100644 (file)
@@ -1016,7 +1016,11 @@ directory, used as the root of the ignore globs."
     (syntax-propertize line-end)
     ;; FIXME: This results in several lines with the same
     ;; summary. Solve with composite pattern?
-    (while (re-search-forward regexp line-end t)
+    (while (and
+            ;; REGEXP might match an empty string.  Or line.
+            (or (null matches)
+                (> (point) line-beg))
+            (re-search-forward regexp line-end t))
       (let* ((beg-column (- (match-beginning 0) line-beg))
              (end-column (- (match-end 0) line-beg))
              (loc (xref-make-file-location file line beg-column))
index 1b500c3c418551d6a4859509a9172111000b3b0d..28ca3511c228276d8eb9aa4f15403f9184474a82 100644 (file)
     (should (equal 0 (xref-file-location-column (nth 0 locs))))
     (should (equal 4 (xref-file-location-column (nth 1 locs))))))
 
-;; (ert-deftest xref-collect-matches-finds-an-empty-line-regexp-match ()
-;;   (let* ((matches (xref-collect-matches "^$" "*" xref-tests-data-dir nil))
-;;          (locs (mapcar #'xref-item-location matches)))
-;;     (should (= 1 (length matches)))
-;;     (should (string-match-p "file2\\.txt\\'" (xref-location-group (nth 0 locs))))
-;;     (should (equal 1 (xref-location-line (nth 0 locs))))
-;;     (should (equal 0 (xref-file-location-column (nth 0 locs))))))
+(ert-deftest xref-collect-matches-finds-an-empty-line-regexp-match ()
+  (let* ((matches (xref-collect-matches "^$" "*" xref-tests-data-dir nil))
+         (locs (mapcar #'xref-item-location matches)))
+    (should (= 1 (length matches)))
+    (should (string-match-p "file2\\.txt\\'" (xref-location-group (nth 0 locs))))
+    (should (equal 1 (xref-location-line (nth 0 locs))))
+    (should (equal 0 (xref-file-location-column (nth 0 locs))))))