Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[isort] Check full module path against project root(s) when categorizing first-party #16565

Open
wants to merge 3 commits into
base: main
Choose a base branch
from

Conversation

dylwil3
Copy link
Collaborator

@dylwil3 dylwil3 commented Mar 8, 2025

When attempting to determine whether import foo.bar.baz is a known first-party import relative to user-provided source paths, we now check that SRC/foo/bar/baz is a directory or SRC/foo/bar/baz.py or SRC/foo/bar/baz.pyi exist.

Previously, we just checked the analogous thing for SRC/foo, but this can be misleading in situations with disjoint namespace packages that share a common base name (e.g. we may be working inside the namespace package foo.buzz and importing foo.bar from elsewhere).

Supersedes #12987
Closes #12984

@dylwil3 dylwil3 added bug Something isn't working rule Implementing or modifying a lint rule isort Related to import sorting labels Mar 8, 2025
Copy link
Contributor

github-actions bot commented Mar 8, 2025

ruff-ecosystem results

Linter (stable)

ℹ️ ecosystem check detected linter changes. (+13 -13 violations, +0 -0 fixes in 4 projects; 51 projects unchanged)

Snowflake-Labs/snowcli (+10 -13 violations, +0 -0 fixes)

+ scripts/cleanup.py:14:1: I001 [*] Import block is un-sorted or un-formatted
- src/snowflake/cli/_plugins/connection/util.py:15:1: I001 [*] Import block is un-sorted or un-formatted
+ src/snowflake/cli/_plugins/nativeapp/sf_sql_facade.py:14:1: I001 [*] Import block is un-sorted or un-formatted
+ src/snowflake/cli/_plugins/spcs/compute_pool/manager.py:15:1: I001 [*] Import block is un-sorted or un-formatted
+ src/snowflake/cli/_plugins/spcs/image_repository/manager.py:15:1: I001 [*] Import block is un-sorted or un-formatted
+ src/snowflake/cli/_plugins/stage/diff.py:15:1: I001 [*] Import block is un-sorted or un-formatted
+ src/snowflake/cli/api/cli_global_context.py:15:1: I001 [*] Import block is un-sorted or un-formatted
+ src/snowflake/cli/api/connections.py:15:1: I001 [*] Import block is un-sorted or un-formatted
+ src/snowflake/cli/api/entities/common.py:1:1: I001 [*] Import block is un-sorted or un-formatted
+ src/snowflake/cli/api/sql_execution.py:15:1: I001 [*] Import block is un-sorted or un-formatted
+ test_external_plugins/snowpark_hello_single_command/src/snowflakecli/test_plugins/snowpark_hello/manager.py:14:1: I001 [*] Import block is un-sorted or un-formatted
- tests/nativeapp/utils.py:15:1: I001 [*] Import block is un-sorted or un-formatted
- tests/test_data/projects/glob_patterns/main.py:1:1: I001 [*] Import block is un-sorted or un-formatted
- tests/test_data/projects/glob_patterns/src/app.py:1:1: I001 [*] Import block is un-sorted or un-formatted
- tests/test_data/projects/glob_patterns_zip/main.py:1:1: I001 [*] Import block is un-sorted or un-formatted
- tests/test_data/projects/glob_patterns_zip/src/app.py:1:1: I001 [*] Import block is un-sorted or un-formatted
- tests/test_main.py:17:1: I001 [*] Import block is un-sorted or un-formatted
- tests_integration/nativeapp/test_debug_mode.py:15:1: I001 [*] Import block is un-sorted or un-formatted
- tests_integration/nativeapp/test_telemetry_errors.py:14:1: I001 [*] Import block is un-sorted or un-formatted
- tests_integration/notebook/test_notebooks.py:15:1: I001 [*] Import block is un-sorted or un-formatted
- tests_integration/spcs/testing_utils/image_repository_utils.py:1:1: I001 [*] Import block is un-sorted or un-formatted
- tests_integration/test_config.py:15:1: I001 [*] Import block is un-sorted or un-formatted
- tests_integration/testing_utils/sql_utils.py:15:1: I001 [*] Import block is un-sorted or un-formatted

freedomofpress/securedrop (+1 -0 violations, +0 -0 fixes)

+ journalist_gui/test_gui.py:1:1: I001 [*] Import block is un-sorted or un-formatted

mlflow/mlflow (+1 -0 violations, +0 -0 fixes)

+ tests/projects/utils.py:50:5: I001 [*] Import block is un-sorted or un-formatted

pytest-dev/pytest (+1 -0 violations, +0 -0 fixes)

+ testing/_py/test_local.py:2:1: I001 [*] Import block is un-sorted or un-formatted

Changes by rule (1 rules affected)

code total + violation - violation + fix - fix
I001 26 13 13 0 0

Linter (preview)

