在Python源代码中查找位置的函数范围

时间:2013-10-03 05:41:10

标签: python function scope ctags

背景

  • 我正在为Vim创建一个最近使用的函数浏览器插件。
  • 我需要找到光标所在的当前函数的名称。
  • 对于其他语言,我可以搜索“{}”附件,但python使用空格/制表符。

实施例

假设我在foo.py ...

中有这些功能
def foo(file):
    fileLines = []
    with open(file, 'r') as f:
        for line in f:
            fileLines.append(line)

    def nested_function():
        pass

    # FILE POSITION
    for line in fileLines:
        print line

我想编写一个返回位置函数名称的函数(示例中为“文件位置”)

def get_function_scope(sourceFile, lineNumber, columnNumber):
    pass

因此,对于上面的例子,我想要像......

这样的东西
fxnName = get_function_scope("foo.py", lineNumber=9, columnNumber=4)
print fxnName
# "foo"

途径

  • Exuberant CTags为我提供了一个很好的所有函数/类/方法位置列表,但不是每个函数占用的作用域的行号。
  • 即使代码不是“实时”,也不确定检查是否有帮助?
  • 我正在考虑从缩进向后工作,直到我达到函数/方法定义。

是否有一种我不知道的标准方法?

1 个答案:

答案 0 :(得分:0)

这是我提出的解决方案:

https://gist.github.com/cgreer/7366297