Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-flake8-comprehensions for
openSUSE:Factory checked in at 2023-04-13 15:30:49
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-flake8-comprehensions (Old)
and /work/SRC/openSUSE:Factory/.python-flake8-comprehensions.new.19717
(New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-flake8-comprehensions"
Thu Apr 13 15:30:49 2023 rev:10 rq:1079170 version:3.12.0
Changes:
--------
---
/work/SRC/openSUSE:Factory/python-flake8-comprehensions/python-flake8-comprehensions.changes
2023-03-21 17:44:58.250817688 +0100
+++
/work/SRC/openSUSE:Factory/.python-flake8-comprehensions.new.19717/python-flake8-comprehensions.changes
2023-04-13 15:30:49.775762514 +0200
@@ -1,0 +2,9 @@
+Thu Apr 13 12:27:04 UTC 2023 - Dirk Müller <[email protected]>
+
+- update to 3.12.0:
+ * Add rule C418 to check for calls passing a dict literal or
+ dict comprehension to ``dict()``.
+ * Add rule C419 to check for calls passing a list comprehension
+ to ``any()``/``all()``.
+
+-------------------------------------------------------------------
Old:
----
3.11.1.tar.gz
New:
----
3.12.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-flake8-comprehensions.spec ++++++
--- /var/tmp/diff_new_pack.rmxl14/_old 2023-04-13 15:30:50.339765746 +0200
+++ /var/tmp/diff_new_pack.rmxl14/_new 2023-04-13 15:30:50.343765769 +0200
@@ -18,7 +18,7 @@
%define skip_python2 1
Name: python-flake8-comprehensions
-Version: 3.11.1
+Version: 3.12.0
Release: 0
Summary: A flake8 plugin to help you write better list/set/dict
comprehensions
License: ISC
++++++ 3.11.1.tar.gz -> 3.12.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/flake8-comprehensions-3.11.1/.pre-commit-config.yaml
new/flake8-comprehensions-3.12.0/.pre-commit-config.yaml
--- old/flake8-comprehensions-3.11.1/.pre-commit-config.yaml 2023-03-21
15:28:53.000000000 +0100
+++ new/flake8-comprehensions-3.12.0/.pre-commit-config.yaml 2023-04-13
11:27:27.000000000 +0200
@@ -23,6 +23,10 @@
- id: setup-cfg-fmt
args:
- --include-version-classifiers
+- repo: https://github.com/tox-dev/tox-ini-fmt
+ rev: 1.3.0
+ hooks:
+ - id: tox-ini-fmt
- repo: https://github.com/rstcheck/rstcheck
rev: v6.1.2
hooks:
@@ -35,7 +39,7 @@
- id: pyupgrade
args: [--py37-plus]
- repo: https://github.com/psf/black
- rev: 23.1.0
+ rev: 23.3.0
hooks:
- id: black
- repo: https://github.com/adamchainz/blacken-docs
@@ -64,6 +68,6 @@
- flake8-tidy-imports
- flake8-typing-imports
- repo: https://github.com/pre-commit/mirrors-mypy
- rev: v1.1.1
+ rev: v1.2.0
hooks:
- id: mypy
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/flake8-comprehensions-3.11.1/CHANGELOG.rst
new/flake8-comprehensions-3.12.0/CHANGELOG.rst
--- old/flake8-comprehensions-3.11.1/CHANGELOG.rst 2023-03-21
15:28:53.000000000 +0100
+++ new/flake8-comprehensions-3.12.0/CHANGELOG.rst 2023-04-13
11:27:27.000000000 +0200
@@ -2,6 +2,13 @@
Changelog
=========
+3.12.0 (2023-04-13)
+-------------------
+
+* Add rule C418 to check for calls passing a dict literal or dict
comprehension to ``dict()``.
+
+* Add rule C419 to check for calls passing a list comprehension to
``any()``/``all()``.
+
3.11.1 (2023-03-21)
-------------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/flake8-comprehensions-3.11.1/README.rst
new/flake8-comprehensions-3.12.0/README.rst
--- old/flake8-comprehensions-3.11.1/README.rst 2023-03-21 15:28:53.000000000
+0100
+++ new/flake8-comprehensions-3.12.0/README.rst 2023-04-13 11:27:27.000000000
+0200
@@ -113,7 +113,7 @@
Rules:
* C409 Unnecessary ``<list/tuple>`` passed to tuple() - ``<advice>``.
-* C410 Unnecessary ``list passed to list() - ``<advice>``.
+* C410 Unnecessary list passed to list() - ``<advice>``.
Where ``<advice>`` is either:
@@ -207,3 +207,23 @@
* Rewrite ``list(map(lambda num: num * 2, nums))`` to ``[num * 2 for num in
nums]``
* Rewrite ``set(map(lambda num: num % 2 == 0, nums))`` to ``{num % 2 == 0 for
num in nums}``
* Rewrite ``dict(map(lambda v: (v, v ** 2), values))`` to ``{v : v ** 2 for v
in values}``
+
+C418: Unnecessary ``<dict/dict comprehension>`` passed to dict() - remove the
outer call to dict()
+--------------------------------------------------------------------------------------------------
+
+It's unnecessary to use a ``dict`` around a dict literal or dict
comprehension, since either syntax already constructs a dict.
+For example:
+
+* Rewrite ``dict({})`` as ``{}``
+* Rewrite ``dict({"a": 1})`` as ``{"a": 1}``
+
+C419 Unnecessary list comprehension in ``<any/all>``\() prevents
short-circuiting - rewrite as a generator.
+-----------------------------------------------------------------------------------------------------------
+
+Using a list comprehension inside a call to ``any()``/``all()`` prevents
short-circuiting when a ``True`` / ``False`` value is found.
+The whole list will be constructed before calling ``any()``/``all()``,
potentially wasting work.part-way.
+Rewrite to use a generator expression, which can stop part way.
+For example:
+
+* Rewrite ``all([condition(x) for x in iterable])`` as ``all(condition(x) for
x in iterable)``
+* Rewrite ``any([condition(x) for x in iterable])`` as ``any(condition(x) for
x in iterable)``
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/flake8-comprehensions-3.11.1/requirements/py310.txt
new/flake8-comprehensions-3.12.0/requirements/py310.txt
--- old/flake8-comprehensions-3.11.1/requirements/py310.txt 2023-03-21
15:28:53.000000000 +0100
+++ new/flake8-comprehensions-3.12.0/requirements/py310.txt 2023-04-13
11:27:27.000000000 +0200
@@ -8,9 +8,9 @@
--hash=sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836 \
--hash=sha256:c9227bfc2f01993c03f68db37d1d15c9690188323c067c641f1a35ca58185f99
# via pytest
-exceptiongroup==1.1.0 \
-
--hash=sha256:327cbda3da756e2de031a3107b81ab7b3770a602c4d16ca618298c526f4bec1e \
-
--hash=sha256:bcb67d800a4497e1b404c2dd44fca47d3b7a5e5433dbab67f96c1a685cdfdf23
+exceptiongroup==1.1.1 \
+
--hash=sha256:232c37c63e4f682982c8b6459f33a8981039e5fb8756b2074364e5055c498c9e \
+
--hash=sha256:d484c3090ba2889ae2928419117447a14daf3c1231d5e30d0aae34f354f01785
# via pytest
flake8==6.0.0 \
--hash=sha256:3833794e27ff64ea4e9cf5d410082a8b97ff1a06c16aa3d2027339cd0f1195c7 \
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/flake8-comprehensions-3.11.1/requirements/py37.txt
new/flake8-comprehensions-3.12.0/requirements/py37.txt
--- old/flake8-comprehensions-3.11.1/requirements/py37.txt 2023-03-21
15:28:53.000000000 +0100
+++ new/flake8-comprehensions-3.12.0/requirements/py37.txt 2023-04-13
11:27:27.000000000 +0200
@@ -8,9 +8,9 @@
--hash=sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836 \
--hash=sha256:c9227bfc2f01993c03f68db37d1d15c9690188323c067c641f1a35ca58185f99
# via pytest
-exceptiongroup==1.1.0 \
-
--hash=sha256:327cbda3da756e2de031a3107b81ab7b3770a602c4d16ca618298c526f4bec1e \
-
--hash=sha256:bcb67d800a4497e1b404c2dd44fca47d3b7a5e5433dbab67f96c1a685cdfdf23
+exceptiongroup==1.1.1 \
+
--hash=sha256:232c37c63e4f682982c8b6459f33a8981039e5fb8756b2074364e5055c498c9e \
+
--hash=sha256:d484c3090ba2889ae2928419117447a14daf3c1231d5e30d0aae34f354f01785
# via pytest
flake8==5.0.4 \
--hash=sha256:6fbe320aad8d6b95cec8b8e47bc933004678dc63095be98528b7bdd2a9f510db \
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/flake8-comprehensions-3.11.1/requirements/py38.txt
new/flake8-comprehensions-3.12.0/requirements/py38.txt
--- old/flake8-comprehensions-3.11.1/requirements/py38.txt 2023-03-21
15:28:53.000000000 +0100
+++ new/flake8-comprehensions-3.12.0/requirements/py38.txt 2023-04-13
11:27:27.000000000 +0200
@@ -8,17 +8,17 @@
--hash=sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836 \
--hash=sha256:c9227bfc2f01993c03f68db37d1d15c9690188323c067c641f1a35ca58185f99
# via pytest
-exceptiongroup==1.1.0 \
-
--hash=sha256:327cbda3da756e2de031a3107b81ab7b3770a602c4d16ca618298c526f4bec1e \
-
--hash=sha256:bcb67d800a4497e1b404c2dd44fca47d3b7a5e5433dbab67f96c1a685cdfdf23
+exceptiongroup==1.1.1 \
+
--hash=sha256:232c37c63e4f682982c8b6459f33a8981039e5fb8756b2074364e5055c498c9e \
+
--hash=sha256:d484c3090ba2889ae2928419117447a14daf3c1231d5e30d0aae34f354f01785
# via pytest
flake8==6.0.0 \
--hash=sha256:3833794e27ff64ea4e9cf5d410082a8b97ff1a06c16aa3d2027339cd0f1195c7 \
--hash=sha256:c61007e76655af75e6785a931f452915b371dc48f56efd765247c8fe68f2b181
# via pytest-flake8-path
-importlib-metadata==6.0.0 \
-
--hash=sha256:7efb448ec9a5e313a57655d35aa54cd3e01b7e1fbcf72dce1bf06119420f5bad \
-
--hash=sha256:e354bedeb60efa6affdcc8ae121b73544a7aa74156d047311948f6d711cd378d
+importlib-metadata==6.2.0 \
+
--hash=sha256:8388b74023a138c605fddd0d47cb81dd706232569f56c9aca7d9c7fdb54caeba \
+
--hash=sha256:9127aad2f49d7203e7112098c12b92e4fd1061ccd18548cdfdc49171a8c073cc
# via pytest-randomly
iniconfig==2.0.0 \
--hash=sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3 \
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/flake8-comprehensions-3.11.1/requirements/py39.txt
new/flake8-comprehensions-3.12.0/requirements/py39.txt
--- old/flake8-comprehensions-3.11.1/requirements/py39.txt 2023-03-21
15:28:53.000000000 +0100
+++ new/flake8-comprehensions-3.12.0/requirements/py39.txt 2023-04-13
11:27:27.000000000 +0200
@@ -8,17 +8,17 @@
--hash=sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836 \
--hash=sha256:c9227bfc2f01993c03f68db37d1d15c9690188323c067c641f1a35ca58185f99
# via pytest
-exceptiongroup==1.1.0 \
-
--hash=sha256:327cbda3da756e2de031a3107b81ab7b3770a602c4d16ca618298c526f4bec1e \
-
--hash=sha256:bcb67d800a4497e1b404c2dd44fca47d3b7a5e5433dbab67f96c1a685cdfdf23
+exceptiongroup==1.1.1 \
+
--hash=sha256:232c37c63e4f682982c8b6459f33a8981039e5fb8756b2074364e5055c498c9e \
+
--hash=sha256:d484c3090ba2889ae2928419117447a14daf3c1231d5e30d0aae34f354f01785
# via pytest
flake8==6.0.0 \
--hash=sha256:3833794e27ff64ea4e9cf5d410082a8b97ff1a06c16aa3d2027339cd0f1195c7 \
--hash=sha256:c61007e76655af75e6785a931f452915b371dc48f56efd765247c8fe68f2b181
# via pytest-flake8-path
-importlib-metadata==6.0.0 \
-
--hash=sha256:7efb448ec9a5e313a57655d35aa54cd3e01b7e1fbcf72dce1bf06119420f5bad \
-
--hash=sha256:e354bedeb60efa6affdcc8ae121b73544a7aa74156d047311948f6d711cd378d
+importlib-metadata==6.2.0 \
+
--hash=sha256:8388b74023a138c605fddd0d47cb81dd706232569f56c9aca7d9c7fdb54caeba \
+
--hash=sha256:9127aad2f49d7203e7112098c12b92e4fd1061ccd18548cdfdc49171a8c073cc
# via pytest-randomly
iniconfig==2.0.0 \
--hash=sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3 \
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/flake8-comprehensions-3.11.1/setup.cfg
new/flake8-comprehensions-3.12.0/setup.cfg
--- old/flake8-comprehensions-3.11.1/setup.cfg 2023-03-21 15:28:53.000000000
+0100
+++ new/flake8-comprehensions-3.12.0/setup.cfg 2023-04-13 11:27:27.000000000
+0200
@@ -1,6 +1,6 @@
[metadata]
name = flake8_comprehensions
-version = 3.11.1
+version = 3.12.0
description = A flake8 plugin to help you write better list/set/dict
comprehensions.
long_description = file: README.rst
long_description_content_type = text/x-rst
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/flake8-comprehensions-3.11.1/src/flake8_comprehensions/__init__.py
new/flake8-comprehensions-3.12.0/src/flake8_comprehensions/__init__.py
--- old/flake8-comprehensions-3.11.1/src/flake8_comprehensions/__init__.py
2023-03-21 15:28:53.000000000 +0100
+++ new/flake8-comprehensions-3.12.0/src/flake8_comprehensions/__init__.py
2023-04-13 11:27:27.000000000 +0200
@@ -43,6 +43,14 @@
"C415": "C415 Unnecessary subscript reversal of iterable within
{func}().",
"C416": "C416 Unnecessary {type} comprehension - rewrite using
{type}().",
"C417": "C417 Unnecessary use of map - use a {comp} instead.",
+ "C418": (
+ "C418 Unnecessary {type} passed to dict() - "
+ + "remove the outer call to dict()."
+ ),
+ "C419": (
+ "C419 Unnecessary list comprehension passed to {func}() prevents "
+ + "short-circuiting - rewrite as a generator."
+ ),
}
def run(self) -> Generator[tuple[int, int, str, type[Any]], None, None]:
@@ -89,13 +97,19 @@
elif (
num_positional_args == 1
and isinstance(node.args[0], ast.ListComp)
- and node.func.id in ("list", "set")
+ and node.func.id in ("list", "set", "any", "all")
):
- msg_key = {"list": "C411", "set": "C403"}[node.func.id]
+ msg_key = {
+ "list": "C411",
+ "set": "C403",
+ "any": "C419",
+ "all": "C419",
+ }[node.func.id]
+ msg = self.messages[msg_key].format(func=node.func.id)
yield (
node.lineno,
node.col_offset,
- self.messages[msg_key],
+ msg,
type(self),
)
@@ -117,6 +131,23 @@
type(self),
)
+ elif (
+ num_positional_args == 1
+ and num_keyword_args == 0
+ and isinstance(node.args[0], (ast.Dict, ast.DictComp))
+ and node.func.id == "dict"
+ ):
+ if isinstance(node.args[0], ast.Dict):
+ type_ = "dict"
+ else:
+ type_ = "dict comprehension"
+ yield (
+ node.lineno,
+ node.col_offset,
+ self.messages["C418"].format(type=type_),
+ type(self),
+ )
+
elif (
num_positional_args == 1
and isinstance(node.args[0], (ast.Tuple, ast.List))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/flake8-comprehensions-3.11.1/tests/test_flake8_comprehensions.py
new/flake8-comprehensions-3.12.0/tests/test_flake8_comprehensions.py
--- old/flake8-comprehensions-3.11.1/tests/test_flake8_comprehensions.py
2023-03-21 15:28:53.000000000 +0100
+++ new/flake8-comprehensions-3.12.0/tests/test_flake8_comprehensions.py
2023-04-13 11:27:27.000000000 +0200
@@ -893,3 +893,86 @@
(flake8_path / "example.py").write_text(dedent(code))
result = flake8_path.run_flake8()
assert result.out_lines == failures
+
+
[email protected](
+ "code",
+ [
+ "dict({}, a=1)",
+ "dict({x: 1 for x in range(1)}, a=1)",
+ ],
+)
+def test_C418_pass(code, flake8_path):
+ (flake8_path / "example.py").write_text(dedent(code))
+ result = flake8_path.run_flake8()
+ assert result.out_lines == []
+
+
[email protected](
+ "code,failures",
+ [
+ (
+ "dict({})",
+ [
+ "./example.py:1:1: C418 Unnecessary dict passed to dict() - "
+ + "remove the outer call to dict()."
+ ],
+ ),
+ (
+ "dict({'a': 1})",
+ [
+ "./example.py:1:1: C418 Unnecessary dict passed to dict() - "
+ + "remove the outer call to dict()."
+ ],
+ ),
+ (
+ "dict({'x': 1 for x in range(10)})",
+ [
+ "./example.py:1:1: C418 Unnecessary dict comprehension passed "
+ + "to dict() - remove the outer call to dict()."
+ ],
+ ),
+ ],
+)
+def test_C418_fail(code, failures, flake8_path):
+ (flake8_path / "example.py").write_text(dedent(code))
+ result = flake8_path.run_flake8()
+ assert result.out_lines == failures
+
+
[email protected](
+ "code",
+ [
+ "any(num == 3 for num in range(5))",
+ "all(num == 3 for num in range(5))",
+ ],
+)
+def test_C419_pass(code, flake8_path):
+ (flake8_path / "example.py").write_text(dedent(code))
+ result = flake8_path.run_flake8()
+ assert result.out_lines == []
+
+
[email protected](
+ "code,failures",
+ [
+ (
+ "any([num == 3 for num in range(5)])",
+ [
+ "./example.py:1:1: C419 Unnecessary list comprehension passed "
+ + "to any() prevents short-circuiting - rewrite as a
generator."
+ ],
+ ),
+ (
+ "all([num == 3 for num in range(5)])",
+ [
+ "./example.py:1:1: C419 Unnecessary list comprehension passed "
+ + "to all() prevents short-circuiting - rewrite as a
generator."
+ ],
+ ),
+ ],
+)
+def test_C419_fail(code, failures, flake8_path):
+ (flake8_path / "example.py").write_text(dedent(code))
+ result = flake8_path.run_flake8()
+ assert result.out_lines == failures
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/flake8-comprehensions-3.11.1/tox.ini
new/flake8-comprehensions-3.12.0/tox.ini
--- old/flake8-comprehensions-3.11.1/tox.ini 2023-03-21 15:28:53.000000000
+0100
+++ new/flake8-comprehensions-3.12.0/tox.ini 2023-04-13 11:27:27.000000000
+0200
@@ -1,14 +1,17 @@
[tox]
-envlist =
- py{37,38,39,310,311}
+requires =
+ tox>=4.2
+env_list =
+ py{311, 310, 39, 38, 37}
[testenv]
+deps =
+ -r requirements/{envname}.txt
+set_env =
+ PYTHONDEVMODE = 1
commands =
- python \
- -W error::ResourceWarning \
- -W error::DeprecationWarning \
- -W error::PendingDeprecationWarning \
- -m pytest {posargs:tests}
-deps = -r requirements/{envname}.txt
-setenv =
- PYTHONDEVMODE=1
+ python \
+ -W error::ResourceWarning \
+ -W error::DeprecationWarning \
+ -W error::PendingDeprecationWarning \
+ -m pytest {posargs:tests}