Compare commits
5 Commits
alex/subsc
...
dylan/stab
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8bda1837d9 | ||
|
|
e667d53828 | ||
|
|
a071114638 | ||
|
|
86ae9fbc08 | ||
|
|
11966beeec |
@@ -65,7 +65,7 @@ use crate::docstrings::extraction::ExtractionTarget;
|
||||
use crate::importer::{ImportRequest, Importer, ResolutionError};
|
||||
use crate::noqa::NoqaMapping;
|
||||
use crate::package::PackageRoot;
|
||||
use crate::preview::{is_semantic_errors_enabled, is_undefined_export_in_dunder_init_enabled};
|
||||
use crate::preview::is_semantic_errors_enabled;
|
||||
use crate::registry::{AsRule, Rule};
|
||||
use crate::rules::pyflakes::rules::{
|
||||
LateFutureImport, ReturnOutsideFunction, YieldOutsideFunction,
|
||||
@@ -2900,17 +2900,13 @@ impl<'a> Checker<'a> {
|
||||
}
|
||||
} else {
|
||||
if self.enabled(Rule::UndefinedExport) {
|
||||
if is_undefined_export_in_dunder_init_enabled(self.settings)
|
||||
|| !self.path.ends_with("__init__.py")
|
||||
{
|
||||
self.report_diagnostic(
|
||||
pyflakes::rules::UndefinedExport {
|
||||
name: name.to_string(),
|
||||
},
|
||||
range,
|
||||
)
|
||||
.set_parent(definition.start());
|
||||
}
|
||||
self.report_diagnostic(
|
||||
pyflakes::rules::UndefinedExport {
|
||||
name: name.to_string(),
|
||||
},
|
||||
range,
|
||||
)
|
||||
.set_parent(definition.start());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -111,11 +111,6 @@ pub(crate) const fn is_support_slices_in_literal_concatenation_enabled(
|
||||
settings.preview.is_enabled()
|
||||
}
|
||||
|
||||
// https://github.com/astral-sh/ruff/pull/11370
|
||||
pub(crate) const fn is_undefined_export_in_dunder_init_enabled(settings: &LinterSettings) -> bool {
|
||||
settings.preview.is_enabled()
|
||||
}
|
||||
|
||||
// https://github.com/astral-sh/ruff/pull/14236
|
||||
pub(crate) const fn is_allow_nested_roots_enabled(settings: &LinterSettings) -> bool {
|
||||
settings.preview.is_enabled()
|
||||
|
||||
@@ -233,7 +233,6 @@ mod tests {
|
||||
#[test_case(Rule::UnusedImport, Path::new("F401_27__all_mistyped/__init__.py"))]
|
||||
#[test_case(Rule::UnusedImport, Path::new("F401_28__all_multiple/__init__.py"))]
|
||||
#[test_case(Rule::UnusedImport, Path::new("F401_29__all_conditional/__init__.py"))]
|
||||
#[test_case(Rule::UndefinedExport, Path::new("__init__.py"))]
|
||||
fn preview_rules(rule_code: Rule, path: &Path) -> Result<()> {
|
||||
let snapshot = format!(
|
||||
"preview__{}_{}",
|
||||
|
||||
@@ -14,7 +14,7 @@ use crate::Violation;
|
||||
/// Including an undefined name in `__all__` is likely to raise `NameError` at
|
||||
/// runtime, when the module is imported.
|
||||
///
|
||||
/// In [preview], this rule will flag undefined names in `__init__.py` file,
|
||||
/// This rule will flag undefined names in `__init__.py` file
|
||||
/// even if those names implicitly refer to other modules in the package. Users
|
||||
/// that rely on implicit exports should disable this rule in `__init__.py`
|
||||
/// files via [`lint.per-file-ignores`].
|
||||
@@ -37,8 +37,6 @@ use crate::Violation;
|
||||
///
|
||||
/// ## References
|
||||
/// - [Python documentation: `__all__`](https://docs.python.org/3/tutorial/modules.html#importing-from-a-package)
|
||||
///
|
||||
/// [preview]: https://docs.astral.sh/ruff/preview/
|
||||
#[derive(ViolationMetadata)]
|
||||
pub(crate) struct UndefinedExport {
|
||||
pub name: String,
|
||||
|
||||
@@ -9,3 +9,27 @@ __init__.py:1:8: F401 `os` imported but unused
|
||||
3 | print(__path__)
|
||||
|
|
||||
= help: Remove unused import: `os`
|
||||
|
||||
__init__.py:5:12: F822 Undefined name `a` in `__all__`
|
||||
|
|
||||
3 | print(__path__)
|
||||
4 |
|
||||
5 | __all__ = ["a", "b", "c"]
|
||||
| ^^^ F822
|
||||
|
|
||||
|
||||
__init__.py:5:17: F822 Undefined name `b` in `__all__`
|
||||
|
|
||||
3 | print(__path__)
|
||||
4 |
|
||||
5 | __all__ = ["a", "b", "c"]
|
||||
| ^^^ F822
|
||||
|
|
||||
|
||||
__init__.py:5:22: F822 Undefined name `c` in `__all__`
|
||||
|
|
||||
3 | print(__path__)
|
||||
4 |
|
||||
5 | __all__ = ["a", "b", "c"]
|
||||
| ^^^ F822
|
||||
|
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
---
|
||||
source: crates/ruff_linter/src/rules/pyflakes/mod.rs
|
||||
---
|
||||
__init__.py:5:12: F822 Undefined name `a` in `__all__`
|
||||
|
|
||||
3 | print(__path__)
|
||||
4 |
|
||||
5 | __all__ = ["a", "b", "c"]
|
||||
| ^^^ F822
|
||||
|
|
||||
|
||||
__init__.py:5:17: F822 Undefined name `b` in `__all__`
|
||||
|
|
||||
3 | print(__path__)
|
||||
4 |
|
||||
5 | __all__ = ["a", "b", "c"]
|
||||
| ^^^ F822
|
||||
|
|
||||
|
||||
__init__.py:5:22: F822 Undefined name `c` in `__all__`
|
||||
|
|
||||
3 | print(__path__)
|
||||
4 |
|
||||
5 | __all__ = ["a", "b", "c"]
|
||||
| ^^^ F822
|
||||
|
|
||||
@@ -7,6 +7,7 @@ use ruff_python_semantic::analyze::function_type::is_stub;
|
||||
|
||||
use crate::Violation;
|
||||
use crate::checkers::ast::Checker;
|
||||
|
||||
use crate::rules::fastapi::rules::is_fastapi_route;
|
||||
|
||||
/// ## What it does
|
||||
|
||||
Reference in New Issue
Block a user