From: Juri Linkov Date: Fri, 18 Apr 2025 16:17:39 +0000 (+0300) Subject: * lisp/treesit.el (treesit-auto-install): New defcustom. X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=1be1b1cd97cacb74ba839da463873c764eafa04a;p=emacs.git * lisp/treesit.el (treesit-auto-install): New defcustom. (treesit-ensure-installed): New function. (cherry picked from commit c9b6be7d27299093d16d592f1ffe0a731136beb2) --- diff --git a/lisp/treesit.el b/lisp/treesit.el index 841dd82f1ac..a0fef8d083a 100644 --- a/lisp/treesit.el +++ b/lisp/treesit.el @@ -5268,6 +5268,29 @@ If anything goes wrong, this function signals an `treesit-error'." (dolist (file (directory-files query-dir t "\\.scm\\'" t)) (copy-file file (expand-file-name (file-name-nondirectory file) dest-dir) t))))) +(defcustom treesit-auto-install 'ask + "Automatic installation of a language grammar. +If `ask', prompt for a confirmation before installing the required +language grammar. If `always', silently install the grammar. +If nil or `never' or anything else, don't install the grammar +even while visiting a file in the mode that requires such grammar." + :type '(choice (const :tag "Never try to install grammar" never) + (const :tag "Always install grammar automatically" always) + (const :tag "Ask whether to install grammar" ask)) + :version "31.1") + +(defun treesit-ensure-installed (lang) + "Ensure that the grammar for the language LANG is installed. +The option `treesit-auto-install' defines whether to install it +automatically, or ask for a confirmation." + (or (treesit-ready-p lang t) + (when (or (eq treesit-auto-install 'always) + (and (eq treesit-auto-install 'ask) + (y-or-n-p (format "Install grammar for `%s'?" lang)))) + (treesit-install-language-grammar lang) + ;; Check that the grammar was installed successfully + (treesit-ready-p lang)))) + ;;; Shortdocs (defun treesit--generate-shortdoc-examples ()