为什么没有.py 文件的结构化替换功能? JetBrain 觉得 Python 太奇葩了吗?😅

2021-11-10 11:12:51 +08:00
 AndyAO

想把十几个文件的 unittest 测试转换为 pytest ,例如

        self.assertEqual(EBases,(D, B))
        self.assertEqual(Emro,[E, D, X, B, A, object])

转为

        assert EBases == (D, B)
        assert Emro == [E, D, X, B, A, object]

感觉正则真的不太好写,于是想到了结构化替换,结果怎么也找不到,去谷歌搜,才知道这个功能居然不支持 Python 文件。

为什么这样啊?如此主流的语言这个功能居然是缺失的。

Ruby 是有的,难道是,Python 什么地方太奇葩?😅

Can't find option to structurally search within Python files. – IDEs Support (IntelliJ Platform) | JetBrains

2541 次点击
所在节点    程序员
8 条回复
ksc010
2021-11-10 11:55:10 +08:00
试试 python 语法解析树
SakuraSa
2021-11-10 12:07:36 +08:00
似乎可以这样处理
查找 self\.assertEqual\(\s*([^,]+)\s*,\s*(.+)\s*\)
替换 assert \1 == \2
hsfzxjy
2021-11-10 12:10:21 +08:00
@SakuraSa 感觉会涉及到小括号平衡匹配,比如第一个例子就有问题。不过改成匹配行末最后一个右括号应该就可以
AndyAO
2021-11-10 13:17:52 +08:00
@ksc010 真就还找到了类似的项目

- [Easy Stuctural Refactors to Python Source Code | Data Version Control · DVC]( https://dvc.org/blog/refactor)
- [isidentical/refactor: AST-based fragmental source code refactoring toolkit]( https://github.com/isidentical/refactor)

正在看
windy2021
2021-11-10 14:11:20 +08:00
请问楼主这个是什么 IDEA 主题?
AndyAO
2021-11-10 15:10:50 +08:00
@windy2021 Solarized Light

你感觉很喜欢吗?为什么?
windy2021
2021-11-10 17:33:44 +08:00
@AndyAO 谢谢,因为不太喜欢暗色主题,然后自带的亮色主题比较刺眼,你的这个看起来比较舒服,哈哈
yukinotech
2021-11-10 18:21:18 +08:00
这种肯定是走 ast 能力了,不过感觉有点高射炮打蚊子。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/814361

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX