微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 举报,一经查实,本站将立刻删除。