mirror of
https://github.com/danbulant/oxc
synced 2026-05-24 12:21:58 +00:00
refactor(linter): deduplicate code in oxc/no-async-await (#5549)
This commit is contained in:
parent
c8ab353a68
commit
81a394d11d
1 changed files with 15 additions and 26 deletions
|
|
@ -1,6 +1,7 @@
|
||||||
use oxc_ast::AstKind;
|
use oxc_ast::AstKind;
|
||||||
use oxc_diagnostics::OxcDiagnostic;
|
use oxc_diagnostics::OxcDiagnostic;
|
||||||
use oxc_macros::declare_oxc_lint;
|
use oxc_macros::declare_oxc_lint;
|
||||||
|
use oxc_semantic::AstNodeId;
|
||||||
use oxc_span::Span;
|
use oxc_span::Span;
|
||||||
|
|
||||||
use crate::{context::LintContext, rule::Rule, AstNode};
|
use crate::{context::LintContext, rule::Rule, AstNode};
|
||||||
|
|
@ -35,36 +36,12 @@ impl Rule for NoAsyncAwait {
|
||||||
match node.kind() {
|
match node.kind() {
|
||||||
AstKind::Function(func_decl) => {
|
AstKind::Function(func_decl) => {
|
||||||
if func_decl.r#async {
|
if func_decl.r#async {
|
||||||
if let Some(AstKind::ObjectProperty(obj_prop)) =
|
report(node.id(), func_decl.span, ctx);
|
||||||
ctx.nodes().parent_kind(node.id())
|
|
||||||
{
|
|
||||||
ctx.diagnostic(no_async_await_diagnostic(Span::new(
|
|
||||||
obj_prop.span.start,
|
|
||||||
obj_prop.span.start + 5, // "async".len()
|
|
||||||
)));
|
|
||||||
} else {
|
|
||||||
ctx.diagnostic(no_async_await_diagnostic(Span::new(
|
|
||||||
func_decl.span.start,
|
|
||||||
func_decl.span.start + 5,
|
|
||||||
)));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
AstKind::ArrowFunctionExpression(arrow_expr) => {
|
AstKind::ArrowFunctionExpression(arrow_expr) => {
|
||||||
if arrow_expr.r#async {
|
if arrow_expr.r#async {
|
||||||
if let Some(AstKind::ObjectProperty(obj_prop)) =
|
report(node.id(), arrow_expr.span, ctx);
|
||||||
ctx.nodes().parent_kind(node.id())
|
|
||||||
{
|
|
||||||
ctx.diagnostic(no_async_await_diagnostic(Span::new(
|
|
||||||
obj_prop.span.start,
|
|
||||||
obj_prop.span.start + 5,
|
|
||||||
)));
|
|
||||||
} else {
|
|
||||||
ctx.diagnostic(no_async_await_diagnostic(Span::new(
|
|
||||||
arrow_expr.span.start,
|
|
||||||
arrow_expr.span.start + 5,
|
|
||||||
)));
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_ => {}
|
_ => {}
|
||||||
|
|
@ -72,6 +49,18 @@ impl Rule for NoAsyncAwait {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn report(node_id: AstNodeId, func_span: Span, ctx: &LintContext<'_>) {
|
||||||
|
/// "async".len()
|
||||||
|
const ASYNC_LEN: u32 = 5;
|
||||||
|
|
||||||
|
let parent = ctx.nodes().parent_kind(node_id);
|
||||||
|
if let Some(AstKind::ObjectProperty(obj_prop)) = parent {
|
||||||
|
ctx.diagnostic(no_async_await_diagnostic(Span::sized(obj_prop.span.start, ASYNC_LEN)));
|
||||||
|
} else {
|
||||||
|
ctx.diagnostic(no_async_await_diagnostic(Span::sized(func_span.start, ASYNC_LEN)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test() {
|
fn test() {
|
||||||
use crate::tester::Tester;
|
use crate::tester::Tester;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue