]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix xref elisp identifier namespace mistake
authorMattias Engdegård <mattiase@acm.org>
Mon, 18 Oct 2021 15:06:22 +0000 (17:06 +0200)
committerMattias Engdegård <mattiase@acm.org>
Mon, 18 Oct 2021 15:26:45 +0000 (17:26 +0200)
Pressing `M-.` on ALPHA in

  (let ((ALPHA BETA)) ...)

would incorrectly search for ALPHA as a function rather than a variable.

* lisp/progmodes/elisp-mode.el (elisp--xref-infer-namespace): Fix logic.
* test/lisp/progmodes/elisp-mode-tests.el
(elisp-mode-infer-namespace): Add test case.

lisp/progmodes/elisp-mode.el
test/lisp/progmodes/elisp-mode-tests.el

index 10a379425717f8d1db1e413caf46cab165061680..9522055670da70b7795e73eca0d624aa887637c0 100644 (file)
@@ -877,17 +877,17 @@ namespace but with lower confidence."
         ;;             ^ index K   ^ index J   ^ index I
         (let* ((i (elisp--xref-list-index))
                (i-head (looking-at-sym))
-               (i-paren (and i-head (eq (char-before) ?\()
+               (i-paren (and i (eq (char-before) ?\()
                              (progn (backward-char) t)))
                (i-quoted (and i-paren (memq (char-before) '(?\' ?`))))
                (j (and i-paren (elisp--xref-list-index)))
                (j-head (and j (looking-at-sym)))
-               (j-paren (and j-head (eq (char-before) ?\()
+               (j-paren (and j (eq (char-before) ?\()
                              (progn (backward-char) t)))
                (j-quoted (and j-paren (memq (char-before) '(?\' ?`))))
                (k (and j-paren (elisp--xref-list-index)))
                (k-head (and k (looking-at-sym)))
-               (k-paren (and k-head (eq (char-before) ?\()
+               (k-paren (and k (eq (char-before) ?\()
                              (progn (backward-char) t)))
                (k-quoted (and k-paren (memq (char-before) '(?\' ?`)))))
           (cond
index 400c76c187ffa2dc728acc4319622df810857397..f887bb1dca5e6b24e8c686f90910ba542f396498 100644 (file)
@@ -976,6 +976,17 @@ evaluation of BODY."
     (should (equal (elisp--xref-infer-namespace p6) 'maybe-variable))
     (should (equal (elisp--xref-infer-namespace p7) 'variable)))
 
+  (elisp-mode-test--with-buffer
+      (concat "(let (({p1}alpha {p2}beta)\n"
+              "      ({p3}gamma ({p4}delta {p5}epsilon)))\n"
+              "  ({p6}zeta))\n")
+    (should (equal (elisp--xref-infer-namespace p1) 'variable))
+    (should (equal (elisp--xref-infer-namespace p2) 'variable))
+    (should (equal (elisp--xref-infer-namespace p3) 'variable))
+    (should (equal (elisp--xref-infer-namespace p4) 'function))
+    (should (equal (elisp--xref-infer-namespace p5) 'maybe-variable))
+    (should (equal (elisp--xref-infer-namespace p6) 'function)))
+
   (elisp-mode-test--with-buffer
       (concat "(defun {p1}alpha () {p2}beta)\n"
               "(defface {p3}gamma ...)\n"