コード例 #1
0
ファイル: PyAstUtil.py プロジェクト: vishnur/ufora
def withBlockAtLineNumber(sourceAst, lineNumber):
    visitor = _AtLineNumberVisitor(lineNumber)
    visitor.visit(sourceAst)

    subnodesAtLineNumber = visitor.withBlockSubnodesAtLineNumber

    if len(subnodesAtLineNumber) == 0:
        raise Exceptions.CantGetSourceTextError(
            "can't find a WithBlock at line %s of %s" % lineNumber)
    if len(subnodesAtLineNumber) > 1:
        raise Exceptions.CantGetSourceTextError(
            "can't find a unique WithBlock at line %s" % lineNumber)

    return subnodesAtLineNumber[0]
コード例 #2
0
ファイル: PyAstUtil.py プロジェクト: vishnur/ufora
def classDefAtLineNumber(sourceAst, lineNumber):
    visitor = _AtLineNumberVisitor(lineNumber)
    visitor.visit(sourceAst)

    subnodesAtLineNumber = visitor.classDefSubnodesAtLineNumber

    if len(subnodesAtLineNumber) == 0:
        raise Exceptions.CantGetSourceTextError(
            "Can't find a ClassDef at line %s." % lineNumber)
    if len(subnodesAtLineNumber) > 1:
        raise Exceptions.CantGetSourceTextError(
            "Can't find a unique ClassDef at line %s." % lineNumber)

    return subnodesAtLineNumber[0]
コード例 #3
0
def functionDefOrLambdaAtLineNumber(sourceAst, lineNumber):
    visitor = _AtLineNumberVisitor(lineNumber)
    visitor.visit(sourceAst)

    subnodesAtLineNumber = visitor.funcDefSubnodesAtLineNumber + visitor.lambdaSubnodesAtLineNumber

    if len(subnodesAtLineNumber) == 0:
        raise Exceptions.CantGetSourceTextError(
            "can't find a FunctionDef at line %s." % lineNumber)
    if len(subnodesAtLineNumber) > 1:
        raise Exceptions.CantGetSourceTextError(
            "can't find a unique FunctionDef at line %s." % lineNumber)

    return subnodesAtLineNumber[0]
コード例 #4
0
ファイル: PyAstUtil.py プロジェクト: vishnur/ufora
def functionDefOrLambdaAtLineNumber(sourceAst, lineNumber):
    visitor = _AtLineNumberVisitor(lineNumber)
    visitor.visit(sourceAst)

    subnodesAtLineNumber = visitor.funcDefSubnodesAtLineNumber + visitor.lambdaSubnodesAtLineNumber

    if len(subnodesAtLineNumber) == 0:
        raise Exceptions.CantGetSourceTextError(
            "can't find a function definition at line %s." % lineNumber)
    if len(subnodesAtLineNumber) > 1:
        raise Exceptions.CantGetSourceTextError(
            "can't find a unique function definition at line %s. Do you have two lambdas on the same line?"
            % lineNumber)

    return subnodesAtLineNumber[0]
コード例 #5
0
ファイル: PyAstUtil.py プロジェクト: lessc0de/ufora
def getSourceLines(pyObject):
    try:
        tr = PyforaInspect.getsourcelines(pyObject)
    except (TypeError, IOError) as e:
        raise Exceptions.CantGetSourceTextError(
            e.message), None, sys.exc_info()[2]
    return tr
コード例 #6
0
ファイル: PyAstUtil.py プロジェクト: lessc0de/ufora
def getSourceFilenameAndText(pyObject):
    try:
        sourceFile = PyforaInspect.getsourcefile(pyObject)
    except TypeError as e:
        raise Exceptions.CantGetSourceTextError(e.message)

    linesOrNone = PyforaInspect.getlines(sourceFile)

    if linesOrNone is None:
        raise Exceptions.CantGetSourceTextError(
            "can't get source lines for file %s" % sourceFile)

    if sourceFile not in sourceFileCache_:
        sourceFileCache_[sourceFile] = "".join(linesOrNone)

    return sourceFileCache_[sourceFile], sourceFile
コード例 #7
0
ファイル: PyAstUtil.py プロジェクト: vishnur/ufora
def getSourceFilenameAndText(pyObject):
    try:
        sourceFile = PyforaInspect.getsourcefile(pyObject)
    except TypeError as e:
        raise Exceptions.CantGetSourceTextError(e.message)

    if sourceFile not in sourceFileCache_:
        sourceFileCache_[sourceFile] = "".join(
            PyforaInspect.getlines(sourceFile))

    return sourceFileCache_[sourceFile], sourceFile
コード例 #8
0
ファイル: PyAstUtil.py プロジェクト: vishnur/ufora
def getSourceText(pyObject):
    try:
        source, lineno = PyforaInspect.getsourcelines(pyObject)
    except TypeError as e:
        raise Exceptions.CantGetSourceTextError(e.message)
    # Create a prefix of (lineno-1) blank lines to keep track of line numbers for error reporting
    blankLines = os.linesep * (lineno - 1)
    # We don't know how to avoid the use of `textwrap.dedent to get the code
    # though `ast.parse, which means that the computed column_numbers may be
    # off and we shouldn't report them.
    return textwrap.dedent(blankLines + "".join(source))
コード例 #9
0
def getSourceFilenameAndText(pyObject):
    try:
        sourceFile = PyforaInspect.getsourcefile(pyObject)
    except TypeError as e:
        raise Exceptions.CantGetSourceTextError(e.message)

    if sourceFile in sourceFileCache_:
        return sourceFileCache_[sourceFile], sourceFile
    with open(sourceFile, "r") as f:
        tr = f.read()
    sourceFileCache_[sourceFile] = tr

    return tr, sourceFile