我正在尝试在分配节点之前引入一个新节点(作为新的代码行)。
使用FlattenSentinel
引入新节点时会出现问题,因为我希望节点是分开的,但 libcst 使用分号 ( ;
) 将它们连接起来,例如:
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, old_node, 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
这在 libcst 中可能吗?