Enable use-before-def error code by default
This enables the error code added in #14163.
We aren't sure if it will cause too many problems. We can see what the mypy primer outputs as well.
Diff from mypy_primer, showing the effect of this PR on open source code:
vision (https://github.com/pytorch/vision)
+ torchvision/io/video_reader.py:26: error: Name "av" is used before definition [use-before-def]
+ torchvision/io/video_reader.py:27: error: Name "av" is used before definition [use-before-def]
pyinstrument (https://github.com/joerick/pyinstrument)
+ pyinstrument/renderers/base.py:12: error: Name "processors" is used before definition [use-before-def]
aiortc (https://github.com/aiortc/aiortc)
+ src/aiortc/rtcsctptransport.py:531: error: Name "expected_tsn" is used before definition [use-before-def]
sphinx (https://github.com/sphinx-doc/sphinx)
+ sphinx/ext/autodoc/mock.py:14:28: error: Name "__name__" is used before definition [use-before-def]
+ sphinx/ext/autodoc/importer.py:81:13: error: Name "exc" is used before definition [use-before-def]
+ sphinx/ext/autodoc/importer.py:83:36: error: Name "exc" is used before definition [use-before-def]
+ sphinx/ext/autodoc/importer.py:110:23: error: Name "exc" is used before definition [use-before-def]
+ sphinx/domains/std.py:334:19: error: Name "directives" is used before definition [use-before-def]
+ sphinx/ext/autodoc/__init__.py:77:22: error: Name "object" is used before definition [use-before-def]
+ sphinx/ext/autodoc/__init__.py:78:16: error: Name "object" is used before definition [use-before-def]
+ sphinx/ext/autodoc/__init__.py:79:13: error: Name "object" is used before definition [use-before-def]
+ sphinx/ext/autodoc/__init__.py:127:12: error: Name "object" is used before definition [use-before-def]
+ sphinx/domains/python.py:412:20: error: Name "directives" is used before definition [use-before-def]
+ sphinx/domains/python.py:413:25: error: Name "directives" is used before definition [use-before-def]
+ sphinx/domains/python.py:414:28: error: Name "directives" is used before definition [use-before-def]
+ sphinx/domains/python.py:415:19: error: Name "directives" is used before definition [use-before-def]
+ sphinx/domains/python.py:416:22: error: Name "directives" is used before definition [use-before-def]
+ sphinx/domains/python.py:417:23: error: Name "directives" is used before definition [use-before-def]
+ sphinx/domains/python.py:661:18: error: Name "directives" is used before definition [use-before-def]
+ sphinx/domains/python.py:716:17: error: Name "directives" is used before definition [use-before-def]
+ sphinx/domains/python.py:717:18: error: Name "directives" is used before definition [use-before-def]
+ sphinx/domains/python.py:755:18: error: Name "directives" is used before definition [use-before-def]
+ sphinx/domains/python.py:783:27: error: Name "directives" is used before definition [use-before-def]
+ sphinx/domains/python.py:784:18: error: Name "directives" is used before definition [use-before-def]
+ sphinx/domains/python.py:785:24: error: Name "directives" is used before definition [use-before-def]
+ sphinx/domains/python.py:786:18: error: Name "directives" is used before definition [use-before-def]
+ sphinx/domains/python.py:787:25: error: Name "directives" is used before definition [use-before-def]
+ sphinx/domains/python.py:877:17: error: Name "directives" is used before definition [use-before-def]
+ sphinx/domains/python.py:878:18: error: Name "directives" is used before definition [use-before-def]
+ sphinx/domains/python.py:922:27: error: Name "directives" is used before definition [use-before-def]
+ sphinx/domains/python.py:923:24: error: Name "directives" is used before definition [use-before-def]
+ sphinx/domains/python.py:924:17: error: Name "directives" is used before definition [use-before-def]
+ sphinx/domains/python.py:980:20: error: Name "directives" is used before definition [use-before-def]
+ sphinx/domains/python.py:981:28: error: Name "directives" is used before definition [use-before-def]
+ sphinx/domains/python.py:982:23: error: Name "directives" is used before definition [use-before-def]
+ sphinx/domains/rst.py:32:20: error: Name "directives" is used before definition [use-before-def]
+ sphinx/domains/rst.py:33:25: error: Name "directives" is used before definition [use-before-def]
+ sphinx/domains/rst.py:34:28: error: Name "directives" is used before definition [use-before-def]
+ sphinx/domains/rst.py:141:17: error: Name "directives" is used before definition [use-before-def]
+ sphinx/domains/javascript.py:41:20: error: Name "directives" is used before definition [use-before-def]
+ sphinx/domains/javascript.py:42:25: error: Name "directives" is used before definition [use-before-def]
+ sphinx/domains/javascript.py:43:28: error: Name "directives" is used before definition [use-before-def]
+ sphinx/domains/javascript.py:288:20: error: Name "directives" is used before definition [use-before-def]
+ sphinx/domains/javascript.py:289:28: error: Name "directives" is used before definition [use-before-def]
+ sphinx/domains/cpp.py:2417:6: error: Name "name" is used before definition [use-before-def]
+ sphinx/domains/cpp.py:2468:6: error: Name "name" is used before definition [use-before-def]
+ sphinx/domains/cpp.py:2553:6: error: Name "name" is used before definition [use-before-def]
+ sphinx/domains/cpp.py:2603:6: error: Name "name" is used before definition [use-before-def]
+ sphinx/domains/cpp.py:2708:6: error: Name "name" is used before definition [use-before-def]
+ sphinx/domains/cpp.py:2774:6: error: Name "name" is used before definition [use-before-def]
+ sphinx/domains/cpp.py:2842:6: error: Name "name" is used before definition [use-before-def]
+ sphinx/domains/cpp.py:2943:6: error: Name "name" is used before definition [use-before-def]
+ sphinx/domains/cpp.py:3082:6: error: Name "name" is used before definition [use-before-def]
+ sphinx/domains/cpp.py:7189:25: error: Name "directives" is used before definition [use-before-def]
+ sphinx/domains/cpp.py:7190:28: error: Name "directives" is used before definition [use-before-def]
+ sphinx/domains/cpp.py:7191:29: error: Name "directives" is used before definition [use-before-def]
+ sphinx/domains/cpp.py:7710:21: error: Name "directives" is used before definition [use-before-def]
+ sphinx/domains/cpp.py:7711:19: error: Name "directives" is used before definition [use-before-def]
+ sphinx/domains/c.py:3127:25: error: Name "directives" is used before definition [use-before-def]
+ sphinx/domains/c.py:3128:28: error: Name "directives" is used before definition [use-before-def]
+ sphinx/domains/c.py:3579:21: error: Name "directives" is used before definition [use-before-def]
+ sphinx/domains/c.py:3580:19: error: Name "directives" is used before definition [use-before-def]
+ sphinx/environment/collectors/toctree.py:131:34: error: Name "parents" is used before definition [use-before-def]
starlette (https://github.com/encode/starlette)
+ starlette/templating.py:15: error: Name "jinja2" is used before definition [use-before-def]
+ starlette/templating.py:16: error: Name "jinja2" is used before definition [use-before-def]
+ starlette/templating.py:18: error: Name "jinja2" is used before definition [use-before-def]
+ starlette/templating.py:18: note: Error code "use-before-def" not covered by "type: ignore" comment
operator (https://github.com/canonical/operator)
+ ops/_vendor/websocket/_ssl_compat.py:27: error: Name "ssl" is used before definition [use-before-def]
pandas-stubs (https://github.com/pandas-dev/pandas-stubs)
+ pandas-stubs/_typing.pyi:52: error: Name "Scalar" is used before definition [use-before-def]
+ pandas-stubs/core/dtypes/dtypes.pyi:16: error: Name "str" is used before definition [use-before-def]
+ pandas-stubs/core/dtypes/dtypes.pyi:35: error: Name "type" is used before definition [use-before-def]
+ pandas-stubs/core/computation/pytables.pyi:27: error: Name "value" is used before definition [use-before-def]
+ pandas-stubs/core/computation/pytables.pyi:92: error: Name "expr" is used before definition [use-before-def]
+ pandas-stubs/core/arrays/integer.pyi:5: error: Name "type" is used before definition [use-before-def]
Tanjun (https://github.com/FasterSpeeding/Tanjun)
+ tanjun/_internal/vendor/inspect.pyi:361: error: Name "object" is used before definition [use-before-def]
psycopg (https://github.com/psycopg/psycopg)
+ psycopg/psycopg/cursor.py:235: error: Name "pgq" is used before definition [use-before-def]
+ psycopg/psycopg/cursor.py:263: error: Name "pgq" is used before definition [use-before-def]
discord.py (https://github.com/Rapptz/discord.py)
+ discord/app_commands/transformers.py:69: error: Name "type" is used before definition [use-before-def]
+ discord/ext/commands/bot.py:1353: error: Name "exc" is used before definition [use-before-def]
+ discord/ext/commands/bot.py:1354: error: Name "exc" is used before definition [use-before-def]
prefect (https://github.com/PrefectHQ/prefect)
+ src/prefect/results.py:31: error: Name "type" is used before definition [use-before-def]
urllib3 (https://github.com/urllib3/urllib3)
+ src/urllib3/util/ssl_.py:105: error: Name "PROTOCOL_TLS" is used before definition [use-before-def]
+ src/urllib3/connection.py:31: error: Name "ssl" is used before definition [use-before-def]
+ src/urllib3/connection.py:110: error: Name "socket" is used before definition [use-before-def]
+ src/urllib3/response.py:33: error: Name "zstd" is used before definition [use-before-def]
+ src/urllib3/response.py:33: note: Error code "use-before-def" not covered by "type: ignore" comment
scrapy (https://github.com/scrapy/scrapy)
+ scrapy/utils/log.py:108: error: Name "_scrapy_root_handler" is used before definition [use-before-def]
+ scrapy/utils/log.py:109: error: Name "_scrapy_root_handler" is used before definition [use-before-def]
+ scrapy/utils/log.py:110: error: Name "_scrapy_root_handler" is used before definition [use-before-def]
jax (https://github.com/google/jax)
+ jaxlib/gpu_linalg.py:27: error: Name "_cuda_linalg" is used before definition [use-before-def]
+ jaxlib/gpu_linalg.py:34: error: Name "_hip_linalg" is used before definition [use-before-def]
+ jaxlib/gpu_prng.py:29: error: Name "_cuda_prng" is used before definition [use-before-def]
+ jaxlib/gpu_prng.py:36: error: Name "_hip_prng" is used before definition [use-before-def]
+ jaxlib/gpu_solver.py:31: error: Name "_cublas" is used before definition [use-before-def]
+ jaxlib/gpu_solver.py:38: error: Name "_cusolver" is used before definition [use-before-def]
+ jaxlib/gpu_solver.py:46: error: Name "_hipblas" is used before definition [use-before-def]
+ jaxlib/gpu_solver.py:53: error: Name "_hipsolver" is used before definition [use-before-def]
+ jax/_src/config.py:167: error: Name "already_configured_with_absl" is used before definition [use-before-def]
+ jax/_src/state/primitives.py:231: error: Name "idx" is used before definition [use-before-def]
+ jax/_src/state/primitives.py:242: error: Name "idx" is used before definition [use-before-def]
+ jax/_src/state/primitives.py:265: error: Name "idx" is used before definition [use-before-def]
+ jax/_src/state/primitives.py:354: error: Name "idxs" is used before definition [use-before-def]
+ jax/_src/state/primitives.py:388: error: Name "idxs" is used before definition [use-before-def]
+ jax/_src/state/primitives.py:421: error: Name "idxs" is used before definition [use-before-def]
+ jax/core.py:98: error: Name "__str__" is used before definition [use-before-def]
+ jax/interpreters/pxla.py:3783: error: Name "eqn" is used before definition [use-before-def]
+ jax/interpreters/pxla.py:3784: error: Name "eqn" is used before definition [use-before-def]
+ jax/interpreters/pxla.py:3785: error: Name "eqn" is used before definition [use-before-def]
+ jax/interpreters/pxla.py:3786: error: Name "eqn" is used before definition [use-before-def]
+ jax/_src/lax/control_flow/conditionals.py:325: error: Name "ops" is used before definition [use-before-def]
+ jax/_src/lax/control_flow/conditionals.py:338: error: Name "ops" is used before definition [use-before-def]
+ jax/_src/lax/control_flow/conditionals.py:390: error: Name "ops_dot" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:1763: error: Name "_one" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:1767: error: Name "_one" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:1772: error: Name "_one" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:1776: error: Name "_one" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:1858: error: Name "_one" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:1863: error: Name "_one" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:1868: error: Name "_one" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:1959: error: Name "_dtype" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:1963: error: Name "_dtype" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:2099: error: Name "_ones" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:3026: error: Name "_zeros" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:3029: error: Name "_zeros" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:3031: error: Name "_zeros" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:3463: error: Name "cases" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:3470: error: Name "cases" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:3471: error: Name "cases" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:3475: error: Name "cases" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:3476: error: Name "cases" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:3479: error: Name "cases" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:3484: error: Name "cases" is used before definition [use-before-def]
+ jax/_src/numpy/ufuncs.py:65: error: Name "fn" is used before definition [use-before-def]
+ jax/_src/numpy/ufuncs.py:84: error: Name "fn" is used before definition [use-before-def]
+ jax/_src/numpy/ufuncs.py:99: error: Name "fn" is used before definition [use-before-def]
+ jax/_src/numpy/ufuncs.py:119: error: Name "fn" is used before definition [use-before-def]
+ jax/_src/scipy/signal.py:169: error: Name "batch_shape" is used before definition [use-before-def]
+ jax/experimental/host_callback.py:1112: error: Name "results" is used before definition [use-before-def]
+ jax/experimental/jax2tf/tests/shape_poly_test.py:461: error: Name "f_tf" is used before definition [use-before-def]
schemathesis (https://github.com/schemathesis/schemathesis)
+ src/schemathesis/service/metadata.py:12: error: Name "platform" is used before definition [use-before-def]
+ src/schemathesis/service/metadata.py:14: error: Name "platform" is used before definition [use-before-def]
+ src/schemathesis/service/metadata.py:16: error: Name "platform" is used before definition [use-before-def]
+ src/schemathesis/service/metadata.py:22: error: Name "platform" is used before definition [use-before-def]
+ src/schemathesis/service/metadata.py:24: error: Name "platform" is used before definition [use-before-def]
spack (https://github.com/spack/spack)
+ lib/spack/spack/solver/asp.py:23: error: Name "clingo" is used before definition [use-before-def]
+ lib/spack/spack/build_systems/cached_cmake.py:33: error: Name "CMakeBuilder" is used before definition [use-before-def]
+ lib/spack/spack/build_systems/cached_cmake.py:40: error: Name "CMakeBuilder" is used before definition [use-before-def]
+ lib/spack/spack/build_systems/cached_cmake.py:49: error: Name "CMakeBuilder" is used before definition [use-before-def]
+ lib/spack/spack/build_systems/r.py:15: error: Name "GenericBuilder" is used before definition [use-before-def]
+ lib/spack/spack/build_systems/r.py:28: error: Name "GenericBuilder" is used before definition [use-before-def]
+ lib/spack/spack/build_systems/aspell_dict.py:14: error: Name "AutotoolsBuilder" is used before definition [use-before-def]
sympy (https://github.com/sympy/sympy)
+ sympy/polys/matrices/dense.py:331: error: Name "AnC" is used before definition [use-before-def]
+ sympy/core/kind.py:321: error: Name "result" is used before definition [use-before-def]
+ sympy/testing/tests/test_code_quality.py:185: error: Name "msg" is used before definition [use-before-def]
+ sympy/multipledispatch/tests/test_core.py:10: error: Name "dispatch" is used before definition [use-before-def]
+ sympy/utilities/iterables.py:1972: error: Name "sentinel" is used before definition [use-before-def]
+ sympy/core/sympify.py:619: error: Name "expr" is used before definition [use-before-def]
+ sympy/core/operations.py:667: error: Name "handler" is used before definition [use-before-def]
+ sympy/core/exprtools.py:1479: error: Name "n" is used before definition [use-before-def]
+ sympy/core/exprtools.py:1480: error: Name "n" is used before definition [use-before-def]
+ sympy/logic/inference.py:98: error: Name "dpll_satisfiable" is used before definition [use-before-def]
+ sympy/polys/domains/groundtypes.py:32: error: Name "gmpy_gcdex" is used before definition [use-before-def]
+ sympy/polys/domains/groundtypes.py:33: error: Name "gmpy_gcd" is used before definition [use-before-def]
+ sympy/polys/domains/groundtypes.py:34: error: Name "gmpy_lcm" is used before definition [use-before-def]
+ sympy/polys/polyutils.py:532: error: Name "r" is used before definition [use-before-def]
+ sympy/ntheory/modular.py:255: error: Name "n" is used before definition [use-before-def]
+ sympy/ntheory/qs.py:491: error: Name "B_array" is used before definition [use-before-def]
+ sympy/simplify/gammasimp.py:267: error: Name "y" is used before definition [use-before-def]
+ sympy/simplify/gammasimp.py:270: error: Name "y" is used before definition [use-before-def]
+ sympy/simplify/gammasimp.py:273: error: Name "y" is used before definition [use-before-def]
+ sympy/simplify/gammasimp.py:274: error: Name "y" is used before definition [use-before-def]
+ sympy/simplify/gammasimp.py:275: error: Name "y" is used before definition [use-before-def]
+ sympy/matrices/matrices.py:367: error: Name "orthogonalize" is used before definition [use-before-def]
+ sympy/matrices/matrices.py:1002: error: Name "evaluate" is used before definition [use-before-def]
+ sympy/matrices/immutable.py:75: error: Name "is_diagonalizable" is used before definition [use-before-def]
+ sympy/simplify/trigsimp.py:605: error: Name "f" is used before definition [use-before-def]
+ sympy/solvers/solvers.py:295: error: Name "val" is used before definition [use-before-def]
+ sympy/solvers/solvers.py:296: error: Name "val" is used before definition [use-before-def]
+ sympy/solvers/solvers.py:320: error: Name "val" is used before definition [use-before-def]
+ sympy/tensor/tensor.py:3045: error: Name "other" is used before definition [use-before-def]
+ sympy/tensor/tensor.py:3051: error: Name "other" is used before definition [use-before-def]
+ sympy/tensor/tensor.py:3056: error: Name "other" is used before definition [use-before-def]
+ sympy/tensor/array/tests/test_arrayop.py:41: error: Name "a" is used before definition [use-before-def]
+ sympy/tensor/array/tests/test_arrayop.py:41: error: Name "b" is used before definition [use-before-def]
+ sympy/tensor/array/tests/test_arrayop.py:43: error: Name "a" is used before definition [use-before-def]
+ sympy/tensor/array/tests/test_arrayop.py:43: error: Name "b" is used before definition [use-before-def]
+ sympy/tensor/array/tests/test_arrayop.py:44: error: Name "a" is used before definition [use-before-def]
+ sympy/tensor/array/tests/test_arrayop.py:44: error: Name "b" is used before definition [use-before-def]
+ sympy/tensor/array/tests/test_arrayop.py:51: error: Name "a" is used before definition [use-before-def]
+ sympy/tensor/array/tests/test_arrayop.py:52: error: Name "a" is used before definition [use-before-def]
+ sympy/tensor/array/tests/test_arrayop.py:53: error: Name "a" is used before definition [use-before-def]
+ sympy/tensor/array/tests/test_arrayop.py:54: error: Name "a" is used before definition [use-before-def]
+ sympy/solvers/tests/test_solveset.py:2553: error: Name "y" is used before definition [use-before-def]
+ sympy/solvers/tests/test_solveset.py:2566: error: Name "y" is used before definition [use-before-def]
+ sympy/solvers/tests/test_solvers.py:518: error: Name "a" is used before definition [use-before-def]
+ sympy/solvers/tests/test_solvers.py:518: error: Name "b" is used before definition [use-before-def]
+ sympy/solvers/tests/test_solvers.py:580: error: Name "b" is used before definition [use-before-def]
+ sympy/solvers/tests/test_solvers.py:580: error: Name "a" is used before definition [use-before-def]
+ sympy/solvers/tests/test_solvers.py:581: error: Name "b" is used before definition [use-before-def]
+ sympy/solvers/tests/test_solvers.py:581: error: Name "a" is used before definition [use-before-def]
+ sympy/solvers/tests/test_solvers.py:583: error: Name "b" is used before definition [use-before-def]
+ sympy/solvers/tests/test_solvers.py:583: error: Name "a" is used before definition [use-before-def]
+ sympy/solvers/tests/test_solvers.py:585: error: Name "a" is used before definition [use-before-def]
+ sympy/solvers/tests/test_solvers.py:585: error: Name "b" is used before definition [use-before-def]
+ sympy/sets/tests/test_sets.py:55: error: Name "f" is used before definition [use-before-def]
+ sympy/polys/modulargcd.py:266: error: Name "hlastm" is used before definition [use-before-def]
+ sympy/polys/modulargcd.py:269: error: Name "hlastm" is used before definition [use-before-def]
+ sympy/polys/modulargcd.py:890: error: Name "hlastm" is used before definition [use-before-def]
+ sympy/polys/modulargcd.py:893: error: Name "hlastm" is used before definition [use-before-def]
+ sympy/polys/modulargcd.py:1190: error: Name "hlastm" is used before definition [use-before-def]
+ sympy/polys/modulargcd.py:1193: error: Name "hlastm" is used before definition [use-before-def]
+ sympy/matrices/tests/test_matrices.py:251: error: Name "n" is used before definition [use-before-def]
+ sympy/matrices/tests/test_matrices.py:252: error: Name "n" is used before definition [use-before-def]
+ sympy/matrices/tests/test_matrices.py:254: error: Name "n" is used before definition [use-before-def]
+ sympy/matrices/tests/test_matrices.py:255: error: Name "n" is used before definition [use-before-def]
+ sympy/matrices/tests/test_matrices.py:256: error: Name "n" is used before definition [use-before-def]
+ sympy/matrices/tests/test_matrices.py:257: error: Name "n" is used before definition [use-before-def]
+ sympy/matrices/tests/test_matrices.py:258: error: Name "n" is used before definition [use-before-def]
+ sympy/matrices/tests/test_matrices.py:259: error: Name "n" is used before definition [use-before-def]
+ sympy/matrices/tests/test_matrices.py:260: error: Name "n" is used before definition [use-before-def]
+ sympy/interactive/tests/test_ipython.py:131: error: Name "text" is used before definition [use-before-def]
+ sympy/holonomic/recurrence.py:81: error: Name "__str__" is used before definition [use-before-def]
+ sympy/holonomic/recurrence.py:298: error: Name "__str__" is used before definition [use-before-def]
+ sympy/geometry/tests/test_ellipse.py:35: error: Name "x" is used before definition [use-before-def]
+ sympy/geometry/tests/test_ellipse.py:35: error: Name "y" is used before definition [use-before-def]
+ sympy/geometry/tests/test_ellipse.py:36: error: Name "x" is used before definition [use-before-def]
+ sympy/geometry/tests/test_ellipse.py:36: error: Name "y" is used before definition [use-before-def]
+ sympy/geometry/tests/test_ellipse.py:38: error: Name "x" is used before definition [use-before-def]
+ sympy/geometry/tests/test_ellipse.py:38: error: Name "y" is used before definition [use-before-def]
+ sympy/geometry/tests/test_ellipse.py:39: error: Name "x" is used before definition [use-before-def]
+ sympy/geometry/tests/test_ellipse.py:39: error: Name "y" is used before definition [use-before-def]
+ sympy/geometry/tests/test_ellipse.py:41: error: Name "x" is used before definition [use-before-def]
+ sympy/geometry/tests/test_ellipse.py:41: error: Name "y" is used before definition [use-before-def]
+ sympy/geometry/tests/test_ellipse.py:42: error: Name "x" is used before definition [use-before-def]
+ sympy/geometry/tests/test_ellipse.py:42: error: Name "y" is used before definition [use-before-def]
+ sympy/geometry/tests/test_ellipse.py:43: error: Name "x" is used before definition [use-before-def]
+ sympy/geometry/tests/test_ellipse.py:43: error: Name "y" is used before definition [use-before-def]
+ sympy/geometry/tests/test_ellipse.py:44: error: Name "x" is used before definition [use-before-def]
+ sympy/geometry/tests/test_ellipse.py:44: error: Name "y" is used before definition [use-before-def]
+ sympy/geometry/tests/test_ellipse.py:46: error: Name "x" is used before definition [use-before-def]
+ sympy/geometry/tests/test_ellipse.py:46: error: Name "y" is used before definition [use-before-def]
+ sympy/geometry/tests/test_ellipse.py:47: error: Name "x" is used before definition [use-before-def]
+ sympy/geometry/tests/test_ellipse.py:47: error: Name "y" is used before definition [use-before-def]
+ sympy/geometry/tests/test_ellipse.py:49: error: Name "x" is used before definition [use-before-def]
+ sympy/geometry/tests/test_ellipse.py:49: error: Name "y" is used before definition [use-before-def]
+ sympy/geometry/tests/test_ellipse.py:50: error: Name "x" is used before definition [use-before-def]
+ sympy/geometry/tests/test_ellipse.py:50: error: Name "y" is used before definition [use-before-def]
+ sympy/combinatorics/tests/test_perm_groups.py:630: error: Name "points" is used before definition [use-before-def]
... (truncated 6 lines) ...
rich (https://github.com/Textualize/rich)
+ rich/markup.py:207: error: Name "start" is used before definition [use-before-def]
+ rich/markup.py:211: error: Name "start" is used before definition [use-before-def]
alerta (https://github.com/alerta/alerta)
+ alerta/database/backends/mongodb/base.py:854: error: Name "pipeline" is used before definition [use-before-def]
+ alerta/database/backends/mongodb/base.py:859: error: Name "pipeline" is used before definition [use-before-def]
dulwich (https://github.com/dulwich/dulwich)
+ dulwich/objects.py:245: error: Name "object" is used before definition [use-before-def]
+ dulwich/objects.py:267: error: Name "object" is used before definition [use-before-def]
scikit-learn (https://github.com/scikit-learn/scikit-learn)
+ sklearn/utils/tests/test_utils.py:83: error: Name "ham" is used before definition [use-before-def]
+ sklearn/utils/tests/test_extmath.py:900: error: Name "incremental_means" is used before definition [use-before-def]
+ sklearn/utils/tests/test_extmath.py:900: error: Name "incremental_variances" is used before definition [use-before-def]
+ sklearn/utils/tests/test_extmath.py:900: error: Name "sample_count" is used before definition [use-before-def]
+ sklearn/utils/tests/test_extmath.py:903: error: Name "sample_count" is used before definition [use-before-def]
+ sklearn/metrics/cluster/tests/test_unsupervised.py:39: error: Name "score_dense_without_sampling" is used before definition [use-before-def]
+ sklearn/metrics/cluster/tests/test_unsupervised.py:55: error: Name "score_dense_with_sampling" is used before definition [use-before-def]
+ sklearn/manifold/tests/test_t_sne.py:227: error: Name "last_P1" is used before definition [use-before-def]
anyio (https://github.com/agronholm/anyio)
+ src/anyio/_backends/_asyncio.py:562: error: Name "e" is used before definition [use-before-def]
+ src/anyio/to_process.py:203: error: Name "args" is used before definition [use-before-def]
alectryon (https://github.com/cpitclaudel/alectryon)
+ alectryon/coq.py:93: error: Name "suffixes" is used before definition [use-before-def]
poetry (https://github.com/python-poetry/poetry)
+ src/poetry/repositories/installed_repository.py:27: error: Name "FileNotFoundError" is used before definition [use-before-def]
manticore (https://github.com/trailofbits/manticore)
+ tests/auto_generators/make_VMTests.py:29: error: Name "open" is used before definition [use-before-def]
spark (https://github.com/apache/spark)
+ python/pyspark/instrumentation_utils.py:81: error: Name "wrapper" is used before definition [use-before-def]
+ python/pyspark/pandas/plot/core.py:553: error: Name "module" is used before definition [use-before-def]
+ python/pyspark/pandas/plot/core.py:565: error: Name "module" is used before definition [use-before-def]
+ python/pyspark/pandas/series.py:360: error: Name "str" is used before definition [use-before-def]
+ python/pyspark/sql/tests/test_udf.py:568: error: Name "f" is used before definition [use-before-def]
+ python/pyspark/sql/tests/test_udf.py:570: error: Name "f" is used before definition [use-before-def]
+ python/pyspark/sql/tests/test_udf.py:571: error: Name "f" is used before definition [use-before-def]
pandas (https://github.com/pandas-dev/pandas)
+ pandas/_typing.py:78: error: Name "npt" is used before definition [use-before-def]
+ pandas/_typing.py:80: error: Name "npt" is used before definition [use-before-def]
+ pandas/_typing.py:80: note: Error code "use-before-def" not covered by "type: ignore" comment
+ pandas/_config/config.py:779: error: Name "register_option" is used before definition [use-before-def]
+ pandas/core/dtypes/dtypes.py:72: error: Name "str" is used before definition [use-before-def]
+ pandas/core/indexes/base.py:203: error: Name "str" is used before definition [use-before-def]
... (truncated 135 lines) ...```
Looks like a lot of mypy_primer failures are from partially_defined not recognizing imports. I'll try to make it handle imports soon.
Diff from mypy_primer, showing the effect of this PR on open source code:
aiortc (https://github.com/aiortc/aiortc)
+ src/aiortc/rtcsctptransport.py:531: error: Name "expected_tsn" is used before definition [use-before-def]
sphinx (https://github.com/sphinx-doc/sphinx)
+ sphinx/ext/autodoc/mock.py:14:28: error: Name "__name__" is used before definition [use-before-def]
+ sphinx/ext/autodoc/importer.py:81:13: error: Name "exc" is used before definition [use-before-def]
+ sphinx/ext/autodoc/importer.py:83:36: error: Name "exc" is used before definition [use-before-def]
+ sphinx/ext/autodoc/importer.py:110:23: error: Name "exc" is used before definition [use-before-def]
+ sphinx/ext/autodoc/__init__.py:77:22: error: Name "object" is used before definition [use-before-def]
+ sphinx/ext/autodoc/__init__.py:78:16: error: Name "object" is used before definition [use-before-def]
+ sphinx/ext/autodoc/__init__.py:79:13: error: Name "object" is used before definition [use-before-def]
+ sphinx/ext/autodoc/__init__.py:127:12: error: Name "object" is used before definition [use-before-def]
+ sphinx/domains/cpp.py:2417:6: error: Name "name" is used before definition [use-before-def]
+ sphinx/domains/cpp.py:2468:6: error: Name "name" is used before definition [use-before-def]
+ sphinx/domains/cpp.py:2553:6: error: Name "name" is used before definition [use-before-def]
+ sphinx/domains/cpp.py:2603:6: error: Name "name" is used before definition [use-before-def]
+ sphinx/domains/cpp.py:2708:6: error: Name "name" is used before definition [use-before-def]
+ sphinx/domains/cpp.py:2774:6: error: Name "name" is used before definition [use-before-def]
+ sphinx/domains/cpp.py:2842:6: error: Name "name" is used before definition [use-before-def]
+ sphinx/domains/cpp.py:2943:6: error: Name "name" is used before definition [use-before-def]
+ sphinx/domains/cpp.py:3082:6: error: Name "name" is used before definition [use-before-def]
+ sphinx/environment/collectors/toctree.py:131:34: error: Name "parents" is used before definition [use-before-def]
pandas-stubs (https://github.com/pandas-dev/pandas-stubs)
+ pandas-stubs/_typing.pyi:52: error: Name "Scalar" is used before definition [use-before-def]
+ pandas-stubs/core/dtypes/dtypes.pyi:16: error: Name "str" is used before definition [use-before-def]
+ pandas-stubs/core/dtypes/dtypes.pyi:35: error: Name "type" is used before definition [use-before-def]
+ pandas-stubs/core/computation/pytables.pyi:27: error: Name "value" is used before definition [use-before-def]
+ pandas-stubs/core/arrays/integer.pyi:5: error: Name "type" is used before definition [use-before-def]
scrapy (https://github.com/scrapy/scrapy)
+ scrapy/utils/log.py:108: error: Name "_scrapy_root_handler" is used before definition [use-before-def]
+ scrapy/utils/log.py:109: error: Name "_scrapy_root_handler" is used before definition [use-before-def]
+ scrapy/utils/log.py:110: error: Name "_scrapy_root_handler" is used before definition [use-before-def]
discord.py (https://github.com/Rapptz/discord.py)
+ discord/app_commands/transformers.py:69: error: Name "type" is used before definition [use-before-def]
+ discord/ext/commands/bot.py:1353: error: Name "exc" is used before definition [use-before-def]
+ discord/ext/commands/bot.py:1354: error: Name "exc" is used before definition [use-before-def]
jax (https://github.com/google/jax)
+ jax/_src/config.py:167: error: Name "already_configured_with_absl" is used before definition [use-before-def]
+ jax/_src/state/primitives.py:231: error: Name "idx" is used before definition [use-before-def]
+ jax/_src/state/primitives.py:242: error: Name "idx" is used before definition [use-before-def]
+ jax/_src/state/primitives.py:265: error: Name "idx" is used before definition [use-before-def]
+ jax/_src/state/primitives.py:354: error: Name "idxs" is used before definition [use-before-def]
+ jax/_src/state/primitives.py:388: error: Name "idxs" is used before definition [use-before-def]
+ jax/_src/state/primitives.py:421: error: Name "idxs" is used before definition [use-before-def]
+ jax/core.py:98: error: Name "__str__" is used before definition [use-before-def]
+ jax/interpreters/pxla.py:3783: error: Name "eqn" is used before definition [use-before-def]
+ jax/interpreters/pxla.py:3784: error: Name "eqn" is used before definition [use-before-def]
+ jax/interpreters/pxla.py:3785: error: Name "eqn" is used before definition [use-before-def]
+ jax/interpreters/pxla.py:3786: error: Name "eqn" is used before definition [use-before-def]
+ jax/_src/lax/control_flow/conditionals.py:325: error: Name "ops" is used before definition [use-before-def]
+ jax/_src/lax/control_flow/conditionals.py:338: error: Name "ops" is used before definition [use-before-def]
+ jax/_src/lax/control_flow/conditionals.py:390: error: Name "ops_dot" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:1763: error: Name "_one" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:1767: error: Name "_one" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:1772: error: Name "_one" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:1776: error: Name "_one" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:1858: error: Name "_one" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:1863: error: Name "_one" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:1868: error: Name "_one" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:1959: error: Name "_dtype" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:1963: error: Name "_dtype" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:2099: error: Name "_ones" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:3026: error: Name "_zeros" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:3029: error: Name "_zeros" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:3031: error: Name "_zeros" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:3463: error: Name "cases" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:3470: error: Name "cases" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:3471: error: Name "cases" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:3475: error: Name "cases" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:3476: error: Name "cases" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:3479: error: Name "cases" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:3484: error: Name "cases" is used before definition [use-before-def]
+ jax/_src/numpy/ufuncs.py:65: error: Name "fn" is used before definition [use-before-def]
+ jax/_src/numpy/ufuncs.py:84: error: Name "fn" is used before definition [use-before-def]
+ jax/_src/numpy/ufuncs.py:99: error: Name "fn" is used before definition [use-before-def]
+ jax/_src/numpy/ufuncs.py:119: error: Name "fn" is used before definition [use-before-def]
+ jax/_src/scipy/signal.py:169: error: Name "batch_shape" is used before definition [use-before-def]
+ jax/experimental/host_callback.py:1112: error: Name "results" is used before definition [use-before-def]
+ jax/experimental/jax2tf/tests/shape_poly_test.py:461: error: Name "f_tf" is used before definition [use-before-def]
Tanjun (https://github.com/FasterSpeeding/Tanjun)
+ tanjun/_internal/vendor/inspect.pyi:361: error: Name "object" is used before definition [use-before-def]
psycopg (https://github.com/psycopg/psycopg)
+ psycopg/psycopg/cursor.py:235: error: Name "pgq" is used before definition [use-before-def]
+ psycopg/psycopg/cursor.py:263: error: Name "pgq" is used before definition [use-before-def]
prefect (https://github.com/PrefectHQ/prefect)
+ src/prefect/results.py:31: error: Name "type" is used before definition [use-before-def]
sympy (https://github.com/sympy/sympy)
+ sympy/polys/matrices/dense.py:331: error: Name "AnC" is used before definition [use-before-def]
+ sympy/core/kind.py:321: error: Name "result" is used before definition [use-before-def]
+ sympy/testing/tests/test_code_quality.py:185: error: Name "msg" is used before definition [use-before-def]
+ sympy/utilities/iterables.py:1972: error: Name "sentinel" is used before definition [use-before-def]
+ sympy/core/sympify.py:619: error: Name "expr" is used before definition [use-before-def]
+ sympy/core/operations.py:667: error: Name "handler" is used before definition [use-before-def]
+ sympy/core/exprtools.py:1479: error: Name "n" is used before definition [use-before-def]
+ sympy/core/exprtools.py:1480: error: Name "n" is used before definition [use-before-def]
+ sympy/polys/polyutils.py:532: error: Name "r" is used before definition [use-before-def]
+ sympy/ntheory/modular.py:255: error: Name "n" is used before definition [use-before-def]
+ sympy/ntheory/qs.py:491: error: Name "B_array" is used before definition [use-before-def]
+ sympy/simplify/gammasimp.py:267: error: Name "y" is used before definition [use-before-def]
+ sympy/simplify/gammasimp.py:270: error: Name "y" is used before definition [use-before-def]
+ sympy/simplify/gammasimp.py:273: error: Name "y" is used before definition [use-before-def]
+ sympy/simplify/gammasimp.py:274: error: Name "y" is used before definition [use-before-def]
+ sympy/simplify/gammasimp.py:275: error: Name "y" is used before definition [use-before-def]
+ sympy/matrices/matrices.py:367: error: Name "orthogonalize" is used before definition [use-before-def]
+ sympy/matrices/matrices.py:1002: error: Name "evaluate" is used before definition [use-before-def]
+ sympy/matrices/immutable.py:75: error: Name "is_diagonalizable" is used before definition [use-before-def]
+ sympy/simplify/trigsimp.py:605: error: Name "f" is used before definition [use-before-def]
+ sympy/solvers/solvers.py:295: error: Name "val" is used before definition [use-before-def]
+ sympy/solvers/solvers.py:296: error: Name "val" is used before definition [use-before-def]
+ sympy/solvers/solvers.py:320: error: Name "val" is used before definition [use-before-def]
+ sympy/tensor/tensor.py:3045: error: Name "other" is used before definition [use-before-def]
+ sympy/tensor/tensor.py:3051: error: Name "other" is used before definition [use-before-def]
+ sympy/tensor/tensor.py:3056: error: Name "other" is used before definition [use-before-def]
+ sympy/sets/tests/test_sets.py:55: error: Name "f" is used before definition [use-before-def]
+ sympy/polys/modulargcd.py:266: error: Name "hlastm" is used before definition [use-before-def]
+ sympy/polys/modulargcd.py:269: error: Name "hlastm" is used before definition [use-before-def]
+ sympy/polys/modulargcd.py:890: error: Name "hlastm" is used before definition [use-before-def]
+ sympy/polys/modulargcd.py:893: error: Name "hlastm" is used before definition [use-before-def]
+ sympy/polys/modulargcd.py:1190: error: Name "hlastm" is used before definition [use-before-def]
+ sympy/polys/modulargcd.py:1193: error: Name "hlastm" is used before definition [use-before-def]
+ sympy/interactive/tests/test_ipython.py:131: error: Name "text" is used before definition [use-before-def]
+ sympy/holonomic/recurrence.py:81: error: Name "__str__" is used before definition [use-before-def]
+ sympy/holonomic/recurrence.py:298: error: Name "__str__" is used before definition [use-before-def]
+ sympy/combinatorics/tests/test_perm_groups.py:630: error: Name "points" is used before definition [use-before-def]
+ sympy/combinatorics/tests/test_perm_groups.py:631: error: Name "g" is used before definition [use-before-def]
+ sympy/holonomic/holonomic.py:2747: error: Name "coeff" is used before definition [use-before-def]
+ sympy/holonomic/holonomic.py:2749: error: Name "coeff" is used before definition [use-before-def]
+ sympy/holonomic/holonomic.py:2750: error: Name "indicial" is used before definition [use-before-def]
+ sympy/holonomic/holonomic.py:2750: error: Name "coeff" is used before definition [use-before-def]
+ sympy/holonomic/holonomic.py:2776: error: Name "coeff" is used before definition [use-before-def]
dulwich (https://github.com/dulwich/dulwich)
+ dulwich/objects.py:245: error: Name "object" is used before definition [use-before-def]
+ dulwich/objects.py:267: error: Name "object" is used before definition [use-before-def]
rich (https://github.com/Textualize/rich)
+ rich/markup.py:207: error: Name "start" is used before definition [use-before-def]
+ rich/markup.py:211: error: Name "start" is used before definition [use-before-def]
alerta (https://github.com/alerta/alerta)
+ alerta/database/backends/mongodb/base.py:854: error: Name "pipeline" is used before definition [use-before-def]
+ alerta/database/backends/mongodb/base.py:859: error: Name "pipeline" is used before definition [use-before-def]
anyio (https://github.com/agronholm/anyio)
+ src/anyio/_backends/_asyncio.py:562: error: Name "e" is used before definition [use-before-def]
+ src/anyio/to_process.py:203: error: Name "args" is used before definition [use-before-def]
alectryon (https://github.com/cpitclaudel/alectryon)
+ alectryon/coq.py:93: error: Name "suffixes" is used before definition [use-before-def]
scikit-learn (https://github.com/scikit-learn/scikit-learn)
+ sklearn/utils/tests/test_utils.py:83: error: Name "ham" is used before definition [use-before-def]
+ sklearn/utils/tests/test_extmath.py:900: error: Name "incremental_means" is used before definition [use-before-def]
+ sklearn/utils/tests/test_extmath.py:900: error: Name "incremental_variances" is used before definition [use-before-def]
+ sklearn/utils/tests/test_extmath.py:900: error: Name "sample_count" is used before definition [use-before-def]
+ sklearn/utils/tests/test_extmath.py:903: error: Name "sample_count" is used before definition [use-before-def]
+ sklearn/metrics/cluster/tests/test_unsupervised.py:39: error: Name "score_dense_without_sampling" is used before definition [use-before-def]
+ sklearn/metrics/cluster/tests/test_unsupervised.py:55: error: Name "score_dense_with_sampling" is used before definition [use-before-def]
+ sklearn/manifold/tests/test_t_sne.py:227: error: Name "last_P1" is used before definition [use-before-def]
arviz (https://github.com/arviz-devs/arviz)
+ arviz/rcparams.py:483: error: Name "aux_val" is used before definition [use-before-def]
+ arviz/rcparams.py:485: error: Name "aux_val" is used before definition [use-before-def]
+ arviz/data/io_cmdstan.py:907: error: Name "loc" is used before definition [use-before-def]
+ arviz/data/inference_data.py:2156: error: Name "group_data" is used before definition [use-before-def]
+ arviz/plots/backends/matplotlib/kdeplot.py:53: error: Name "_" is used before definition [use-before-def]
+ arviz/plots/backends/matplotlib/hdiplot.py:27: error: Name "_" is used before definition [use-before-def]
+ arviz/plots/backends/matplotlib/forestplot.py:602: error: Name "_" is used before definition [use-before-def]
+ arviz/plots/backends/matplotlib/distplot.py:47: error: Name "_" is used before definition [use-before-def]
+ arviz/plots/backends/bokeh/rankplot.py:61: error: Name "_" is used before definition [use-before-def]
+ arviz/plots/backends/bokeh/ppcplot.py:58: error: Name "_" is used before definition [use-before-def]
+ arviz/plots/backends/bokeh/kdeplot.py:59: error: Name "_" is used before definition [use-before-def]
+ arviz/plots/backends/bokeh/kdeplot.py:187: error: Name "_" is used before definition [use-before-def]
+ arviz/tests/external_tests/test_data_pystan.py:290: error: Name "shape" is used before definition [use-before-def]
+ arviz/plots/backends/matplotlib/separationplot.py:57: error: Name "_" is used before definition [use-before-def]
+ arviz/plots/backends/bokeh/lmplot.py:47: error: Name "_" is used before definition [use-before-def]
pandas (https://github.com/pandas-dev/pandas)
+ pandas/_config/config.py:779: error: Name "register_option" is used before definition [use-before-def]
+ pandas/core/dtypes/dtypes.py:72: error: Name "str" is used before definition [use-before-def]
+ pandas/core/indexes/base.py:203: error: Name "str" is used before definition [use-before-def]
+ pandas/core/arrays/sparse/array.py:115: error: Name "ellipsis" is used before definition [use-before-def]
+ pandas/core/arrays/sparse/array.py:129: error: Name "Ellipsis" is used before definition [use-before-def]
+ pandas/core/indexes/extension.py:108: error: Name "method" is used before definition [use-before-def]
+ pandas/core/indexes/extension.py:108: note: Error code "use-before-def" not covered by "type: ignore" comment
+ pandas/core/indexes/extension.py:109: error: Name "method" is used before definition [use-before-def]
+ pandas/core/groupby/generic.py:657: error: Name "lab" is used before definition [use-before-def]
+ pandas/core/groupby/generic.py:659: error: Name "lab" is used before definition [use-before-def]
+ pandas/core/groupby/generic.py:663: error: Name "lab" is used before definition [use-before-def]
+ pandas/io/formats/style_render.py:1636: error: Name "last_label" is used before definition [use-before-def]
+ pandas/io/formats/style_render.py:1642: error: Name "last_label" is used before definition [use-before-def]
spark (https://github.com/apache/spark)
+ python/pyspark/instrumentation_utils.py:81: error: Name "wrapper" is used before definition [use-before-def]
+ python/pyspark/pandas/series.py:360: error: Name "str" is used before definition [use-before-def]
+ python/pyspark/sql/tests/test_udf.py:568: error: Name "f" is used before definition [use-before-def]
+ python/pyspark/sql/tests/test_udf.py:570: error: Name "f" is used before definition [use-before-def]
+ python/pyspark/sql/tests/test_udf.py:571: error: Name "f" is used before definition [use-before-def]
poetry (https://github.com/python-poetry/poetry)
+ src/poetry/repositories/installed_repository.py:27: error: Name "FileNotFoundError" is used before definition [use-before-def]
manticore (https://github.com/trailofbits/manticore)
+ tests/auto_generators/make_VMTests.py:29: error: Name "open" is used before definition [use-before-def]
attrs (https://github.com/python-attrs/attrs)
+ src/attr/__init__.pyi:48: error: Name "type" is used before definition [use-before-def]
+ src/attr/__init__.pyi:61: error: Name "type" is used before definition [use-before-def]
+ tests/typing_example.py:104: error: Name "e" is used before definition [use-before-def]
+ tests/typing_example.py:105: error: Name "e" is used before definition [use-before-def]
+ tests/typing_example.py:106: error: Name "e" is used before definition [use-before-def]
+ tests/typing_example.py:107: error: Name "e" is used before definition [use-before-def]
+ tests/typing_example.py:117: error: Name "e" is used before definition [use-before-def]
+ tests/typing_example.py:118: error: Name "e" is used before definition [use-before-def]
+ tests/typing_example.py:119: error: Name "e" is used before definition [use-before-def]
+ tests/typing_example.py:120: error: Name "e" is used before definition [use-before-def]
pycryptodome (https://github.com/Legrandin/pycryptodome)
+ lib/Crypto/SelfTest/Signature/test_dss.py:179: error: Name "hash_module" is used before definition [use-before-def]
+ lib/Crypto/SelfTest/Signature/test_dss.py:217: error: Name "hash_module" is used before definition [use-before-def]
+ lib/Crypto/SelfTest/Signature/test_dss.py:339: error: Name "hash_module" is used before definition [use-before-def]
+ lib/Crypto/SelfTest/Signature/test_dss.py:341: error: Name "hash_module" is used before definition [use-before-def]
+ lib/Crypto/SelfTest/Signature/test_dss.py:342: error: Name "curve_name" is used before definition [use-before-def]
+ lib/Crypto/SelfTest/Hash/test_BLAKE2.py:293: error: Name "key" is used before definition [use-before-def]
pytest (https://github.com/pytest-dev/pytest)
+ src/_pytest/outcomes.py:51: error: Name "Exception" is used before definition [use-before-def]
+ src/_pytest/outcomes.py:80: error: Name "Exception" is used before definition [use-before-def]
+ src/_pytest/assertion/rewrite.py:965: error: Name "cond" is used before definition [use-before-def]
black (https://github.com/psf/black)
+ src/black/parsing.py:129:19: error: Name "result" is used before definition [use-before-def]
+ src/blackd/__init__.py:195:29: error: Name "rest" is used before definition [use-before-def]
aiohttp (https://github.com/aio-libs/aiohttp)
+ aiohttp/helpers.py:465: error: Name "reify" is used before definition [use-before-def]
sockeye (https://github.com/awslabs/sockeye)
+ sockeye/decoder.py:269: error: Name "autoregr_states" is used before definition [use-before-def]
core (https://github.com/home-assistant/core)
+ homeassistant/helpers/config_validation.py:1267: error: Name "CONDITION_SCHEMA" is used before definition [use-before-def]
+ homeassistant/helpers/config_validation.py:1278: error: Name "CONDITION_SCHEMA" is used before definition [use-before-def]
+ homeassistant/helpers/config_validation.py:1290: error: Name "CONDITION_SCHEMA" is used before definition [use-before-def]
+ homeassistant/helpers/config_validation.py:1301: error: Name "CONDITION_SCHEMA" is used before definition [use-before-def]
+ homeassistant/helpers/config_validation.py:1313: error: Name "CONDITION_SCHEMA" is used before definition [use-before-def]
+ homeassistant/helpers/config_validation.py:1324: error: Name "CONDITION_SCHEMA" is used before definition [use-before-def]
+ homeassistant/helpers/config_validation.py:1356: error: Name "CONDITION_SCHEMA" is used before definition [use-before-def]
+ homeassistant/components/samsungtv/bridge.py:525: error: Name "result" is used before definition [use-before-def]
+ homeassistant/components/plex/server.py:187: error: Name "error" is used before definition [use-before-def]
ibis (https://github.com/ibis-project/ibis)
+ ibis/util.py:452: error: Name "rest" is used before definition [use-before-def]
+ ibis/expr/format.py:44: error: Name "deps" is used before definition [use-before-def]
+ ibis/expr/types/groupby.py:269: error: Name "count" is used before definition [use-before-def]
cloud-init (https://github.com/canonical/cloud-init)
+ cloudinit/util.py:1919: error: Name "mountpoint" is used before definition [use-before-def]
+ cloudinit/config/cc_write_files_deferred.py:30: error: Name "__doc__" is used before definition [use-before-def]
bokeh (https://github.com/bokeh/bokeh)
+ src/bokeh/io/state.py:233:8: error: Name "_STATE" is used before definition [use-before-def]
+ src/bokeh/io/notebook.py:459:12: error: Name "_NOTEBOOK_LOADED" is used before definition [use-before-def]
It looks like this check is triggering some hits in .pyi files. Maybe partially-defined checks should all be skipped for stub files, since they're never actually executed at runtime?
Diff from mypy_primer, showing the effect of this PR on open source code:
aiortc (https://github.com/aiortc/aiortc)
+ src/aiortc/rtcsctptransport.py:531: error: Name "expected_tsn" is used before definition [use-before-def]
sphinx (https://github.com/sphinx-doc/sphinx)
+ sphinx/ext/autodoc/mock.py:14:28: error: Name "__name__" is used before definition [use-before-def]
+ sphinx/ext/autodoc/importer.py:81:13: error: Name "exc" is used before definition [use-before-def]
+ sphinx/ext/autodoc/importer.py:83:36: error: Name "exc" is used before definition [use-before-def]
+ sphinx/ext/autodoc/importer.py:110:23: error: Name "exc" is used before definition [use-before-def]
+ sphinx/ext/autodoc/__init__.py:77:22: error: Name "object" is used before definition [use-before-def]
+ sphinx/ext/autodoc/__init__.py:78:16: error: Name "object" is used before definition [use-before-def]
+ sphinx/ext/autodoc/__init__.py:79:13: error: Name "object" is used before definition [use-before-def]
+ sphinx/ext/autodoc/__init__.py:127:12: error: Name "object" is used before definition [use-before-def]
+ sphinx/environment/collectors/toctree.py:131:34: error: Name "parents" is used before definition [use-before-def]
pandas-stubs (https://github.com/pandas-dev/pandas-stubs)
+ pandas-stubs/_typing.pyi:52: error: Name "Scalar" is used before definition [use-before-def]
+ pandas-stubs/core/dtypes/dtypes.pyi:16: error: Name "str" is used before definition [use-before-def]
+ pandas-stubs/core/dtypes/dtypes.pyi:35: error: Name "type" is used before definition [use-before-def]
+ pandas-stubs/core/arrays/integer.pyi:5: error: Name "type" is used before definition [use-before-def]
jax (https://github.com/google/jax)
+ jax/_src/config.py:167: error: Name "already_configured_with_absl" is used before definition [use-before-def]
+ jax/_src/state/primitives.py:231: error: Name "idx" is used before definition [use-before-def]
+ jax/_src/state/primitives.py:242: error: Name "idx" is used before definition [use-before-def]
+ jax/_src/state/primitives.py:265: error: Name "idx" is used before definition [use-before-def]
+ jax/_src/state/primitives.py:354: error: Name "idxs" is used before definition [use-before-def]
+ jax/_src/state/primitives.py:388: error: Name "idxs" is used before definition [use-before-def]
+ jax/_src/state/primitives.py:421: error: Name "idxs" is used before definition [use-before-def]
+ jax/interpreters/pxla.py:3783: error: Name "eqn" is used before definition [use-before-def]
+ jax/interpreters/pxla.py:3784: error: Name "eqn" is used before definition [use-before-def]
+ jax/interpreters/pxla.py:3785: error: Name "eqn" is used before definition [use-before-def]
+ jax/interpreters/pxla.py:3786: error: Name "eqn" is used before definition [use-before-def]
+ jax/_src/lax/control_flow/conditionals.py:325: error: Name "ops" is used before definition [use-before-def]
+ jax/_src/lax/control_flow/conditionals.py:338: error: Name "ops" is used before definition [use-before-def]
+ jax/_src/lax/control_flow/conditionals.py:390: error: Name "ops_dot" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:1763: error: Name "_one" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:1767: error: Name "_one" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:1772: error: Name "_one" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:1776: error: Name "_one" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:1858: error: Name "_one" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:1863: error: Name "_one" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:1868: error: Name "_one" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:1959: error: Name "_dtype" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:1963: error: Name "_dtype" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:2099: error: Name "_ones" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:3026: error: Name "_zeros" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:3029: error: Name "_zeros" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:3031: error: Name "_zeros" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:3463: error: Name "cases" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:3470: error: Name "cases" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:3471: error: Name "cases" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:3475: error: Name "cases" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:3476: error: Name "cases" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:3479: error: Name "cases" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:3484: error: Name "cases" is used before definition [use-before-def]
+ jax/_src/numpy/ufuncs.py:65: error: Name "fn" is used before definition [use-before-def]
+ jax/_src/numpy/ufuncs.py:84: error: Name "fn" is used before definition [use-before-def]
+ jax/_src/scipy/signal.py:169: error: Name "batch_shape" is used before definition [use-before-def]
+ jax/experimental/host_callback.py:1112: error: Name "results" is used before definition [use-before-def]
discord.py (https://github.com/Rapptz/discord.py)
+ discord/app_commands/transformers.py:69: error: Name "type" is used before definition [use-before-def]
+ discord/ext/commands/bot.py:1353: error: Name "exc" is used before definition [use-before-def]
+ discord/ext/commands/bot.py:1354: error: Name "exc" is used before definition [use-before-def]
Tanjun (https://github.com/FasterSpeeding/Tanjun)
+ tanjun/_internal/vendor/inspect.pyi:361: error: Name "object" is used before definition [use-before-def]
scrapy (https://github.com/scrapy/scrapy)
+ scrapy/utils/log.py:108: error: Name "_scrapy_root_handler" is used before definition [use-before-def]
+ scrapy/utils/log.py:109: error: Name "_scrapy_root_handler" is used before definition [use-before-def]
+ scrapy/utils/log.py:110: error: Name "_scrapy_root_handler" is used before definition [use-before-def]
psycopg (https://github.com/psycopg/psycopg)
+ psycopg/psycopg/cursor.py:235: error: Name "pgq" is used before definition [use-before-def]
+ psycopg/psycopg/cursor.py:263: error: Name "pgq" is used before definition [use-before-def]
prefect (https://github.com/PrefectHQ/prefect)
+ src/prefect/results.py:31: error: Name "type" is used before definition [use-before-def]
sympy (https://github.com/sympy/sympy)
+ sympy/polys/matrices/dense.py:331: error: Name "AnC" is used before definition [use-before-def]
+ sympy/core/kind.py:321: error: Name "result" is used before definition [use-before-def]
+ sympy/testing/tests/test_code_quality.py:185: error: Name "msg" is used before definition [use-before-def]
+ sympy/utilities/iterables.py:1972: error: Name "sentinel" is used before definition [use-before-def]
+ sympy/core/sympify.py:619: error: Name "expr" is used before definition [use-before-def]
+ sympy/core/operations.py:667: error: Name "handler" is used before definition [use-before-def]
+ sympy/core/exprtools.py:1479: error: Name "n" is used before definition [use-before-def]
+ sympy/core/exprtools.py:1480: error: Name "n" is used before definition [use-before-def]
+ sympy/polys/polyutils.py:532: error: Name "r" is used before definition [use-before-def]
+ sympy/ntheory/modular.py:255: error: Name "n" is used before definition [use-before-def]
+ sympy/ntheory/qs.py:491: error: Name "B_array" is used before definition [use-before-def]
+ sympy/simplify/gammasimp.py:267: error: Name "y" is used before definition [use-before-def]
+ sympy/simplify/gammasimp.py:270: error: Name "y" is used before definition [use-before-def]
+ sympy/simplify/gammasimp.py:273: error: Name "y" is used before definition [use-before-def]
+ sympy/simplify/gammasimp.py:274: error: Name "y" is used before definition [use-before-def]
+ sympy/simplify/gammasimp.py:275: error: Name "y" is used before definition [use-before-def]
+ sympy/matrices/matrices.py:1002: error: Name "evaluate" is used before definition [use-before-def]
+ sympy/solvers/solvers.py:295: error: Name "val" is used before definition [use-before-def]
+ sympy/solvers/solvers.py:296: error: Name "val" is used before definition [use-before-def]
+ sympy/solvers/solvers.py:320: error: Name "val" is used before definition [use-before-def]
+ sympy/tensor/tensor.py:3045: error: Name "other" is used before definition [use-before-def]
+ sympy/tensor/tensor.py:3051: error: Name "other" is used before definition [use-before-def]
+ sympy/tensor/tensor.py:3056: error: Name "other" is used before definition [use-before-def]
+ sympy/polys/modulargcd.py:266: error: Name "hlastm" is used before definition [use-before-def]
+ sympy/polys/modulargcd.py:269: error: Name "hlastm" is used before definition [use-before-def]
+ sympy/polys/modulargcd.py:890: error: Name "hlastm" is used before definition [use-before-def]
+ sympy/polys/modulargcd.py:893: error: Name "hlastm" is used before definition [use-before-def]
+ sympy/polys/modulargcd.py:1190: error: Name "hlastm" is used before definition [use-before-def]
+ sympy/polys/modulargcd.py:1193: error: Name "hlastm" is used before definition [use-before-def]
+ sympy/interactive/tests/test_ipython.py:131: error: Name "text" is used before definition [use-before-def]
+ sympy/combinatorics/tests/test_perm_groups.py:630: error: Name "points" is used before definition [use-before-def]
+ sympy/combinatorics/tests/test_perm_groups.py:631: error: Name "g" is used before definition [use-before-def]
+ sympy/holonomic/holonomic.py:2747: error: Name "coeff" is used before definition [use-before-def]
+ sympy/holonomic/holonomic.py:2749: error: Name "coeff" is used before definition [use-before-def]
+ sympy/holonomic/holonomic.py:2750: error: Name "indicial" is used before definition [use-before-def]
+ sympy/holonomic/holonomic.py:2750: error: Name "coeff" is used before definition [use-before-def]
+ sympy/holonomic/holonomic.py:2776: error: Name "coeff" is used before definition [use-before-def]
dulwich (https://github.com/dulwich/dulwich)
+ dulwich/objects.py:245: error: Name "object" is used before definition [use-before-def]
+ dulwich/objects.py:267: error: Name "object" is used before definition [use-before-def]
rich (https://github.com/Textualize/rich)
+ rich/markup.py:207: error: Name "start" is used before definition [use-before-def]
+ rich/markup.py:211: error: Name "start" is used before definition [use-before-def]
anyio (https://github.com/agronholm/anyio)
+ src/anyio/_backends/_asyncio.py:562: error: Name "e" is used before definition [use-before-def]
+ src/anyio/to_process.py:203: error: Name "args" is used before definition [use-before-def]
alectryon (https://github.com/cpitclaudel/alectryon)
+ alectryon/coq.py:93: error: Name "suffixes" is used before definition [use-before-def]
scikit-learn (https://github.com/scikit-learn/scikit-learn)
+ sklearn/utils/tests/test_extmath.py:900: error: Name "incremental_means" is used before definition [use-before-def]
+ sklearn/utils/tests/test_extmath.py:900: error: Name "incremental_variances" is used before definition [use-before-def]
+ sklearn/utils/tests/test_extmath.py:900: error: Name "sample_count" is used before definition [use-before-def]
+ sklearn/utils/tests/test_extmath.py:903: error: Name "sample_count" is used before definition [use-before-def]
+ sklearn/metrics/cluster/tests/test_unsupervised.py:39: error: Name "score_dense_without_sampling" is used before definition [use-before-def]
+ sklearn/metrics/cluster/tests/test_unsupervised.py:55: error: Name "score_dense_with_sampling" is used before definition [use-before-def]
+ sklearn/manifold/tests/test_t_sne.py:227: error: Name "last_P1" is used before definition [use-before-def]
pandas (https://github.com/pandas-dev/pandas)
+ pandas/core/dtypes/dtypes.py:72: error: Name "str" is used before definition [use-before-def]
+ pandas/core/indexes/base.py:203: error: Name "str" is used before definition [use-before-def]
+ pandas/core/arrays/sparse/array.py:115: error: Name "ellipsis" is used before definition [use-before-def]
+ pandas/core/arrays/sparse/array.py:129: error: Name "Ellipsis" is used before definition [use-before-def]
+ pandas/core/groupby/generic.py:657: error: Name "lab" is used before definition [use-before-def]
+ pandas/core/groupby/generic.py:659: error: Name "lab" is used before definition [use-before-def]
+ pandas/core/groupby/generic.py:663: error: Name "lab" is used before definition [use-before-def]
+ pandas/io/formats/style_render.py:1636: error: Name "last_label" is used before definition [use-before-def]
+ pandas/io/formats/style_render.py:1642: error: Name "last_label" is used before definition [use-before-def]
poetry (https://github.com/python-poetry/poetry)
+ src/poetry/repositories/installed_repository.py:27: error: Name "FileNotFoundError" is used before definition [use-before-def]
manticore (https://github.com/trailofbits/manticore)
+ tests/auto_generators/make_VMTests.py:29: error: Name "open" is used before definition [use-before-def]
spark (https://github.com/apache/spark)
+ python/pyspark/pandas/series.py:360: error: Name "str" is used before definition [use-before-def]
arviz (https://github.com/arviz-devs/arviz)
+ arviz/rcparams.py:483: error: Name "aux_val" is used before definition [use-before-def]
+ arviz/rcparams.py:485: error: Name "aux_val" is used before definition [use-before-def]
+ arviz/data/io_cmdstan.py:907: error: Name "loc" is used before definition [use-before-def]
+ arviz/data/inference_data.py:2156: error: Name "group_data" is used before definition [use-before-def]
+ arviz/plots/backends/matplotlib/kdeplot.py:53: error: Name "_" is used before definition [use-before-def]
+ arviz/plots/backends/matplotlib/hdiplot.py:27: error: Name "_" is used before definition [use-before-def]
+ arviz/plots/backends/matplotlib/forestplot.py:602: error: Name "_" is used before definition [use-before-def]
+ arviz/plots/backends/matplotlib/distplot.py:47: error: Name "_" is used before definition [use-before-def]
+ arviz/plots/backends/bokeh/rankplot.py:61: error: Name "_" is used before definition [use-before-def]
+ arviz/plots/backends/bokeh/ppcplot.py:58: error: Name "_" is used before definition [use-before-def]
+ arviz/plots/backends/bokeh/kdeplot.py:59: error: Name "_" is used before definition [use-before-def]
+ arviz/plots/backends/bokeh/kdeplot.py:187: error: Name "_" is used before definition [use-before-def]
+ arviz/tests/external_tests/test_data_pystan.py:290: error: Name "shape" is used before definition [use-before-def]
+ arviz/plots/backends/matplotlib/separationplot.py:57: error: Name "_" is used before definition [use-before-def]
+ arviz/plots/backends/bokeh/lmplot.py:47: error: Name "_" is used before definition [use-before-def]
pycryptodome (https://github.com/Legrandin/pycryptodome)
+ lib/Crypto/SelfTest/Signature/test_dss.py:179: error: Name "hash_module" is used before definition [use-before-def]
+ lib/Crypto/SelfTest/Signature/test_dss.py:217: error: Name "hash_module" is used before definition [use-before-def]
+ lib/Crypto/SelfTest/Signature/test_dss.py:339: error: Name "hash_module" is used before definition [use-before-def]
+ lib/Crypto/SelfTest/Signature/test_dss.py:341: error: Name "hash_module" is used before definition [use-before-def]
+ lib/Crypto/SelfTest/Signature/test_dss.py:342: error: Name "curve_name" is used before definition [use-before-def]
+ lib/Crypto/SelfTest/Hash/test_BLAKE2.py:293: error: Name "key" is used before definition [use-before-def]
attrs (https://github.com/python-attrs/attrs)
+ src/attr/__init__.pyi:48: error: Name "type" is used before definition [use-before-def]
+ src/attr/__init__.pyi:61: error: Name "type" is used before definition [use-before-def]
+ tests/typing_example.py:104: error: Name "e" is used before definition [use-before-def]
+ tests/typing_example.py:105: error: Name "e" is used before definition [use-before-def]
+ tests/typing_example.py:106: error: Name "e" is used before definition [use-before-def]
+ tests/typing_example.py:107: error: Name "e" is used before definition [use-before-def]
+ tests/typing_example.py:117: error: Name "e" is used before definition [use-before-def]
+ tests/typing_example.py:118: error: Name "e" is used before definition [use-before-def]
+ tests/typing_example.py:119: error: Name "e" is used before definition [use-before-def]
+ tests/typing_example.py:120: error: Name "e" is used before definition [use-before-def]
black (https://github.com/psf/black)
+ src/black/parsing.py:129:19: error: Name "result" is used before definition [use-before-def]
+ src/blackd/__init__.py:195:29: error: Name "rest" is used before definition [use-before-def]
pytest (https://github.com/pytest-dev/pytest)
+ src/_pytest/outcomes.py:51: error: Name "Exception" is used before definition [use-before-def]
+ src/_pytest/outcomes.py:80: error: Name "Exception" is used before definition [use-before-def]
+ src/_pytest/assertion/rewrite.py:965: error: Name "cond" is used before definition [use-before-def]
aiohttp (https://github.com/aio-libs/aiohttp)
+ aiohttp/helpers.py:465: error: Name "reify" is used before definition [use-before-def]
sockeye (https://github.com/awslabs/sockeye)
+ sockeye/decoder.py:269: error: Name "autoregr_states" is used before definition [use-before-def]
ibis (https://github.com/ibis-project/ibis)
+ ibis/util.py:452: error: Name "rest" is used before definition [use-before-def]
+ ibis/expr/format.py:44: error: Name "deps" is used before definition [use-before-def]
core (https://github.com/home-assistant/core)
+ homeassistant/helpers/config_validation.py:1267: error: Name "CONDITION_SCHEMA" is used before definition [use-before-def]
+ homeassistant/helpers/config_validation.py:1278: error: Name "CONDITION_SCHEMA" is used before definition [use-before-def]
+ homeassistant/helpers/config_validation.py:1290: error: Name "CONDITION_SCHEMA" is used before definition [use-before-def]
+ homeassistant/helpers/config_validation.py:1301: error: Name "CONDITION_SCHEMA" is used before definition [use-before-def]
+ homeassistant/helpers/config_validation.py:1313: error: Name "CONDITION_SCHEMA" is used before definition [use-before-def]
+ homeassistant/helpers/config_validation.py:1324: error: Name "CONDITION_SCHEMA" is used before definition [use-before-def]
+ homeassistant/helpers/config_validation.py:1356: error: Name "CONDITION_SCHEMA" is used before definition [use-before-def]
+ homeassistant/components/samsungtv/bridge.py:525: error: Name "result" is used before definition [use-before-def]
+ homeassistant/components/plex/server.py:187: error: Name "error" is used before definition [use-before-def]
cloud-init (https://github.com/canonical/cloud-init)
+ cloudinit/util.py:1919: error: Name "mountpoint" is used before definition [use-before-def]
+ cloudinit/config/cc_write_files_deferred.py:30: error: Name "__doc__" is used before definition [use-before-def]
bokeh (https://github.com/bokeh/bokeh)
+ src/bokeh/io/state.py:233:8: error: Name "_STATE" is used before definition [use-before-def]
+ src/bokeh/io/notebook.py:459:12: error: Name "_NOTEBOOK_LOADED" is used before definition [use-before-def]
It looks like this check is triggering some hits in
.pyifiles. Maybe partially-defined checks should all be skipped for stub files, since they're never actually executed at runtime?
Yep, good idea!
Diff from mypy_primer, showing the effect of this PR on open source code:
aiortc (https://github.com/aiortc/aiortc)
+ src/aiortc/rtcsctptransport.py:531: error: Name "expected_tsn" is used before definition [use-before-def]
sphinx (https://github.com/sphinx-doc/sphinx)
+ sphinx/ext/autodoc/mock.py:14:28: error: Name "__name__" is used before definition [use-before-def]
+ sphinx/ext/autodoc/importer.py:81:13: error: Name "exc" is used before definition [use-before-def]
+ sphinx/ext/autodoc/importer.py:83:36: error: Name "exc" is used before definition [use-before-def]
+ sphinx/ext/autodoc/importer.py:110:23: error: Name "exc" is used before definition [use-before-def]
jax (https://github.com/google/jax)
+ jax/_src/config.py:167: error: Name "already_configured_with_absl" is used before definition [use-before-def]
+ jax/interpreters/pxla.py:3783: error: Name "eqn" is used before definition [use-before-def]
+ jax/interpreters/pxla.py:3784: error: Name "eqn" is used before definition [use-before-def]
+ jax/interpreters/pxla.py:3785: error: Name "eqn" is used before definition [use-before-def]
+ jax/interpreters/pxla.py:3786: error: Name "eqn" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:1763: error: Name "_one" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:1767: error: Name "_one" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:1772: error: Name "_one" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:1776: error: Name "_one" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:1858: error: Name "_one" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:1863: error: Name "_one" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:1868: error: Name "_one" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:1959: error: Name "_dtype" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:1963: error: Name "_dtype" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:2099: error: Name "_ones" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:3026: error: Name "_zeros" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:3029: error: Name "_zeros" is used before definition [use-before-def]
+ jax/_src/lax/lax.py:3031: error: Name "_zeros" is used before definition [use-before-def]
+ jax/_src/numpy/ufuncs.py:65: error: Name "fn" is used before definition [use-before-def]
+ jax/_src/numpy/ufuncs.py:84: error: Name "fn" is used before definition [use-before-def]
scrapy (https://github.com/scrapy/scrapy)
+ scrapy/utils/log.py:108: error: Name "_scrapy_root_handler" is used before definition [use-before-def]
+ scrapy/utils/log.py:109: error: Name "_scrapy_root_handler" is used before definition [use-before-def]
+ scrapy/utils/log.py:110: error: Name "_scrapy_root_handler" is used before definition [use-before-def]
discord.py (https://github.com/Rapptz/discord.py)
+ discord/ext/commands/bot.py:1353: error: Name "exc" is used before definition [use-before-def]
+ discord/ext/commands/bot.py:1354: error: Name "exc" is used before definition [use-before-def]
psycopg (https://github.com/psycopg/psycopg)
+ psycopg/psycopg/cursor.py:235: error: Name "pgq" is used before definition [use-before-def]
+ psycopg/psycopg/cursor.py:263: error: Name "pgq" is used before definition [use-before-def]
sympy (https://github.com/sympy/sympy)
+ sympy/polys/matrices/dense.py:331: error: Name "AnC" is used before definition [use-before-def]
+ sympy/core/kind.py:321: error: Name "result" is used before definition [use-before-def]
+ sympy/testing/tests/test_code_quality.py:185: error: Name "msg" is used before definition [use-before-def]
+ sympy/utilities/iterables.py:1972: error: Name "sentinel" is used before definition [use-before-def]
+ sympy/core/sympify.py:619: error: Name "expr" is used before definition [use-before-def]
+ sympy/core/operations.py:667: error: Name "handler" is used before definition [use-before-def]
+ sympy/core/exprtools.py:1479: error: Name "n" is used before definition [use-before-def]
+ sympy/core/exprtools.py:1480: error: Name "n" is used before definition [use-before-def]
+ sympy/polys/polyutils.py:532: error: Name "r" is used before definition [use-before-def]
+ sympy/ntheory/modular.py:255: error: Name "n" is used before definition [use-before-def]
+ sympy/ntheory/qs.py:491: error: Name "B_array" is used before definition [use-before-def]
+ sympy/simplify/gammasimp.py:267: error: Name "y" is used before definition [use-before-def]
+ sympy/simplify/gammasimp.py:270: error: Name "y" is used before definition [use-before-def]
+ sympy/simplify/gammasimp.py:273: error: Name "y" is used before definition [use-before-def]
+ sympy/simplify/gammasimp.py:274: error: Name "y" is used before definition [use-before-def]
+ sympy/simplify/gammasimp.py:275: error: Name "y" is used before definition [use-before-def]
+ sympy/matrices/matrices.py:1002: error: Name "evaluate" is used before definition [use-before-def]
+ sympy/solvers/solvers.py:295: error: Name "val" is used before definition [use-before-def]
+ sympy/solvers/solvers.py:296: error: Name "val" is used before definition [use-before-def]
+ sympy/solvers/solvers.py:320: error: Name "val" is used before definition [use-before-def]
+ sympy/tensor/tensor.py:3045: error: Name "other" is used before definition [use-before-def]
+ sympy/tensor/tensor.py:3051: error: Name "other" is used before definition [use-before-def]
+ sympy/tensor/tensor.py:3056: error: Name "other" is used before definition [use-before-def]
+ sympy/polys/modulargcd.py:266: error: Name "hlastm" is used before definition [use-before-def]
+ sympy/polys/modulargcd.py:269: error: Name "hlastm" is used before definition [use-before-def]
+ sympy/polys/modulargcd.py:890: error: Name "hlastm" is used before definition [use-before-def]
+ sympy/polys/modulargcd.py:893: error: Name "hlastm" is used before definition [use-before-def]
+ sympy/polys/modulargcd.py:1190: error: Name "hlastm" is used before definition [use-before-def]
+ sympy/polys/modulargcd.py:1193: error: Name "hlastm" is used before definition [use-before-def]
+ sympy/interactive/tests/test_ipython.py:131: error: Name "text" is used before definition [use-before-def]
+ sympy/combinatorics/tests/test_perm_groups.py:630: error: Name "points" is used before definition [use-before-def]
+ sympy/combinatorics/tests/test_perm_groups.py:631: error: Name "g" is used before definition [use-before-def]
+ sympy/holonomic/holonomic.py:2747: error: Name "coeff" is used before definition [use-before-def]
+ sympy/holonomic/holonomic.py:2749: error: Name "coeff" is used before definition [use-before-def]
+ sympy/holonomic/holonomic.py:2750: error: Name "indicial" is used before definition [use-before-def]
+ sympy/holonomic/holonomic.py:2750: error: Name "coeff" is used before definition [use-before-def]
+ sympy/holonomic/holonomic.py:2776: error: Name "coeff" is used before definition [use-before-def]
rich (https://github.com/Textualize/rich)
+ rich/markup.py:207: error: Name "start" is used before definition [use-before-def]
+ rich/markup.py:211: error: Name "start" is used before definition [use-before-def]
anyio (https://github.com/agronholm/anyio)
+ src/anyio/_backends/_asyncio.py:562: error: Name "e" is used before definition [use-before-def]
scikit-learn (https://github.com/scikit-learn/scikit-learn)
+ sklearn/utils/tests/test_extmath.py:900: error: Name "incremental_means" is used before definition [use-before-def]
+ sklearn/utils/tests/test_extmath.py:900: error: Name "incremental_variances" is used before definition [use-before-def]
+ sklearn/utils/tests/test_extmath.py:900: error: Name "sample_count" is used before definition [use-before-def]
+ sklearn/utils/tests/test_extmath.py:903: error: Name "sample_count" is used before definition [use-before-def]
+ sklearn/metrics/cluster/tests/test_unsupervised.py:39: error: Name "score_dense_without_sampling" is used before definition [use-before-def]
+ sklearn/metrics/cluster/tests/test_unsupervised.py:55: error: Name "score_dense_with_sampling" is used before definition [use-before-def]
+ sklearn/manifold/tests/test_t_sne.py:227: error: Name "last_P1" is used before definition [use-before-def]
arviz (https://github.com/arviz-devs/arviz)
+ arviz/rcparams.py:483: error: Name "aux_val" is used before definition [use-before-def]
+ arviz/rcparams.py:485: error: Name "aux_val" is used before definition [use-before-def]
+ arviz/data/inference_data.py:2156: error: Name "group_data" is used before definition [use-before-def]
pandas (https://github.com/pandas-dev/pandas)
+ pandas/core/arrays/sparse/array.py:115: error: Name "ellipsis" is used before definition [use-before-def]
+ pandas/core/arrays/sparse/array.py:129: error: Name "Ellipsis" is used before definition [use-before-def]
+ pandas/core/groupby/generic.py:657: error: Name "lab" is used before definition [use-before-def]
+ pandas/core/groupby/generic.py:659: error: Name "lab" is used before definition [use-before-def]
+ pandas/core/groupby/generic.py:663: error: Name "lab" is used before definition [use-before-def]
+ pandas/io/formats/style_render.py:1636: error: Name "last_label" is used before definition [use-before-def]
+ pandas/io/formats/style_render.py:1642: error: Name "last_label" is used before definition [use-before-def]
pycryptodome (https://github.com/Legrandin/pycryptodome)
+ lib/Crypto/SelfTest/Signature/test_dss.py:179: error: Name "hash_module" is used before definition [use-before-def]
+ lib/Crypto/SelfTest/Signature/test_dss.py:217: error: Name "hash_module" is used before definition [use-before-def]
+ lib/Crypto/SelfTest/Signature/test_dss.py:339: error: Name "hash_module" is used before definition [use-before-def]
+ lib/Crypto/SelfTest/Signature/test_dss.py:341: error: Name "hash_module" is used before definition [use-before-def]
+ lib/Crypto/SelfTest/Signature/test_dss.py:342: error: Name "curve_name" is used before definition [use-before-def]
+ lib/Crypto/SelfTest/Hash/test_BLAKE2.py:293: error: Name "key" is used before definition [use-before-def]
attrs (https://github.com/python-attrs/attrs)
+ tests/typing_example.py:104: error: Name "e" is used before definition [use-before-def]
+ tests/typing_example.py:105: error: Name "e" is used before definition [use-before-def]
+ tests/typing_example.py:106: error: Name "e" is used before definition [use-before-def]
+ tests/typing_example.py:107: error: Name "e" is used before definition [use-before-def]
+ tests/typing_example.py:117: error: Name "e" is used before definition [use-before-def]
+ tests/typing_example.py:118: error: Name "e" is used before definition [use-before-def]
+ tests/typing_example.py:119: error: Name "e" is used before definition [use-before-def]
+ tests/typing_example.py:120: error: Name "e" is used before definition [use-before-def]
pytest (https://github.com/pytest-dev/pytest)
+ src/_pytest/assertion/rewrite.py:965: error: Name "cond" is used before definition [use-before-def]
aiohttp (https://github.com/aio-libs/aiohttp)
+ aiohttp/helpers.py:465: error: Name "reify" is used before definition [use-before-def]
core (https://github.com/home-assistant/core)
+ homeassistant/helpers/config_validation.py:1267: error: Name "CONDITION_SCHEMA" is used before definition [use-before-def]
+ homeassistant/helpers/config_validation.py:1278: error: Name "CONDITION_SCHEMA" is used before definition [use-before-def]
+ homeassistant/helpers/config_validation.py:1290: error: Name "CONDITION_SCHEMA" is used before definition [use-before-def]
+ homeassistant/helpers/config_validation.py:1301: error: Name "CONDITION_SCHEMA" is used before definition [use-before-def]
+ homeassistant/helpers/config_validation.py:1313: error: Name "CONDITION_SCHEMA" is used before definition [use-before-def]
+ homeassistant/helpers/config_validation.py:1324: error: Name "CONDITION_SCHEMA" is used before definition [use-before-def]
+ homeassistant/helpers/config_validation.py:1356: error: Name "CONDITION_SCHEMA" is used before definition [use-before-def]
+ homeassistant/components/samsungtv/bridge.py:525: error: Name "result" is used before definition [use-before-def]
+ homeassistant/components/plex/server.py:187: error: Name "error" is used before definition [use-before-def]
cloud-init (https://github.com/canonical/cloud-init)
+ cloudinit/util.py:1919: error: Name "mountpoint" is used before definition [use-before-def]
+ cloudinit/config/cc_write_files_deferred.py:30: error: Name "__doc__" is used before definition [use-before-def]
black (https://github.com/psf/black)
+ src/black/parsing.py:129:19: error: Name "result" is used before definition [use-before-def]
bokeh (https://github.com/bokeh/bokeh)
+ src/bokeh/io/state.py:233:8: error: Name "_STATE" is used before definition [use-before-def]
+ src/bokeh/io/notebook.py:459:12: error: Name "_NOTEBOOK_LOADED" is used before definition [use-before-def]
It looks like sympy has a lot of code along the lines of:
for i in range(2):
if i == 0:
foo = 1
else:
bar = foo
The partially-defined check can't understand that foo will always be defined here, and I'm not sure it's reasonable to ask it to understand code like that. Seems like sympy won't thank us, though :/
It looks like
sympyhas a lot of code along the lines of:for i in range(2): if i == 0: foo = 1 else: bar = fooThe partially-defined check can't understand that
foowill always be defined here, and I'm not sure it's reasonable to ask it to understand code like that. Seems likesympywon't thank us, though :/
Yep, agreed.
We now have two checks in place: use-before-def and partially-defined. Potentially, we can call the example you listed as partially-defined and accept that it will have a higher false-positive rate. That way use-before-def will have a lower false-positive rate and makes more sense to enable it by default/have users not disable it.
Potentially, we can call the example you listed as partially-defined and accept that it will have a higher false-positive rate. That way use-before-def will have a lower false-positive rate and makes more sense to enable it by default/have users not disable it.
I think that would be a good idea, if it's not too difficult to do. Just the difference in error message is quite significant imo — Name "foo" is used before definition is a lot more sure of itself than Name "foo" may be undefined. It would be great to limit the "more confident" error message to cases where the chance of a false-positive is very low.
(Thanks for all the work you've been doing on this btw — this is a great feature!)
Diff from mypy_primer, showing the effect of this PR on open source code:
aiortc (https://github.com/aiortc/aiortc)
+ src/aiortc/rtcsctptransport.py:531: error: Name "expected_tsn" is used before definition [use-before-def]
sphinx (https://github.com/sphinx-doc/sphinx)
+ sphinx/ext/autodoc/importer.py:81:13: error: Name "exc" is used before definition [use-before-def]
+ sphinx/ext/autodoc/importer.py:83:36: error: Name "exc" is used before definition [use-before-def]
+ sphinx/ext/autodoc/importer.py:110:23: error: Name "exc" is used before definition [use-before-def]
psycopg (https://github.com/psycopg/psycopg)
+ psycopg/psycopg/cursor.py:235: error: Name "pgq" is used before definition [use-before-def]
+ psycopg/psycopg/cursor.py:263: error: Name "pgq" is used before definition [use-before-def]
jax (https://github.com/google/jax)
+ jax/_src/config.py:167: error: Name "already_configured_with_absl" is used before definition [use-before-def]
scrapy (https://github.com/scrapy/scrapy)
+ scrapy/utils/log.py:108: error: Name "_scrapy_root_handler" is used before definition [use-before-def]
+ scrapy/utils/log.py:109: error: Name "_scrapy_root_handler" is used before definition [use-before-def]
+ scrapy/utils/log.py:110: error: Name "_scrapy_root_handler" is used before definition [use-before-def]
discord.py (https://github.com/Rapptz/discord.py)
+ discord/ext/commands/bot.py:1353: error: Name "exc" is used before definition [use-before-def]
+ discord/ext/commands/bot.py:1354: error: Name "exc" is used before definition [use-before-def]
sympy (https://github.com/sympy/sympy)
+ sympy/polys/matrices/dense.py:331: error: Name "AnC" is used before definition [use-before-def]
+ sympy/core/kind.py:321: error: Name "result" is used before definition [use-before-def]
+ sympy/testing/tests/test_code_quality.py:185: error: Name "msg" is used before definition [use-before-def]
+ sympy/utilities/iterables.py:1972: error: Name "sentinel" is used before definition [use-before-def]
+ sympy/core/sympify.py:619: error: Name "expr" is used before definition [use-before-def]
+ sympy/core/operations.py:667: error: Name "handler" is used before definition [use-before-def]
+ sympy/core/exprtools.py:1479: error: Name "n" is used before definition [use-before-def]
+ sympy/core/exprtools.py:1480: error: Name "n" is used before definition [use-before-def]
+ sympy/polys/polyutils.py:532: error: Name "r" is used before definition [use-before-def]
+ sympy/ntheory/modular.py:255: error: Name "n" is used before definition [use-before-def]
+ sympy/ntheory/qs.py:491: error: Name "B_array" is used before definition [use-before-def]
+ sympy/simplify/gammasimp.py:267: error: Name "y" is used before definition [use-before-def]
+ sympy/simplify/gammasimp.py:270: error: Name "y" is used before definition [use-before-def]
+ sympy/simplify/gammasimp.py:273: error: Name "y" is used before definition [use-before-def]
+ sympy/simplify/gammasimp.py:274: error: Name "y" is used before definition [use-before-def]
+ sympy/simplify/gammasimp.py:275: error: Name "y" is used before definition [use-before-def]
+ sympy/solvers/solvers.py:295: error: Name "val" is used before definition [use-before-def]
+ sympy/solvers/solvers.py:296: error: Name "val" is used before definition [use-before-def]
+ sympy/solvers/solvers.py:320: error: Name "val" is used before definition [use-before-def]
+ sympy/tensor/tensor.py:3045: error: Name "other" is used before definition [use-before-def]
+ sympy/tensor/tensor.py:3051: error: Name "other" is used before definition [use-before-def]
+ sympy/tensor/tensor.py:3056: error: Name "other" is used before definition [use-before-def]
+ sympy/polys/modulargcd.py:266: error: Name "hlastm" is used before definition [use-before-def]
+ sympy/polys/modulargcd.py:269: error: Name "hlastm" is used before definition [use-before-def]
+ sympy/polys/modulargcd.py:890: error: Name "hlastm" is used before definition [use-before-def]
+ sympy/polys/modulargcd.py:893: error: Name "hlastm" is used before definition [use-before-def]
+ sympy/polys/modulargcd.py:1190: error: Name "hlastm" is used before definition [use-before-def]
+ sympy/polys/modulargcd.py:1193: error: Name "hlastm" is used before definition [use-before-def]
+ sympy/holonomic/holonomic.py:2747: error: Name "coeff" is used before definition [use-before-def]
+ sympy/holonomic/holonomic.py:2749: error: Name "coeff" is used before definition [use-before-def]
+ sympy/holonomic/holonomic.py:2750: error: Name "indicial" is used before definition [use-before-def]
+ sympy/holonomic/holonomic.py:2750: error: Name "coeff" is used before definition [use-before-def]
+ sympy/holonomic/holonomic.py:2776: error: Name "coeff" is used before definition [use-before-def]
rich (https://github.com/Textualize/rich)
+ rich/markup.py:207: error: Name "start" is used before definition [use-before-def]
+ rich/markup.py:211: error: Name "start" is used before definition [use-before-def]
scikit-learn (https://github.com/scikit-learn/scikit-learn)
+ sklearn/utils/tests/test_extmath.py:900: error: Name "incremental_means" is used before definition [use-before-def]
+ sklearn/utils/tests/test_extmath.py:900: error: Name "incremental_variances" is used before definition [use-before-def]
+ sklearn/utils/tests/test_extmath.py:900: error: Name "sample_count" is used before definition [use-before-def]
+ sklearn/utils/tests/test_extmath.py:903: error: Name "sample_count" is used before definition [use-before-def]
+ sklearn/metrics/cluster/tests/test_unsupervised.py:39: error: Name "score_dense_without_sampling" is used before definition [use-before-def]
+ sklearn/metrics/cluster/tests/test_unsupervised.py:55: error: Name "score_dense_with_sampling" is used before definition [use-before-def]
+ sklearn/manifold/tests/test_t_sne.py:227: error: Name "last_P1" is used before definition [use-before-def]
anyio (https://github.com/agronholm/anyio)
+ src/anyio/_backends/_asyncio.py:562: error: Name "e" is used before definition [use-before-def]
pandas (https://github.com/pandas-dev/pandas)
+ pandas/core/arrays/sparse/array.py:115: error: Name "ellipsis" is used before definition [use-before-def]
+ pandas/core/arrays/sparse/array.py:129: error: Name "Ellipsis" is used before definition [use-before-def]
+ pandas/io/formats/style_render.py:1636: error: Name "last_label" is used before definition [use-before-def]
+ pandas/io/formats/style_render.py:1642: error: Name "last_label" is used before definition [use-before-def]
arviz (https://github.com/arviz-devs/arviz)
+ arviz/rcparams.py:483: error: Name "aux_val" is used before definition [use-before-def]
+ arviz/rcparams.py:485: error: Name "aux_val" is used before definition [use-before-def]
+ arviz/data/inference_data.py:2156: error: Name "group_data" is used before definition [use-before-def]
attrs (https://github.com/python-attrs/attrs)
+ tests/typing_example.py:104: error: Name "e" is used before definition [use-before-def]
+ tests/typing_example.py:105: error: Name "e" is used before definition [use-before-def]
+ tests/typing_example.py:106: error: Name "e" is used before definition [use-before-def]
+ tests/typing_example.py:107: error: Name "e" is used before definition [use-before-def]
+ tests/typing_example.py:117: error: Name "e" is used before definition [use-before-def]
+ tests/typing_example.py:118: error: Name "e" is used before definition [use-before-def]
+ tests/typing_example.py:119: error: Name "e" is used before definition [use-before-def]
+ tests/typing_example.py:120: error: Name "e" is used before definition [use-before-def]
pycryptodome (https://github.com/Legrandin/pycryptodome)
+ lib/Crypto/SelfTest/Signature/test_dss.py:179: error: Name "hash_module" is used before definition [use-before-def]
+ lib/Crypto/SelfTest/Signature/test_dss.py:217: error: Name "hash_module" is used before definition [use-before-def]
+ lib/Crypto/SelfTest/Signature/test_dss.py:339: error: Name "hash_module" is used before definition [use-before-def]
+ lib/Crypto/SelfTest/Signature/test_dss.py:341: error: Name "hash_module" is used before definition [use-before-def]
+ lib/Crypto/SelfTest/Signature/test_dss.py:342: error: Name "curve_name" is used before definition [use-before-def]
+ lib/Crypto/SelfTest/Hash/test_BLAKE2.py:293: error: Name "key" is used before definition [use-before-def]
black (https://github.com/psf/black)
+ src/black/parsing.py:129:19: error: Name "result" is used before definition [use-before-def]
pytest (https://github.com/pytest-dev/pytest)
+ src/_pytest/assertion/rewrite.py:965: error: Name "cond" is used before definition [use-before-def]
core (https://github.com/home-assistant/core)
+ homeassistant/components/samsungtv/bridge.py:525: error: Name "result" is used before definition [use-before-def]
+ homeassistant/components/plex/server.py:187: error: Name "error" is used before definition [use-before-def]
cloud-init (https://github.com/canonical/cloud-init)
+ cloudinit/util.py:1919: error: Name "mountpoint" is used before definition [use-before-def]
aiohttp (https://github.com/aio-libs/aiohttp)
+ aiohttp/helpers.py:465: error: Name "reify" is used before definition [use-before-def]
bokeh (https://github.com/bokeh/bokeh)
+ src/bokeh/io/state.py:233:8: error: Name "_STATE" is used before definition [use-before-def]
+ src/bokeh/io/notebook.py:459:12: error: Name "_NOTEBOOK_LOADED" is used before definition [use-before-def]
#14175 has the fixes from this PR but doesn't enable use-before-def by default.
After #14175 is merged, we will have the following false-positives causes for use-before-def check (roughly in the order of common they are):
- Issues with try/except (should be fixed by #14114).
- Loops that execute different code on first iteration (example).
- A version of the loop thing above but the variable is used in else, not in for (example).
- Function uses a global scope variable but function definition comes before the variable definition. (example)
As Alex and I discussed above, solving (2) and (3) is difficult/not feasible to handle correctly in the near term. I'll probably send a PR to move detection of these to the partially-defined check, so that use-before-def has fewer false positives.
I'm not sure what we can do for (4). Most of these seem to be when using global, so we can try to treat doing global foo as a definition of foo.
@AlexWaygood @JukkaL @ilevkivskyi do you have thoughts?
#14176 moves the false positives from (2) and (3) to partially defined check.
I think (4) should be "may be undefined", because if you call function before variable definition, it will be undefined. IMO (2) should be "may be undefined", if we are within a loop, and "use before definition" otherwise. (3) looks like a bug in their code, if the iterable is empty, the else branch will raise an UnboundLocalError, but in this case "may be undefined" is also better.
Diff from mypy_primer, showing the effect of this PR on open source code:
sphinx (https://github.com/sphinx-doc/sphinx)
+ sphinx/ext/autodoc/importer.py:81:13: error: Name "exc" is used before definition [use-before-def]
+ sphinx/ext/autodoc/importer.py:83:36: error: Name "exc" is used before definition [use-before-def]
+ sphinx/ext/autodoc/importer.py:110:23: error: Name "exc" is used before definition [use-before-def]
jax (https://github.com/google/jax)
+ jax/_src/config.py:167: error: Name "already_configured_with_absl" is used before definition [use-before-def]
discord.py (https://github.com/Rapptz/discord.py)
+ discord/ext/commands/bot.py:1353: error: Name "exc" is used before definition [use-before-def]
+ discord/ext/commands/bot.py:1354: error: Name "exc" is used before definition [use-before-def]
scrapy (https://github.com/scrapy/scrapy)
+ scrapy/utils/log.py:108: error: Name "_scrapy_root_handler" is used before definition [use-before-def]
+ scrapy/utils/log.py:109: error: Name "_scrapy_root_handler" is used before definition [use-before-def]
+ scrapy/utils/log.py:110: error: Name "_scrapy_root_handler" is used before definition [use-before-def]
sympy (https://github.com/sympy/sympy)
+ sympy/testing/tests/test_code_quality.py:185: error: Name "msg" is used before definition [use-before-def]
+ sympy/core/sympify.py:618: error: Name "expr" is used before definition [use-before-def]
+ sympy/simplify/gammasimp.py:267: error: Name "y" is used before definition [use-before-def]
+ sympy/simplify/gammasimp.py:270: error: Name "y" is used before definition [use-before-def]
+ sympy/simplify/gammasimp.py:273: error: Name "y" is used before definition [use-before-def]
+ sympy/simplify/gammasimp.py:274: error: Name "y" is used before definition [use-before-def]
+ sympy/simplify/gammasimp.py:275: error: Name "y" is used before definition [use-before-def]
+ sympy/solvers/solvers.py:295: error: Name "val" is used before definition [use-before-def]
+ sympy/solvers/solvers.py:296: error: Name "val" is used before definition [use-before-def]
+ sympy/tensor/tensor.py:3046: error: Name "other" is used before definition [use-before-def]
+ sympy/tensor/tensor.py:3052: error: Name "other" is used before definition [use-before-def]
+ sympy/tensor/tensor.py:3057: error: Name "other" is used before definition [use-before-def]
+ sympy/polys/modulargcd.py:266: error: Name "hlastm" is used before definition [use-before-def]
+ sympy/polys/modulargcd.py:269: error: Name "hlastm" is used before definition [use-before-def]
+ sympy/polys/modulargcd.py:890: error: Name "hlastm" is used before definition [use-before-def]
+ sympy/polys/modulargcd.py:893: error: Name "hlastm" is used before definition [use-before-def]
+ sympy/polys/modulargcd.py:1190: error: Name "hlastm" is used before definition [use-before-def]
+ sympy/polys/modulargcd.py:1193: error: Name "hlastm" is used before definition [use-before-def]
+ sympy/holonomic/holonomic.py:2747: error: Name "coeff" is used before definition [use-before-def]
+ sympy/holonomic/holonomic.py:2749: error: Name "coeff" is used before definition [use-before-def]
+ sympy/holonomic/holonomic.py:2750: error: Name "indicial" is used before definition [use-before-def]
+ sympy/holonomic/holonomic.py:2750: error: Name "coeff" is used before definition [use-before-def]
+ sympy/holonomic/holonomic.py:2776: error: Name "coeff" is used before definition [use-before-def]
rich (https://github.com/Textualize/rich)
+ rich/markup.py:207: error: Name "start" is used before definition [use-before-def]
+ rich/markup.py:211: error: Name "start" is used before definition [use-before-def]
anyio (https://github.com/agronholm/anyio)
+ src/anyio/_backends/_asyncio.py:564: error: Name "e" is used before definition [use-before-def]
pandas (https://github.com/pandas-dev/pandas)
+ pandas/core/arrays/sparse/array.py:115: error: Name "ellipsis" is used before definition [use-before-def]
+ pandas/core/arrays/sparse/array.py:129: error: Name "Ellipsis" is used before definition [use-before-def]
+ pandas/io/formats/style_render.py:1636: error: Name "last_label" is used before definition [use-before-def]
arviz (https://github.com/arviz-devs/arviz)
+ arviz/rcparams.py:483: error: Name "aux_val" is used before definition [use-before-def]
+ arviz/rcparams.py:485: error: Name "aux_val" is used before definition [use-before-def]
+ arviz/data/inference_data.py:2156: error: Name "group_data" is used before definition [use-before-def]
pycryptodome (https://github.com/Legrandin/pycryptodome)
+ lib/Crypto/SelfTest/Signature/test_dss.py:179: error: Name "hash_module" is used before definition [use-before-def]
+ lib/Crypto/SelfTest/Signature/test_dss.py:217: error: Name "hash_module" is used before definition [use-before-def]
+ lib/Crypto/SelfTest/Signature/test_dss.py:339: error: Name "hash_module" is used before definition [use-before-def]
+ lib/Crypto/SelfTest/Signature/test_dss.py:341: error: Name "hash_module" is used before definition [use-before-def]
+ lib/Crypto/SelfTest/Signature/test_dss.py:342: error: Name "curve_name" is used before definition [use-before-def]
attrs (https://github.com/python-attrs/attrs)
+ tests/typing_example.py:104: error: Name "e" is used before definition [use-before-def]
+ tests/typing_example.py:105: error: Name "e" is used before definition [use-before-def]
+ tests/typing_example.py:106: error: Name "e" is used before definition [use-before-def]
+ tests/typing_example.py:107: error: Name "e" is used before definition [use-before-def]
+ tests/typing_example.py:117: error: Name "e" is used before definition [use-before-def]
+ tests/typing_example.py:118: error: Name "e" is used before definition [use-before-def]
+ tests/typing_example.py:119: error: Name "e" is used before definition [use-before-def]
+ tests/typing_example.py:120: error: Name "e" is used before definition [use-before-def]
pytest (https://github.com/pytest-dev/pytest)
+ src/_pytest/assertion/rewrite.py:965: error: Name "cond" is used before definition [use-before-def]
black (https://github.com/psf/black)
+ src/black/parsing.py:129:19: error: Name "result" is used before definition [use-before-def]
core (https://github.com/home-assistant/core)
+ homeassistant/components/plex/server.py:187: error: Name "error" is used before definition [use-before-def]
cloud-init (https://github.com/canonical/cloud-init)
+ cloudinit/util.py:1919: error: Name "mountpoint" is used before definition [use-before-def]
bokeh (https://github.com/bokeh/bokeh)
+ src/bokeh/io/state.py:233:8: error: Name "_STATE" is used before definition [use-before-def]
+ src/bokeh/io/notebook.py:459:12: error: Name "_NOTEBOOK_LOADED" is used before definition [use-before-def]
aiohttp (https://github.com/aio-libs/aiohttp)
+ aiohttp/helpers.py:465: error: Name "reify" is used before definition [use-before-def]
Btw, if we are going to enable this by default, do we still need the Cannot determine type error? It looks like it only appears in use before definition scenarios (unless I am missing something). Also it is quite cryptic TBH. @JukkaL what do you think?
Diff from mypy_primer, showing the effect of this PR on open source code:
sphinx (https://github.com/sphinx-doc/sphinx)
+ sphinx/ext/autodoc/importer.py:81:13: error: Name "exc" is used before definition [use-before-def]
+ sphinx/ext/autodoc/importer.py:83:36: error: Name "exc" is used before definition [use-before-def]
+ sphinx/ext/autodoc/importer.py:110:23: error: Name "exc" is used before definition [use-before-def]
discord.py (https://github.com/Rapptz/discord.py)
+ discord/ext/commands/bot.py:1353: error: Name "exc" is used before definition [use-before-def]
+ discord/ext/commands/bot.py:1354: error: Name "exc" is used before definition [use-before-def]
rich (https://github.com/Textualize/rich)
+ rich/markup.py:207: error: Name "start" is used before definition [use-before-def]
+ rich/markup.py:211: error: Name "start" is used before definition [use-before-def]
anyio (https://github.com/agronholm/anyio)
+ src/anyio/_backends/_asyncio.py:564: error: Name "e" is used before definition [use-before-def]
pandas (https://github.com/pandas-dev/pandas)
+ pandas/core/arrays/sparse/array.py:115: error: Name "ellipsis" is used before definition [use-before-def]
+ pandas/core/arrays/sparse/array.py:129: error: Name "Ellipsis" is used before definition [use-before-def]
pycryptodome (https://github.com/Legrandin/pycryptodome)
+ lib/Crypto/SelfTest/Signature/test_dss.py:179: error: Name "hash_module" is used before definition [use-before-def]
+ lib/Crypto/SelfTest/Signature/test_dss.py:217: error: Name "hash_module" is used before definition [use-before-def]
+ lib/Crypto/SelfTest/Signature/test_dss.py:339: error: Name "hash_module" is used before definition [use-before-def]
+ lib/Crypto/SelfTest/Signature/test_dss.py:341: error: Name "hash_module" is used before definition [use-before-def]
+ lib/Crypto/SelfTest/Signature/test_dss.py:342: error: Name "curve_name" is used before definition [use-before-def]
attrs (https://github.com/python-attrs/attrs)
+ tests/typing_example.py:104: error: Name "e" is used before definition [use-before-def]
+ tests/typing_example.py:105: error: Name "e" is used before definition [use-before-def]
+ tests/typing_example.py:106: error: Name "e" is used before definition [use-before-def]
+ tests/typing_example.py:107: error: Name "e" is used before definition [use-before-def]
+ tests/typing_example.py:117: error: Name "e" is used before definition [use-before-def]
+ tests/typing_example.py:118: error: Name "e" is used before definition [use-before-def]
+ tests/typing_example.py:119: error: Name "e" is used before definition [use-before-def]
+ tests/typing_example.py:120: error: Name "e" is used before definition [use-before-def]
black (https://github.com/psf/black)
+ src/black/parsing.py:129:19: error: Name "result" is used before definition [use-before-def]
aiohttp (https://github.com/aio-libs/aiohttp)
+ aiohttp/helpers.py:465: error: Name "reify" is used before definition [use-before-def]
pytest (https://github.com/pytest-dev/pytest)
+ src/_pytest/assertion/rewrite.py:965: error: Name "cond" is used before definition [use-before-def]
core (https://github.com/home-assistant/core)
+ homeassistant/components/plex/server.py:187: error: Name "error" is used before definition [use-before-def]
bokeh (https://github.com/bokeh/bokeh)
+ src/bokeh/io/state.py:233:8: error: Name "_STATE" is used before definition [use-before-def]
+ src/bokeh/io/notebook.py:459:12: error: Name "_NOTEBOOK_LOADED" is used before definition [use-before-def]
Diff from mypy_primer, showing the effect of this PR on open source code:
sphinx (https://github.com/sphinx-doc/sphinx)
+ sphinx/ext/autodoc/importer.py:81:13: error: Name "exc" is used before definition [use-before-def]
+ sphinx/ext/autodoc/importer.py:83:36: error: Name "exc" is used before definition [use-before-def]
+ sphinx/ext/autodoc/importer.py:109:5: error: Name "exc" is used before definition [use-before-def]
+ sphinx/ext/autodoc/importer.py:110:23: error: Name "exc" is used before definition [use-before-def]
+ sphinx/ext/autodoc/importer.py:110:48: error: Name "exc_on_importing" is used before definition [use-before-def]
+ sphinx/ext/autodoc/importer.py:112:19: error: Name "exc_on_importing" is used before definition [use-before-def]
+ sphinx/domains/std.py:902:66: error: Name "title" is used before definition [use-before-def]
+ sphinx/domains/std.py:905:61: error: Name "title" is used before definition [use-before-def]
+ sphinx/ext/doctest.py:130:66: error: Name "spec" is used before definition [use-before-def]
discord.py (https://github.com/Rapptz/discord.py)
+ discord/ext/commands/bot.py:1353: error: Name "exc" is used before definition [use-before-def]
+ discord/ext/commands/bot.py:1354: error: Name "exc" is used before definition [use-before-def]
urllib3 (https://github.com/urllib3/urllib3)
+ test/test_connection.py:60: error: Name "mock_log" is used before definition [use-before-def]
+ test/test_connection.py:75: error: Name "mock_log" is used before definition [use-before-def]
+ test/test_connection.py:135: error: Name "mock_log" is used before definition [use-before-def]
+ test/test_connection.py:169: error: Name "mock_log" is used before definition [use-before-def]
schemathesis (https://github.com/schemathesis/schemathesis)
+ src/schemathesis/runner/impl/core.py:355: error: Name "error" is used before definition [use-before-def]
+ src/schemathesis/runner/impl/core.py:357: error: Name "warnings" is used before definition [use-before-def]
+ src/schemathesis/runner/impl/core.py:362: error: Name "error" is used before definition [use-before-def]
+ src/schemathesis/runner/impl/core.py:363: error: Name "error" is used before definition [use-before-def]
+ src/schemathesis/runner/impl/core.py:365: error: Name "error" is used before definition [use-before-def]
+ src/schemathesis/runner/impl/core.py:366: error: Name "error" is used before definition [use-before-def]
+ src/schemathesis/runner/impl/core.py:368: error: Name "error" is used before definition [use-before-def]
sympy (https://github.com/sympy/sympy)
+ sympy/core/cache.py:142: error: Name "SYMPY_CACHE_SIZE" is used before definition [use-before-def]
sublime_debugger (https://github.com/daveleroy/sublime_debugger)
+ modules/watch.py:66: error: Name "result" is used before definition [use-before-def]
+ modules/watch.py:67: error: Name "result" is used before definition [use-before-def]
dulwich (https://github.com/dulwich/dulwich)
+ dulwich/client.py:783: error: Name "target" is used before definition [use-before-def]
+ dulwich/client.py:784: error: Name "target" is used before definition [use-before-def]
schema_salad (https://github.com/common-workflow-language/schema_salad)
+ schema_salad/ref_resolver.py:924:48: error: Name "key" is used before definition [use-before-def]
+ schema_salad/ref_resolver.py:1138:17: error: Name "v" is used before definition [use-before-def]
+ schema_salad/ref_resolver.py:1171:49: error: Name "sl" is used before definition [use-before-def]
cwltool (https://github.com/common-workflow-language/cwltool)
+ tests/test_toolargparse.py:179:46: error: Name "script" is used before definition [use-before-def]
paasta (https://github.com/yelp/paasta)
+ paasta_tools/utils.py:2825: error: Name "proctimer" is used before definition [use-before-def]
+ paasta_tools/frameworks/task_store.py:189: error: Name "data" is used before definition [use-before-def]
anyio (https://github.com/agronholm/anyio)
+ src/anyio/_backends/_asyncio.py:563: error: Name "e" is used before definition [use-before-def]
+ src/anyio/_backends/_asyncio.py:564: error: Name "e" is used before definition [use-before-def]
dragonchain (https://github.com/dragonchain/dragonchain)
+ dragonchain/contract_invoker/contract_invoker_service.py:86:70: error: Name "transaction" is used before definition [use-before-def]
+ dragonchain/lib/broadcast.py:62:20: error: Name "dcid" is used before definition [use-before-def]
+ dragonchain/contract_invoker/contract_invoker.py:79:58: error: Name "unique_id" is used before definition [use-before-def]
manticore (https://github.com/trailofbits/manticore)
+ manticore/core/smtlib/solver.py:865: error: Name "received_version" is used before definition [use-before-def]
+ manticore/wasm/structure.py:1330: error: Name "inst" is used before definition [use-before-def]
pandas (https://github.com/pandas-dev/pandas)
+ pandas/core/arrays/sparse/array.py:129: error: Name "Ellipsis" is used before definition [use-before-def]
tornado (https://github.com/tornadoweb/tornado)
+ tornado/tcpclient.py:330: error: Name "stream" is used before definition [use-before-def]
spark (https://github.com/apache/spark)
+ python/pyspark/pandas/namespace.py:159: error: Name "range" is used before definition [use-before-def]
pytest (https://github.com/pytest-dev/pytest)
+ src/_pytest/assertion/rewrite.py:965: error: Name "cond" is used before definition [use-before-def]
core (https://github.com/home-assistant/core)
+ homeassistant/helpers/template.py:516: error: Name "template_render_thread" is used before definition [use-before-def]
+ homeassistant/helpers/check_config.py:115: error: Name "core_config" is used before definition [use-before-def]
+ homeassistant/helpers/collection.py:540: error: Name "data" is used before definition [use-before-def]
+ homeassistant/helpers/script.py:763: error: Name "idx" is used before definition [use-before-def]
+ homeassistant/scripts/check_config.py:214: error: Name "err" is used before definition [use-before-def]
+ homeassistant/scripts/check_config.py:215: error: Name "err" is used before definition [use-before-def]
+ homeassistant/scripts/check_config.py:216: error: Name "err" is used before definition [use-before-def]
+ homeassistant/components/ohmconnect/sensor.py:84: error: Name "url" is used before definition [use-before-def]
+ homeassistant/components/downloader/__init__.py:147: error: Name "url" is used before definition [use-before-def]
+ homeassistant/components/downloader/__init__.py:150: error: Name "url" is used before definition [use-before-def]
+ homeassistant/components/downloader/__init__.py:150: error: Name "filename" is used before definition [use-before-def]
+ homeassistant/components/downloader/__init__.py:154: error: Name "final_path" is used before definition [use-before-def]
+ homeassistant/components/downloader/__init__.py:155: error: Name "final_path" is used before definition [use-before-def]
+ homeassistant/components/downloader/__init__.py:160: error: Name "url" is used before definition [use-before-def]
+ homeassistant/components/downloader/__init__.py:160: error: Name "filename" is used before definition [use-before-def]
+ homeassistant/components/downloader/__init__.py:164: error: Name "final_path" is used before definition [use-before-def]
+ homeassistant/components/downloader/__init__.py:165: error: Name "final_path" is used before definition [use-before-def]
+ homeassistant/components/color_extractor/__init__.py:83: error: Name "image_type" is used before definition [use-before-def]
+ homeassistant/components/color_extractor/__init__.py:84: error: Name "image_reference" is used before definition [use-before-def]
+ homeassistant/components/xiaomi_miio/select.py:266: error: Name "value" is used before definition [use-before-def]
+ homeassistant/components/habitica/__init__.py:131: error: Name "element" is used before definition [use-before-def]
+ homeassistant/components/template/trigger_entity.py:181: error: Name "key" is used before definition [use-before-def]
+ homeassistant/components/roomba/braava.py:85: error: Name "split" is used before definition [use-before-def]
+ homeassistant/components/honeywell/climate.py:267: error: Name "temperature" is used before definition [use-before-def]
+ homeassistant/components/emoncms_history/__init__.py:61: error: Name "fullurl" is used before definition [use-before-def]
+ homeassistant/components/webostv/notify.py:55: error: Name "icon_path" is used before definition [use-before-def]
+ homeassistant/components/plex/server.py:186: error: Name "error" is used before definition [use-before-def]
+ homeassistant/components/plex/server.py:187: error: Name "error" is used before definition [use-before-def]
+ homeassistant/components/plex/server.py:638: error: Name "playlist_name" is used before definition [use-before-def]
+ homeassistant/components/plex/server.py:648: error: Name "library_name" is used before definition [use-before-def]
+ homeassistant/components/mqtt/mixins.py:433: error: Name "payload" is used before definition [use-before-def]
+ homeassistant/components/mqtt/__init__.py:403: error: Name "rendered_topic" is used before definition [use-before-def]
+ homeassistant/components/microsoft_face/__init__.py:323: error: Name "response" is used before definition [use-before-def]
cloud-init (https://github.com/canonical/cloud-init)
+ cloudinit/dmi.py:117: error: Name "cmd" is used before definition [use-before-def]
+ cloudinit/dmi.py:136: error: Name "cmd" is used before definition [use-before-def]
Diff from mypy_primer, showing the effect of this PR on open source code:
sphinx (https://github.com/sphinx-doc/sphinx)
+ sphinx/ext/autodoc/importer.py:110:48: error: Name "exc_on_importing" is used before definition [use-before-def]
+ sphinx/ext/autodoc/importer.py:112:19: error: Name "exc_on_importing" is used before definition [use-before-def]
+ sphinx/domains/std.py:902:66: error: Name "title" is used before definition [use-before-def]
+ sphinx/domains/std.py:905:61: error: Name "title" is used before definition [use-before-def]
+ sphinx/ext/doctest.py:130:66: error: Name "spec" is used before definition [use-before-def]
schemathesis (https://github.com/schemathesis/schemathesis)
+ src/schemathesis/runner/impl/core.py:357: error: Name "warnings" is used before definition [use-before-def]
urllib3 (https://github.com/urllib3/urllib3)
+ test/test_connection.py:60: error: Name "mock_log" is used before definition [use-before-def]
+ test/test_connection.py:75: error: Name "mock_log" is used before definition [use-before-def]
+ test/test_connection.py:135: error: Name "mock_log" is used before definition [use-before-def]
+ test/test_connection.py:169: error: Name "mock_log" is used before definition [use-before-def]
sympy (https://github.com/sympy/sympy)
+ sympy/core/cache.py:142: error: Name "SYMPY_CACHE_SIZE" is used before definition [use-before-def]
schema_salad (https://github.com/common-workflow-language/schema_salad)
+ schema_salad/ref_resolver.py:924:48: error: Name "key" is used before definition [use-before-def]
+ schema_salad/ref_resolver.py:1171:49: error: Name "sl" is used before definition [use-before-def]
cwltool (https://github.com/common-workflow-language/cwltool)
+ tests/test_toolargparse.py:179:46: error: Name "script" is used before definition [use-before-def]
paasta (https://github.com/yelp/paasta)
+ paasta_tools/utils.py:2825: error: Name "proctimer" is used before definition [use-before-def]
+ paasta_tools/frameworks/task_store.py:189: error: Name "data" is used before definition [use-before-def]
dulwich (https://github.com/dulwich/dulwich)
+ dulwich/client.py:783: error: Name "target" is used before definition [use-before-def]
+ dulwich/client.py:784: error: Name "target" is used before definition [use-before-def]
dragonchain (https://github.com/dragonchain/dragonchain)
+ dragonchain/contract_invoker/contract_invoker_service.py:86:70: error: Name "transaction" is used before definition [use-before-def]
+ dragonchain/lib/broadcast.py:62:20: error: Name "dcid" is used before definition [use-before-def]
+ dragonchain/contract_invoker/contract_invoker.py:79:58: error: Name "unique_id" is used before definition [use-before-def]
spark (https://github.com/apache/spark)
+ python/pyspark/pandas/namespace.py:159: error: Name "range" is used before definition [use-before-def]
tornado (https://github.com/tornadoweb/tornado)
+ tornado/tcpclient.py:330: error: Name "stream" is used before definition [use-before-def]
manticore (https://github.com/trailofbits/manticore)
+ manticore/core/smtlib/solver.py:865: error: Name "received_version" is used before definition [use-before-def]
+ manticore/wasm/structure.py:1330: error: Name "inst" is used before definition [use-before-def]
pandas (https://github.com/pandas-dev/pandas)
+ pandas/core/arrays/sparse/array.py:129: error: Name "Ellipsis" is used before definition [use-before-def]
core (https://github.com/home-assistant/core)
+ homeassistant/helpers/template.py:516: error: Name "template_render_thread" is used before definition [use-before-def]
+ homeassistant/helpers/check_config.py:115: error: Name "core_config" is used before definition [use-before-def]
+ homeassistant/helpers/collection.py:540: error: Name "data" is used before definition [use-before-def]
+ homeassistant/helpers/script.py:763: error: Name "idx" is used before definition [use-before-def]
+ homeassistant/components/ohmconnect/sensor.py:84: error: Name "url" is used before definition [use-before-def]
+ homeassistant/components/downloader/__init__.py:147: error: Name "url" is used before definition [use-before-def]
+ homeassistant/components/downloader/__init__.py:150: error: Name "url" is used before definition [use-before-def]
+ homeassistant/components/downloader/__init__.py:150: error: Name "filename" is used before definition [use-before-def]
+ homeassistant/components/downloader/__init__.py:154: error: Name "final_path" is used before definition [use-before-def]
+ homeassistant/components/downloader/__init__.py:155: error: Name "final_path" is used before definition [use-before-def]
+ homeassistant/components/downloader/__init__.py:160: error: Name "url" is used before definition [use-before-def]
+ homeassistant/components/downloader/__init__.py:160: error: Name "filename" is used before definition [use-before-def]
+ homeassistant/components/downloader/__init__.py:164: error: Name "final_path" is used before definition [use-before-def]
+ homeassistant/components/downloader/__init__.py:165: error: Name "final_path" is used before definition [use-before-def]
+ homeassistant/components/color_extractor/__init__.py:83: error: Name "image_type" is used before definition [use-before-def]
+ homeassistant/components/color_extractor/__init__.py:84: error: Name "image_reference" is used before definition [use-before-def]
+ homeassistant/components/xiaomi_miio/select.py:266: error: Name "value" is used before definition [use-before-def]
+ homeassistant/components/habitica/__init__.py:131: error: Name "element" is used before definition [use-before-def]
+ homeassistant/components/template/trigger_entity.py:181: error: Name "key" is used before definition [use-before-def]
+ homeassistant/components/roomba/braava.py:85: error: Name "split" is used before definition [use-before-def]
+ homeassistant/components/honeywell/climate.py:267: error: Name "temperature" is used before definition [use-before-def]
+ homeassistant/components/emoncms_history/__init__.py:61: error: Name "fullurl" is used before definition [use-before-def]
+ homeassistant/components/webostv/notify.py:55: error: Name "icon_path" is used before definition [use-before-def]
+ homeassistant/components/plex/server.py:638: error: Name "playlist_name" is used before definition [use-before-def]
+ homeassistant/components/plex/server.py:648: error: Name "library_name" is used before definition [use-before-def]
+ homeassistant/components/mqtt/mixins.py:433: error: Name "payload" is used before definition [use-before-def]
+ homeassistant/components/mqtt/__init__.py:403: error: Name "rendered_topic" is used before definition [use-before-def]
+ homeassistant/components/microsoft_face/__init__.py:323: error: Name "response" is used before definition [use-before-def]
pytest (https://github.com/pytest-dev/pytest)
+ src/_pytest/assertion/rewrite.py:965: error: Name "cond" is used before definition [use-before-def]
cloud-init (https://github.com/canonical/cloud-init)
+ cloudinit/dmi.py:117: error: Name "cmd" is used before definition [use-before-def]
+ cloudinit/dmi.py:136: error: Name "cmd" is used before definition [use-before-def]
I've formatted the primer output, so that it's a bit easier to follow the links here.
I believe we can't do much about most of the errors reported now.
I believe we can't do much about most of the errors reported now.
Just checked the output for Home-Assistant. Almost all errors are because of variables defined in inside a try block. For example
class SomeCls:
def some_unsafe_func(self) -> None: ...
try:
var = SomeCls()
var.some_unsafe_func()
except Exception:
print(var) # use-before-def
True, in most cases var could also be defined outside the try-block. However, evident by the number of errors, this rarely happens. I guess one reason might be that keeping it together is a bit easier to read but there might be others, too.
In the spirit of limiting false-positives for use-before-def, I would recommend to change that to partially-defined.
--
One other thing, every time I read the error code use-before-def something feels strange. Was used-before-def (use -> used) ever considered? That feels more natural to me. Since it hasn't been released yet, we should still be able to change it.
@ilinum Just wanted to agree with Marc, the only case where it should be use-before-def is when definition is the last (or only) statement nested within try (like in tornado btw, mypy found a real bug there). In other cases it should definitely be partially-defined.
Changed that error to report partially-defined. Let's see what mypy-primer says.
One other thing, every time I read the error code use-before-def something feels strange. Was used-before-def (use -> used) ever considered? That feels more natural to me. Since it hasn't been released yet, we should still be able to change it.
I've been thinking about changing the error codes as well. I opened #14226, we can discuss there.
Diff from mypy_primer, showing the effect of this PR on open source code:
spark (https://github.com/apache/spark)
+ python/pyspark/pandas/namespace.py:159: error: Name "range" is used before definition [use-before-def]
pandas (https://github.com/pandas-dev/pandas)
+ pandas/core/arrays/sparse/array.py:129: error: Name "Ellipsis" is used before definition [use-before-def]
pytest (https://github.com/pytest-dev/pytest)
+ src/_pytest/assertion/rewrite.py:965: error: Name "cond" is used before definition [use-before-def]
Diff from mypy_primer, showing the effect of this PR on open source code:
pandas (https://github.com/pandas-dev/pandas)
+ pandas/core/arrays/sparse/array.py:126: error: Name "Ellipsis" is used before definition [used-before-def]
kornia (https://github.com/kornia/kornia)
+ kornia/augmentation/container/utils.py:289: error: Name "_param" is used before definition [used-before-def]
+ kornia/augmentation/container/utils.py:299: error: Name "geo_param" is used before definition [used-before-def]
spark (https://github.com/apache/spark)
+ python/pyspark/pandas/namespace.py:159: error: Name "range" is used before definition [used-before-def]
pytest (https://github.com/pytest-dev/pytest)
+ src/_pytest/assertion/rewrite.py:965: error: Name "cond" is used before definition [used-before-def]
prefect (https://github.com/PrefectHQ/prefect)
+ src/prefect/plugins.py:59: error: Name "result" is used before definition [used-before-def]
Diff from mypy_primer, showing the effect of this PR on open source code:
pandas (https://github.com/pandas-dev/pandas)
+ pandas/core/arrays/sparse/array.py:126: error: Name "Ellipsis" is used before definition [used-before-def]
kornia (https://github.com/kornia/kornia)
+ kornia/augmentation/container/utils.py:289: error: Name "_param" is used before definition [used-before-def]
+ kornia/augmentation/container/utils.py:299: error: Name "geo_param" is used before definition [used-before-def]
spark (https://github.com/apache/spark)
+ python/pyspark/pandas/namespace.py:159: error: Name "range" is used before definition [used-before-def]
pytest (https://github.com/pytest-dev/pytest)
+ src/_pytest/assertion/rewrite.py:965: error: Name "cond" is used before definition [used-before-def]
prefect (https://github.com/PrefectHQ/prefect)
+ src/prefect/plugins.py:59: error: Name "result" is used before definition [used-before-def]
Diff from mypy_primer, showing the effect of this PR on open source code:
kornia (https://github.com/kornia/kornia)
+ kornia/augmentation/container/utils.py:289: error: Name "_param" is used before definition [used-before-def]
+ kornia/augmentation/container/utils.py:299: error: Name "geo_param" is used before definition [used-before-def]
spark (https://github.com/apache/spark)
+ python/pyspark/pandas/namespace.py:159: error: Name "range" is used before definition [used-before-def]
prefect (https://github.com/PrefectHQ/prefect)
+ src/prefect/plugins.py:59: error: Name "result" is used before definition [used-before-def]
@ilinum Great job, this looks almost ready to be merged! I think the error in pyspark is false positive (other three are real errors mypy found, which shows the importance of this check). We probably need to special case builtin name when you used at global and class scopes. They should be considered always defined there.
@ilinum Great job, this looks almost ready to be merged! I think the error in
pysparkis false positive (other three are real errors mypy found, which shows the importance of this check). We probably need to special case builtin name when you used at global and class scopes. They should be considered always defined there.
Yes, I've been staring at this and I'm not quite sure why the pyspark one is failing. When I try to repro by copying the file from pyspark, it works just fine (no error).
We have logic to handle exactly this (see refers_to_builtin). This logic gets triggered on my test case.
Does mypy primer run the actual config of the project? I'm wondering if they have some flags enabled that makes range not resolve to builtins.range.
There are also a ton of test cases to fix, so I'm working on that :)