以与整洁评估兼容的方式整理文本

问题描述 投票:0回答:1

我希望以符合整洁评估的方式整理源代码。不幸的是,formatR不保留!!运营商。

formatR::tidy_source(text = "!!little_b", output = FALSE)$text.tidy
## [1] "!(!little_b)"

来自Yihui's formatR guide的第7节,

简而言之,tidy_source(text = code)基本上是deparse(解析(text = code))...

但是,当我打电话给deparse(parse(text = code))时,文字无法使用。实际行为:

deparse(parse(text = "1+!!x"))
## [1] "structure(expression(1 + (!(!x))), srcfile = <environment>, wholeSrcref = structure(c(1L, "
## [2] "0L, 2L, 0L, 0L, 0L, 1L, 2L), srcfile = <environment>, class = \"srcref\"))" 

所需的结果是整理文本:

"1 + !!x

这里的解决方案可能会解决https://github.com/ropensci/drake/issues/200

r tidyverse tidyr tidyeval formatr
1个回答
1
投票

要解决此deparser问题,您可以提供功能表单:

formatR::tidy_source(text = "`!!`(little_b)", output = FALSE)$text.tidy

请注意,您需要很快将在CRAN上的rlang 0.2.0。

我们一直在研究我们自己的deparser,它可能会在将来用于formatR,例如rlang::expr_deparse()。我们还将尝试查看R核心是否会接受基础解析器的补丁,以避免在括号中进行不必要的包装。

还可以查看styler包,它应该能够处理掉!!。它现在是格式化R代码的首选包,它是非常可配置的。

© www.soinside.com 2019 - 2024. All rights reserved.