[英]Running Rdevtool::test_that on buffer save in ESS
我的工作流程:
devtools::test()
对我来说,这似乎太难了。 为什么我在保存缓冲区时不能让 R 自动运行devtools::test()
? 请帮忙,我的手指几乎无法承受额外七次击键的压力!
这适用于类似的设置(切换到shell
缓冲区):
(defun devtools-test ()
(interactive)
(when (string-match (rx-to-string `(: ".R" eos) t) (buffer-name))
(switch-to-buffer "*R*")
(end-of-buffer)
(insert "devtools::test()")
(comint-send-input)))
(add-hook 'after-save-hook 'devtools-test)
那对你有用吗?
为了完整起见,在最新版本的 ESS 中有更简单的方法来做到这一点。
函数/命令ess-r-devtools-test
现在运行devtools::test
。
所以你可以用(未经测试)实现这一点:
(add-hook 'ess-r-mode-hook
(lambda ()
(add-hook 'after-save-hook 'devtools-test nil 'local)))
此外, ess-r-devtools-*
下还有许多其他有用的功能,用于构建、安装等。
值得注意的是,使用通用参数调用ess-r-devtools-test
将按当前文件过滤测试。
因此,从文件my-file.R
调用Cu Mx ess-r-devtools
将运行devtools::test(filter="my-file")
。
在为测试文件选择名称或仅重新运行当前测试文件时,记住这一点很有用。
您可以使用一个ess-eval-linewise
函数。
像这样的东西(未测试):
(defun devtools-test ()
(interactive)
(when (and (equal ess-dialect "R")
(string-match "^test.*\\.[Rr]$" (buffer-name)))
(ess-eval-linewise "devtools::test()")))
(add-hook 'after-save-hook 'devtools-test)
不过,我不建议这样做,因为对于某些软件包,测试需要很长时间才能运行。 您不希望它们在每次保存时都运行。
ess 很快就会有一个专门的devtools
功能。 按照这个问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.