use-package with config: функция может быть недоступна во время выполнения - PullRequest
0 голосов
/ 10 декабря 2018

Мне нравится использовать 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 ]

0 голосов
/ 10 декабря 2018

Flycheck 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.Это кажется избыточным, но позволяет проверять файлы по отдельности, так как он может расширить макрос use-package для лучшего анализа.

Эта настройка, кажется, позволяет избежать большинства предупреждений, приходящих от use-package, за исключениемэто действительно важно.Однако он не тестировался на вашей конкретной конфигурации.

0 голосов
/ 10 декабря 2018

Если вы знаете, что функция будет доступна во время выполнения, например.пакет будет загружен (так как эта функция не загружена автоматически), тогда вы можете сообщить об этом компилятору, объявив функцию, например.

(declare-function proced-toggle-auto-update "proced")

Я не использую use-package, но предположительно пакетбудет загружен, учитывая документацию, которую вы цитируете, так что да, это будет ложно-положительный результат.

В других случаях вы также можете явным образом автоматически загрузить функцию и сообщить компилятору,

(autoload 'proced-toggle-auto-update "proced")

Эти действия предполагают, что библиотека «процедуры» находится на вашем пути загрузки, например.(featurep 'proced) не ноль.

...