Skip to content

Commit dce24ea

Browse files
committed
Optimize effect of disabling import warnings
Disabling 'wrong-import-order' or 'wrong-import-position' for a single line now prevents that line from triggering violations on subsequent lines.
1 parent 185a848 commit dce24ea

File tree

5 files changed

+42
-8
lines changed

5 files changed

+42
-8
lines changed

ChangeLog

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,17 @@
22
Pylint NEWS
33
-----------
44

5+
What's new in Pylint 1.6.5?
6+
===========================
7+
8+
Release date: tba
9+
10+
* Disabling 'wrong-import-order' or 'wrong-import-position' for a single line now
11+
prevents that line from triggering violations on subsequent lines.
12+
13+
Close #1336
14+
15+
516
What's new in Pylint 1.6.4?
617
===========================
718

pylint/checkers/imports.py

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -424,6 +424,8 @@ def leave_module(self, node):
424424
self._first_non_import_node = None
425425

426426
def compute_first_non_import_node(self, node):
427+
if not self.linter.is_message_enabled('wrong-import-position', node.fromlineno):
428+
return
427429
# if the node does not contain an import instruction, and if it is the
428430
# first node of the module, keep a track of it (all the import positions
429431
# of the module will be compared to the position of this first
@@ -454,6 +456,8 @@ def compute_first_non_import_node(self, node):
454456
compute_first_non_import_node
455457

456458
def visit_functiondef(self, node):
459+
if not self.linter.is_message_enabled('wrong-import-position', node.fromlineno):
460+
return
457461
# If it is the first non import instruction of the module, record it.
458462
if self._first_non_import_node:
459463
return
@@ -540,8 +544,8 @@ def _check_imports_order(self, node):
540544
extern_imports = []
541545
local_imports = []
542546
std_imports = []
543-
extern_not_nested = []
544-
local_not_nested = []
547+
extern_not_ignored = []
548+
local_not_ignored = []
545549
isort_obj = isort.SortImports(
546550
file_contents='', known_third_party=self.config.known_third_party,
547551
known_standard_library=self.config.known_standard_library,
@@ -555,7 +559,7 @@ def _check_imports_order(self, node):
555559
import_category = isort_obj.place_module(package)
556560
if import_category in ('FUTURE', 'STDLIB'):
557561
std_imports.append((node, package))
558-
wrong_import = extern_not_nested or local_not_nested
562+
wrong_import = extern_not_ignored or local_not_ignored
559563
if self._is_fallback_import(node, wrong_import):
560564
continue
561565
if wrong_import and not nested:
@@ -564,17 +568,17 @@ def _check_imports_order(self, node):
564568
'"%s"' % wrong_import[0][0].as_string()))
565569
elif import_category in ('FIRSTPARTY', 'THIRDPARTY'):
566570
extern_imports.append((node, package))
567-
if not nested:
568-
extern_not_nested.append((node, package))
569-
wrong_import = local_not_nested
571+
if not nested and self.linter.is_message_enabled('wrong-import-order', node.fromlineno):
572+
extern_not_ignored.append((node, package))
573+
wrong_import = local_not_ignored
570574
if wrong_import and not nested:
571575
self.add_message('wrong-import-order', node=node,
572576
args=('external import "%s"' % node.as_string(),
573577
'"%s"' % wrong_import[0][0].as_string()))
574578
elif import_category == 'LOCALFOLDER':
575579
local_imports.append((node, package))
576-
if not nested:
577-
local_not_nested.append((node, package))
580+
if not nested and self.linter.is_message_enabled('wrong-import-order', node.fromlineno):
581+
local_not_ignored.append((node, package))
578582
return std_imports, extern_imports, local_imports
579583

580584
def _get_imported_module(self, importnode, modname):
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
"""Checks that disabling 'wrong-import-order' on an import prevents subsequent
2+
imports from being considered out-of-order in respect to it but does not prevent
3+
it from being considered for 'ungrouped-imports'."""
4+
# pylint: disable=unused-import,import-error,no-name-in-module
5+
6+
from first_party.foo import bar # pylint: disable=wrong-import-order
7+
import logging
8+
import os.path
9+
import sys
10+
from astroid import are_exclusive
11+
import first_party # [ungrouped-imports]
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
ungrouped-imports:11::Imports from package first_party are not grouped
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
"""Checks that disabling 'wrong-import-position' on a statement prevents it from
2+
invalidating subsequent imports."""
3+
# pylint: disable=unused-import
4+
5+
CONSTANT = True # pylint: disable=wrong-import-position
6+
7+
import sys

0 commit comments

Comments
 (0)