运行 Rdevtool::test_that 在 ESS 中保存缓冲区
Running Rdevtool::test_that on buffer save in ESS
我的工作流程:
- 破解 .R 或 test_*.R 文件
- 保存缓冲区。
- 切换到 window 使用 *R* 进程
- 按 C-p,RET。重新评估
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-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)
虽然我不推荐这样做,因为对于某些包测试需要相当长的时间 运行。您不希望每次保存时都 运行ning。
ess 中很快就会有专门的 devtools
功能。按照这个 issue.
为了完整起见,在最新版本的 ESS 中有更简单的方法来执行此操作。
function/command 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
调用 C-u M-x ess-r-devtools
将 运行 devtools::test(filter="my-file")
.
在为测试文件选择名称或仅重新运行当前测试文件时,牢记这一点很有用。
我的工作流程:
- 破解 .R 或 test_*.R 文件
- 保存缓冲区。
- 切换到 window 使用 *R* 进程
- 按 C-p,RET。重新评估
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-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)
虽然我不推荐这样做,因为对于某些包测试需要相当长的时间 运行。您不希望每次保存时都 运行ning。
ess 中很快就会有专门的 devtools
功能。按照这个 issue.
为了完整起见,在最新版本的 ESS 中有更简单的方法来执行此操作。
function/command 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
调用 C-u M-x ess-r-devtools
将 运行 devtools::test(filter="my-file")
.
在为测试文件选择名称或仅重新运行当前测试文件时,牢记这一点很有用。