首页 文章

use-package with config:function可能在运行时不可用

提问于
浏览
0

我喜欢使用 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: 之后的所有表单都被评估 after 已加载包 . 这次飞行检查警告是假阳性吗?

2 回答

  • 0

    flycheck emacs-lisp-checker 正在使用字节编译器来找出代码可能出现的问题,并且需要帮助找出 use-package 的东西 . 对于我的 use-package 初始化文件,我做了两件事:

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

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

    设置 inherit 后, flycheck 使用的 load-path 取自当前 load-path ,因此可以找到各种lisp包中的所有文件 .

    其次,我在init中的每个单独文件中都有 (require 'use-package) . 这似乎是多余的,但它允许flycheck单独检查文件,因为它可以扩展 use-package 宏以便更好地分析 .

    这个设置似乎避免了大部分来自 use-package 的警告,除了真正重要的警告 . 但是,它没有针对您的特定配置进行测试 .

  • 0

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

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

    我不使用 use-package ,但可能是因为你引用的文档已经加载了包,所以是的,这将是一个误报 .

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

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

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

相关问题