Python Libcst:无法从访问者中的节点生成代码 class

Python Libcst: Unable to generate code from the node in visitor class

我正在寻找一种从访问者中的节点获取代码的方法。 示例:

import libcst

code_example = """
from ast import parse
threshold  =  1
print(threshold)
"""

class CodeVisitor(libcst.CSTVisitor):
    def visit_Assign(self, node: libcst.Assign) -> bool:
        print(node)
        return True


demo = libcst.parse_module(code_example)
demo.visit(CodeVisitor())

在上面的代码中,我想获取节点的代码(即 threshold = 1)。但似乎 libcs​​t 不提供这种支持。我进一步环顾四周,找出了属于 Module 的函数名称 code_for_node(node: libcst._nodes.base.CSTNode) → str libcst.Module.code_for_node 。但是我找不到足够的帮助来在我的代码中使用它。

期待帮助。 提前致谢!

花了一些时间,我想出了解决问题的方法。这是代码。

代码:

import libcst as cst

code_example = """
from ast import parse
threshold  =  1
print(threshold)
"""

class CodeVisitor(cst.CSTVisitor):
    def visit_Assign(self, node: cst.Assign) -> bool:
        print("--> NODE TREE: \n{}".format(node))
        print("--> CODE LINE FROM NODE TREE: \n{}".format(cst.parse_module("").code_for_node(node)))
        return True


demo = cst.parse_module(code_example)
_ = demo.visit(CodeVisitor())

输出:

--> NODE TREE: 
Assign(
    targets=[
        AssignTarget(
            target=Name(
                value='threshold',
                lpar=[],
                rpar=[],
            ),
            whitespace_before_equal=SimpleWhitespace(
                value='  ',
            ),
            whitespace_after_equal=SimpleWhitespace(
                value='  ',
            ),
        ),
    ],
    value=Integer(
        value='1',
        lpar=[],
        rpar=[],
    ),
    semicolon=MaybeSentinel.DEFAULT,
)
--> CODE LINE FROM NODE TREE: 
threshold  =  1