字节编译 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 ...])