字节编译 emacs lisp 非常有用,因为它生成编译器警告,虽然有时很神秘,但总是指向错误或未完成的任务,例如缺少导入或未实现的函数。
但是,我找不到一种方法来生成与 *Compile-Log*
缓冲区很好地集成的自定义编译器警告,即显示错误的位置,例如
mymodule.el:247:1:Warning: Unused lexical variable `file-name'
例如。我正在使用后续代码来放置引发编译时消息的待办事项:
(eval-when-compile
(defmacro TODO (string)
`(eval-when-compile
(message "TODO: %s" ,string))))
但是,我找不到一种方法来添加信息(在编译时)
在加载时变量
load-file-name
可用,但在编译时它是 nil
。变量 default-directory
是在编译时定义的,但在这种情况下没有帮助。对于行号,我根本不知道任何方法。
当使用
(warn ...)
代替时,我得到类似Warning (emacs): TODO: Complete or remove
即根本没有位置信息。如果我使用
(error ...)
,我会自动显示行号等,但编译停止而不是显示所有错误和警告,因此它也不是一个可行的解决方案。更新
部分解决方案似乎是
(funcall (if byte-compile-current-file 'byte-compile-warn 'warn) FORMAT [ARGS ...])
最佳答案
您需要使用内部变量 byte-compile-current-file
(正在编译的文件的名称)和 byte-compile-read-position
(最后一个 read
开头的字符位置)。
或者,您可以尝试在 byte-compile-warning-prefix
缓冲区中插入 file:line
前缀的函数 *Warnings*
。
无论哪种方式,你都是靠自己,搞乱 Emacs 内部结构; SO是你唯一的 friend 。 :-)
关于Emacs lisp : Generate compiler warnings,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17144703/