语法软件搜索和替换工具。

refex的Python项目详细描述


Refex-重构表达式

Refex是一个语法感知的Python搜索和替换工具,它允许您使用模板或 更复杂 Clang-LibASTMatcher-类 匹配器接口。在

示例

自动插入括号:Refex将自动插入括号 要保留预期的代码结构:

$ echo"a = b.foo() * c" > test.py
$ refex --mode=py.expr '$x.foo()' --sub='$x.foo() + 1' -i test.py
...
$ cat test.py
a=(b.foo() + 1) * c

天真的正则表达式替换会导致b.foo() + 1 * c,但事实并非如此 相当,与预期更换无关。在

成对括号:Refex知道完整的语法树,并将始终正确匹配括号:

^{pr2}$

在这里,使用正则表达式进行天真的替换可能会导致 print(foo(bar(b)) + 1)或{},取决于 无论$x是贪婪匹配还是非贪婪匹配。在

组合替换:可以将多个搜索/替换对传递给 Refex结合起来做更复杂的重写。例如:

# Rewrites "self.assertTrue(x == False)" to "self.assertFalse(x)", even though# that was not explicitly called out.
refex --mode=py.expr -i --iterate \
  --match='self.assertTrue($x == $y)'  --sub='self.assertEqual($x, $y)'\
  --match='self.assertEqual($x, False)' --sub='self.assertFalse($x)'\
  -R dir/

TODO:还要描述--mode=py。在

入门

安装

TODO:一旦PyPI上出现安装说明, 坚持住!在

现状

注:目前该项目正在向github进行初始上传, PyPI等等,所以请不要广泛宣传。初始版本将是 一个0.1版本。在

稳定:

https://refex.readthedocs.io/中记录的API预计将保留 除了一些琐碎的重命名和移动之外,大部分都是相同的。在

这些命令行接口应该保持大致相同,没有 向后不兼容的更改:

  • --mode=py.expr
  • --mode=fix
  • --mode=re

不稳定

  • 所有未记录的API(,尤其是用于创建新匹配器的API)。在
  • --mode=py.stmt缺少许多安全和方便的功能。在
  • --mode=py,matcher接口,最终将需要一些相当大的 尽管简单的使用不受影响,但重新构造使其成为O(n)。在

(而且,所有稳定的部分也不稳定。这不是一个承诺,只是一个 期望/意向声明。)

贡献

contribution guide

另请参见

  • asttokens:令牌保存 Refex构建在其上的AST库。在
  • Pasta:使用AST的代码重写工具 变异而不是字符串模板。在
  • Semgrep:跨语言AST 使用类似的方法进行搜索。在
  • lib2to3: 基于具体语法树的标准库代码重写工具。在

免责声明

你可能已经注意到谷歌版权声明了。这不是正式的 支持谷歌产品。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
JAVA Tictoe Minimax算法不断引发异常   java弹性时间计算器字符串开关   java从表单post操作中检索值   java Selenium webdriver无法在youtube上找到元素   java如何自动填写XFA(PDF)表单?   java为什么我的秒表程序不能运行?   raspberry pi禁用java中的其他声音   java如何配置web。xml,glassfishweb。JSF的xml文件?   使用浏览器运行自动测试时出现java错误。如何运行它?   java如何阻止Swing程序在每次向JTextArea添加文本时调整组件的大小   javajavax。注射注射无效   java如何改进Solaris服务器配置   java如何在elasticsearch后端脱机时处理Hibernate搜索启动   java TCPsocket的延迟很差,除非持续流式传输