geo*_*try 27 refactoring r automated-refactoring
最近我发现自己在编码风格方面使用了R代码 - 多个作者和个人作者,他们并不严格遵守单一结构.有些任务我想比现在更好地自动化.
我正在寻找一种管理以下任务的工具(或多种工具) - 按照欲望的增加顺序列出,但也有点依赖于存在的怀疑主义.
基本格式.比如将"if(foo)"转换为"if(foo)"并在支撑位置和类似物方面实现一致性.
将"foo $ blah"转换为"foo [["blah"]]"以获取列表访问权限.理想情况下,它至少可以猜测一个对象是否真的是一个列表而不是data.frame并且只能转换列表.
将'='转换为'< - '.是的,这是一个简单的搜索和替换 - 但不是真的.工具(或regexp)需要具有语言感知能力,以便它知道转换"x = 5"而不是"foo(x = 5)".不仅简单地替换符号而且确保赋值运算符两侧的单个空格也是非常好的.
变量重命名,特别是跨功能和文件.例如,假设一个列表有一个元素"foo",我希望能够将它改为"foobar"一次,而不必在整个代码流中追踪该列表的每个用法.我想这将需要该工具能够进行整个控制流程,以便识别诸如在不同函数中作为另一个名称存在的列表之类的事物.
命名约定.我希望能够定义一些标准的命名约定(例如Google或其他)并让它识别所有函数,变量等并转换它们.请注意,这与列表元素之类的内容相关联.
随意列出基本的unix处理命令(例如sed),只要它真的足够智能,至少通常不会搞砸(例如将"foo(x = 5)"转换为"foo(x <-5)" ").
我猜测,如果这样的工具,我会听到它的一个完美的状态现在已经存在了,而且我也意识到,与如R语言,很难做一些这些类型的变化的自动的,但是人们可以做梦吧?有没有人对这些/所有这些有指针?
恕我直言,写你自己的。编写一个漂亮的打印机实际上是相当困难的。它需要理解标记化、解析、构建 AST 或其他 IR、跟踪符号表和范围、模板等。
但如果你能做到,你将真正学到很多关于编程语言的知识。你也会给你的同事留下深刻的印象,而且写在简历上也很棒。这也很有趣。
我推荐Terence Parr 的“语言实现模式:创建您自己的特定领域和通用编程语言”。读起来有点粗糙,不过内容还是不错的。它是在解析器的介绍性级别上编写的,并且非常简短,但它包含您自己编写此工具所需的所有部分。
如果您确实构建了它,请将其开源,然后回到这里告诉我们,并建立一个带有一些广告的网站来为自己赚点钱。这样每个人都可以使用您出色的创作,并且您将在此过程中获得一些美元。
祝你好运...
| 归档时间: |
|
| 查看次数: |
1373 次 |
| 最近记录: |