0

我喜欢使用use-packageEmacs。除其他外,我的配置文件中有以下内容:

(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:进行评估。那么这个flycheck警告是误报吗?

4

2 回答 2

0

如果您知道该功能将在运行时可用,例如。该包将被加载(因为该函数未自动加载),那么您可以通过声明该函数来让编译器知道,例如。

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

我不使用use-package,但根据您引用的文档,大概已经加载了包,所以是的,这将是误报。

在其他情况下,您也可以显式自动加载函数并让编译器知道,

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

这些操作假设库“proced”在您的加载路径上,例如。(featurep 'proced)是非零。

于 2018-12-10T04:04:56.143 回答
0

flycheckemacs-lisp-checker正在使用字节编译器来找出代码可能存在的问题,它需要一点帮助来找出use-package. 对于我的 init 文件use-package,我做了两件事:

首先,我为我的 init 文件定义了一个目录局部变量(in .dir-locals.el):

((emacs-lisp-mode ((flycheck-emacs-lisp-load-path . inherit))))

使用inheritset 时,load-path使用的 byflycheck取自 current load-path,因此它可以找到各种 lisp 包中的所有文件。

其次,我(require 'use-package)的 init 中有每个单独的文件。这似乎是多余的,但它可以让 flycheck 单独检查文件,因为它可以扩展use-package宏以进行更好的分析。

此设置似乎避免了来自 的大多数警告use-package,但真正重要的警告除外。但是,它没有在您的特定配置上进行测试。

于 2018-12-10T17:49:39.220 回答