Skip to content

Commit 5c68dcf

Browse files
vladimir-ivanovkedevked
authored andcommitted
feat(biome-js-analyze): class member references service (biomejs#7428)
1 parent d4311bb commit 5c68dcf

File tree

4 files changed

+164
-52
lines changed

4 files changed

+164
-52
lines changed

crates/biome_js_analyze/src/lib.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ use std::sync::{Arc, LazyLock};
2121
mod a11y;
2222
pub mod assist;
2323
mod ast_utils;
24-
mod class_member_references;
2524
mod frameworks;
2625
pub mod globals;
2726
pub mod lint;

crates/biome_js_analyze/src/lint/style/use_readonly_class_properties.rs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
use crate::JsRuleAction;
2-
use crate::class_member_references::{
3-
AnyPropertyMember, ClassMemberReference, ClassMemberReferences, class_member_references,
2+
use crate::services::semantic_class::{
3+
AnyPropertyMember, ClassMemberReference, ClassMemberReferences, SemanticClass,
44
};
55
use biome_analyze::{
6-
Ast, FixKind, Rule, RuleDiagnostic, RuleSource, context::RuleContext, declare_lint_rule,
6+
FixKind, Rule, RuleDiagnostic, RuleSource, context::RuleContext, declare_lint_rule,
77
};
88
use biome_console::markup;
99
use biome_js_factory::make;
@@ -124,7 +124,7 @@ declare_lint_rule! {
124124
}
125125

126126
impl Rule for UseReadonlyClassProperties {
127-
type Query = Ast<JsClassDeclaration>;
127+
type Query = SemanticClass<JsClassDeclaration>;
128128
type State = AnyPropertyMember;
129129
type Signals = Box<[Self::State]>;
130130
type Options = UseReadonlyClassPropertiesOptions;
@@ -137,11 +137,12 @@ impl Rule for UseReadonlyClassProperties {
137137

138138
let root = ctx.query();
139139
let members = root.members();
140-
let private_only = !ctx.options().check_all_properties;
141-
let ClassMemberReferences { writes, .. } = class_member_references(&members);
142140

141+
let ClassMemberReferences { writes, .. } = ctx.model.class_member_references(&members);
142+
143+
let private_only = !ctx.options().check_all_properties;
143144
let constructor_params: Vec<_> =
144-
collect_non_readonly_constructor_parameters(root, private_only);
145+
collect_non_readonly_constructor_parameters(&members, private_only);
145146
let non_readonly_class_property_members =
146147
collect_non_readonly_class_member_properties(&members, private_only);
147148

@@ -325,15 +326,14 @@ fn collect_non_readonly_class_member_properties(
325326
})
326327
}
327328

328-
/// Collects all all mutable (non-readonly) constructor parameters from a given class declaration. If private_only is true, it only includes parameters with private visibility.
329+
/// Collects all all mutable (non-readonly) constructor parameters from a given class member list. If private_only is true, it only includes parameters with private visibility.
329330
/// It returns a Vec<PropOrParam> representing these parameters, which are candidates for being marked as readonly.
330331
/// e.g. constructor(private paramOne: string, public paramTwo: number) {} makes both paramOne and paramTwo class member properties.
331332
fn collect_non_readonly_constructor_parameters(
332-
class_declaration: &JsClassDeclaration,
333+
class_members: &JsClassMemberList,
333334
private_only: bool,
334335
) -> Vec<AnyPropertyMember> {
335-
class_declaration
336-
.members()
336+
class_members
337337
.iter()
338338
.find_map(|member| match member {
339339
AnyJsClassMember::JsConstructorClassMember(member) => Some(member),

crates/biome_js_analyze/src/services/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,5 @@ pub mod control_flow;
33
pub mod manifest;
44
pub mod module_graph;
55
pub mod semantic;
6+
pub mod semantic_class;
67
pub mod typed;

0 commit comments

Comments
 (0)