style.py: fix false negative in redundant import statements (#48980)
This commit is contained in:
parent
5518ad9611
commit
18cd922aab
@ -6,7 +6,7 @@
|
|||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
import sys
|
import sys
|
||||||
from itertools import zip_longest
|
from itertools import islice, zip_longest
|
||||||
from typing import Dict, List, Optional
|
from typing import Dict, List, Optional
|
||||||
|
|
||||||
import llnl.util.tty as tty
|
import llnl.util.tty as tty
|
||||||
@ -423,7 +423,8 @@ def _run_import_check(
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
for m in is_abs_import.finditer(contents):
|
for m in is_abs_import.finditer(contents):
|
||||||
if contents.count(m.group(1)) == 1:
|
# Find at most two occurences: the first is the import itself, the second is its usage.
|
||||||
|
if len(list(islice(re.finditer(rf"{re.escape(m.group(1))}(?!\w)", contents), 2))) == 1:
|
||||||
to_remove.append(m.group(0))
|
to_remove.append(m.group(0))
|
||||||
exit_code = 1
|
exit_code = 1
|
||||||
print(f"{pretty_path}: redundant import: {m.group(1)}", file=out)
|
print(f"{pretty_path}: redundant import: {m.group(1)}", file=out)
|
||||||
@ -438,7 +439,7 @@ def _run_import_check(
|
|||||||
module = _module_part(root, m.group(0))
|
module = _module_part(root, m.group(0))
|
||||||
if not module or module in to_add:
|
if not module or module in to_add:
|
||||||
continue
|
continue
|
||||||
if re.search(rf"import {re.escape(module)}\b(?!\.)", contents):
|
if re.search(rf"import {re.escape(module)}(?!\w|\.)", contents):
|
||||||
continue
|
continue
|
||||||
to_add.add(module)
|
to_add.add(module)
|
||||||
exit_code = 1
|
exit_code = 1
|
||||||
|
@ -304,6 +304,8 @@ def test_run_import_check(tmp_path: pathlib.Path):
|
|||||||
contents = '''
|
contents = '''
|
||||||
import spack.cmd
|
import spack.cmd
|
||||||
import spack.config # do not drop this import because of this comment
|
import spack.config # do not drop this import because of this comment
|
||||||
|
import spack.repo
|
||||||
|
import spack.repo_utils
|
||||||
|
|
||||||
# this comment about spack.error should not be removed
|
# this comment about spack.error should not be removed
|
||||||
class Example(spack.build_systems.autotools.AutotoolsPackage):
|
class Example(spack.build_systems.autotools.AutotoolsPackage):
|
||||||
@ -314,6 +316,7 @@ def foo(config: "spack.error.SpackError"):
|
|||||||
# the type hint is quoted, so it should not be removed
|
# the type hint is quoted, so it should not be removed
|
||||||
spack.util.executable.Executable("example")
|
spack.util.executable.Executable("example")
|
||||||
print(spack.__version__)
|
print(spack.__version__)
|
||||||
|
print(spack.repo_utils.__file__)
|
||||||
'''
|
'''
|
||||||
file.write_text(contents)
|
file.write_text(contents)
|
||||||
root = str(tmp_path)
|
root = str(tmp_path)
|
||||||
@ -329,6 +332,7 @@ def foo(config: "spack.error.SpackError"):
|
|||||||
output = output_buf.getvalue()
|
output = output_buf.getvalue()
|
||||||
|
|
||||||
assert "issues.py: redundant import: spack.cmd" in output
|
assert "issues.py: redundant import: spack.cmd" in output
|
||||||
|
assert "issues.py: redundant import: spack.repo" in output
|
||||||
assert "issues.py: redundant import: spack.config" not in output # comment prevents removal
|
assert "issues.py: redundant import: spack.config" not in output # comment prevents removal
|
||||||
assert "issues.py: missing import: spack" in output # used by spack.__version__
|
assert "issues.py: missing import: spack" in output # used by spack.__version__
|
||||||
assert "issues.py: missing import: spack.build_systems.autotools" in output
|
assert "issues.py: missing import: spack.build_systems.autotools" in output
|
||||||
|
Loading…
Reference in New Issue
Block a user