diff --git a/.changeset/silent-bottles-film.md b/.changeset/silent-bottles-film.md new file mode 100644 index 000000000000..c1d5d020eaf7 --- /dev/null +++ b/.changeset/silent-bottles-film.md @@ -0,0 +1,16 @@ +--- +"@biomejs/biome": patch +--- + +Fixed [#8300](https://github.com/biomejs/biome/issues/8300): [`noUnusedImports`](https://biomejs.dev/linter/rules/no-unused-imports/) now detects JSDoc tags on object properties. + +```js +import type LinkOnObjectProperty from "mod"; + +const testLinkOnObjectProperty = { + /** + * {@link LinkOnObjectProperty} + */ + property: 0, +}; +``` diff --git a/crates/biome_js_analyze/src/lint/correctness/no_unused_imports.rs b/crates/biome_js_analyze/src/lint/correctness/no_unused_imports.rs index 2c453a1a02aa..a0a6c78124d5 100644 --- a/crates/biome_js_analyze/src/lint/correctness/no_unused_imports.rs +++ b/crates/biome_js_analyze/src/lint/correctness/no_unused_imports.rs @@ -18,8 +18,8 @@ use biome_js_factory::make::{js_identifier_binding, js_module, js_module_item_li use biome_js_semantic::{ReferencesExtensions, SemanticModel}; use biome_js_syntax::{ AnyJsBinding, AnyJsClassMember, AnyJsCombinedSpecifier, AnyJsDeclaration, AnyJsImportClause, - AnyJsNamedImportSpecifier, AnyTsTypeMember, JsExport, JsLanguage, JsNamedImportSpecifiers, - JsStaticMemberAssignment, JsSyntaxNode, T, TsEnumMember, + AnyJsNamedImportSpecifier, AnyJsObjectMember, AnyTsTypeMember, JsExport, JsLanguage, + JsNamedImportSpecifiers, JsStaticMemberAssignment, JsSyntaxNode, T, TsEnumMember, }; use biome_jsdoc_comment::JsdocComment; use biome_rowan::{ @@ -133,7 +133,7 @@ struct JsDocTypeCollectorVisitor { } declare_node_union! { - pub AnyJsWithTypeReferencingJsDoc = AnyJsDeclaration | AnyJsClassMember | AnyTsTypeMember | TsEnumMember | JsExport | JsStaticMemberAssignment + pub AnyJsWithTypeReferencingJsDoc = AnyJsDeclaration | AnyJsClassMember | AnyJsObjectMember | AnyTsTypeMember | TsEnumMember | JsExport | JsStaticMemberAssignment } impl Visitor for JsDocTypeCollectorVisitor { diff --git a/crates/biome_js_analyze/tests/specs/correctness/noUnusedImports/issue_4677_jsdoc.js b/crates/biome_js_analyze/tests/specs/correctness/noUnusedImports/issue_4677_jsdoc.js index 6d0e23941bd1..4990d30e565d 100644 --- a/crates/biome_js_analyze/tests/specs/correctness/noUnusedImports/issue_4677_jsdoc.js +++ b/crates/biome_js_analyze/tests/specs/correctness/noUnusedImports/issue_4677_jsdoc.js @@ -9,6 +9,7 @@ import TypeOnGlobalVariable from "mod"; import TypeOnFunctionVariable from "mod"; import TypeOnTypeDef from "mod"; import TypeOnExportedFunction from "mod"; +import TypeOnObjectProperty from "mod"; /** * @typedef {TypeOnTypeDef} TestTypeOnTypeDef @@ -58,3 +59,10 @@ function testTypeOnFunctionVariable() { */ let testTypeOnFunctionVariable; } + +const testTypeOnObjectProperty = { + /** + * @type {TypeOnObjectProperty} + */ + property: 0, +}; diff --git a/crates/biome_js_analyze/tests/specs/correctness/noUnusedImports/issue_4677_jsdoc.js.snap b/crates/biome_js_analyze/tests/specs/correctness/noUnusedImports/issue_4677_jsdoc.js.snap index eb0bb468814e..95436fd2b44b 100644 --- a/crates/biome_js_analyze/tests/specs/correctness/noUnusedImports/issue_4677_jsdoc.js.snap +++ b/crates/biome_js_analyze/tests/specs/correctness/noUnusedImports/issue_4677_jsdoc.js.snap @@ -15,6 +15,7 @@ import TypeOnGlobalVariable from "mod"; import TypeOnFunctionVariable from "mod"; import TypeOnTypeDef from "mod"; import TypeOnExportedFunction from "mod"; +import TypeOnObjectProperty from "mod"; /** * @typedef {TypeOnTypeDef} TestTypeOnTypeDef @@ -65,4 +66,11 @@ function testTypeOnFunctionVariable() { let testTypeOnFunctionVariable; } +const testTypeOnObjectProperty = { + /** + * @type {TypeOnObjectProperty} + */ + property: 0, +}; + ``` diff --git a/crates/biome_js_analyze/tests/specs/correctness/noUnusedImports/issue_4677_tsdoc.ts b/crates/biome_js_analyze/tests/specs/correctness/noUnusedImports/issue_4677_tsdoc.ts index 48f596d94e64..f1e53c03fd6e 100644 --- a/crates/biome_js_analyze/tests/specs/correctness/noUnusedImports/issue_4677_tsdoc.ts +++ b/crates/biome_js_analyze/tests/specs/correctness/noUnusedImports/issue_4677_tsdoc.ts @@ -20,6 +20,8 @@ import type LinkOnInterfaceIndexer from "mod"; import type LinkOnEnum from "mod"; import type LinkOnEnumMember from "mod"; +import type LinkOnObjectProperty from "mod"; + /** * {@link LinkOnFunction} @@ -108,4 +110,11 @@ enum TestLinkOnEnumMember { * {@link LinkOnEnumMember} */ member -} \ No newline at end of file +} + +const testLinkOnObjectProperty = { + /** + * {@link LinkOnObjectProperty} + */ + property: 0, +}; diff --git a/crates/biome_js_analyze/tests/specs/correctness/noUnusedImports/issue_4677_tsdoc.ts.snap b/crates/biome_js_analyze/tests/specs/correctness/noUnusedImports/issue_4677_tsdoc.ts.snap index 526c852ea44e..90db18134ec2 100644 --- a/crates/biome_js_analyze/tests/specs/correctness/noUnusedImports/issue_4677_tsdoc.ts.snap +++ b/crates/biome_js_analyze/tests/specs/correctness/noUnusedImports/issue_4677_tsdoc.ts.snap @@ -26,6 +26,8 @@ import type LinkOnInterfaceIndexer from "mod"; import type LinkOnEnum from "mod"; import type LinkOnEnumMember from "mod"; +import type LinkOnObjectProperty from "mod"; + /** * {@link LinkOnFunction} @@ -115,4 +117,12 @@ enum TestLinkOnEnumMember { */ member } + +const testLinkOnObjectProperty = { + /** + * {@link LinkOnObjectProperty} + */ + property: 0, +}; + ``` diff --git a/crates/biome_js_analyze/tests/specs/correctness/noUnusedImports/issue_7876_tsdoc_linkcode.ts b/crates/biome_js_analyze/tests/specs/correctness/noUnusedImports/issue_7876_tsdoc_linkcode.ts index 7502da0fd574..f057bff7d04b 100644 --- a/crates/biome_js_analyze/tests/specs/correctness/noUnusedImports/issue_7876_tsdoc_linkcode.ts +++ b/crates/biome_js_analyze/tests/specs/correctness/noUnusedImports/issue_7876_tsdoc_linkcode.ts @@ -20,6 +20,8 @@ import type LinkOnInterfaceIndexer from "mod"; import type LinkOnEnum from "mod"; import type LinkOnEnumMember from "mod"; +import type LinkOnObjectProperty from "mod"; + /** * {@linkcode LinkOnFunction} @@ -108,4 +110,11 @@ enum TestLinkOnEnumMember { * {@linkcode LinkOnEnumMember} */ member -} \ No newline at end of file +} + +const testLinkOnObjectProperty = { + /** + * {@linkcode LinkOnObjectProperty} + */ + property: 0, +}; diff --git a/crates/biome_js_analyze/tests/specs/correctness/noUnusedImports/issue_7876_tsdoc_linkcode.ts.snap b/crates/biome_js_analyze/tests/specs/correctness/noUnusedImports/issue_7876_tsdoc_linkcode.ts.snap index 5f644b1f4537..832b98542061 100644 --- a/crates/biome_js_analyze/tests/specs/correctness/noUnusedImports/issue_7876_tsdoc_linkcode.ts.snap +++ b/crates/biome_js_analyze/tests/specs/correctness/noUnusedImports/issue_7876_tsdoc_linkcode.ts.snap @@ -26,6 +26,8 @@ import type LinkOnInterfaceIndexer from "mod"; import type LinkOnEnum from "mod"; import type LinkOnEnumMember from "mod"; +import type LinkOnObjectProperty from "mod"; + /** * {@linkcode LinkOnFunction} @@ -115,4 +117,12 @@ enum TestLinkOnEnumMember { */ member } + +const testLinkOnObjectProperty = { + /** + * {@linkcode LinkOnObjectProperty} + */ + property: 0, +}; + ``` diff --git a/crates/biome_js_analyze/tests/specs/correctness/noUnusedImports/issue_7876_tsdoc_linkplain.ts b/crates/biome_js_analyze/tests/specs/correctness/noUnusedImports/issue_7876_tsdoc_linkplain.ts index 3550628905d8..fb9b2e8f987d 100644 --- a/crates/biome_js_analyze/tests/specs/correctness/noUnusedImports/issue_7876_tsdoc_linkplain.ts +++ b/crates/biome_js_analyze/tests/specs/correctness/noUnusedImports/issue_7876_tsdoc_linkplain.ts @@ -20,6 +20,8 @@ import type LinkOnInterfaceIndexer from "mod"; import type LinkOnEnum from "mod"; import type LinkOnEnumMember from "mod"; +import type LinkOnObjectProperty from "mod"; + /** * {@linkplain LinkOnFunction} @@ -108,4 +110,11 @@ enum TestLinkOnEnumMember { * {@linkplain LinkOnEnumMember} */ member -} \ No newline at end of file +} + +const testLinkOnObjectProperty = { + /** + * {@linkplain LinkOnObjectProperty} + */ + property: 0, +}; diff --git a/crates/biome_js_analyze/tests/specs/correctness/noUnusedImports/issue_7876_tsdoc_linkplain.ts.snap b/crates/biome_js_analyze/tests/specs/correctness/noUnusedImports/issue_7876_tsdoc_linkplain.ts.snap index 70ee8081db04..4e515ff557c7 100644 --- a/crates/biome_js_analyze/tests/specs/correctness/noUnusedImports/issue_7876_tsdoc_linkplain.ts.snap +++ b/crates/biome_js_analyze/tests/specs/correctness/noUnusedImports/issue_7876_tsdoc_linkplain.ts.snap @@ -26,6 +26,8 @@ import type LinkOnInterfaceIndexer from "mod"; import type LinkOnEnum from "mod"; import type LinkOnEnumMember from "mod"; +import type LinkOnObjectProperty from "mod"; + /** * {@linkplain LinkOnFunction} @@ -115,4 +117,12 @@ enum TestLinkOnEnumMember { */ member } + +const testLinkOnObjectProperty = { + /** + * {@linkplain LinkOnObjectProperty} + */ + property: 0, +}; + ```