From 08fc9b8095b07c615b51d68f0f84d52ae6b575f4 Mon Sep 17 00:00:00 2001 From: Zeddicus414 <31261142+Zeddicus414@users.noreply.github.com> Date: Sat, 21 Jan 2023 16:47:08 -0600 Subject: [PATCH] ICN001 check from imports that have no alias (#2072) Add tests. Ensure that these cases are caught by ICN001: ```python from xml.dom import minidom from xml.dom.minidom import parseString ``` with config: ```toml [tool.ruff.flake8-import-conventions.extend-aliases] "dask.dataframe" = "dd" "xml.dom.minidom" = "md" "xml.dom.minidom.parseString" = "pstr" ``` --- .../flake8_import_conventions/from_imports.py | 10 +++ src/checkers/ast.rs | 40 +++++------ ...port_conventions__tests__from_imports.snap | 72 +++++++++++++++++-- 3 files changed, 96 insertions(+), 26 deletions(-) diff --git a/resources/test/fixtures/flake8_import_conventions/from_imports.py b/resources/test/fixtures/flake8_import_conventions/from_imports.py index be440c87e9..3679cbc410 100644 --- a/resources/test/fixtures/flake8_import_conventions/from_imports.py +++ b/resources/test/fixtures/flake8_import_conventions/from_imports.py @@ -1,11 +1,21 @@ # Test absolute imports +# Violation cases +import xml.dom.minidom import xml.dom.minidom as wrong from xml.dom import minidom as wrong +from xml.dom import minidom from xml.dom.minidom import parseString as wrong # Ensure ICN001 throws on function import. +from xml.dom.minidom import parseString +from xml.dom.minidom import parse, parseString +from xml.dom.minidom import parse as ps, parseString as wrong +# No ICN001 violations import xml.dom.minidom as md from xml.dom import minidom as md from xml.dom.minidom import parseString as pstr +from xml.dom.minidom import parse, parseString as pstr +from xml.dom.minidom import parse as ps, parseString as pstr + # Test relative imports from ..xml.dom import minidom as okay # Ensure config "xml.dom.minidom" doesn't catch relative imports diff --git a/src/checkers/ast.rs b/src/checkers/ast.rs index ffcb62cce0..e3ab658804 100644 --- a/src/checkers/ast.rs +++ b/src/checkers/ast.rs @@ -1230,29 +1230,29 @@ where } } - if let Some(asname) = &alias.node.asname { - if self - .settings - .rules - .enabled(&Rule::ImportAliasIsNotConventional) + if self + .settings + .rules + .enabled(&Rule::ImportAliasIsNotConventional) + { + let full_name = helpers::format_import_from_member( + level.as_ref(), + module.as_deref(), + &alias.node.name, + ); + if let Some(diagnostic) = + flake8_import_conventions::rules::check_conventional_import( + stmt, + &full_name, + alias.node.asname.as_deref(), + &self.settings.flake8_import_conventions.aliases, + ) { - let full_name = helpers::format_import_from_member( - level.as_ref(), - module.as_deref(), - &alias.node.name, - ); - if let Some(diagnostic) = - flake8_import_conventions::rules::check_conventional_import( - stmt, - &full_name, - alias.node.asname.as_deref(), - &self.settings.flake8_import_conventions.aliases, - ) - { - self.diagnostics.push(diagnostic); - } + self.diagnostics.push(diagnostic); } + } + if let Some(asname) = &alias.node.asname { if self .settings .rules diff --git a/src/rules/flake8_import_conventions/snapshots/ruff__rules__flake8_import_conventions__tests__from_imports.snap b/src/rules/flake8_import_conventions/snapshots/ruff__rules__flake8_import_conventions__tests__from_imports.snap index bbd10131da..1ebf8ceaa7 100644 --- a/src/rules/flake8_import_conventions/snapshots/ruff__rules__flake8_import_conventions__tests__from_imports.snap +++ b/src/rules/flake8_import_conventions/snapshots/ruff__rules__flake8_import_conventions__tests__from_imports.snap @@ -7,10 +7,22 @@ expression: diagnostics - xml.dom.minidom - md location: - row: 2 + row: 3 column: 0 end_location: - row: 2 + row: 3 + column: 22 + fix: ~ + parent: ~ +- kind: + ImportAliasIsNotConventional: + - xml.dom.minidom + - md + location: + row: 4 + column: 0 + end_location: + row: 4 column: 31 fix: ~ parent: ~ @@ -19,23 +31,71 @@ expression: diagnostics - xml.dom.minidom - md location: - row: 3 + row: 5 column: 0 end_location: - row: 3 + row: 5 column: 36 fix: ~ parent: ~ +- kind: + ImportAliasIsNotConventional: + - xml.dom.minidom + - md + location: + row: 6 + column: 0 + end_location: + row: 6 + column: 27 + fix: ~ + parent: ~ - kind: ImportAliasIsNotConventional: - xml.dom.minidom.parseString - pstr location: - row: 4 + row: 7 column: 0 end_location: - row: 4 + row: 7 column: 48 fix: ~ parent: ~ +- kind: + ImportAliasIsNotConventional: + - xml.dom.minidom.parseString + - pstr + location: + row: 8 + column: 0 + end_location: + row: 8 + column: 39 + fix: ~ + parent: ~ +- kind: + ImportAliasIsNotConventional: + - xml.dom.minidom.parseString + - pstr + location: + row: 9 + column: 0 + end_location: + row: 9 + column: 46 + fix: ~ + parent: ~ +- kind: + ImportAliasIsNotConventional: + - xml.dom.minidom.parseString + - pstr + location: + row: 10 + column: 0 + end_location: + row: 10 + column: 61 + fix: ~ + parent: ~