Skip to content

Commit

Permalink
Reduce changes
Browse files Browse the repository at this point in the history
  • Loading branch information
MichaReiser committed Jan 6, 2025
1 parent a594ad2 commit 2aaba5d
Show file tree
Hide file tree
Showing 6 changed files with 28 additions and 42 deletions.
2 changes: 1 addition & 1 deletion crates/ruff_linter/src/rules/ruff/rules/dataclass_enum.rs
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ impl AlwaysFixableViolation for DataclassEnum {
pub(crate) fn dataclass_enum(checker: &mut Checker, class_def: &StmtClassDef) {
let semantic = checker.semantic();

let Some(DataclassKind::Stdlib { decorator }) = dataclass_kind(class_def, semantic) else {
let Some((DataclassKind::Stdlib, decorator)) = dataclass_kind(class_def, semantic) else {
return;
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,19 +77,18 @@ pub(crate) fn function_call_in_dataclass_default(
) {
let semantic = checker.semantic();

let Some(dataclass_kind) = dataclass_kind(class_def, semantic) else {
let Some((dataclass_kind, _)) = dataclass_kind(class_def, semantic) else {
return;
};
let decorator = dataclass_kind.decorator();

if dataclass_kind.is_attrs() && checker.settings.preview.is_disabled() {
return;
}

let attrs_auto_attribs = match dataclass_kind {
DataclassKind::Stdlib { .. } => None,
DataclassKind::Stdlib => None,

DataclassKind::Attrs { auto_attribs, .. } => match auto_attribs {
DataclassKind::Attrs(auto_attribs) => match auto_attribs {
AttrsAutoAttribs::Unknown => return,

AttrsAutoAttribs::None => {
Expand All @@ -105,11 +104,8 @@ pub(crate) fn function_call_in_dataclass_default(
};

let dataclass_kind = match attrs_auto_attribs {
None => DataclassKind::Stdlib { decorator },
Some(auto_attribs) => DataclassKind::Attrs {
auto_attribs,
decorator,
},
None => DataclassKind::Stdlib,
Some(auto_attribs) => DataclassKind::Attrs(auto_attribs),
};

let extend_immutable_calls: Vec<QualifiedName> = checker
Expand Down
47 changes: 18 additions & 29 deletions crates/ruff_linter/src/rules/ruff/rules/helpers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,8 @@ pub(super) fn is_dataclass_field(
dataclass_kind: DataclassKind,
) -> bool {
match dataclass_kind {
DataclassKind::Attrs { .. } => is_attrs_field(func, semantic),
DataclassKind::Stdlib { .. } => is_stdlib_dataclass_field(func, semantic),
DataclassKind::Attrs(..) => is_attrs_field(func, semantic),
DataclassKind::Stdlib => is_stdlib_dataclass_field(func, semantic),
}
}

Expand Down Expand Up @@ -93,23 +93,21 @@ pub(super) enum AttrsAutoAttribs {
}

/// Enumeration of various kinds of dataclasses recognised by Ruff
#[derive(Debug, Copy, Clone, PartialEq, is_macro::Is)]
pub(super) enum DataclassKind<'a> {
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
pub(super) enum DataclassKind {
/// dataclasses created by the stdlib `dataclasses` module
Stdlib { decorator: &'a ast::Decorator },
Stdlib,
/// dataclasses created by the third-party `attrs` library
Attrs {
auto_attribs: AttrsAutoAttribs,
decorator: &'a ast::Decorator,
},
Attrs(AttrsAutoAttribs),
}

impl<'a> DataclassKind<'a> {
pub(crate) fn decorator(self) -> &'a ast::Decorator {
match self {
Self::Stdlib { decorator } => decorator,
Self::Attrs { decorator, .. } => decorator,
}
impl DataclassKind {
pub(super) const fn is_stdlib(self) -> bool {
matches!(self, DataclassKind::Stdlib)
}

pub(super) const fn is_attrs(self) -> bool {
matches!(self, DataclassKind::Attrs(..))
}
}

Expand All @@ -118,7 +116,7 @@ impl<'a> DataclassKind<'a> {
pub(super) fn dataclass_kind<'a>(
class_def: &'a ast::StmtClassDef,
semantic: &SemanticModel,
) -> Option<DataclassKind<'a>> {
) -> Option<(DataclassKind, &'a ast::Decorator)> {
if !(semantic.seen_module(Modules::DATACLASSES) || semantic.seen_module(Modules::ATTRS)) {
return None;
}
Expand All @@ -143,17 +141,11 @@ pub(super) fn dataclass_kind<'a>(
AttrsAutoAttribs::None
};

return Some(DataclassKind::Attrs {
auto_attribs,
decorator,
});
return Some((DataclassKind::Attrs(auto_attribs), decorator));
};

let Some(auto_attribs) = arguments.find_keyword("auto_attribs") else {
return Some(DataclassKind::Attrs {
auto_attribs: AttrsAutoAttribs::None,
decorator,
});
return Some((DataclassKind::Attrs(AttrsAutoAttribs::None), decorator));
};

let auto_attribs = match Truthiness::from_expr(&auto_attribs.value, |id| {
Expand All @@ -171,12 +163,9 @@ pub(super) fn dataclass_kind<'a>(
Truthiness::Unknown => AttrsAutoAttribs::Unknown,
};

return Some(DataclassKind::Attrs {
auto_attribs,
decorator,
});
return Some((DataclassKind::Attrs(auto_attribs), decorator));
}
["dataclasses", "dataclass"] => return Some(DataclassKind::Stdlib { decorator }),
["dataclasses", "dataclass"] => return Some((DataclassKind::Stdlib, decorator)),
_ => continue,
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,8 @@ pub(crate) fn mutable_class_default(checker: &mut Checker, class_def: &ast::Stmt
&& !is_final_annotation(annotation, checker.semantic())
&& !is_immutable_annotation(annotation, checker.semantic(), &[])
{
if let Some(dataclass_kind) = dataclass_kind(class_def, checker.semantic()) {
if let Some((dataclass_kind, _)) = dataclass_kind(class_def, checker.semantic())
{
if dataclass_kind.is_stdlib() || checker.settings.preview.is_enabled() {
continue;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ impl Violation for MutableDataclassDefault {
pub(crate) fn mutable_dataclass_default(checker: &mut Checker, class_def: &ast::StmtClassDef) {
let semantic = checker.semantic();

let Some(dataclass_kind) = dataclass_kind(class_def, semantic) else {
let Some((dataclass_kind, _)) = dataclass_kind(class_def, semantic) else {
return;
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ pub(crate) fn post_init_default(checker: &mut Checker, function_def: &ast::StmtF
ScopeKind::Class(class_def) => {
if !matches!(
dataclass_kind(class_def, checker.semantic()),
Some(DataclassKind::Stdlib { .. })
Some((DataclassKind::Stdlib, _))
) {
return;
}
Expand Down

0 comments on commit 2aaba5d

Please sign in to comment.