       result)))
 
 ;;;###autoload
-(defun +lookup-symbol-or-region (&optional initial)
-  "Grab the symbol at point or selected region."
+(defun +lookup-thing-or-region (&optional initial thing)
+  "Return INITIAL, grab the THING at point, or contents of selection.
+
+If THING is nil, uses `xref-backend-identifier-at-point' (like symbol, but
+smarter)."
   (cond ((stringp initial)
          initial)
         ((use-region-p)
          (buffer-substring-no-properties (region-beginning)
                                          (region-end)))
+        (thing
+         (thing-at-point thing t))
         ((require 'xref nil t)
          ;; A little smarter than using `symbol-at-point', though in most cases,
          ;; xref ends up using `symbol-at-point' anyway.

Tries each function in `+lookup-references-functions' until one changes the
point and/or current buffer. Falls back to a naive ripgrep/the_silver_searcher
search otherwise."
  (interactive (list (+lookup-symbol-or-region)
                     current-prefix-arg))
  (cond ((null identifier) (user-error "Nothing under point"))
        ((+lookup--jump-to :references identifier nil arg))

      (or (ffap-guesser)
          (ffap-read-file-or-url
           (if ffap-url-regexp "Find file or URL: " "Find file: ")
           (+lookup-thing-or-region))))))
  (require 'ffap)
  (cond ((not path)
         (call-interactively #'find-file-at-point))
