From 9953fa54a42ffd2615ce2d8a642390582bf73aa3 Mon Sep 17 00:00:00 2001 From: Dunqing <29533304+Dunqing@users.noreply.github.com> Date: Tue, 27 Aug 2024 03:51:55 +0000 Subject: [PATCH] fix(linter/no-null): incorrect fixer for `NullLiteral` within `ReturnStatement` (#5247) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit close: #5194 It’s a long time no contributed to Linter, I'd like to try it --- crates/oxc_linter/src/rules/unicorn/no_null.rs | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/crates/oxc_linter/src/rules/unicorn/no_null.rs b/crates/oxc_linter/src/rules/unicorn/no_null.rs index dd0a570d1..259413d03 100644 --- a/crates/oxc_linter/src/rules/unicorn/no_null.rs +++ b/crates/oxc_linter/src/rules/unicorn/no_null.rs @@ -199,7 +199,17 @@ impl Rule for NoNull { } (AstKind::ReturnStatement(_), _) => { ctx.diagnostic_with_fix(no_null_diagnostic(null_literal.span), |fixer| { - fixer.delete(null_literal) + let mut null_span = null_literal.span; + // Find the last parent that is a TSAsExpression (`null as any`) or TSNonNullExpression (`null!`) + for parent in ctx.nodes().iter_parents(node.id()).skip(1) { + if matches!( + parent.kind(), + AstKind::TSAsExpression(_) | AstKind::TSNonNullExpression(_) + ) { + null_span = parent.kind().span(); + } + } + fixer.delete(&null_span) }); } (AstKind::SwitchCase(_), Some(AstKind::SwitchStatement(switch))) => { @@ -369,6 +379,8 @@ fn test() { "if (foo === undefined || foo === undefined) {}", Some(check_strict_equality(true)), ), + ("() => { return null! }", "() => { return }", None), + ("() => { return null as any as typeof Array }", "() => { return }", None), ]; Tester::new(NoNull::NAME, pass, fail).expect_fix(fix).test_and_snapshot(); }