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]
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]
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]
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]
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
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
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
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))
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