renzmann / treesit-auto

Automatic installation, usage, and fallback for tree-sitter major modes in Emacs 29
GNU General Public License v3.0
353 stars 27 forks source link

Lisp error: (wrong-type-argument stringp nil) #75

Closed aspiers closed 6 months ago

aspiers commented 7 months ago

I just tried installation by executing your provided snippet:

(use-package treesit-auto
  :custom
  (treesit-auto-install 'prompt)
  :config
  (treesit-auto-add-to-auto-mode-alist 'all)
  (global-treesit-auto-mode))

It prompted to install a few grammars which were perfect choices based on the files I had open, so I typed a y response to each of those prompts. However after about 4 or 5 grammars, it yielded the following error:

Debugger entered--Lisp error: (wrong-type-argument stringp nil)
  file-exists-p(nil)
  treesit-auto--maybe-install-grammar()
  treesit-auto--on()
  global-treesit-auto-mode()
  (progn (treesit-auto-add-to-auto-mode-alist 'all) (global-treesit-auto-mode) t)
  (condition-case err (progn (treesit-auto-add-to-auto-mode-alist 'all) (global-treesit-auto-mode) t) ((debug error) (funcall use-package--warning513 :config err)))
  (prog1 (condition-case err (progn (treesit-auto-add-to-auto-mode-alist 'all) (global-treesit-auto-mode) t) ((debug error) (funcall use-package--warning513 :config err))) (let ((elapsed (float-time (time-subtract (current-time) now)))) (if (> elapsed 0.1) (message "%s...done (%.3fs)" "Configuring package treesit-auto" elapsed) (message "%s...done" "Configuring package treesit-auto"))))
  (let ((now (current-time))) (message "%s..." "Configuring package treesit-auto") (prog1 (condition-case err (progn (treesit-auto-add-to-auto-mode-alist 'all) (global-treesit-auto-mode) t) ((debug error) (funcall use-package--warning513 :config err))) (let ((elapsed (float-time (time-subtract (current-time) now)))) (if (> elapsed 0.1) (message "%s...done (%.3fs)" "Configuring package treesit-auto" elapsed) (message "%s...done" "Configuring package treesit-auto")))))
  (if (not (require 'treesit-auto nil t)) (display-warning 'use-package (format "Cannot load %s" 'treesit-auto) :error) (let ((now (current-time))) (message "%s..." "Configuring package treesit-auto") (prog1 (condition-case err (progn (treesit-auto-add-to-auto-mode-alist 'all) (global-treesit-auto-mode) t) ((debug error) (funcall use-package--warning513 :config err))) (let ((elapsed (float-time (time-subtract ... now)))) (if (> elapsed 0.1) (message "%s...done (%.3fs)" "Configuring package treesit-auto" elapsed) (message "%s...done" "Configuring package treesit-auto"))))))
  (prog1 (if (not (require 'treesit-auto nil t)) (display-warning 'use-package (format "Cannot load %s" 'treesit-auto) :error) (let ((now (current-time))) (message "%s..." "Configuring package treesit-auto") (prog1 (condition-case err (progn (treesit-auto-add-to-auto-mode-alist 'all) (global-treesit-auto-mode) t) ((debug error) (funcall use-package--warning513 :config err))) (let ((elapsed (float-time ...))) (if (> elapsed 0.1) (message "%s...done (%.3fs)" "Configuring package treesit-auto" elapsed) (message "%s...done" "Configuring package treesit-auto")))))) (let ((elapsed (float-time (time-subtract (current-time) now)))) (if (> elapsed 0.1) (message "%s...done (%.3fs)" "Loading package treesit-auto" elapsed) (message "%s...done" "Loading package treesit-auto"))))
  (let ((now (current-time))) (message "%s..." "Loading package treesit-auto") (prog1 (if (not (require 'treesit-auto nil t)) (display-warning 'use-package (format "Cannot load %s" 'treesit-auto) :error) (let ((now (current-time))) (message "%s..." "Configuring package treesit-auto") (prog1 (condition-case err (progn (treesit-auto-add-to-auto-mode-alist ...) (global-treesit-auto-mode) t) ((debug error) (funcall use-package--warning513 :config err))) (let ((elapsed ...)) (if (> elapsed 0.1) (message "%s...done (%.3fs)" "Configuring package treesit-auto" elapsed) (message "%s...done" "Configuring package treesit-auto")))))) (let ((elapsed (float-time (time-subtract (current-time) now)))) (if (> elapsed 0.1) (message "%s...done (%.3fs)" "Loading package treesit-auto" elapsed) (message "%s...done" "Loading package treesit-auto")))))
  (progn (let ((custom--inhibit-theme-enable nil)) (if (memq 'use-package custom-known-themes) nil (custom-declare-theme 'use-package 'use-package-theme nil (list)) (enable-theme 'use-package) (setq custom-enabled-themes (remq 'use-package custom-enabled-themes))) (custom-theme-set-variables 'use-package '(treesit-auto-install 'prompt nil nil "Customized with use-package treesit-auto"))) (let ((now (current-time))) (message "%s..." "Loading package treesit-auto") (prog1 (if (not (require 'treesit-auto nil t)) (display-warning 'use-package (format "Cannot load %s" 'treesit-auto) :error) (let ((now (current-time))) (message "%s..." "Configuring package treesit-auto") (prog1 (condition-case err (progn ... ... t) (... ...)) (let (...) (if ... ... ...))))) (let ((elapsed (float-time (time-subtract ... now)))) (if (> elapsed 0.1) (message "%s...done (%.3fs)" "Loading package treesit-auto" elapsed) (message "%s...done" "Loading package treesit-auto"))))))
  (condition-case err (progn (let ((custom--inhibit-theme-enable nil)) (if (memq 'use-package custom-known-themes) nil (custom-declare-theme 'use-package 'use-package-theme nil (list)) (enable-theme 'use-package) (setq custom-enabled-themes (remq 'use-package custom-enabled-themes))) (custom-theme-set-variables 'use-package '(treesit-auto-install 'prompt nil nil "Customized with use-package treesit-auto"))) (let ((now (current-time))) (message "%s..." "Loading package treesit-auto") (prog1 (if (not (require 'treesit-auto nil t)) (display-warning 'use-package (format "Cannot load %s" 'treesit-auto) :error) (let ((now ...)) (message "%s..." "Configuring package treesit-auto") (prog1 (condition-case err ... ...) (let ... ...)))) (let ((elapsed (float-time ...))) (if (> elapsed 0.1) (message "%s...done (%.3fs)" "Loading package treesit-auto" elapsed) (message "%s...done" "Loading package treesit-auto")))))) ((debug error) (funcall use-package--warning513 :catch err)))
  (progn (straight-use-package 'treesit-auto) (defvar use-package--warning513 #'(lambda (keyword err) (let ((msg (format "%s/%s: %s" ... keyword ...))) (save-current-buffer (set-buffer (get-buffer-create "*use-package*")) (goto-char (point-max)) (insert "-----\n" msg "\n\n(use-package treesit-auto :custom\n  (treesit-aut...") (emacs-lisp-mode)) (setq msg (concat msg " (see the *use-package* buffer)")) (display-warning 'use-package msg :error)))) (condition-case err (progn (let ((custom--inhibit-theme-enable nil)) (if (memq 'use-package custom-known-themes) nil (custom-declare-theme 'use-package 'use-package-theme nil (list)) (enable-theme 'use-package) (setq custom-enabled-themes (remq 'use-package custom-enabled-themes))) (custom-theme-set-variables 'use-package '(treesit-auto-install 'prompt nil nil "Customized with use-package treesit-auto"))) (let ((now (current-time))) (message "%s..." "Loading package treesit-auto") (prog1 (if (not (require ... nil t)) (display-warning 'use-package (format "Cannot load %s" ...) :error) (let (...) (message "%s..." "Configuring package treesit-auto") (prog1 ... ...))) (let ((elapsed ...)) (if (> elapsed 0.1) (message "%s...done (%.3fs)" "Loading package treesit-auto" elapsed) (message "%s...done" "Loading package treesit-auto")))))) ((debug error) (funcall use-package--warning513 :catch err))))
  (let ((print-level nil) (print-length nil)) (progn (straight-use-package 'treesit-auto) (defvar use-package--warning513 #'(lambda (keyword err) (let ((msg ...)) (save-current-buffer (set-buffer ...) (goto-char ...) (insert "-----\n" msg "\n\n(use-package treesit-auto :custom\n  (treesit-aut...") (emacs-lisp-mode)) (setq msg (concat msg " (see the *use-package* buffer)")) (display-warning 'use-package msg :error)))) (condition-case err (progn (let ((custom--inhibit-theme-enable nil)) (if (memq 'use-package custom-known-themes) nil (custom-declare-theme 'use-package 'use-package-theme nil (list)) (enable-theme 'use-package) (setq custom-enabled-themes (remq ... custom-enabled-themes))) (custom-theme-set-variables 'use-package '(treesit-auto-install ... nil nil "Customized with use-package treesit-auto"))) (let ((now (current-time))) (message "%s..." "Loading package treesit-auto") (prog1 (if (not ...) (display-warning ... ... :error) (let ... ... ...)) (let (...) (if ... ... ...))))) ((debug error) (funcall use-package--warning513 :catch err)))))
  (setq elisp--eval-defun-result (let ((print-level nil) (print-length nil)) (progn (straight-use-package 'treesit-auto) (defvar use-package--warning513 #'(lambda (keyword err) (let (...) (save-current-buffer ... ... ... ...) (setq msg ...) (display-warning ... msg :error)))) (condition-case err (progn (let ((custom--inhibit-theme-enable nil)) (if (memq ... custom-known-themes) nil (custom-declare-theme ... ... nil ...) (enable-theme ...) (setq custom-enabled-themes ...)) (custom-theme-set-variables 'use-package '...)) (let ((now ...)) (message "%s..." "Loading package treesit-auto") (prog1 (if ... ... ...) (let ... ...)))) ((debug error) (funcall use-package--warning513 :catch err))))))
  elisp--eval-defun()
  #<subr eval-defun>(nil)
  edebug--eval-defun(#<subr eval-defun> nil)
  apply(edebug--eval-defun #<subr eval-defun> nil)
  eval-defun(nil)
  funcall-interactively(eval-defun nil)
  command-execute(eval-defun)

I assume this comes from this code in treesit-auto--maybe-install-grammar:

    (if (file-exists-p buffer-file-name)
        (revert-buffer nil t)

Somehow it must have executed on a buffer which wasn't backed by a file, so buffer-file-name was nil.

amosbird commented 7 months ago

This also affects buffers with so-long mode enabled.

renzmann commented 6 months ago

Thanks for catching this. I made simple patch to just check if buffer-file-name is a string before checking file-exists-p in #80. Feel free to open a new issue if it isn't resolved