From 04f4621ed8b6304a2785c464434e5326fac5a114 Mon Sep 17 00:00:00 2001 From: Yuji Sugiura <6259812+leaysgur@users.noreply.github.com> Date: Sat, 24 Feb 2024 21:35:57 +0900 Subject: [PATCH] fix(semantic): Should return nearest JSDoc (#2490) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Follow up #2437 ( 🙇🏻 ) --- crates/oxc_semantic/src/jsdoc/builder.rs | 30 ++++++++++++++++++++++++ crates/oxc_semantic/src/jsdoc/mod.rs | 3 ++- 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/crates/oxc_semantic/src/jsdoc/builder.rs b/crates/oxc_semantic/src/jsdoc/builder.rs index 5ba4b996f..966a7d7d3 100644 --- a/crates/oxc_semantic/src/jsdoc/builder.rs +++ b/crates/oxc_semantic/src/jsdoc/builder.rs @@ -258,6 +258,36 @@ mod test { } } + #[test] + fn get_all_by_span_order() { + let allocator = Allocator::default(); + let source_text = r" + /**c0*/ + function foo() {} + + /**c1*/ + /* noop */ + /**c2*/ + // noop + /**c3*/ + const x = () => {}; + "; + let symbol = "const x = () => {};"; + let jsdocs = get_jsdoc(&allocator, source_text, symbol, None); + + assert!(jsdocs.is_some()); + let jsdocs = jsdocs.unwrap(); + assert_eq!(jsdocs.len(), 3); + + // Should be [farthest, ..., nearest] + let mut iter = jsdocs.iter(); + let c1 = iter.next().unwrap(); + assert!(c1.comment.contains("c1")); + let _c2 = iter.next().unwrap(); + let c3 = iter.next().unwrap(); + assert!(c3.comment.contains("c3")); + } + #[test] fn get_all_jsdoc() { let allocator = Allocator::default(); diff --git a/crates/oxc_semantic/src/jsdoc/mod.rs b/crates/oxc_semantic/src/jsdoc/mod.rs index 1b70af003..d87c52ee9 100644 --- a/crates/oxc_semantic/src/jsdoc/mod.rs +++ b/crates/oxc_semantic/src/jsdoc/mod.rs @@ -39,7 +39,8 @@ impl<'a> JSDoc<'a> { }; // If flagged, at least 1 JSDoc is attached - jsdocs.first().cloned() + // If multiple JSDocs are attached, return the last = nearest + jsdocs.last().cloned() } pub fn get_all_by_node<'b>(&'b self, node: &AstNode<'a>) -> Option>> {