Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.11/site-packages/pyflakes/messages.py: 96%

Shortcuts on this page

r m x   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

204 statements  

1""" 

2Provide the class Message and its subclasses. 

3""" 

4 

5 

6class Message: 

7 message = '' 

8 message_args = () 

9 

10 def __init__(self, filename, loc): 

11 self.filename = filename 

12 self.lineno = loc.lineno 

13 self.col = loc.col_offset 

14 

15 def __str__(self): 

16 return '{}:{}:{}: {}'.format(self.filename, self.lineno, self.col+1, 

17 self.message % self.message_args) 

18 

19 

20class UnusedImport(Message): 

21 message = '%r imported but unused' 

22 

23 def __init__(self, filename, loc, name): 

24 Message.__init__(self, filename, loc) 

25 self.message_args = (name,) 

26 

27 

28class RedefinedWhileUnused(Message): 

29 message = 'redefinition of unused %r from line %r' 

30 

31 def __init__(self, filename, loc, name, orig_loc): 

32 Message.__init__(self, filename, loc) 

33 self.message_args = (name, orig_loc.lineno) 

34 

35 

36class ImportShadowedByLoopVar(Message): 

37 message = 'import %r from line %r shadowed by loop variable' 

38 

39 def __init__(self, filename, loc, name, orig_loc): 

40 Message.__init__(self, filename, loc) 

41 self.message_args = (name, orig_loc.lineno) 

42 

43 

44class ImportStarNotPermitted(Message): 

45 message = "'from %s import *' only allowed at module level" 

46 

47 def __init__(self, filename, loc, modname): 

48 Message.__init__(self, filename, loc) 

49 self.message_args = (modname,) 

50 

51 

52class ImportStarUsed(Message): 

53 message = "'from %s import *' used; unable to detect undefined names" 

54 

55 def __init__(self, filename, loc, modname): 

56 Message.__init__(self, filename, loc) 

57 self.message_args = (modname,) 

58 

59 

60class ImportStarUsage(Message): 

61 message = "%r may be undefined, or defined from star imports: %s" 

62 

63 def __init__(self, filename, loc, name, from_list): 

64 Message.__init__(self, filename, loc) 

65 self.message_args = (name, from_list) 

66 

67 

68class UndefinedName(Message): 

69 message = 'undefined name %r' 

70 

71 def __init__(self, filename, loc, name): 

72 Message.__init__(self, filename, loc) 

73 self.message_args = (name,) 

74 

75 

76class DoctestSyntaxError(Message): 

77 message = 'syntax error in doctest' 

78 

79 def __init__(self, filename, loc, position): 

80 Message.__init__(self, filename, loc) 

81 self.lineno, self.col = position 

82 self.message_args = () 

83 

84 

85class UndefinedExport(Message): 

86 message = 'undefined name %r in __all__' 

87 

88 def __init__(self, filename, loc, name): 

89 Message.__init__(self, filename, loc) 

90 self.message_args = (name,) 

91 

92 

93class UndefinedLocal(Message): 

94 message = 'local variable %r {0} referenced before assignment' 

95 

96 default = 'defined in enclosing scope on line %r' 

97 builtin = 'defined as a builtin' 

98 

99 def __init__(self, filename, loc, name, orig_loc): 

100 Message.__init__(self, filename, loc) 

101 if orig_loc is None: 

102 self.message = self.message.format(self.builtin) 

103 self.message_args = name 

104 else: 

105 self.message = self.message.format(self.default) 

106 self.message_args = (name, orig_loc.lineno) 

107 

108 

109class DuplicateArgument(Message): 

110 message = 'duplicate argument %r in function definition' 

111 

112 def __init__(self, filename, loc, name): 

113 Message.__init__(self, filename, loc) 

114 self.message_args = (name,) 

115 

116 

117class MultiValueRepeatedKeyLiteral(Message): 

118 message = 'dictionary key %r repeated with different values' 

119 

120 def __init__(self, filename, loc, key): 

121 Message.__init__(self, filename, loc) 

122 self.message_args = (key,) 

123 

124 

125class MultiValueRepeatedKeyVariable(Message): 

126 message = 'dictionary key variable %s repeated with different values' 

127 

128 def __init__(self, filename, loc, key): 

129 Message.__init__(self, filename, loc) 

