[ESS] column auto completion for data.frame

Jeremie Juste jerem|eju@te @end|ng |rom gm@||@com
Wed Nov 23 22:12:56 CET 2022


Hello,

I found myself always complaining about the lack of auto-completion
feature for data.frame columns.
I decided try my hand at writing a backend that seems to be working, so
I thought of sharing it on the mailing list.

It is just a small hack that mainly relies on the
ess--get-cached-completions function.


Hope this helps,
Jeremie

;;; usage

(require 'company-df-backend)
(setq ess-r-company-backends
      '((company-R-library company-R-args company-df-backend company-R-objects company-files company-yasnippet :separate)))


; file company-df-backend.el
(defun data-frame ()
 "Returns the name of the current data frame in use. If no data.frame is
begin written returns nil"
 (interactive)
 (format "%S" (data--frame)))

(defun data--frame ()
 "Returns thw sexp at point of the current data frame in use. If no
data.frame is begin written returns nil
 wrap with message to test."
 (interactive)
 (save-excursion
  (progn (re-search-forward ".*\\[" nil t -1) (backward-char) 
(sexp-at-point))))

(defun sample-fuzzy-match (prefix candidate )
 (interactive)
(cl-subsetp (string-to-list prefix)
(string-to-list candidate)))

(defun fuzzy-match-list1 (arg dt)
 "Filter candidate. ARG the symbol at point. DT the name of the
data.frame."
 (interactive)
  (cl-remove-if-not
  (lambda (c) (sample-fuzzy-match arg c))
  (let ((proc (ess-get-next-available-process)))
         (when proc
          (with-current-buffer (process-buffer proc)
               (mapcar (lambda (x) (replace-regexp-in-string ".*\
\$" "" x)) (ess--get-cached-completions (concat dt "$" arg))))))))   

(defun company-df-backend (command &optional arg &rest ignored)
(interactive (list 'interactive))
 (cl-case command
  (interactive (company-begin-backend 'company-df-backend))
  (prefix (company-grab-symbol))
  (candidates (fuzzy-match-list1 arg (data-frame)))
  (annotation " <data.frame>")))

(provide 'company-df-backend)



More information about the ESS-help mailing list