基本上我想用jedi来检索一个函数或一个类'代码来自它的定义(路径,行,列)的详细信息。更明确一点,我真正希望的是从文件中获取未执行的代码,静态。
答案 0 :(得分:0)
我使用此文件https://github.com/Erotemic/utool/blob/next/utool/util_inspect.py中定义的函数find_pyfunc_above_row来完成类似的任务。
答案 1 :(得分:0)
您似乎可以使用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)
来完成此任务。
我将发布一个代码示例来说明这一点:
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目前缺少两件事:
node.get_code()
尝试使用jedi.parser.Parser
。它是一个非常强大的工具,但尚未公开记录。