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за исключением тех, которые действительно имеют значение. Однако он не проверен на вашей конкретной конфигурации.

Другие вопросы по тегам