use-package with config: 函数在运行时可能不可用
use-package with config: function might not be available at runtime
我喜欢将 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:
之后的所有表单都会在 之后 加载包。那么这个 flycheck 警告是误报吗?
如果您知道该函数将在运行时可用,例如。包将被加载(因为该函数不是自动加载的),然后您可以通过声明该函数让编译器知道,例如。
(declare-function proced-toggle-auto-update "proced")
我不使用 use-package
,但根据您引用的文档,大概已经加载了包,所以是的,这将是误报。
在其他情况下,您也可以显式自动加载函数并让编译器知道,
(autoload 'proced-toggle-auto-update "proced")
这些操作假定库 "proced" 在您的加载路径上,例如。 (featurep 'proced)
非零。
flycheck emacs-lisp-checker
正在使用字节编译器找出代码可能存在的问题,它需要一点帮助来找出 use-package
的问题。对于 use-package
的初始化文件,我做了两件事:
首先,我为我的初始化文件定义了一个目录局部变量(在 .dir-locals.el
中):
((emacs-lisp-mode ((flycheck-emacs-lisp-load-path . inherit))))
设置inherit
后,flycheck
使用的load-path
取自当前的load-path
,所以它可以找到各种lisp包中的所有文件。
其次,我的 init.d 中的每个单独文件中都有 (require 'use-package)
。这似乎是多余的,但它让 flycheck 单独检查文件,因为它可以扩展 use-package
宏以便更好地分析。
此设置似乎避免了来自 use-package
的大部分警告,除了那些真正重要的警告。但是,它并未针对您的特定配置进行测试。
我喜欢将 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:
之后的所有表单都会在 之后 加载包。那么这个 flycheck 警告是误报吗?
如果您知道该函数将在运行时可用,例如。包将被加载(因为该函数不是自动加载的),然后您可以通过声明该函数让编译器知道,例如。
(declare-function proced-toggle-auto-update "proced")
我不使用 use-package
,但根据您引用的文档,大概已经加载了包,所以是的,这将是误报。
在其他情况下,您也可以显式自动加载函数并让编译器知道,
(autoload 'proced-toggle-auto-update "proced")
这些操作假定库 "proced" 在您的加载路径上,例如。 (featurep 'proced)
非零。
flycheck emacs-lisp-checker
正在使用字节编译器找出代码可能存在的问题,它需要一点帮助来找出 use-package
的问题。对于 use-package
的初始化文件,我做了两件事:
首先,我为我的初始化文件定义了一个目录局部变量(在 .dir-locals.el
中):
((emacs-lisp-mode ((flycheck-emacs-lisp-load-path . inherit))))
设置inherit
后,flycheck
使用的load-path
取自当前的load-path
,所以它可以找到各种lisp包中的所有文件。
其次,我的 init.d 中的每个单独文件中都有 (require 'use-package)
。这似乎是多余的,但它让 flycheck 单独检查文件,因为它可以扩展 use-package
宏以便更好地分析。
此设置似乎避免了来自 use-package
的大部分警告,除了那些真正重要的警告。但是,它并未针对您的特定配置进行测试。