130 self.message_args = (key,) 

131 

132 

133class LateFutureImport(Message): 

134 message = 'from __future__ imports must occur at the beginning of the file' 

135 

136 

137class FutureFeatureNotDefined(Message): 

138 """An undefined __future__ feature name was imported.""" 

139 message = 'future feature %s is not defined' 

140 

141 def __init__(self, filename, loc, name): # pragma: <3.14 cover 

142 Message.__init__(self, filename, loc) 

143 self.message_args = (name,) 

144 

145 

146class UnusedVariable(Message): 

147 """ 

148 Indicates that a variable has been explicitly assigned to but not actually 

149 used. 

150 """ 

151 message = 'local variable %r is assigned to but never used' 

152 

153 def __init__(self, filename, loc, names): 

154 Message.__init__(self, filename, loc) 

155 self.message_args = (names,) 

156 

157 

158class UnusedAnnotation(Message): 

159 """ 

160 Indicates that a variable has been explicitly annotated to but not actually 

161 used. 

162 """ 

163 message = 'local variable %r is annotated but never used' 

164 

165 def __init__(self, filename, loc, names): 

166 Message.__init__(self, filename, loc) 

167 self.message_args = (names,) 

168 

169 

170class UnusedIndirectAssignment(Message): 

171 """A `global` or `nonlocal` statement where the name is never reassigned""" 

172 message = '`%s %s` is unused: name is never assigned in scope' 

173 

174 def __init__(self, filename, loc, name): 

175 Message.__init__(self, filename, loc) 

176 self.message_args = (type(loc).__name__.lower(), name) 

177 

178 

179class ReturnOutsideFunction(Message): 

180 """ 

181 Indicates a return statement outside of a function/method. 

182 """ 

183 message = '\'return\' outside function' 

184 

185 

186class YieldOutsideFunction(Message): 

187 """ 

188 Indicates a yield or yield from statement outside of a function/method. 

189 """ 

190 message = '\'yield\' outside function' 

191 

192 

193# For whatever reason, Python gives different error messages for these two. We 

194# match the Python error message exactly. 

195class ContinueOutsideLoop(Message): 

196 """ 

197 Indicates a continue statement outside of a while or for loop. 

198 """ 

199 message = '\'continue\' not properly in loop' 

200 

201 

202class BreakOutsideLoop(Message): 

203 """ 

204 Indicates a break statement outside of a while or for loop. 

205 """ 

206 message = '\'break\' outside loop' 

207 

208 

209class DefaultExceptNotLast(Message): 

210 """ 

211 Indicates an except: block as not the last exception handler. 

212 """ 

213 message = 'default \'except:\' must be last' 

214 

215 

216class TwoStarredExpressions(Message): 

217 """ 

218 Two or more starred expressions in an assignment (a, *b, *c = d). 

219 """ 

220 message = 'two starred expressions in assignment' 

221 

222 

223class TooManyExpressionsInStarredAssignment(Message): 

224 """ 

225 Too many expressions in an assignment with star-unpacking 

226 """ 

227 message = 'too many expressions in star-unpacking assignment' 

228 

229 

230class IfTuple(Message): 

231 """ 

232 Conditional test is a non-empty tuple literal, which are always True. 

233 """ 

234 message = '\'if tuple literal\' is always true, perhaps remove accidental comma?' 

235 

236 

237class AssertTuple(Message): 

238 """ 

239 Assertion test is a non-empty tuple literal, which are always True. 

240 """ 

241 message = 'assertion is always true, perhaps remove parentheses?' 

242 

243 

244class ForwardAnnotationSyntaxError(Message): 

245 message = 'syntax error in forward annotation %r' 

246 

247 def __init__(self, filename, loc, annotation): 

248 Message.__init__(self, filename, loc) 

249 self.message_args = (annotation,) 

250 

251 

252class RaiseNotImplemented(Message): 

253 message = "'raise NotImplemented' should be 'raise NotImplementedError'" 

254 

255 

256class InvalidPrintSyntax(Message): 

257 message = 'use of >> is invalid with print function' 

258 

259 

260class IsLiteral(Message): 

261 message = 'use ==/!= to compare constant literals (str, bytes, int, float, tuple)' 

262 

263 

264class FStringMissingPlaceholders(Message): 

265 message = 'f-string is missing placeholders' 

