V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
AndyAO
V2EX  ›  程序员

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

  •  1
     
  •   AndyAO · 2021-11-10 11:12:51 +08:00 · 2572 次点击
    这是一个创建于 1139 天前的主题,其中的信息可能已经有所发展或是发生改变。

    想把十几个文件的 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

    8 条回复    2021-11-10 18:21:18 +08:00
    ksc010
        1
    ksc010  
       2021-11-10 11:55:10 +08:00
    试试 python 语法解析树
    SakuraSa
        2
    SakuraSa  
       2021-11-10 12:07:36 +08:00
    似乎可以这样处理
    查找 self\.assertEqual\(\s*([^,]+)\s*,\s*(.+)\s*\)
    替换 assert \1 == \2
    hsfzxjy
        3
    hsfzxjy  
       2021-11-10 12:10:21 +08:00 via Android
    @SakuraSa 感觉会涉及到小括号平衡匹配,比如第一个例子就有问题。不过改成匹配行末最后一个右括号应该就可以
    AndyAO
        4
    AndyAO  
    OP
       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
        5
    windy2021  
       2021-11-10 14:11:20 +08:00
    请问楼主这个是什么 IDEA 主题?
    AndyAO
        6
    AndyAO  
    OP
       2021-11-10 15:10:50 +08:00
    @windy2021 Solarized Light

    你感觉很喜欢吗?为什么?
    windy2021
        7
    windy2021  
       2021-11-10 17:33:44 +08:00
    @AndyAO 谢谢,因为不太喜欢暗色主题,然后自带的亮色主题比较刺眼,你的这个看起来比较舒服,哈哈
    yukinotech
        8
    yukinotech  
       2021-11-10 18:21:18 +08:00
    这种肯定是走 ast 能力了,不过感觉有点高射炮打蚊子。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5826 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 03:17 · PVG 11:17 · LAX 19:17 · JFK 22:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.