From b89e931b33e93c3a0a1e05ab0bf62879c08e4413 Mon Sep 17 00:00:00 2001 From: Boshen Date: Wed, 6 Sep 2023 10:21:32 +0800 Subject: [PATCH] fix(cli): spawn linting in another thread so diagnostics can be printed immediately --- crates/oxc_cli/src/lint/mod.rs | 9 ++++++++- crates/oxc_linter/src/service.rs | 1 + 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/crates/oxc_cli/src/lint/mod.rs b/crates/oxc_cli/src/lint/mod.rs index 00d6d53a2..fe07b0ad2 100644 --- a/crates/oxc_cli/src/lint/mod.rs +++ b/crates/oxc_cli/src/lint/mod.rs @@ -47,7 +47,14 @@ impl Runner for LintRunner { let paths = Walk::new(&paths, &ignore_options).paths(); let number_of_files = paths.len(); - lint_service.run(paths, &diagnostic_service.sender().clone()); + // Spawn linting in another thread so diagnostics can be printed immediately from diagnostic_service.run. + rayon::spawn({ + let tx_error = diagnostic_service.sender().clone(); + let lint_service = lint_service.clone(); + move || { + lint_service.run(paths, &tx_error); + } + }); diagnostic_service.run(); lint_service.linter().print_execution_times_if_enable(); diff --git a/crates/oxc_linter/src/service.rs b/crates/oxc_linter/src/service.rs index a2e1383ca..b63c8a5ab 100644 --- a/crates/oxc_linter/src/service.rs +++ b/crates/oxc_linter/src/service.rs @@ -9,6 +9,7 @@ use oxc_span::SourceType; use crate::{Fixer, LintContext, LintOptions, Linter, Message}; use rayon::prelude::{IntoParallelIterator, ParallelIterator}; +#[derive(Clone)] pub struct LintService { linter: Arc, }