266 

267 

268class TStringMissingPlaceholders(Message): 

269 message = 't-string is missing placeholders' 

270 

271 

272class StringDotFormatExtraPositionalArguments(Message): 

273 message = "'...'.format(...) has unused arguments at position(s): %s" 

274 

275 def __init__(self, filename, loc, extra_positions): 

276 Message.__init__(self, filename, loc) 

277 self.message_args = (extra_positions,) 

278 

279 

280class StringDotFormatExtraNamedArguments(Message): 

281 message = "'...'.format(...) has unused named argument(s): %s" 

282 

283 def __init__(self, filename, loc, extra_keywords): 

284 Message.__init__(self, filename, loc) 

285 self.message_args = (extra_keywords,) 

286 

287 

288class StringDotFormatMissingArgument(Message): 

289 message = "'...'.format(...) is missing argument(s) for placeholder(s): %s" 

290 

291 def __init__(self, filename, loc, missing_arguments): 

292 Message.__init__(self, filename, loc) 

293 self.message_args = (missing_arguments,) 

294 

295 

296class StringDotFormatMixingAutomatic(Message): 

297 message = "'...'.format(...) mixes automatic and manual numbering" 

298 

299 

300class StringDotFormatInvalidFormat(Message): 

301 message = "'...'.format(...) has invalid format string: %s" 

302 

303 def __init__(self, filename, loc, error): 

304 Message.__init__(self, filename, loc) 

305 self.message_args = (error,) 

306 

307 

308class PercentFormatInvalidFormat(Message): 

309 message = "'...' %% ... has invalid format string: %s" 

310 

311 def __init__(self, filename, loc, error): 

312 Message.__init__(self, filename, loc) 

313 self.message_args = (error,) 

314 

315 

316class PercentFormatMixedPositionalAndNamed(Message): 

317 message = "'...' %% ... has mixed positional and named placeholders" 

318 

319 

320class PercentFormatUnsupportedFormatCharacter(Message): 

321 message = "'...' %% ... has unsupported format character %r" 

322 

323 def __init__(self, filename, loc, c): 

324 Message.__init__(self, filename, loc) 

325 self.message_args = (c,) 

326 

327 

328class PercentFormatPositionalCountMismatch(Message): 

329 message = "'...' %% ... has %d placeholder(s) but %d substitution(s)" 

330 

331 def __init__(self, filename, loc, n_placeholders, n_substitutions): 

332 Message.__init__(self, filename, loc) 

333 self.message_args = (n_placeholders, n_substitutions) 

334 

335 

336class PercentFormatExtraNamedArguments(Message): 

337 message = "'...' %% ... has unused named argument(s): %s" 

338 

339 def __init__(self, filename, loc, extra_keywords): 

340 Message.__init__(self, filename, loc) 

341 self.message_args = (extra_keywords,) 

342 

343 

344class PercentFormatMissingArgument(Message): 

345 message = "'...' %% ... is missing argument(s) for placeholder(s): %s" 

346 

347 def __init__(self, filename, loc, missing_arguments): 

348 Message.__init__(self, filename, loc) 

349 self.message_args = (missing_arguments,) 

350 

351 

352class PercentFormatExpectedMapping(Message): 

353 message = "'...' %% ... expected mapping but got sequence" 

354 

355 

356class PercentFormatExpectedSequence(Message): 

357 message = "'...' %% ... expected sequence but got mapping" 

358 

359 

360class PercentFormatStarRequiresSequence(Message): 

361 message = "'...' %% ... `*` specifier requires sequence" 

362 

363 

364class EagerUseOfLazyImport(Message): 

365 message = 'eager use of lazily imported %r from line %r' 

366 

367 def __init__(self, filename, loc, name, orig_loc): # pragma: >=3.15 cover 

368 Message.__init__(self, filename, loc) 

369 self.message_args = (name, orig_loc.lineno) 

370 

371 

372class LazyImportStarNotPermitted(Message): 

373 message = "'lazy from %s import *' is not allowed" 

374 

375 def __init__(self, filename, loc, modname): # pragma: >=3.15 cover 

376 Message.__init__(self, filename, loc) 

377 self.message_args = (modname,) 

378 

379 

380class LazyImportNotAtModuleScope(Message): 

381 message = 'lazy import must be at module scope'