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)。但似乎 libcst 不提供这种支持。我进一步环顾四周,找出了属于 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
我正在寻找一种从访问者中的节点获取代码的方法。 示例:
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)。但似乎 libcst 不提供这种支持。我进一步环顾四周,找出了属于 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