diff --git a/.changeset/grumpy-monkeys-tap.md b/.changeset/grumpy-monkeys-tap.md new file mode 100644 index 000000000000..dd2a3fbf444b --- /dev/null +++ b/.changeset/grumpy-monkeys-tap.md @@ -0,0 +1,5 @@ +--- +"@biomejs/biome": patch +--- + +Fixed [#7301](https://github.com/biomejs/biome/issues/7301): [`useReadonlyClassProperties`](https://biomejs.dev/linter/rules/use-readonly-class-properties/) now correctly skips JavaScript files. diff --git a/crates/biome_js_analyze/src/lint/style/use_readonly_class_properties.rs b/crates/biome_js_analyze/src/lint/style/use_readonly_class_properties.rs index 86ee5c45ab75..34f26bc557de 100644 --- a/crates/biome_js_analyze/src/lint/style/use_readonly_class_properties.rs +++ b/crates/biome_js_analyze/src/lint/style/use_readonly_class_properties.rs @@ -10,8 +10,8 @@ use biome_js_syntax::{ JsArrowFunctionExpression, JsAssignmentExpression, JsAwaitExpression, JsBlockStatement, JsCallArgumentList, JsCallArguments, JsCallExpression, JsClassDeclaration, JsClassMemberList, JsConditionalExpression, JsConstructorClassMember, JsElseClause, JsExpressionStatement, - JsFunctionBody, JsFunctionExpression, JsGetterClassMember, JsGetterObjectMember, JsIfStatement, - JsInitializerClause, JsLanguage, JsMethodClassMember, JsMethodObjectMember, + JsFileSource, JsFunctionBody, JsFunctionExpression, JsGetterClassMember, JsGetterObjectMember, + JsIfStatement, JsInitializerClause, JsLanguage, JsMethodClassMember, JsMethodObjectMember, JsObjectAssignmentPattern, JsObjectExpression, JsObjectMemberList, JsParenthesizedExpression, JsPostUpdateExpression, JsPreUpdateExpression, JsPropertyClassMember, JsReturnStatement, JsSetterClassMember, JsSetterObjectMember, JsStatementList, JsStaticMemberAssignment, @@ -139,6 +139,11 @@ impl Rule for UseReadonlyClassProperties { type Options = UseReadonlyClassPropertiesOptions; fn run(ctx: &RuleContext) -> Self::Signals { + let source_type = ctx.source_type::().language(); + if !source_type.is_typescript() { + return Box::default(); + } + let root = ctx.query(); let members = root.members(); let private_only = !ctx.options().check_all_properties; diff --git a/crates/biome_js_analyze/tests/specs/style/useReadonlyClassProperties/valid.js b/crates/biome_js_analyze/tests/specs/style/useReadonlyClassProperties/valid.js new file mode 100644 index 000000000000..b6fc027f1f69 --- /dev/null +++ b/crates/biome_js_analyze/tests/specs/style/useReadonlyClassProperties/valid.js @@ -0,0 +1,7 @@ +// should not generate diagnostics + +// should skip because of JavaScript +class MyClass { + foo = 34; + #bar = 33; +} diff --git a/crates/biome_js_analyze/tests/specs/style/useReadonlyClassProperties/valid.js.snap b/crates/biome_js_analyze/tests/specs/style/useReadonlyClassProperties/valid.js.snap new file mode 100644 index 000000000000..533337cec364 --- /dev/null +++ b/crates/biome_js_analyze/tests/specs/style/useReadonlyClassProperties/valid.js.snap @@ -0,0 +1,15 @@ +--- +source: crates/biome_js_analyze/tests/spec_tests.rs +expression: valid.js +--- +# Input +```js +// should not generate diagnostics + +// should skip because of JavaScript +class MyClass { + foo = 34; + #bar = 33; +} + +```