Stabilize allowance of os.environ modifications between imports (#12047)

## Summary

See: https://github.com/astral-sh/ruff/pull/10066.
This commit is contained in:
Charlie Marsh 2024-06-26 11:24:01 -04:00 committed by Micha Reiser
parent bd845812c7
commit fb1d7610ac
5 changed files with 4 additions and 22 deletions

View file

@ -462,8 +462,7 @@ impl<'a> Visitor<'a> for Checker<'a> {
|| helpers::in_nested_block(self.semantic.current_statements()) || helpers::in_nested_block(self.semantic.current_statements())
|| imports::is_matplotlib_activation(stmt, self.semantic()) || imports::is_matplotlib_activation(stmt, self.semantic())
|| imports::is_sys_path_modification(stmt, self.semantic()) || imports::is_sys_path_modification(stmt, self.semantic())
|| (self.settings.preview.is_enabled() || imports::is_os_environ_modification(stmt, self.semantic()))
&& imports::is_os_environ_modification(stmt, self.semantic())))
{ {
self.semantic.flags |= SemanticModelFlags::IMPORT_BOUNDARY; self.semantic.flags |= SemanticModelFlags::IMPORT_BOUNDARY;
} }

View file

@ -69,7 +69,6 @@ mod tests {
} }
#[test_case(Rule::IsLiteral, Path::new("constant_literals.py"))] #[test_case(Rule::IsLiteral, Path::new("constant_literals.py"))]
#[test_case(Rule::ModuleImportNotAtTopOfFile, Path::new("E402_2.py"))]
#[test_case(Rule::RedundantBackslash, Path::new("E502.py"))] #[test_case(Rule::RedundantBackslash, Path::new("E502.py"))]
#[test_case(Rule::TooManyNewlinesAtEndOfFile, Path::new("W391_0.py"))] #[test_case(Rule::TooManyNewlinesAtEndOfFile, Path::new("W391_0.py"))]
#[test_case(Rule::TooManyNewlinesAtEndOfFile, Path::new("W391_1.py"))] #[test_case(Rule::TooManyNewlinesAtEndOfFile, Path::new("W391_1.py"))]

View file

@ -13,12 +13,9 @@ use crate::checkers::ast::Checker;
/// According to [PEP 8], "imports are always put at the top of the file, just after any /// According to [PEP 8], "imports are always put at the top of the file, just after any
/// module comments and docstrings, and before module globals and constants." /// module comments and docstrings, and before module globals and constants."
/// ///
/// This rule makes an exception for `sys.path` modifications, allowing for /// This rule makes an exception for both `sys.path` modifications (allowing for
/// `sys.path.insert`, `sys.path.append`, and similar modifications between import /// `sys.path.insert`, `sys.path.append`, etc.) and `os.environ` modifications
/// statements. /// between imports.
///
/// In [preview], this rule also allows `os.environ` modifications between import
/// statements.
/// ///
/// ## Example /// ## Example
/// ```python /// ```python
@ -40,7 +37,6 @@ use crate::checkers::ast::Checker;
/// ``` /// ```
/// ///
/// [PEP 8]: https://peps.python.org/pep-0008/#imports /// [PEP 8]: https://peps.python.org/pep-0008/#imports
/// [preview]: https://docs.astral.sh/ruff/preview/
#[violation] #[violation]
pub struct ModuleImportNotAtTopOfFile { pub struct ModuleImportNotAtTopOfFile {
source_type: PySourceType, source_type: PySourceType,

View file

@ -1,12 +1,4 @@
--- ---
source: crates/ruff_linter/src/rules/pycodestyle/mod.rs source: crates/ruff_linter/src/rules/pycodestyle/mod.rs
--- ---
E402_2.py:7:1: E402 Module level import not at top of file
|
5 | del os.environ["WORLD_SIZE"]
6 |
7 | import torch
| ^^^^^^^^^^^^ E402
|

View file

@ -1,4 +0,0 @@
---
source: crates/ruff_linter/src/rules/pycodestyle/mod.rs
---