带有config:功能的use-package在运行时可能不可用

时间:2018-12-09 23:28:24

标签: emacs compiler-warnings flycheck

我喜欢将powershell用于Emacs。除其他外,我的配置文件中包含以下内容:

$Input

Flycheck警告说,功能stdin input: 42 Press any key to continue . . . 在运行时可能不可用。但是,use-package的文档指出,在装入软件包后的 之后,评估(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警告是误报吗?

2 个答案:

答案 0 :(得分:0)

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

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

我不使用use-package,但假定您引用的文档已经加载了该程序包,所以是的,这肯定是错误的。

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

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

这些操作假定库“ proced”在您的加载路径上,例如。 (featurep 'proced)不为空。

答案 1 :(得分:0)

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)。这似乎是多余的,但是它可以使flycheck单独检查文件,因为它可以扩展use-package宏以进行更好的分析。

此设置似乎可以避免大多数use-package发出的警告,除非是真正重要的警告。但是,尚未在您的特定配置上对其进行测试。