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::importer::{ImportRequest, Importer, ResolutionError};
|
||||||
use crate::noqa::NoqaMapping;
|
use crate::noqa::NoqaMapping;
|
||||||
use crate::package::PackageRoot;
|
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::registry::{AsRule, Rule};
|
||||||
use crate::rules::pyflakes::rules::{
|
use crate::rules::pyflakes::rules::{
|
||||||
LateFutureImport, ReturnOutsideFunction, YieldOutsideFunction,
|
LateFutureImport, ReturnOutsideFunction, YieldOutsideFunction,
|
||||||
@@ -2900,17 +2900,13 @@ impl<'a> Checker<'a> {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if self.enabled(Rule::UndefinedExport) {
|
if self.enabled(Rule::UndefinedExport) {
|
||||||
if is_undefined_export_in_dunder_init_enabled(self.settings)
|
self.report_diagnostic(
|
||||||
|| !self.path.ends_with("__init__.py")
|
pyflakes::rules::UndefinedExport {
|
||||||
{
|
name: name.to_string(),
|
||||||
self.report_diagnostic(
|
},
|
||||||
pyflakes::rules::UndefinedExport {
|
range,
|
||||||
name: name.to_string(),
|
)
|
||||||
},
|
.set_parent(definition.start());
|
||||||
range,
|
|
||||||
)
|
|
||||||
.set_parent(definition.start());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -111,11 +111,6 @@ pub(crate) const fn is_support_slices_in_literal_concatenation_enabled(
|
|||||||
settings.preview.is_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
|
// https://github.com/astral-sh/ruff/pull/14236
|
||||||
pub(crate) const fn is_allow_nested_roots_enabled(settings: &LinterSettings) -> bool {
|
pub(crate) const fn is_allow_nested_roots_enabled(settings: &LinterSettings) -> bool {
|
||||||
settings.preview.is_enabled()
|
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_27__all_mistyped/__init__.py"))]
|
||||||
#[test_case(Rule::UnusedImport, Path::new("F401_28__all_multiple/__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::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<()> {
|
fn preview_rules(rule_code: Rule, path: &Path) -> Result<()> {
|
||||||
let snapshot = format!(
|
let snapshot = format!(
|
||||||
"preview__{}_{}",
|
"preview__{}_{}",
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ use crate::Violation;
|
|||||||
/// Including an undefined name in `__all__` is likely to raise `NameError` at
|
/// Including an undefined name in `__all__` is likely to raise `NameError` at
|
||||||
/// runtime, when the module is imported.
|
/// 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
|
/// 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`
|
/// that rely on implicit exports should disable this rule in `__init__.py`
|
||||||
/// files via [`lint.per-file-ignores`].
|
/// files via [`lint.per-file-ignores`].
|
||||||
@@ -37,8 +37,6 @@ use crate::Violation;
|
|||||||
///
|
///
|
||||||
/// ## References
|
/// ## References
|
||||||
/// - [Python documentation: `__all__`](https://docs.python.org/3/tutorial/modules.html#importing-from-a-package)
|
/// - [Python documentation: `__all__`](https://docs.python.org/3/tutorial/modules.html#importing-from-a-package)
|
||||||
///
|
|
||||||
/// [preview]: https://docs.astral.sh/ruff/preview/
|
|
||||||
#[derive(ViolationMetadata)]
|
#[derive(ViolationMetadata)]
|
||||||
pub(crate) struct UndefinedExport {
|
pub(crate) struct UndefinedExport {
|
||||||
pub name: String,
|
pub name: String,
|
||||||
|
|||||||
@@ -9,3 +9,27 @@ __init__.py:1:8: F401 `os` imported but unused
|
|||||||
3 | print(__path__)
|
3 | print(__path__)
|
||||||
|
|
|
|
||||||
= help: Remove unused import: `os`
|
= 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::Violation;
|
||||||
use crate::checkers::ast::Checker;
|
use crate::checkers::ast::Checker;
|
||||||
|
|
||||||
use crate::rules::fastapi::rules::is_fastapi_route;
|
use crate::rules::fastapi::rules::is_fastapi_route;
|
||||||
|
|
||||||
/// ## What it does
|
/// ## What it does
|
||||||
|
|||||||
Reference in New Issue
Block a user