从文件中获取函数/类代码,知道它的定义

时间:2016-03-02 13:51:36

标签: python python-jedi

基本上我想用jedi来检索一个函数或一个类'代码来自它的定义(路径,行,列)的详细信息。更明确一点,我真正希望的是从文件中获取未执行的代码,静态。

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

您似乎可以使用codegenimport 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) 来完成此任务。

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

  Select [Week no]=case when DATEPART(dd,Date_Value) between 1 and 7 then 1
        when DATEPART(dd,Date_Value) between 8 and 14 then 2
        when DATEPART(dd,Date_Value) between 15 and 21 then 3
        when DATEPART(dd,Date_Value) between 22 and 28 then 4
        when DATEPART(dd,Date_Value) >28 then 5
        end
        from Datecte

答案 2 :(得分:0)

目前这不是Jedi所支持的。你当然可以这样做,但不能使用公共API。 Jedi的API目前缺少两件事:

  1. 按位置获取课程/功能(你可以通过玩jedi的Parser来获得这个)。
  2. 上课后获取代码。这非常简单:node.get_code()
  3. 尝试使用jedi.parser.Parser。它是一个非常强大的工具,但尚未公开记录。