基本上,我想使用绝地武士从函数或类的定义(路径,行,列)的详细信息中检索函数或类的代码。更明确地说,我真正希望的是从一个不执行的静态文件中获取代码。
我使用此文件中find_pyfunc_above_row定义的函数 https://github.com/Erotemic/utool/blob/next/utool/util_inspect.py 来完成类似的任务。
似乎您可以使用ast
和codegen
来完成此任务。
我将发布一个代码示例来说明这一点:
import ast,codegen
def find_by_line(root, line):
found = None
if hasattr(root, "lineno"):
if root.lineno == line:
return root
if hasattr(root, "body"):
for node in root.body:
found = find_by_line(node, line)
if found:
break
return found
def get_func_code(path, line):
with open(path) as file:
code_tree = ast.parse(file.read())
unit = find_by_line(code_tree, line)
return codegen.to_source(unit)
这目前在绝地武士中不受支持。您当然可以这样做,但不能使用公共 API。Jedi的API目前缺少两件事:
- 按位置获取类/函数(你可以通过使用绝地的解析器来获得它)。
- 一旦你上课就获取代码。这很简单:
node.get_code()
尝试玩jedi.parser.Parser
.这是一个非常强大的工具,但尚未公开记录。