use-package with config: функция может быть недоступна во время выполнения
Мне нравится использовать use-package
для Emacs. Среди прочего, в моем файле конфигурации есть следующее:
(use-package proced
:ensure t
:config
(proced-toggle-auto-update 1)
(general-define-key
:keymaps 'proced-mode-map
"j" 'next-line
"k" 'previous-line))
Flycheck предупреждает, что функция proced-toggle-auto-update
может быть недоступен во время выполнения. Тем не менее, документация use-package
утверждает, что все формы следующие config:
оцениваются после загрузки пакета. Является ли предупреждение о мухе ложным срабатыванием?
2 ответа
Если вы знаете, что функция будет доступна во время выполнения, например. пакет будет загружен (так как эта функция не загружена автоматически), тогда вы можете сообщить об этом компилятору, объявив функцию, например.
(declare-function proced-toggle-auto-update "proced")
Я не пользуюсь use-package
но, предположительно, пакет будет загружен с учетом документации, которую вы цитируете, так что да, это будет ложным срабатыванием.
В других случаях вы также можете явно загрузить функцию и сообщить компилятору,
(autoload 'proced-toggle-auto-update "proced")
Эти действия предполагают, что библиотека "процедуры" находится на вашем пути загрузки, например. (featurep 'proced)
не ноль.
Муха emacs-lisp-checker
использует байтовый компилятор, чтобы выяснить возможные проблемы с кодом, и ему нужна небольшая помощь, чтобы разобраться с use-package
, Для моих файлов инициализации с use-package
Я делаю две вещи:
Сначала я определяю локальную переменную каталога для моих файлов инициализации (в .dir-locals.el
):
((emacs-lisp-mode ((flycheck-emacs-lisp-load-path . inherit))))
С inherit
установить load-path
использован flycheck
взято из текущего load-path
, так что он может найти все файлы в различных пакетах lisp.
Во-вторых, у меня есть (require 'use-package)
в каждом из отдельных файлов в моем init. Это кажется излишним, но это позволяет flycheck проверять файлы индивидуально, потому что это может расширить use-package
макрос для лучшего анализа.
Эта настройка, кажется, позволяет избежать большинства предупреждений, поступающих от use-package
за исключением тех, которые действительно имеют значение. Однако он не проверен на вашей конкретной конфигурации.