| """ |
| Provide the class Message and its subclasses. |
| """ |
| |
| |
| class Message(object): |
| message = '' |
| message_args = () |
| |
| def __init__(self, filename, loc): |
| self.filename = filename |
| self.lineno = loc.lineno |
| self.col = getattr(loc, 'col_offset', 0) |
| |
| def __str__(self): |
| return '%s:%s: %s' % (self.filename, self.lineno, |
| self.message % self.message_args) |
| |
| |
| class UnusedImport(Message): |
| message = '%r imported but unused' |
| |
| def __init__(self, filename, loc, name): |
| Message.__init__(self, filename, loc) |
| self.message_args = (name,) |
| |
| |
| class RedefinedWhileUnused(Message): |
| message = 'redefinition of unused %r from line %r' |
| |
| def __init__(self, filename, loc, name, orig_loc): |
| Message.__init__(self, filename, loc) |
| self.message_args = (name, orig_loc.lineno) |
| |
| |
| class RedefinedInListComp(Message): |
| message = 'list comprehension redefines %r from line %r' |
| |
| def __init__(self, filename, loc, name, orig_loc): |
| Message.__init__(self, filename, loc) |
| self.message_args = (name, orig_loc.lineno) |
| |
| |
| class ImportShadowedByLoopVar(Message): |
| message = 'import %r from line %r shadowed by loop variable' |
| |
| def __init__(self, filename, loc, name, orig_loc): |
| Message.__init__(self, filename, loc) |
| self.message_args = (name, orig_loc.lineno) |
| |
| |
| class ImportStarNotPermitted(Message): |
| message = "'from %s import *' only allowed at module level" |
| |
| def __init__(self, filename, loc, modname): |
| Message.__init__(self, filename, loc) |
| self.message_args = (modname,) |
| |
| |
| class ImportStarUsed(Message): |
| message = "'from %s import *' used; unable to detect undefined names" |
| |
| def __init__(self, filename, loc, modname): |
| Message.__init__(self, filename, loc) |
| self.message_args = (modname,) |
| |
| |
| class ImportStarUsage(Message): |
| message = "%s may be undefined, or defined from star imports: %s" |
| |
| def __init__(self, filename, loc, name, from_list): |
| Message.__init__(self, filename, loc) |
| self.message_args = (name, from_list) |
| |
| |
| class UndefinedName(Message): |
| message = 'undefined name %r' |
| |
| def __init__(self, filename, loc, name): |
| Message.__init__(self, filename, loc) |
| self.message_args = (name,) |
| |
| |
| class DoctestSyntaxError(Message): |
| message = 'syntax error in doctest' |
| |
| def __init__(self, filename, loc, position=None): |
| Message.__init__(self, filename, loc) |
| if position: |
| (self.lineno, self.col) = position |
| self.message_args = () |
| |
| |
| class UndefinedExport(Message): |
| message = 'undefined name %r in __all__' |
| |
| def __init__(self, filename, loc, name): |
| Message.__init__(self, filename, loc) |
| self.message_args = (name,) |
| |
| |
| class UndefinedLocal(Message): |
| message = ('local variable %r (defined in enclosing scope on line %r) ' |
| 'referenced before assignment') |
| |
| def __init__(self, filename, loc, name, orig_loc): |
| Message.__init__(self, filename, loc) |
| self.message_args = (name, orig_loc.lineno) |
| |
| |
| class DuplicateArgument(Message): |
| message = 'duplicate argument %r in function definition' |
| |
| def __init__(self, filename, loc, name): |
| Message.__init__(self, filename, loc) |
| self.message_args = (name,) |
| |
| |
| class LateFutureImport(Message): |
| message = 'from __future__ imports must occur at the beginning of the file' |
| |
| def __init__(self, filename, loc, names): |
| Message.__init__(self, filename, loc) |
| self.message_args = () |
| |
| |
| class UnusedVariable(Message): |
| """ |
| Indicates that a variable has been explicitly assigned to but not actually |
| used. |
| """ |
| message = 'local variable %r is assigned to but never used' |
| |
| def __init__(self, filename, loc, names): |
| Message.__init__(self, filename, loc) |
| self.message_args = (names,) |
| |
| |
| class ReturnWithArgsInsideGenerator(Message): |
| """ |
| Indicates a return statement with arguments inside a generator. |
| """ |
| message = '\'return\' with argument inside generator' |
| |
| |
| class ReturnOutsideFunction(Message): |
| """ |
| Indicates a return statement outside of a function/method. |
| """ |
| message = '\'return\' outside function' |
| |
| |
| class YieldOutsideFunction(Message): |
| """ |
| Indicates a yield or yield from statement outside of a function/method. |
| """ |
| message = '\'yield\' outside function' |
| |
| |
| # For whatever reason, Python gives different error messages for these two. We |
| # match the Python error message exactly. |
| class ContinueOutsideLoop(Message): |
| """ |
| Indicates a continue statement outside of a while or for loop. |
| """ |
| message = '\'continue\' not properly in loop' |
| |
| |
| class BreakOutsideLoop(Message): |
| """ |
| Indicates a break statement outside of a while or for loop. |
| """ |
| message = '\'break\' outside loop' |
| |
| |
| class ContinueInFinally(Message): |
| """ |
| Indicates a continue statement in a finally block in a while or for loop. |
| """ |
| message = '\'continue\' not supported inside \'finally\' clause' |
| |
| |
| class DefaultExceptNotLast(Message): |
| """ |
| Indicates an except: block as not the last exception handler. |
| """ |
| message = 'default \'except:\' must be last' |
| |
| |
| class TwoStarredExpressions(Message): |
| """ |
| Two or more starred expressions in an assignment (a, *b, *c = d). |
| """ |
| message = 'two starred expressions in assignment' |
| |
| |
| class TooManyExpressionsInStarredAssignment(Message): |
| """ |
| Too many expressions in an assignment with star-unpacking |
| """ |
| message = 'too many expressions in star-unpacking assignment' |
| |
| |
| class AssertTuple(Message): |
| """ |
| Assertion test is a tuple, which are always True. |
| """ |
| message = 'assertion is always true, perhaps remove parentheses?' |