libcs​​t:插入新节点会添加内联代码和分号

问题描述

我正在尝试在 Assign 节点之前引入一个新节点(作为新的代码行)。

使用 FlattenSentinel 引入新节点时会出现问题,因为我希望节点是独立的,但 libcs​​t 使用分号 (;) 将它们连接起来,例如:

a = 6

变成:

print('returning'); a = 6

重现示例的代码

import libcst as cst
class MyTransformer(cst.CSTTransformer):

    def leave_Assign(self,old_node,updated_node):
        log_stmt = cst.Expr(cst.parse_expression("print('returning')"))
        return cst.FlattenSentinel([log_stmt,updated_node])

source_tree = cst.parse_module("a = 6")
modified_tree = source_tree.visit(MyTransformer())
print(modified_tree.code)

我也尝试引入一个新行,但看起来更糟,代码示例:

def leave_Assign(self,updated_node):
    log_stmt = cst.Expr(cst.parse_expression("print('returning')"))
    return cst.FlattenSentinel([log_stmt,cst.Expr(cst.Newline()),updated_node])

我想要的结果是将新节点插入到现有节点之上(在同一级别),没有分号,如下所示:

print('returning')
a = 6

这在 libcs​​t 中可行吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)