从知道其定义的行和列的文件中获取函数/类代码



基本上,我想使用绝地武士从函数或类的定义(路径,行,列)的详细信息中检索函数或类的代码。更明确地说,我真正希望的是从一个不执行的静态文件中获取代码。

我使用此文件中find_pyfunc_above_row定义的函数 https://github.com/Erotemic/utool/blob/next/utool/util_inspect.py 来完成类似的任务。

似乎您可以使用astcodegen来完成此任务。

我将发布一个代码示例来说明这一点:

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目前缺少两件事:

  1. 按位置获取类/函数(你可以通过使用绝地的解析器来获得它)。
  2. 一旦你上课就获取代码。这很简单:node.get_code()

尝试玩jedi.parser.Parser.这是一个非常强大的工具,但尚未公开记录。

相关内容

  • 没有找到相关文章

最新更新