summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Gutov <dgutov@yandex.ru>2016-05-04 01:59:29 +0300
committerDmitry Gutov <dgutov@yandex.ru>2016-05-04 01:59:29 +0300
commit4d8fd9cf338cf9b5dfc613657adfeabff2d9c14e (patch)
tree6878332f280455e3a9a513246b1eccfcea04fc97
parentf559b374a30f3615261f7a902fc3428cac6289f4 (diff)
downloademacs-4d8fd9cf338cf9b5dfc613657adfeabff2d9c14e.tar.gz
Handle "empty line" regexp in xref searches
* 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.
-rw-r--r--lisp/progmodes/xref.el6
-rw-r--r--test/automated/xref-tests.el14
2 files changed, 12 insertions, 8 deletions
diff --git a/lisp/progmodes/xref.el b/lisp/progmodes/xref.el
index 540c7b0e925..62cef235988 100644
--- a/lisp/progmodes/xref.el
+++ b/lisp/progmodes/xref.el
@@ -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))
diff --git a/test/automated/xref-tests.el b/test/automated/xref-tests.el
index 1b500c3c418..28ca3511c22 100644
--- a/test/automated/xref-tests.el
+++ b/test/automated/xref-tests.el
@@ -28,10 +28,10 @@
(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))))))