Hello community,
here is the log from the commit of package python-flake8-debugger for
openSUSE:Leap:15.2 checked in at 2020-04-20 12:55:28
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Leap:15.2/python-flake8-debugger (Old)
and /work/SRC/openSUSE:Leap:15.2/.python-flake8-debugger.new.2738 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-flake8-debugger"
Mon Apr 20 12:55:28 2020 rev:2 rq:795490 version:3.2.1
Changes:
--------
---
/work/SRC/openSUSE:Leap:15.2/python-flake8-debugger/python-flake8-debugger.changes
2020-02-21 10:50:55.259113992 +0100
+++
/work/SRC/openSUSE:Leap:15.2/.python-flake8-debugger.new.2738/python-flake8-debugger.changes
2020-04-20 12:55:44.780752741 +0200
@@ -1,0 +2,6 @@
+Thu Apr 16 10:43:35 UTC 2020 - Tomáš Chvátal <[email protected]>
+
+- Update to 3.2.1:
+ * no changelog
+
+-------------------------------------------------------------------
Old:
----
flake8-debugger-3.1.0.tar.gz
New:
----
3.2.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-flake8-debugger.spec ++++++
--- /var/tmp/diff_new_pack.RjzsUJ/_old 2020-04-20 12:55:45.212753419 +0200
+++ /var/tmp/diff_new_pack.RjzsUJ/_new 2020-04-20 12:55:45.216753425 +0200
@@ -1,7 +1,7 @@
#
# spec file for package python-flake8-debugger
#
-# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2020 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -18,25 +18,22 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
Name: python-flake8-debugger
-Version: 3.1.0
+Version: 3.2.1
Release: 0
Summary: ipdb/pdb statement checker plugin for flake8
License: MIT
-Group: Development/Languages/Python
-Url: https://github.com/jbkahn/flake8-debugger
-Source:
https://files.pythonhosted.org/packages/source/f/flake8-debugger/flake8-debugger-%{version}.tar.gz
+URL: https://github.com/jbkahn/flake8-debugger
+Source:
https://github.com/JBKahn/flake8-debugger/archive/%{version}.tar.gz
Source1: LICENSE
-BuildRequires: %{python_module pytest-runner}
BuildRequires: %{python_module setuptools}
+BuildRequires: fdupes
BuildRequires: python-rpm-macros
+BuildArch: noarch
# SECTION test requirements
BuildRequires: %{python_module flake8 >= 1.5}
BuildRequires: %{python_module pycodestyle}
BuildRequires: %{python_module pytest}
# /SECTION
-BuildRequires: fdupes
-BuildArch: noarch
-
%python_subpackages
%description
@@ -44,7 +41,8 @@
%prep
%setup -q -n flake8-debugger-%{version}
-cp %{SOURCE1} LICENSE
+cp %{SOURCE1} .
+sed -i -e '/pytest-runner/d' setup.py
%build
%python_build
@@ -53,8 +51,11 @@
%python_install
%python_expand %fdupes %{buildroot}%{$python_sitelib}
+%check
+%pytest
+
%files %{python_files}
-%doc README.rst
+%doc README.md
%license LICENSE
%{python_sitelib}/*
++++++ flake8-debugger-3.1.0.tar.gz -> 3.2.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/flake8-debugger-3.1.0/.gitignore
new/flake8-debugger-3.2.1/.gitignore
--- old/flake8-debugger-3.1.0/.gitignore 1970-01-01 01:00:00.000000000
+0100
+++ new/flake8-debugger-3.2.1/.gitignore 2019-11-01 02:31:48.000000000
+0100
@@ -0,0 +1,4 @@
+*.egg-info
+*.pyc
+dist
+.mypy_cache
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/flake8-debugger-3.1.0/.travis.yml
new/flake8-debugger-3.2.1/.travis.yml
--- old/flake8-debugger-3.1.0/.travis.yml 1970-01-01 01:00:00.000000000
+0100
+++ new/flake8-debugger-3.2.1/.travis.yml 2019-11-01 02:31:48.000000000
+0100
@@ -0,0 +1,18 @@
+language: python
+python:
+ - "2.7"
+ - "3.6"
+ - "3.7"
+
+env:
+ matrix:
+ - FLAKE8_VERSION=""
+ - FLAKE8_VERSION="2.1"
+ - FLAKE8_VERSION="3.2.1"
+
+install:
+ - pip install pycodestyle
+ - if [[ -n "$FLAKE8_VERSION" ]]; then pip install flake8=="$FLAKE8_VERSION";
fi
+ - python setup.py install
+script:
+ - pytest
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/flake8-debugger-3.1.0/PKG-INFO
new/flake8-debugger-3.2.1/PKG-INFO
--- old/flake8-debugger-3.1.0/PKG-INFO 2018-02-11 18:21:27.000000000 +0100
+++ new/flake8-debugger-3.2.1/PKG-INFO 1970-01-01 01:00:00.000000000 +0100
@@ -1,100 +0,0 @@
-Metadata-Version: 1.1
-Name: flake8-debugger
-Version: 3.1.0
-Summary: ipdb/pdb statement checker plugin for flake8
-Home-page: https://github.com/jbkahn/flake8-debugger
-Author: Joseph Kahn
-Author-email: [email protected]
-License: MIT
-Description-Content-Type: UNKNOWN
-Description: Flake8 debugger plugin
- ==================
-
- Check for pdb;idbp imports and set traces, as well as `from
IPython.terminal.embed import InteractiveShellEmbed` and
`InteractiveShellEmbed()()`.
-
- This module provides a plugin for ``flake8``, the Python code checker.
-
-
- Installation
- ------------
-
- You can install or upgrade ``flake8-debugger`` with these commands::
-
- $ pip install flake8-debugger
- $ pip install --upgrade flake8-debugger
-
-
- Plugin for Flake8
- -----------------
-
- When both ``flake8 2.2`` and ``flake8-debugger`` are installed, the
plugin is
- available in ``flake8``::
-
- $ flake8 --version
- 2.0 (pep8: 1.4.5, flake8-debugger: 1.0, pyflakes: 0.6.1)
-
-
- Changes
- -------
-
- 3.1.0 - 2018-02-11
- ``````````````````
- * Add a framework classifier for use in pypi.org
- * Fix entry_point in setup.py leaving it off by default again
- * Detect __import__ debugger statements
- * Add support for `pudb` detection
-
- 3.0.0 - 2017-05-11
- ````````````````
- * fix the refactor of the detector in 2.0.0 that was removed from pypi.
- * fix a flake8 issue that had it turned off by default.
-
-
- 2.0.0 - 2016-09-19
- ````````````````
- * refactor detector
- * drop official support for python 2.6 and 3.3
-
-
- 1.4.0 - 2015-05-18
- ````````````````
- * refactor detector, run tests in python 2.6, 2.7 and 3.4 as well as
adding a check for InteractiveShellEmbed.
-
- 1.3.2 - 2014-11-04
- ````````````````
- * more tests, fix edge case and debugger identification.
-
- 1.3.1 - 2014-11-04
- ````````````````
- * more tests, a little refactoring and improvements in catching.
-
- 1.3 - 2014-11-04
- ````````````````
- * using ast instead of regular expressions
-
- 1.2 - 2014-06-30
- ````````````````
- * Added a few simple tests
-
- 1.1 - 2014-06-30
- ````````````````
- * First release
-
- 1.0 - 2014-06-30
- ````````````````
- * Whoops
-
-Keywords: flake8 debugger ipdb pdb
-Platform: UNKNOWN
-Classifier: Development Status :: 4 - Beta
-Classifier: Environment :: Console
-Classifier: Framework :: Flake8
-Classifier: Intended Audience :: Developers
-Classifier: License :: OSI Approved :: MIT License
-Classifier: Operating System :: OS Independent
-Classifier: Programming Language :: Python
-Classifier: Topic :: Software Development :: Libraries :: Python Modules
-Classifier: Topic :: Software Development :: Quality Assurance
-Classifier: Programming Language :: Python :: 2.7
-Classifier: Programming Language :: Python :: 3.4
-Classifier: Programming Language :: Python :: 3.5
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/flake8-debugger-3.1.0/README.md
new/flake8-debugger-3.2.1/README.md
--- old/flake8-debugger-3.1.0/README.md 1970-01-01 01:00:00.000000000 +0100
+++ new/flake8-debugger-3.2.1/README.md 2019-11-01 02:31:48.000000000 +0100
@@ -0,0 +1,81 @@
+Flake8 debugger plugin
+======================
+
+Check for pdb;idbp imports and set traces, as well as `from
IPython.terminal.embed import InteractiveShellEmbed` and
`InteractiveShellEmbed()()`.
+
+This module provides a plugin for ``flake8``, the Python code checker.
+
+
+Installation
+------------
+
+You can install or upgrade ``flake8-debugger`` with these commands::
+
+ $ pip install flake8-debugger
+ $ pip install --upgrade flake8-debugger
+
+
+Plugin for Flake8
+-----------------
+
+When both ``flake8 2.2`` and ``flake8-debugger`` are installed, the plugin is
+available in ``flake8``::
+
+ $ flake8 --version
+ 2.0 (pep8: 1.4.5, flake8-debugger: 1.0, pyflakes: 0.6.1)
+
+
+Changes
+-------
+
+##### 3.2.1 - 2019-10-31
+
+* Swapped back from poetry to setup.py :(....python ecosystem issues....
+
+##### 3.2.0 - 2019-10-15
+
+* Forgot to add `breakpoint` support to the last changelog entry as well as
fixing a bug introduced into that version that flagged `import builtins` as
noteworthy.
+
+
+##### 3.1.1 - 2019-10-12
+
+* Fix reading from stdin when it is closed (requires flake8 > 2.1).
+* Swapped to poetry from setup.py
+* Ran black on the repository
+
+##### 3.1.0 - 2018-02-11
+* Add a framework classifier for use in pypi.org
+* Fix entry_point in setup.py leaving it off by default again
+* Detect __import__ debugger statements
+* Add support for `pudb` detection
+
+##### 3.0.0 - 2017-05-11
+* fix the refactor of the detector in 2.0.0 that was removed from pypi.
+* fix a flake8 issue that had it turned off by default.
+
+
+##### 2.0.0 - 2016-09-19
+* refactor detector
+* drop official support for python 2.6 and 3.3
+
+
+##### 1.4.0 - 2015-05-18
+* refactor detector, run tests in python 2.6, 2.7 and 3.4 as well as adding a
check for InteractiveShellEmbed.
+
+##### 1.3.2 - 2014-11-04
+* more tests, fix edge case and debugger identification.
+
+##### 1.3.1 - 2014-11-04
+* more tests, a little refactoring and improvements in catching.
+
+##### 1.3 - 2014-11-04
+* using ast instead of regular expressions
+
+##### 1.2 - 2014-06-30
+* Added a few simple tests
+
+##### 1.1 - 2014-06-30
+* First release
+
+##### 1.0 - 2014-06-30
+* Whoops
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/flake8-debugger-3.1.0/README.rst
new/flake8-debugger-3.2.1/README.rst
--- old/flake8-debugger-3.1.0/README.rst 2018-02-11 18:21:19.000000000
+0100
+++ new/flake8-debugger-3.2.1/README.rst 1970-01-01 01:00:00.000000000
+0100
@@ -1,76 +0,0 @@
-Flake8 debugger plugin
-==================
-
-Check for pdb;idbp imports and set traces, as well as `from
IPython.terminal.embed import InteractiveShellEmbed` and
`InteractiveShellEmbed()()`.
-
-This module provides a plugin for ``flake8``, the Python code checker.
-
-
-Installation
-------------
-
-You can install or upgrade ``flake8-debugger`` with these commands::
-
- $ pip install flake8-debugger
- $ pip install --upgrade flake8-debugger
-
-
-Plugin for Flake8
------------------
-
-When both ``flake8 2.2`` and ``flake8-debugger`` are installed, the plugin is
-available in ``flake8``::
-
- $ flake8 --version
- 2.0 (pep8: 1.4.5, flake8-debugger: 1.0, pyflakes: 0.6.1)
-
-
-Changes
--------
-
-3.1.0 - 2018-02-11
-``````````````````
-* Add a framework classifier for use in pypi.org
-* Fix entry_point in setup.py leaving it off by default again
-* Detect __import__ debugger statements
-* Add support for `pudb` detection
-
-3.0.0 - 2017-05-11
-````````````````
-* fix the refactor of the detector in 2.0.0 that was removed from pypi.
-* fix a flake8 issue that had it turned off by default.
-
-
-2.0.0 - 2016-09-19
-````````````````
-* refactor detector
-* drop official support for python 2.6 and 3.3
-
-
-1.4.0 - 2015-05-18
-````````````````
-* refactor detector, run tests in python 2.6, 2.7 and 3.4 as well as adding a
check for InteractiveShellEmbed.
-
-1.3.2 - 2014-11-04
-````````````````
-* more tests, fix edge case and debugger identification.
-
-1.3.1 - 2014-11-04
-````````````````
-* more tests, a little refactoring and improvements in catching.
-
-1.3 - 2014-11-04
-````````````````
-* using ast instead of regular expressions
-
-1.2 - 2014-06-30
-````````````````
-* Added a few simple tests
-
-1.1 - 2014-06-30
-````````````````
-* First release
-
-1.0 - 2014-06-30
-````````````````
-* Whoops
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/flake8-debugger-3.1.0/flake8_debugger.egg-info/PKG-INFO
new/flake8-debugger-3.2.1/flake8_debugger.egg-info/PKG-INFO
--- old/flake8-debugger-3.1.0/flake8_debugger.egg-info/PKG-INFO 2018-02-11
18:21:27.000000000 +0100
+++ new/flake8-debugger-3.2.1/flake8_debugger.egg-info/PKG-INFO 1970-01-01
01:00:00.000000000 +0100
@@ -1,100 +0,0 @@
-Metadata-Version: 1.1
-Name: flake8-debugger
-Version: 3.1.0
-Summary: ipdb/pdb statement checker plugin for flake8
-Home-page: https://github.com/jbkahn/flake8-debugger
-Author: Joseph Kahn
-Author-email: [email protected]
-License: MIT
-Description-Content-Type: UNKNOWN
-Description: Flake8 debugger plugin
- ==================
-
- Check for pdb;idbp imports and set traces, as well as `from
IPython.terminal.embed import InteractiveShellEmbed` and
`InteractiveShellEmbed()()`.
-
- This module provides a plugin for ``flake8``, the Python code checker.
-
-
- Installation
- ------------
-
- You can install or upgrade ``flake8-debugger`` with these commands::
-
- $ pip install flake8-debugger
- $ pip install --upgrade flake8-debugger
-
-
- Plugin for Flake8
- -----------------
-
- When both ``flake8 2.2`` and ``flake8-debugger`` are installed, the
plugin is
- available in ``flake8``::
-
- $ flake8 --version
- 2.0 (pep8: 1.4.5, flake8-debugger: 1.0, pyflakes: 0.6.1)
-
-
- Changes
- -------
-
- 3.1.0 - 2018-02-11
- ``````````````````
- * Add a framework classifier for use in pypi.org
- * Fix entry_point in setup.py leaving it off by default again
- * Detect __import__ debugger statements
- * Add support for `pudb` detection
-
- 3.0.0 - 2017-05-11
- ````````````````
- * fix the refactor of the detector in 2.0.0 that was removed from pypi.
- * fix a flake8 issue that had it turned off by default.
-
-
- 2.0.0 - 2016-09-19
- ````````````````
- * refactor detector
- * drop official support for python 2.6 and 3.3
-
-
- 1.4.0 - 2015-05-18
- ````````````````
- * refactor detector, run tests in python 2.6, 2.7 and 3.4 as well as
adding a check for InteractiveShellEmbed.
-
- 1.3.2 - 2014-11-04
- ````````````````
- * more tests, fix edge case and debugger identification.
-
- 1.3.1 - 2014-11-04
- ````````````````
- * more tests, a little refactoring and improvements in catching.
-
- 1.3 - 2014-11-04
- ````````````````
- * using ast instead of regular expressions
-
- 1.2 - 2014-06-30
- ````````````````
- * Added a few simple tests
-
- 1.1 - 2014-06-30
- ````````````````
- * First release
-
- 1.0 - 2014-06-30
- ````````````````
- * Whoops
-
-Keywords: flake8 debugger ipdb pdb
-Platform: UNKNOWN
-Classifier: Development Status :: 4 - Beta
-Classifier: Environment :: Console
-Classifier: Framework :: Flake8
-Classifier: Intended Audience :: Developers
-Classifier: License :: OSI Approved :: MIT License
-Classifier: Operating System :: OS Independent
-Classifier: Programming Language :: Python
-Classifier: Topic :: Software Development :: Libraries :: Python Modules
-Classifier: Topic :: Software Development :: Quality Assurance
-Classifier: Programming Language :: Python :: 2.7
-Classifier: Programming Language :: Python :: 3.4
-Classifier: Programming Language :: Python :: 3.5
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/flake8-debugger-3.1.0/flake8_debugger.egg-info/SOURCES.txt
new/flake8-debugger-3.2.1/flake8_debugger.egg-info/SOURCES.txt
--- old/flake8-debugger-3.1.0/flake8_debugger.egg-info/SOURCES.txt
2018-02-11 18:21:27.000000000 +0100
+++ new/flake8-debugger-3.2.1/flake8_debugger.egg-info/SOURCES.txt
1970-01-01 01:00:00.000000000 +0100
@@ -1,11 +0,0 @@
-README.rst
-flake8_debugger.py
-setup.cfg
-setup.py
-flake8_debugger.egg-info/PKG-INFO
-flake8_debugger.egg-info/SOURCES.txt
-flake8_debugger.egg-info/dependency_links.txt
-flake8_debugger.egg-info/entry_points.txt
-flake8_debugger.egg-info/not-zip-safe
-flake8_debugger.egg-info/requires.txt
-flake8_debugger.egg-info/top_level.txt
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/flake8-debugger-3.1.0/flake8_debugger.egg-info/dependency_links.txt
new/flake8-debugger-3.2.1/flake8_debugger.egg-info/dependency_links.txt
--- old/flake8-debugger-3.1.0/flake8_debugger.egg-info/dependency_links.txt
2018-02-11 18:21:27.000000000 +0100
+++ new/flake8-debugger-3.2.1/flake8_debugger.egg-info/dependency_links.txt
1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/flake8-debugger-3.1.0/flake8_debugger.egg-info/entry_points.txt
new/flake8-debugger-3.2.1/flake8_debugger.egg-info/entry_points.txt
--- old/flake8-debugger-3.1.0/flake8_debugger.egg-info/entry_points.txt
2018-02-11 18:21:27.000000000 +0100
+++ new/flake8-debugger-3.2.1/flake8_debugger.egg-info/entry_points.txt
1970-01-01 01:00:00.000000000 +0100
@@ -1,3 +0,0 @@
-[flake8.extension]
-T100 = flake8_debugger:DebuggerChecker
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/flake8-debugger-3.1.0/flake8_debugger.egg-info/not-zip-safe
new/flake8-debugger-3.2.1/flake8_debugger.egg-info/not-zip-safe
--- old/flake8-debugger-3.1.0/flake8_debugger.egg-info/not-zip-safe
2018-02-11 17:41:50.000000000 +0100
+++ new/flake8-debugger-3.2.1/flake8_debugger.egg-info/not-zip-safe
1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/flake8-debugger-3.1.0/flake8_debugger.egg-info/requires.txt
new/flake8-debugger-3.2.1/flake8_debugger.egg-info/requires.txt
--- old/flake8-debugger-3.1.0/flake8_debugger.egg-info/requires.txt
2018-02-11 18:21:27.000000000 +0100
+++ new/flake8-debugger-3.2.1/flake8_debugger.egg-info/requires.txt
1970-01-01 01:00:00.000000000 +0100
@@ -1,2 +0,0 @@
-flake8>=1.5
-pycodestyle
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/flake8-debugger-3.1.0/flake8_debugger.egg-info/top_level.txt
new/flake8-debugger-3.2.1/flake8_debugger.egg-info/top_level.txt
--- old/flake8-debugger-3.1.0/flake8_debugger.egg-info/top_level.txt
2018-02-11 18:21:27.000000000 +0100
+++ new/flake8-debugger-3.2.1/flake8_debugger.egg-info/top_level.txt
1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-flake8_debugger
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/flake8-debugger-3.1.0/flake8_debugger.py
new/flake8-debugger-3.2.1/flake8_debugger.py
--- old/flake8-debugger-3.1.0/flake8_debugger.py 2018-02-11
18:21:19.000000000 +0100
+++ new/flake8-debugger-3.2.1/flake8_debugger.py 2019-11-01
02:31:48.000000000 +0100
@@ -1,22 +1,30 @@
"""Extension for flake8 that finds usage of the debugger."""
import ast
+import sys
from itertools import chain
import pycodestyle
+try:
+ from flake8.engine import pep8 as stdin_utils
+except ImportError:
+ from flake8 import utils as stdin_utils
-__version__ = '3.1.0'
+__version__ = "3.2.1"
-DEBUGGER_ERROR_CODE = 'T100'
+DEBUGGER_ERROR_CODE = "T100"
debuggers = {
- 'pdb': ['set_trace'],
- 'pudb': ['set_trace'],
- 'ipdb': ['set_trace', 'sset_trace'],
- 'IPython.terminal.embed': ['InteractiveShellEmbed'],
- 'IPython.frontend.terminal.embed': ['InteractiveShellEmbed'],
+ "pdb": ["set_trace"],
+ "pudb": ["set_trace"],
+ "ipdb": ["set_trace", "sset_trace"],
+ "IPython.terminal.embed": ["InteractiveShellEmbed"],
+ "IPython.frontend.terminal.embed": ["InteractiveShellEmbed"],
}
+if sys.version_info >= (3, 7):
+ debuggers["builtins"] = ["breakpoint"]
+
class DebuggerFinder(ast.NodeVisitor):
def __init__(self, *args, **kwargs):
@@ -30,25 +38,33 @@
self.debuggers_imported = {}
def visit_Call(self, node):
+ if sys.version_info >= (3, 7) and getattr(node.func, "id", None) ==
"breakpoint":
+ entry = self.debuggers_used.setdefault((node.lineno,
node.col_offset), [])
+ entry.append("{0} trace found: breakpoint
used".format(DEBUGGER_ERROR_CODE))
+
debugger_method_names =
list(chain(self.debuggers_traces_names.values(), *debuggers.values()))
is_debugger_function = getattr(node.func, "id", None) in
debugger_method_names
if is_debugger_function:
if node.func.id in self.debuggers_traces_names.values():
- debugger_method = next(item[0] for item in
self.debuggers_traces_names.items() if item[1] == node.func.id)
+ debugger_method = next(
+ item[0] for item in self.debuggers_traces_names.items() if
item[1] == node.func.id
+ )
entry = self.debuggers_used.setdefault((node.lineno,
node.col_offset), [])
if debugger_method == node.func.id:
- entry.append('{0} trace found: {1}
used'.format(DEBUGGER_ERROR_CODE, node.func.id))
+ entry.append("{0} trace found: {1}
used".format(DEBUGGER_ERROR_CODE, node.func.id))
else:
- entry.append('{0} trace found: {1} used as
{2}'.format(DEBUGGER_ERROR_CODE, debugger_method, node.func.id))
+ entry.append(
+ "{0} trace found: {1} used as
{2}".format(DEBUGGER_ERROR_CODE, debugger_method, node.func.id)
+ )
is_debugger_attribute = getattr(node.func, "attr", None) in
debugger_method_names
if is_debugger_attribute:
caller = getattr(node.func.value, "id", None)
entry = self.debuggers_used.setdefault((node.lineno,
node.col_offset), [])
if caller in self.debuggers_names.values():
- entry.append('{0} trace found: {1}.{2}
used'.format(DEBUGGER_ERROR_CODE, caller, node.func.attr))
+ entry.append("{0} trace found: {1}.{2}
used".format(DEBUGGER_ERROR_CODE, caller, node.func.attr))
else:
- entry.append('{0} trace found: {1}
used'.format(DEBUGGER_ERROR_CODE, node.func.attr))
+ entry.append("{0} trace found: {1}
used".format(DEBUGGER_ERROR_CODE, node.func.attr))
self.generic_visit(node)
def visit_Import(self, node):
@@ -57,11 +73,14 @@
if name_node.asname is not None:
self.debuggers_names[name_node.name] = name_node.asname
entry = self.debuggers_redefined.setdefault((node.lineno,
node.col_offset), [])
- entry.append('{0} import for {1} found as
{2}'.format(DEBUGGER_ERROR_CODE, name_node.name, name_node.asname))
- else:
+ entry.append(
+ "{0} import for {1} found as
{2}".format(DEBUGGER_ERROR_CODE, name_node.name, name_node.asname)
+ )
+ # Unlike the other imports, we don't want to consider all
builtin imports as worthy of flagging.
+ elif name_node.name != "builtins":
self.debuggers_names[name_node.name] = name_node.name
entry = self.debuggers_imported.setdefault((node.lineno,
node.col_offset), [])
- entry.append('{0} import for {1}
found'.format(DEBUGGER_ERROR_CODE, name_node.name))
+ entry.append("{0} import for {1}
found".format(DEBUGGER_ERROR_CODE, name_node.name))
def visit_ImportFrom(self, node):
if node.module in list(debuggers.keys()):
@@ -70,16 +89,20 @@
if name_node.asname is not None:
self.debuggers_traces_names[name_node.name] =
name_node.asname
entry =
self.debuggers_traces_redefined.setdefault((node.lineno, node.col_offset), [])
- entry.append('{0} import for {1} found as
{2}'.format(DEBUGGER_ERROR_CODE, name_node.name, name_node.asname))
+ entry.append(
+ "{0} import for {1} found as {2}".format(
+ DEBUGGER_ERROR_CODE, name_node.name,
name_node.asname
+ )
+ )
else:
self.debuggers_traces_names[name_node.name] =
name_node.name
entry =
self.debugger_traces_imported.setdefault((node.lineno, node.col_offset), [])
- entry.append('{0} import for {1}
found'.format(DEBUGGER_ERROR_CODE, name_node.name))
+ entry.append("{0} import for {1}
found".format(DEBUGGER_ERROR_CODE, name_node.name))
class DebuggerChecker(object):
options = None
- name = 'flake8-debugger'
+ name = "flake8-debugger"
version = __version__
def __init__(self, tree, filename):
@@ -90,7 +113,7 @@
def load_file(self):
if self.filename in ("stdin", "-", None):
self.filename = "stdin"
- self.lines = pycodestyle.stdin_get_value().splitlines(True)
+ self.lines = stdin_utils.stdin_get_value().splitlines(True)
else:
self.lines = pycodestyle.readlines(self.filename)
@@ -110,10 +133,10 @@
yield (error[0], error[1], message, DebuggerChecker)
for error, messages in chain(
- parser.debuggers_traces_redefined.items(),
- parser.debugger_traces_imported.items(),
- parser.debuggers_redefined.items(),
- parser.debuggers_imported.items(),
+ parser.debuggers_traces_redefined.items(),
+ parser.debugger_traces_imported.items(),
+ parser.debuggers_redefined.items(),
+ parser.debuggers_imported.items(),
):
if error not in parser.debuggers_used:
if not pycodestyle.noqa(self.lines[error[0] - 1]):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/flake8-debugger-3.1.0/pyproject.toml.bak
new/flake8-debugger-3.2.1/pyproject.toml.bak
--- old/flake8-debugger-3.1.0/pyproject.toml.bak 1970-01-01
01:00:00.000000000 +0100
+++ new/flake8-debugger-3.2.1/pyproject.toml.bak 2019-11-01
02:31:48.000000000 +0100
@@ -0,0 +1,76 @@
+[build-system]
+requires = ["poetry==0.12.10"]
+build-backend = "poetry.masonry.api"
+
+[tool.poetry]
+name = "flake8-debugger"
+version = "3.2.0"
+description = "ipdb/pdb statement checker plugin for flake8"
+readme = "README.md"
+
+license = "MIT"
+
+authors = [
+ "Joseph Kahn <[email protected]>"
+]
+
+repository = "https://github.com/jbkahn/flake8-debugger"
+homepage = "https://github.com/jbkahn/flake8-debugger"
+keywords = [
+ "flake8",
+ "plugin",
+ "linting",
+ "debugger",
+ "ipdb",
+ "code quality"
+]
+
+classifiers = [
+ 'Development Status :: 3 - Alpha',
+ 'Environment :: Console',
+ 'Framework :: Flake8',
+ 'Intended Audience :: Developers',
+ 'License :: OSI Approved :: MIT License',
+ 'Operating System :: OS Independent',
+ 'Programming Language :: Python',
+ 'Programming Language :: Python :: 2',
+ 'Programming Language :: Python :: 3',
+ 'Topic :: Software Development :: Libraries :: Python Modules',
+ 'Topic :: Software Development :: Quality Assurance',
+]
+
+
+include = ["pyproject.toml", "flake8_debugger.py"]
+
+[tool.poetry.plugins."flake8.extension"]
+T100 = "flake8_debugger:DebuggerChecker"
+
+[tool.poetry.dependencies]
+python = "^3.6 || ^3.7 || ^2.7"
+"flake8" = ">=2.1"
+six = "*"
+pycodestyle = "*"
+
+[tool.poetry.dev-dependencies]
+black = { version = "^19.3b0", python = "~3.6 || ~3.7" }
+pytest = "*"
+
+[tool.black]
+line-length = 120
+target-version = ['py36', 'py27']
+include = '\.pyi?$'
+exclude = '''
+/(
+ \.git
+ | \.hg
+ | \.mypy_cache
+ | \.tox
+ | \.venv
+ | venv
+ | _build
+ | buck-out
+ | build
+ | dist
+)/
+'''
+skip-numeric-underscore-normalization = true
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/flake8-debugger-3.1.0/setup.cfg
new/flake8-debugger-3.2.1/setup.cfg
--- old/flake8-debugger-3.1.0/setup.cfg 2018-02-11 18:21:27.000000000 +0100
+++ new/flake8-debugger-3.2.1/setup.cfg 2019-11-01 02:31:48.000000000 +0100
@@ -1,7 +1,2 @@
-[aliases]
-test = pytest
-
-[egg_info]
-tag_build =
-tag_date = 0
-
+[aliases]
+test=pytest
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/flake8-debugger-3.1.0/setup.py
new/flake8-debugger-3.2.1/setup.py
--- old/flake8-debugger-3.1.0/setup.py 2018-02-11 18:21:19.000000000 +0100
+++ new/flake8-debugger-3.2.1/setup.py 2019-11-01 02:31:48.000000000 +0100
@@ -1,61 +1,62 @@
-# coding: utf-8
+# coding: utf-8
-from __future__ import with_statement
-from setuptools import setup
+from __future__ import with_statement
+from setuptools import setup
-def get_version(fname='flake8_debugger.py'):
- with open(fname) as f:
- for line in f:
- if line.startswith('__version__'):
- return eval(line.split('=')[-1])
-
-
-def get_long_description():
- descr = []
- for fname in ('README.rst',):
- with open(fname) as f:
- descr.append(f.read())
- return '\n\n'.join(descr)
-
-
-install_requires = ['flake8>=1.5', 'pycodestyle']
-
-test_requires = ['pytest', 'flake8>=1.5', 'pycodestyle']
-
-setup(
- name='flake8-debugger',
- version=get_version(),
- description="ipdb/pdb statement checker plugin for flake8",
- long_description=get_long_description(),
- keywords='flake8 debugger ipdb pdb',
- author='Joseph Kahn',
- author_email='[email protected]',
- url='https://github.com/jbkahn/flake8-debugger',
- license='MIT',
- py_modules=['flake8_debugger'],
- zip_safe=False,
- entry_points={
- 'flake8.extension': [
- 'T100 = flake8_debugger:DebuggerChecker',
- ],
- },
- install_requires=install_requires,
- tests_require=test_requires,
- setup_requires=['pytest-runner'],
- test_suite="nose.collector",
- classifiers=[
- 'Development Status :: 4 - Beta',
- 'Environment :: Console',
- 'Framework :: Flake8',
- 'Intended Audience :: Developers',
- 'License :: OSI Approved :: MIT License',
- 'Operating System :: OS Independent',
- 'Programming Language :: Python',
- 'Topic :: Software Development :: Libraries :: Python Modules',
- 'Topic :: Software Development :: Quality Assurance',
- 'Programming Language :: Python :: 2.7',
- 'Programming Language :: Python :: 3.4',
- 'Programming Language :: Python :: 3.5',
- ],
-)
+def get_version(fname='flake8_debugger.py'):
+ with open(fname) as f:
+ for line in f:
+ if line.startswith('__version__'):
+ return eval(line.split('=')[-1])
+
+
+def get_long_description():
+ descr = []
+ for fname in ('README.md',):
+ with open(fname) as f:
+ descr.append(f.read())
+ return '\n\n'.join(descr)
+
+
+install_requires = ['flake8>=1.5', 'pycodestyle']
+
+test_requires = ['pytest', 'flake8>=1.5', 'pycodestyle']
+
+setup(
+ name='flake8-debugger',
+ version=get_version(),
+ description="ipdb/pdb statement checker plugin for flake8",
+ long_description=get_long_description(),
+ long_description_content_type='text/markdown',
+ keywords='flake8 debugger ipdb pdb',
+ author='Joseph Kahn',
+ author_email='[email protected]',
+ url='https://github.com/jbkahn/flake8-debugger',
+ license='MIT',
+ py_modules=['flake8_debugger'],
+ zip_safe=False,
+ entry_points={
+ 'flake8.extension': [
+ 'T100 = flake8_debugger:DebuggerChecker',
+ ],
+ },
+ install_requires=install_requires,
+ tests_require=test_requires,
+ setup_requires=['pytest-runner'],
+ test_suite="nose.collector",
+ classifiers=[
+ 'Development Status :: 4 - Beta',
+ 'Environment :: Console',
+ 'Framework :: Flake8',
+ 'Intended Audience :: Developers',
+ 'License :: OSI Approved :: MIT License',
+ 'Operating System :: OS Independent',
+ 'Programming Language :: Python',
+ 'Topic :: Software Development :: Libraries :: Python Modules',
+ 'Topic :: Software Development :: Quality Assurance',
+ 'Programming Language :: Python :: 2.7',
+ 'Programming Language :: Python :: 3.4',
+ 'Programming Language :: Python :: 3.5',
+ ],
+)
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/flake8-debugger-3.1.0/test_linter.py
new/flake8-debugger-3.2.1/test_linter.py
--- old/flake8-debugger-3.1.0/test_linter.py 1970-01-01 01:00:00.000000000
+0100
+++ new/flake8-debugger-3.2.1/test_linter.py 2019-11-01 02:31:48.000000000
+0100
@@ -0,0 +1,400 @@
+import pycodestyle
+
+from flake8_debugger import DebuggerChecker
+
+import pytest
+import sys
+
+
+class CaptureReport(pycodestyle.BaseReport):
+ """Collect the results of the checks."""
+
+ def __init__(self, options):
+ self._results = []
+ super(CaptureReport, self).__init__(options)
+
+ def error(self, line_number, offset, text, check):
+ """Store each error."""
+ code = super(CaptureReport, self).error(line_number, offset, text,
check)
+ if code:
+ record = {"line": line_number, "col": offset, "message": "{0}
{1}".format(code, text[5:])}
+ self._results.append(record)
+ return code
+
+
+class DebuggerTestStyleGuide(pycodestyle.StyleGuide):
+
+ logical_checks = []
+ physical_checks = []
+ ast_checks = [("debugger_usage", DebuggerChecker, ["tree", "filename",
"lines"])]
+ max_line_length = None
+ max_doc_length = None
+ hang_closing = False
+ verbose = False
+ benchmark_keys = {"files": 0, "physical lines": 0, "logical lines": 0}
+
+
+_debugger_test_style = DebuggerTestStyleGuide()
+
+
+def check_code_for_debugger_statements(code):
+ """Process code using pycodestyle Checker and return all errors."""
+ from tempfile import NamedTemporaryFile
+
+ test_file = NamedTemporaryFile(delete=False)
+ test_file.write(code.encode())
+ test_file.flush()
+ report = CaptureReport(options=_debugger_test_style)
+ lines = [line + "\n" for line in code.split("\n")]
+ checker = pycodestyle.Checker(filename=test_file.name, lines=lines,
options=_debugger_test_style, report=report)
+
+ checker.check_all()
+ return report._results
+
+
+class TestQA(object):
+ def test_catches_simple_debugger(self):
+ result = check_code_for_debugger_statements("from ipdb import
set_trace as r\nr()")
+
+ expected_result = [
+ {"line": 2, "message": "T100 trace found: set_trace used as r",
"col": 0},
+ {"line": 1, "message": "T100 import for set_trace found as r",
"col": 0},
+ ]
+
+ assert result == expected_result
+
+ def test_catches_simple_debugger_when_called_off_lib(self):
+ result = check_code_for_debugger_statements("import
ipdb\nipdb.set_trace()")
+
+ expected_result = [
+ {"line": 2, "message": "T100 trace found: ipdb.set_trace used",
"col": 0},
+ {"line": 1, "message": "T100 import for ipdb found", "col": 0},
+ ]
+
+ assert result == expected_result
+
+ def test_catches_simple_debugger_when_called_off_global(self):
+ result =
check_code_for_debugger_statements("__import__('ipdb').set_trace()")
+
+ expected_result = [{"line": 1, "message": "T100 trace found: set_trace
used", "col": 0}]
+
+ assert result == expected_result
+
+ @pytest.mark.skipif(True, reason="Not supported just yet")
+ def test_catches_simple_debugger_when_called_off_var(self):
+ result = check_code_for_debugger_statements("import ipdb\ntest =
ipdb.set_trace\ntest()")
+
+ expected_result = [
+ {"line": 1, "message": "T100 import for ipdb found", "col": 0},
+ {"line": 3, "message": "T100 trace found: ipdb.set_trace used",
"col": 0},
+ ]
+ assert result == expected_result
+
+
+class TestBreakpoint(object):
+ @pytest.mark.skipif(sys.version_info < (3, 7), reason="breakpoint builtin
introduced in 3.7")
+ def test_catches_breakpoint_call_for_python_3_7_and_above(self):
+ result = check_code_for_debugger_statements("breakpoint()")
+
+ expected_result = [{"line": 1, "message": "T100 trace found:
breakpoint used", "col": 0}]
+
+ assert result == expected_result
+
+ @pytest.mark.skipif(sys.version_info < (3, 7), reason="breakpoint builtin
introduced in 3.7")
+ def test_catches_breakpoint_import(self):
+ result = check_code_for_debugger_statements("from builtins import
breakpoint")
+
+ expected_result = [{"line": 1, "message": "T100 import for breakpoint
found", "col": 0}]
+
+ assert result == expected_result
+
+ @pytest.mark.skipif(sys.version_info < (3, 7), reason="breakpoint builtin
introduced in 3.7")
+ def test_allows_builtins_import(self):
+ result = check_code_for_debugger_statements("import builtins")
+
+ expected_result = []
+
+ assert result == expected_result
+
+ @pytest.mark.skipif(sys.version_info < (3, 7), reason="breakpoint builtin
introduced in 3.7")
+ def test_catches_breakpoint_usage_from_builtins(self):
+ result = check_code_for_debugger_statements("import
builtins\nbuiltins.breakpoint()")
+
+ expected_result = [{"col": 0, "line": 2, "message": "T100 trace found:
breakpoint used"}]
+
+ assert result == expected_result
+
+ @pytest.mark.skipif(sys.version_info < (3, 7), reason="breakpoint builtin
introduced in 3.7")
+ def test_catches_breakpoint_imported_as_other_name(self):
+ result = check_code_for_debugger_statements("from builtins import
breakpoint as b\nb()")
+
+ expected_result = [
+ {"line": 2, "message": "T100 trace found: breakpoint used as b",
"col": 0},
+ {"line": 1, "message": "T100 import for breakpoint found as b",
"col": 0},
+ ]
+
+ assert result == expected_result
+
+ @pytest.mark.skipif(sys.version_info >= (3, 7), reason="breakpoint builtin
introduced in 3.7")
+ def test_allows_breakpoint_call_for_python_below_3_7(self):
+ result = check_code_for_debugger_statements("breakpoint()")
+
+ expected_result = []
+
+ assert result == expected_result
+
+
+class TestNoQA(object):
+ @pytest.mark.skipif(sys.version_info < (2, 7), reason="Python 2.6 does not
support noqa")
+ def test_skip_import(self):
+ result = check_code_for_debugger_statements("from ipdb import
set_trace as r # noqa\nr()")
+
+ expected_result = [{"line": 2, "message": "T100 trace found: set_trace
used as r", "col": 0}]
+
+ assert result == expected_result
+
+ @pytest.mark.skipif(sys.version_info < (2, 7), reason="Python 2.6 does not
support noqa")
+ def test_skip_usage(self):
+ result = check_code_for_debugger_statements("from ipdb import
set_trace as r\nr() # noqa")
+
+ expected_result = [{"line": 1, "message": "T100 import for set_trace
found as r", "col": 0}]
+
+ assert result == expected_result
+
+ @pytest.mark.skipif(sys.version_info < (2, 7), reason="Python 2.6 does not
support noqa")
+ def test_skip_import_and_usage(self):
+ result = check_code_for_debugger_statements("from ipdb import
set_trace as r # noqa\nr() # noqa")
+
+ expected_result = []
+
+ assert result == expected_result
+
+
+class TestImportCases(object):
+ def test_import_multiple(self):
+ result = check_code_for_debugger_statements("import math, ipdb,
collections")
+ assert result == [{"col": 0, "line": 1, "message": "T100 import for
ipdb found"}]
+
+ def test_import(self):
+ result = check_code_for_debugger_statements("import pdb")
+ assert result == [{"col": 0, "line": 1, "message": "T100 import for
pdb found"}]
+
+ def test_import_interactive_shell_embed(self):
+ result = check_code_for_debugger_statements("from
IPython.terminal.embed import InteractiveShellEmbed")
+ assert result == [{"col": 0, "line": 1, "message": "T100 import for
InteractiveShellEmbed found"}]
+
+ def test_import_both_same_line(self):
+ result = check_code_for_debugger_statements("import pdb, ipdb")
+ result = sorted(result, key=lambda debugger: debugger["message"])
+ expected_result = [
+ {"col": 0, "line": 1, "message": "T100 import for ipdb found"},
+ {"col": 0, "line": 1, "message": "T100 import for pdb found"},
+ ]
+ assert result == expected_result
+
+ def test_import_math(self):
+ result = check_code_for_debugger_statements("import math")
+ assert result == []
+
+ def test_import_noqa(self):
+ result = check_code_for_debugger_statements("import ipdb # noqa")
+ assert result == []
+
+
+class TestModuleSetTraceCases(object):
+ def test_import_ipython_terminal_embed_use_InteractiveShellEmbed(self):
+ result = check_code_for_debugger_statements(
+ "from IPython.terminal.embed import InteractiveShellEmbed;
InteractiveShellEmbed()()"
+ )
+
+ expected_result = [
+ {"col": 58, "line": 1, "message": "T100 trace found:
InteractiveShellEmbed used"},
+ {"col": 0, "line": 1, "message": "T100 import for
InteractiveShellEmbed found"},
+ ]
+
+ try:
+ assert result == expected_result
+ except AssertionError:
+ for item in expected_result:
+ item["col"] = 0
+
+ assert result == expected_result
+
+ def test_import_ipdb_use_set_trace(self):
+ result = check_code_for_debugger_statements("import
ipdb;ipdb.set_trace();")
+
+ expected_result = [
+ {"col": 12, "line": 1, "message": "T100 trace found:
ipdb.set_trace used"},
+ {"col": 0, "line": 1, "message": "T100 import for ipdb found"},
+ ]
+
+ try:
+ assert result == expected_result
+ except AssertionError:
+ for item in expected_result:
+ item["col"] = 0
+
+ assert result == expected_result
+
+ def test_import_pdb_use_set_trace(self):
+ result = check_code_for_debugger_statements("import
pdb;pdb.set_trace();")
+
+ expected_result = [
+ {"col": 11, "line": 1, "message": "T100 trace found: pdb.set_trace
used"},
+ {"col": 0, "line": 1, "message": "T100 import for pdb found"},
+ ]
+
+ try:
+ assert result == expected_result
+ except AssertionError:
+ for item in expected_result:
+ item["col"] = 0
+
+ assert result == expected_result
+
+ def test_import_pdb_use_set_trace_twice(self):
+ result = check_code_for_debugger_statements("import
pdb;pdb.set_trace() and pdb.set_trace();")
+
+ expected_result = [
+ {"col": 11, "line": 1, "message": "T100 trace found: pdb.set_trace
used"},
+ {"col": 31, "line": 1, "message": "T100 trace found: pdb.set_trace
used"},
+ {"col": 0, "line": 1, "message": "T100 import for pdb found"},
+ ]
+
+ try:
+ assert result == expected_result
+ except AssertionError:
+ for item in expected_result:
+ item["col"] = 0
+
+ assert result == expected_result
+
+ def test_import_other_module_as_set_trace_and_use_it(self):
+ result = check_code_for_debugger_statements("from math import Max as
set_trace\nset_trace()")
+ assert result == []
+
+
+class TestImportAsCases(object):
+ def test_import_ipdb_as(self):
+ result = check_code_for_debugger_statements("import math, ipdb as sif,
collections")
+ assert result == [{"col": 0, "line": 1, "message": "T100 import for
ipdb found as sif"}]
+
+
+class TestModuleASSetTraceCases(object):
+ def test_import_ipdb_as_use_set_trace(self):
+ result = check_code_for_debugger_statements("import ipdb as
sif;sif.set_trace();")
+
+ expected_result = [
+ {"col": 19, "line": 1, "message": "T100 trace found: sif.set_trace
used"},
+ {"col": 0, "line": 1, "message": "T100 import for ipdb found as
sif"},
+ ]
+
+ try:
+ assert result == expected_result
+ except AssertionError:
+ for item in expected_result:
+ item["col"] = 0
+
+ assert result == expected_result
+
+
+class TestImportSetTraceCases(object):
+ def test_import_set_trace_ipdb(self):
+ result = check_code_for_debugger_statements("from ipdb import run,
set_trace;set_trace();")
+
+ expected_result = [
+ {"col": 32, "line": 1, "message": "T100 trace found: set_trace
used"},
+ {"col": 0, "line": 1, "message": "T100 import for set_trace
found"},
+ ]
+
+ try:
+ assert result == expected_result
+ except AssertionError:
+ for item in expected_result:
+ item["col"] = 0
+
+ assert result == expected_result
+
+ def test_import_set_trace_pdb(self):
+ result = check_code_for_debugger_statements("from pdb import
set_trace; set_trace();")
+
+ expected_result = [
+ {"col": 27, "line": 1, "message": "T100 trace found: set_trace
used"},
+ {"col": 0, "line": 1, "message": "T100 import for set_trace
found"},
+ ]
+
+ try:
+ assert result == expected_result
+ except AssertionError:
+ for item in expected_result:
+ item["col"] = 0
+
+ assert result == expected_result
+
+ def test_import_set_trace_ipdb_as_and_use(self):
+ result = check_code_for_debugger_statements("from ipdb import run,
set_trace as sif; sif();")
+
+ expected_result = [
+ {"col": 40, "line": 1, "message": "T100 trace found: set_trace
used as sif"},
+ {"col": 0, "line": 1, "message": "T100 import for set_trace found
as sif"},
+ ]
+
+ try:
+ assert result == expected_result
+ except AssertionError:
+ for item in expected_result:
+ item["col"] = 0
+
+ assert result == expected_result
+
+ def test_import_set_trace_ipdb_as_and_use_with_conjunction_and(self):
+ result = check_code_for_debugger_statements("from ipdb import run,
set_trace as sif; True and sif();")
+
+ expected_result = [
+ {"col": 49, "line": 1, "message": "T100 trace found: set_trace
used as sif"},
+ {"col": 0, "line": 1, "message": "T100 import for set_trace found
as sif"},
+ ]
+
+ try:
+ assert result == expected_result
+ except AssertionError:
+ for item in expected_result:
+ item["col"] = 0
+
+ assert result == expected_result
+
+ def test_import_set_trace_ipdb_as_and_use_with_conjunction_or(self):
+ result = check_code_for_debugger_statements("from ipdb import run,
set_trace as sif; True or sif();")
+
+ expected_result = [
+ {"col": 48, "line": 1, "message": "T100 trace found: set_trace
used as sif"},
+ {"col": 0, "line": 1, "message": "T100 import for set_trace found
as sif"},
+ ]
+
+ try:
+ assert result == expected_result
+ except AssertionError:
+ for item in expected_result:
+ item["col"] = 0
+
+ assert result == expected_result
+
+ def test_import_set_trace_ipdb_as_and_use_with_conjunction_or_noqa(self):
+ result = check_code_for_debugger_statements("from ipdb import run,
set_trace as sif; True or sif(); # noqa")
+ try:
+ assert result == []
+ except AssertionError:
+ pass
+
+ def
test_import_set_trace_ipdb_as_and_use_with_conjunction_or_noqa_import_only(self):
+ result = check_code_for_debugger_statements("from ipdb import run,
set_trace as sif # noqa\nTrue or sif()")
+
+ expected_result = [{"col": 8, "line": 2, "message": "T100 trace found:
set_trace used as sif"}]
+
+ try:
+ assert result == expected_result
+ except AssertionError:
+ for item in expected_result:
+ item["col"] = 0
+
+ assert result == expected_result