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.
This commit is contained in:
Dmitry Gutov 2016-05-04 01:59:29 +03:00
parent f559b374a3
commit 4d8fd9cf33
2 changed files with 12 additions and 8 deletions

View file

@ -1016,7 +1016,11 @@ directory, used as the root of the ignore globs."
(syntax-propertize line-end) (syntax-propertize line-end)
;; FIXME: This results in several lines with the same ;; FIXME: This results in several lines with the same
;; summary. Solve with composite pattern? ;; 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)) (let* ((beg-column (- (match-beginning 0) line-beg))
(end-column (- (match-end 0) line-beg)) (end-column (- (match-end 0) line-beg))
(loc (xref-make-file-location file line beg-column)) (loc (xref-make-file-location file line beg-column))

View file

@ -28,10 +28,10 @@
(should (equal 0 (xref-file-location-column (nth 0 locs)))) (should (equal 0 (xref-file-location-column (nth 0 locs))))
(should (equal 4 (xref-file-location-column (nth 1 locs)))))) (should (equal 4 (xref-file-location-column (nth 1 locs))))))
;; (ert-deftest xref-collect-matches-finds-an-empty-line-regexp-match () (ert-deftest xref-collect-matches-finds-an-empty-line-regexp-match ()
;; (let* ((matches (xref-collect-matches "^$" "*" xref-tests-data-dir nil)) (let* ((matches (xref-collect-matches "^$" "*" xref-tests-data-dir nil))
;; (locs (mapcar #'xref-item-location matches))) (locs (mapcar #'xref-item-location matches)))
;; (should (= 1 (length matches))) (should (= 1 (length matches)))
;; (should (string-match-p "file2\\.txt\\'" (xref-location-group (nth 0 locs)))) (should (string-match-p "file2\\.txt\\'" (xref-location-group (nth 0 locs))))
;; (should (equal 1 (xref-location-line (nth 0 locs)))) (should (equal 1 (xref-location-line (nth 0 locs))))
;; (should (equal 0 (xref-file-location-column (nth 0 locs)))))) (should (equal 0 (xref-file-location-column (nth 0 locs))))))