mypy icon indicating copy to clipboard operation
mypy copied to clipboard

Enable use-before-def error code by default

Open ilinum opened this issue 3 years ago • 35 comments

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.

ilinum avatar Nov 23 '22 00:11 ilinum

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) ...```

github-actions[bot] avatar Nov 23 '22 00:11 github-actions[bot]

Looks like a lot of mypy_primer failures are from partially_defined not recognizing imports. I'll try to make it handle imports soon.

ilinum avatar Nov 23 '22 00:11 ilinum

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]

github-actions[bot] avatar Nov 23 '22 18:11 github-actions[bot]

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?

AlexWaygood avatar Nov 23 '22 18:11 AlexWaygood

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]

github-actions[bot] avatar Nov 23 '22 18:11 github-actions[bot]

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?

Yep, good idea!

ilinum avatar Nov 23 '22 19:11 ilinum

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]

github-actions[bot] avatar Nov 23 '22 19:11 github-actions[bot]

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 :/

AlexWaygood avatar Nov 23 '22 20:11 AlexWaygood

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 :/

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.

ilinum avatar Nov 23 '22 21:11 ilinum

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

AlexWaygood avatar Nov 23 '22 21:11 AlexWaygood

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]

github-actions[bot] avatar Nov 23 '22 21:11 github-actions[bot]

#14175 has the fixes from this PR but doesn't enable use-before-def by default.

ilinum avatar Nov 23 '22 21:11 ilinum

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

  1. Issues with try/except (should be fixed by #14114).
  2. Loops that execute different code on first iteration (example).
  3. A version of the loop thing above but the variable is used in else, not in for (example).
  4. 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?

ilinum avatar Nov 23 '22 22:11 ilinum

#14176 moves the false positives from (2) and (3) to partially defined check.

ilinum avatar Nov 23 '22 22:11 ilinum

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.

ilevkivskyi avatar Nov 23 '22 22:11 ilevkivskyi

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]

github-actions[bot] avatar Nov 25 '22 21:11 github-actions[bot]

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?

ilevkivskyi avatar Nov 27 '22 19:11 ilevkivskyi

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]

github-actions[bot] avatar Nov 27 '22 23:11 github-actions[bot]

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]

github-actions[bot] avatar Nov 29 '22 21:11 github-actions[bot]

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]

github-actions[bot] avatar Nov 29 '22 22:11 github-actions[bot]

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.

ilinum avatar Nov 29 '22 22:11 ilinum

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.

cdce8p avatar Nov 30 '22 07:11 cdce8p

@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.

ilevkivskyi avatar Nov 30 '22 09:11 ilevkivskyi

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.

ilinum avatar Nov 30 '22 17:11 ilinum

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]

github-actions[bot] avatar Nov 30 '22 17:11 github-actions[bot]

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]

github-actions[bot] avatar Dec 17 '22 00:12 github-actions[bot]

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]

github-actions[bot] avatar Dec 17 '22 02:12 github-actions[bot]

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]

github-actions[bot] avatar Dec 19 '22 17:12 github-actions[bot]

@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.

ilevkivskyi avatar Dec 24 '22 12:12 ilevkivskyi

@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.

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

ilinum avatar Dec 27 '22 00:12 ilinum