| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349 |
- """
- Provide the class Message and its subclasses.
- """
- class Message:
- message = ''
- message_args = ()
- def __init__(self, filename, loc):
- self.filename = filename
- self.lineno = loc.lineno
- self.col = loc.col_offset
- def __str__(self):
- return '{}:{}:{}: {}'.format(self.filename, self.lineno, self.col+1,
- 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 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 = "%r 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 {0} referenced before assignment'
- default = 'defined in enclosing scope on line %r'
- builtin = 'defined as a builtin'
- def __init__(self, filename, loc, name, orig_loc):
- Message.__init__(self, filename, loc)
- if orig_loc is None:
- self.message = self.message.format(self.builtin)
- self.message_args = name
- else:
- self.message = self.message.format(self.default)
- 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 MultiValueRepeatedKeyLiteral(Message):
- message = 'dictionary key %r repeated with different values'
- def __init__(self, filename, loc, key):
- Message.__init__(self, filename, loc)
- self.message_args = (key,)
- class MultiValueRepeatedKeyVariable(Message):
- message = 'dictionary key variable %s repeated with different values'
- def __init__(self, filename, loc, key):
- Message.__init__(self, filename, loc)
- self.message_args = (key,)
- class LateFutureImport(Message):
- message = 'from __future__ imports must occur at the beginning of the file'
- class FutureFeatureNotDefined(Message):
- """An undefined __future__ feature name was imported."""
- message = 'future feature %s is not defined'
- def __init__(self, filename, loc, name):
- Message.__init__(self, filename, loc)
- self.message_args = (name,)
- 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 UnusedAnnotation(Message):
- """
- Indicates that a variable has been explicitly annotated to but not actually
- used.
- """
- message = 'local variable %r is annotated but never used'
- def __init__(self, filename, loc, names):
- Message.__init__(self, filename, loc)
- self.message_args = (names,)
- 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 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 IfTuple(Message):
- """
- Conditional test is a non-empty tuple literal, which are always True.
- """
- message = '\'if tuple literal\' is always true, perhaps remove accidental comma?'
- class AssertTuple(Message):
- """
- Assertion test is a non-empty tuple literal, which are always True.
- """
- message = 'assertion is always true, perhaps remove parentheses?'
- class ForwardAnnotationSyntaxError(Message):
- message = 'syntax error in forward annotation %r'
- def __init__(self, filename, loc, annotation):
- Message.__init__(self, filename, loc)
- self.message_args = (annotation,)
- class RaiseNotImplemented(Message):
- message = "'raise NotImplemented' should be 'raise NotImplementedError'"
- class InvalidPrintSyntax(Message):
- message = 'use of >> is invalid with print function'
- class IsLiteral(Message):
- message = 'use ==/!= to compare constant literals (str, bytes, int, float, tuple)'
- class FStringMissingPlaceholders(Message):
- message = 'f-string is missing placeholders'
- class StringDotFormatExtraPositionalArguments(Message):
- message = "'...'.format(...) has unused arguments at position(s): %s"
- def __init__(self, filename, loc, extra_positions):
- Message.__init__(self, filename, loc)
- self.message_args = (extra_positions,)
- class StringDotFormatExtraNamedArguments(Message):
- message = "'...'.format(...) has unused named argument(s): %s"
- def __init__(self, filename, loc, extra_keywords):
- Message.__init__(self, filename, loc)
- self.message_args = (extra_keywords,)
- class StringDotFormatMissingArgument(Message):
- message = "'...'.format(...) is missing argument(s) for placeholder(s): %s"
- def __init__(self, filename, loc, missing_arguments):
- Message.__init__(self, filename, loc)
- self.message_args = (missing_arguments,)
- class StringDotFormatMixingAutomatic(Message):
- message = "'...'.format(...) mixes automatic and manual numbering"
- class StringDotFormatInvalidFormat(Message):
- message = "'...'.format(...) has invalid format string: %s"
- def __init__(self, filename, loc, error):
- Message.__init__(self, filename, loc)
- self.message_args = (error,)
- class PercentFormatInvalidFormat(Message):
- message = "'...' %% ... has invalid format string: %s"
- def __init__(self, filename, loc, error):
- Message.__init__(self, filename, loc)
- self.message_args = (error,)
- class PercentFormatMixedPositionalAndNamed(Message):
- message = "'...' %% ... has mixed positional and named placeholders"
- class PercentFormatUnsupportedFormatCharacter(Message):
- message = "'...' %% ... has unsupported format character %r"
- def __init__(self, filename, loc, c):
- Message.__init__(self, filename, loc)
- self.message_args = (c,)
- class PercentFormatPositionalCountMismatch(Message):
- message = "'...' %% ... has %d placeholder(s) but %d substitution(s)"
- def __init__(self, filename, loc, n_placeholders, n_substitutions):
- Message.__init__(self, filename, loc)
- self.message_args = (n_placeholders, n_substitutions)
- class PercentFormatExtraNamedArguments(Message):
- message = "'...' %% ... has unused named argument(s): %s"
- def __init__(self, filename, loc, extra_keywords):
- Message.__init__(self, filename, loc)
- self.message_args = (extra_keywords,)
- class PercentFormatMissingArgument(Message):
- message = "'...' %% ... is missing argument(s) for placeholder(s): %s"
- def __init__(self, filename, loc, missing_arguments):
- Message.__init__(self, filename, loc)
- self.message_args = (missing_arguments,)
- class PercentFormatExpectedMapping(Message):
- message = "'...' %% ... expected mapping but got sequence"
- class PercentFormatExpectedSequence(Message):
- message = "'...' %% ... expected sequence but got mapping"
- class PercentFormatStarRequiresSequence(Message):
- message = "'...' %% ... `*` specifier requires sequence"
|