Function: embark-target-expression-at-point

embark-target-expression-at-point is a byte-compiled function defined in embark.el.

Signature

(embark-target-expression-at-point)

Documentation

Target expression at point.

Source Code

;; Defined in ~/.emacs.d/elpa/embark-20260610.302/embark.el
;; NOTE: There is also (thing-at-point 'list), however it does
;; not work on strings and requires the point to be inside the
;; parentheses. This version here is slightly more general.
(defun embark-target-expression-at-point ()
  "Target expression at point."
  (cl-flet ((syntax-p (class &optional (delta 0))
              (and (<= (point-min) (+ (point) delta) (point-max))
                   (eq (pcase class
                         ('open 4) ('close 5) ('prefix 6) ('string 7))
                       (syntax-class (syntax-after (+ (point) delta)))))))
    (when-let*
        ((start
          (pcase-let ((`(_ ,open _ ,string _ _ _ _ ,start _ _) (syntax-ppss)))
            (ignore-errors ; set start=nil if delimiters are unbalanced
              (cond
               (string start)
               ((or (syntax-p 'open) (syntax-p 'prefix))
                (save-excursion (backward-prefix-chars) (point)))
               ((syntax-p 'close -1)
                (save-excursion
                  (backward-sexp) (backward-prefix-chars) (point)))
               ((syntax-p 'string) (point))
               ((syntax-p 'string -1) (scan-sexps (point) -1))
               (t open)))))
         (end (ignore-errors (scan-sexps start 1))))
      (unless (eq start (car (bounds-of-thing-at-point 'defun)))
        `(expression ,(buffer-substring start end) ,start . ,end)))))