14
0
forked from pool/python-pylint

Accepting request 828459 from home:stroeder:branches:devel:languages:python

Update to 2.6.0

OBS-URL: https://build.opensuse.org/request/show/828459
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-pylint?expand=0&rev=114
This commit is contained in:
Tomáš Chvátal
2020-08-24 18:47:24 +00:00
committed by Git OBS Bridge
parent 59ee9776a7
commit ddb1e8240f
5 changed files with 24 additions and 444 deletions

View File

@@ -1,436 +0,0 @@
From bc0a82a2104f063bf2b9d74406de4b7be0880938 Mon Sep 17 00:00:00 2001
From: Damien Baty <damien.baty@polyconseil.fr>
Date: Sun, 5 Jul 2020 23:06:04 +0200
Subject: [PATCH 1/3] Support both isort 4 and isort 5
The API of isort 5 (released on 2020-07-04) is completely different.
We must still support isort 4 because isort 5 dropped the
compatibility with Python 3.5, which pylint still supports.
Fix #3722.
---
ChangeLog | 4 +++
pylint/__pkginfo__.py | 2 +-
pylint/checkers/imports.py | 8 +++---
pylint/utils/__init__.py | 2 ++
pylint/utils/utils.py | 31 +++++++++++++++++++++++
tests/functional/w/wrong_import_order.txt | 6 ++---
tests/test_functional.py | 5 ++++
tox.ini | 4 ++-
8 files changed, 52 insertions(+), 10 deletions(-)
--- a/ChangeLog
+++ b/ChangeLog
@@ -40,6 +40,10 @@ Release date: 2020-06-8
Close #3646
+* Support both isort 4 and isort 5.
+
+ Close #3722
+
What's New in Pylint 2.5.2?
===========================
--- a/pylint/__pkginfo__.py
+++ b/pylint/__pkginfo__.py
@@ -37,7 +37,7 @@ if dev_version is not None:
install_requires = [
"astroid>=2.4.0,<=2.5",
- "isort>=4.2.5,<5",
+ "isort>=4.2.5,<6",
"mccabe>=0.6,<0.7",
"toml>=0.7.1",
]
--- a/pylint/checkers/imports.py
+++ b/pylint/checkers/imports.py
@@ -46,7 +46,6 @@ import sys
from distutils import sysconfig
import astroid
-import isort
from astroid import modutils
from astroid.decorators import cached
@@ -60,7 +59,7 @@ from pylint.exceptions import EmptyRepor
from pylint.graph import DotBackend, get_cycles
from pylint.interfaces import IAstroidChecker
from pylint.reporters.ureports.nodes import Paragraph, VerbatimText
-from pylint.utils import get_global_option
+from pylint.utils import IsortDriver, get_global_option
def _qualified_names(modname):
@@ -709,8 +708,7 @@ class ImportsChecker(BaseChecker):
third_party_not_ignored = []
first_party_not_ignored = []
local_not_ignored = []
- isort_obj = isort.SortImports(
- file_contents="",
+ isort_driver = IsortDriver(
known_third_party=self.config.known_third_party,
known_standard_library=self.config.known_standard_library,
)
@@ -723,7 +721,7 @@ class ImportsChecker(BaseChecker):
ignore_for_import_order = not self.linter.is_message_enabled(
"wrong-import-order", node.fromlineno
)
- import_category = isort_obj.place_module(package)
+ import_category = isort_driver.place_module(package)
node_and_package_import = (node, package)
if import_category in ("FUTURE", "STDLIB"):
std_imports.append(node_and_package_import)
--- a/pylint/utils/__init__.py
+++ b/pylint/utils/__init__.py
@@ -46,6 +46,8 @@ main pylint class
from pylint.utils.ast_walker import ASTWalker
from pylint.utils.file_state import FileState
from pylint.utils.utils import (
+ HAS_ISORT_5,
+ IsortDriver,
_basename_in_blacklist_re,
_check_csv,
_format_option_value,
--- a/pylint/utils/utils.py
+++ b/pylint/utils/utils.py
@@ -1,6 +1,15 @@
# Licensed under the GPL: https://www.gnu.org/licenses/old-licenses/gpl-2.0.html
# For details: https://github.com/PyCQA/pylint/blob/master/COPYING
+try:
+ import isort.api
+
+ HAS_ISORT_5 = True
+except ImportError: # isort < 4
+ import isort
+
+ HAS_ISORT_5 = False
+
import codecs
import os
import re
@@ -398,3 +407,25 @@ def _ini_format(stream, options):
# remove trailing ',' from last element of the list
value = value[:-1]
print("%s=%s" % (optname, value), file=stream)
+
+
+class IsortDriver:
+ """A wrapper around isort API that changed between versions 4 and 5."""
+
+ def __init__(self, known_third_party, known_standard_library):
+ if HAS_ISORT_5:
+ self.isort5_config = isort.api.Config(
+ known_third_party=known_third_party,
+ known_standard_library=known_standard_library,
+ )
+ else:
+ self.isort4_obj = isort.SortImports( # pylint: disable=no-member
+ file_contents="",
+ known_third_party=known_third_party,
+ known_standard_library=known_standard_library,
+ )
+
+ def place_module(self, package):
+ if HAS_ISORT_5:
+ return isort.api.place_module(package, self.isort5_config)
+ return self.isort4_obj.place_module(package)
--- a/tests/functional/w/wrong_import_order.txt
+++ b/tests/functional/w/wrong_import_order.txt
@@ -1,6 +1,6 @@
wrong-import-order:12::standard import "import os.path" should be placed before "import six"
wrong-import-order:14::standard import "import sys" should be placed before "import six"
wrong-import-order:15::standard import "import datetime" should be placed before "import six"
-wrong-import-order:18::first party import "import totally_missing" should be placed before "from .package import Class"
-wrong-import-order:20::third party import "import astroid" should be placed before "import unused_import"
-wrong-import-order:24::third party import "from six.moves.urllib.parse import quote" should be placed before "import unused_import"
+wrong-import-order:18::third party import "import totally_missing" should be placed before "from .package import Class"
+wrong-import-order:20::third party import "import astroid" should be placed before "from .package import Class"
+wrong-import-order:24::third party import "from six.moves.urllib.parse import quote" should be placed before "from .package import Class"
--- a/tests/test_functional.py
+++ b/tests/test_functional.py
@@ -28,6 +28,7 @@ import sys
import pytest
from pylint import testutils
+from pylint.utils import HAS_ISORT_5
class test_dialect(csv.excel):
@@ -77,6 +78,10 @@ def get_tests():
continue
for filename in filenames:
if filename != "__init__.py" and filename.endswith(".py"):
+ # isort 5 has slightly different rules as isort 4. Testing
+ # both would be hard: test with isort 5 only.
+ if filename == "wrong_import_order.py" and not HAS_ISORT_5:
+ continue
suite.append(testutils.FunctionalTestFile(dirpath, filename))
return suite
--- a/pylint/checkers/base.py
+++ b/pylint/checkers/base.py
@@ -54,7 +54,6 @@
# For details: https://github.com/PyCQA/pylint/blob/master/COPYING
"""basic checker for Python code"""
-
import builtins
import collections
import itertools
@@ -67,8 +66,8 @@ import astroid.bases
import astroid.scoped_nodes
from astroid.arguments import CallSite
-import pylint.utils as lint_utils
from pylint import checkers, exceptions, interfaces
+from pylint import utils as lint_utils
from pylint.checkers import utils
from pylint.checkers.utils import (
is_overload_stub,
--- a/pylint/checkers/spelling.py
+++ b/pylint/checkers/spelling.py
@@ -21,7 +21,6 @@
"""Checker for spelling errors in comments and docstrings.
"""
-
import os
import re
import tokenize
@@ -33,12 +32,12 @@ from pylint.interfaces import IAstroidCh
try:
import enchant
from enchant.tokenize import ( # type: ignore
- get_tokenizer,
Chunker,
- Filter,
EmailFilter,
+ Filter,
URLFilter,
WikiWordFilter,
+ get_tokenizer,
)
except ImportError:
enchant = None
--- a/pylint/checkers/utils.py
+++ b/pylint/checkers/utils.py
@@ -50,13 +50,12 @@ import string
from functools import lru_cache, partial
from typing import Callable, Dict, Iterable, List, Match, Optional, Set, Tuple, Union
+import _string # pylint: disable=wrong-import-position, wrong-import-order
import astroid
from astroid import bases as _bases
from astroid import helpers, scoped_nodes
from astroid.exceptions import _NonDeducibleTypeHierarchy
-import _string # pylint: disable=wrong-import-position, wrong-import-order
-
BUILTINS_NAME = builtins.__name__
COMP_NODE_TYPES = (
astroid.ListComp,
--- a/pylint/epylint.py
+++ b/pylint/epylint.py
@@ -56,10 +56,10 @@ You may also use py_run to run pylint wi
its output.
"""
import os
-import os.path as osp
import shlex
import sys
from io import StringIO
+from os import path as osp
from subprocess import PIPE, Popen
--- a/pylint/extensions/docparams.py
+++ b/pylint/extensions/docparams.py
@@ -21,9 +21,9 @@
"""
import astroid
-import pylint.extensions._check_docs_utils as utils
from pylint.checkers import BaseChecker
from pylint.checkers import utils as checker_utils
+from pylint.extensions import _check_docs_utils as utils
from pylint.interfaces import IAstroidChecker
--- a/pylint/graph.py
+++ b/pylint/graph.py
@@ -13,13 +13,12 @@
(dot generation adapted from pypy/translator/tool/make_dot.py)
"""
-
import codecs
import os
-import os.path as osp
import subprocess
import sys
import tempfile
+from os import path as osp
def target_info_from_filename(filename):
--- a/setup.py
+++ b/setup.py
@@ -39,8 +39,8 @@ try:
USE_SETUPTOOLS = 1
except ImportError:
- from distutils.core import setup
from distutils.command import install_lib # pylint: disable=unused-import
+ from distutils.core import setup
USE_SETUPTOOLS = 0
easy_install_lib = None
--- a/tests/extensions/test_bad_builtin.py
+++ b/tests/extensions/test_bad_builtin.py
@@ -8,8 +8,7 @@
"""Tests for the pylint checker in :mod:`pylint.extensions.bad_builtin
"""
-
-import os.path as osp
+from os import path as osp
import pytest
--- a/tests/extensions/test_broad_try_clause.py
+++ b/tests/extensions/test_broad_try_clause.py
@@ -10,8 +10,8 @@
"""Tests for the pylint checker in :mod:`pylint.extensions.broad_try_clause
"""
-import os.path as osp
import unittest
+from os import path as osp
from pylint import checkers
from pylint.extensions.broad_try_clause import BroadTryClauseChecker
--- a/tests/extensions/test_check_docs_utils.py
+++ b/tests/extensions/test_check_docs_utils.py
@@ -14,7 +14,7 @@ in particular the parameter documentatio
import astroid
import pytest
-import pylint.extensions._check_docs_utils as utils
+from pylint.extensions import _check_docs_utils as utils
@pytest.mark.parametrize(
--- a/tests/extensions/test_check_mccabe.py
+++ b/tests/extensions/test_check_mccabe.py
@@ -9,7 +9,7 @@
"""Tests for the pylint checker in :mod:`pylint.extensions.check_mccabe"""
-import os.path as osp
+from os import path as osp
import pytest
--- a/tests/extensions/test_elseif_used.py
+++ b/tests/extensions/test_elseif_used.py
@@ -9,8 +9,7 @@
"""Tests for the pylint checker in :mod:`pylint.extensions.check_elif
"""
-
-import os.path as osp
+from os import path as osp
import pytest
--- a/tests/extensions/test_emptystring.py
+++ b/tests/extensions/test_emptystring.py
@@ -12,8 +12,7 @@
"""Tests for the pylint checker in :mod:`pylint.extensions.emptystring
"""
-
-import os.path as osp
+from os import path as osp
import pytest
--- a/tests/extensions/test_redefined.py
+++ b/tests/extensions/test_redefined.py
@@ -7,8 +7,7 @@
# For details: https://github.com/PyCQA/pylint/blob/master/COPYING
"""Tests for the pylint checker in :mod:`pylint.extensions.check_elif"""
-
-import os.path as osp
+from os import path as osp
import pytest
--- a/tests/lint/unittest_lint.py
+++ b/tests/lint/unittest_lint.py
@@ -46,8 +46,7 @@ from shutil import rmtree
import pytest
-import pylint.testutils as testutils
-from pylint import checkers, config, exceptions, interfaces, lint
+from pylint import checkers, config, exceptions, interfaces, lint, testutils
from pylint.checkers.utils import check_messages
from pylint.constants import (
MSG_STATE_CONFIDENCE,
--- a/tests/test_import_graph.py
+++ b/tests/test_import_graph.py
@@ -17,7 +17,7 @@ from os.path import exists
import pytest
-import pylint.testutils as testutils
+from pylint import testutils
from pylint.checkers import imports, initialize
from pylint.lint import PyLinter
--- a/tests/test_regr.py
+++ b/tests/test_regr.py
@@ -23,7 +23,7 @@ from os.path import abspath, dirname, jo
import astroid
import pytest
-import pylint.testutils as testutils
+from pylint import testutils
REGR_DATA = join(dirname(abspath(__file__)), "regrtest_data")
sys.path.insert(1, REGR_DATA)
--- a/tests/unittest_pyreverse_diadefs.py
+++ b/tests/unittest_pyreverse_diadefs.py
@@ -21,6 +21,7 @@ from pathlib import Path
import astroid
import pytest
+from unittest_pyreverse_writer import Config, get_project
from pylint.pyreverse.diadefslib import (
ClassDiadefGenerator,
@@ -29,7 +30,6 @@ from pylint.pyreverse.diadefslib import
DiadefsHandler,
)
from pylint.pyreverse.inspector import Linker
-from unittest_pyreverse_writer import Config, get_project
def _process_classes(classes):
--- a/tests/unittest_pyreverse_inspector.py
+++ b/tests/unittest_pyreverse_inspector.py
@@ -14,9 +14,9 @@ import os
import astroid
import pytest
from astroid import bases, nodes
+from unittest_pyreverse_writer import get_project
from pylint.pyreverse import inspector
-from unittest_pyreverse_writer import get_project
@pytest.fixture

View File

@@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:7dd78437f2d8d019717dbf287772d0b2dbdfd13fc016aa7faa08d67bccc46adc
size 684449

3
pylint-2.6.0.tar.gz Normal file
View File

@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:bb4a908c9dadbc3aac18860550e870f58e1a02c9f2c204fdf5693d73be061210
size 680289

View File

@@ -1,3 +1,23 @@
-------------------------------------------------------------------
Fri Aug 21 10:28:41 UTC 2020 - Michael Ströder <michael@stroeder.com>
- Update to 2.6.0
* Fix various scope-related bugs in ``undefined-variable`` checker
* bad-continuation and bad-whitespace have been removed, black or another
formatter can help you with this better than Pylint
* The no-space-check option has been removed. It's no longer possible to
consider empty line like a `trailing-whitespace` by using clever options
* ``missing-kwoa`` is no longer emitted when dealing with overload functions
* mixed-indentation has been removed, it is no longer useful since TabError is included directly in python3
* Add `super-with-arguments` check for flagging instances of Python 2 style super calls.
* Add an faq detailing which messages to disable to avoid duplicates w/ other popular linters
* Fix superfluous-parens false-positive for the walrus operator
* Fix `fail-under` not accepting floats
* Fix a bug with `ignore-docstrings` ignoring all lines in a module
* Fix `pre-commit` config that could lead to undetected duplicate lines of code
* Fix a crash in parallel mode when the module's filepath is not set
- removed both_isort_4_5.patch obsoleted by upstream update
-------------------------------------------------------------------
Mon Jul 13 22:31:19 UTC 2020 - Matej Cepl <mcepl@suse.com>

View File

@@ -20,16 +20,13 @@
%bcond_without tests
%define skip_python2 1
Name: python-pylint
Version: 2.5.3
Version: 2.6.0
Release: 0
Summary: Syntax and style checker for Python code
License: GPL-2.0-or-later
Group: Development/Languages/Python
URL: https://github.com/pycqa/pylint
Source: https://files.pythonhosted.org/packages/source/p/pylint/pylint-%{version}.tar.gz
# PATCH-FIX-UPSTREAM both_isort_4_5.patch gh#PyCQA/pylint#3725 mcepl@suse.com
# allow using both isort 4 and 5
Patch0: both_isort_4_5.patch
BuildRequires: %{python_module setuptools}
BuildRequires: fdupes
BuildRequires: python-rpm-macros
@@ -72,7 +69,6 @@ feature.
%prep
%setup -q -n pylint-%{version}
%autopatch -p1
# fix test: ignore unexpected message gh#PyCQA/pylint#3635
sed -i 's/import matplotlib.pyplot as plt/& # pylint: disable=no-name-in-module/' tests/functional/u/undefined_variable.py