ℹ️ ecosystem check detected linter changes. (+13 -13 violations, +0 -0 fixes in 4 projects; 51 projects unchanged)

Snowflake-Labs/snowcli (+10 -13 violations, +0 -0 fixes)

ruff check --no-cache --exit-zero --ignore RUF9 --no-fix --output-format concise --preview

+ scripts/cleanup.py:14:1: I001 [*] Import block is un-sorted or un-formatted
- src/snowflake/cli/_plugins/connection/util.py:15:1: I001 [*] Import block is un-sorted or un-formatted
+ src/snowflake/cli/_plugins/nativeapp/sf_sql_facade.py:14:1: I001 [*] Import block is un-sorted or un-formatted
+ src/snowflake/cli/_plugins/spcs/compute_pool/manager.py:15:1: I001 [*] Import block is un-sorted or un-formatted
+ src/snowflake/cli/_plugins/spcs/image_repository/manager.py:15:1: I001 [*] Import block is un-sorted or un-formatted
+ src/snowflake/cli/_plugins/stage/diff.py:15:1: I001 [*] Import block is un-sorted or un-formatted
+ src/snowflake/cli/api/cli_global_context.py:15:1: I001 [*] Import block is un-sorted or un-formatted
+ src/snowflake/cli/api/connections.py:15:1: I001 [*] Import block is un-sorted or un-formatted
+ src/snowflake/cli/api/entities/common.py:1:1: I001 [*] Import block is un-sorted or un-formatted
+ src/snowflake/cli/api/sql_execution.py:15:1: I001 [*] Import block is un-sorted or un-formatted
+ test_external_plugins/snowpark_hello_single_command/src/snowflakecli/test_plugins/snowpark_hello/manager.py:14:1: I001 [*] Import block is un-sorted or un-formatted
- tests/nativeapp/utils.py:15:1: I001 [*] Import block is un-sorted or un-formatted
- tests/test_data/projects/glob_patterns/main.py:1:1: I001 [*] Import block is un-sorted or un-formatted
- tests/test_data/projects/glob_patterns/src/app.py:1:1: I001 [*] Import block is un-sorted or un-formatted
- tests/test_data/projects/glob_patterns_zip/main.py:1:1: I001 [*] Import block is un-sorted or un-formatted
- tests/test_data/projects/glob_patterns_zip/src/app.py:1:1: I001 [*] Import block is un-sorted or un-formatted
- tests/test_main.py:17:1: I001 [*] Import block is un-sorted or un-formatted
- tests_integration/nativeapp/test_debug_mode.py:15:1: I001 [*] Import block is un-sorted or un-formatted
- tests_integration/nativeapp/test_telemetry_errors.py:14:1: I001 [*] Import block is un-sorted or un-formatted
- tests_integration/notebook/test_notebooks.py:15:1: I001 [*] Import block is un-sorted or un-formatted
- tests_integration/spcs/testing_utils/image_repository_utils.py:1:1: I001 [*] Import block is un-sorted or un-formatted
- tests_integration/test_config.py:15:1: I001 [*] Import block is un-sorted or un-formatted
- tests_integration/testing_utils/sql_utils.py:15:1: I001 [*] Import block is un-sorted or un-formatted

freedomofpress/securedrop (+1 -0 violations, +0 -0 fixes)

ruff check --no-cache --exit-zero --ignore RUF9 --no-fix --output-format concise --preview

+ journalist_gui/test_gui.py:1:1: I001 [*] Import block is un-sorted or un-formatted

mlflow/mlflow (+1 -0 violations, +0 -0 fixes)

ruff check --no-cache --exit-zero --ignore RUF9 --no-fix --output-format concise --preview

+ tests/projects/utils.py:50:5: I001 [*] Import block is un-sorted or un-formatted

pytest-dev/pytest (+1 -0 violations, +0 -0 fixes)

ruff check --no-cache --exit-zero --ignore RUF9 --no-fix --output-format concise --preview

+ testing/_py/test_local.py:2:1: I001 [*] Import block is un-sorted or un-formatted

Changes by rule (1 rules affected)

code total + violation - violation + fix - fix
I001 26 13 13 0 0

@dylwil3 dylwil3 force-pushed the namespaces branch 2 times, most recently from 5cb8c06 to 2eb5cd5 Compare March 16, 2025 20:28
@dylwil3 dylwil3 changed the title [isort] Only infer subpackages of namespace packages as first-party [isort] Check full module path against project root(s) when categorizing first-party Mar 27, 2025
@dylwil3 dylwil3 marked this pull request as ready for review March 27, 2025 21:46
@dylwil3 dylwil3 requested a review from AlexWaygood March 27, 2025 21:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working isort Related to import sorting rule Implementing or modifying a lint rule
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Third-party namespace packages can be incorrectly considered first-party packages by isort rules
1 participant