diff options
author | Kamil Ogórek <kamil.ogorek@gmail.com> | 2024-09-05 10:51:40 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-09-05 08:51:40 +0000 |
commit | 2c4d99a4586a8aa143feb8614e3b0d4de09dd190 (patch) | |
tree | 0c07ee12254da10d9710616be8cc98a32c0f35c7 /cli | |
parent | 49340b96f6b3603186e03f0102b99bc4a34a1b63 (diff) |
feat: include version number in all --json based outputs (#25335)
Co-authored-by: Bartek Iwańczuk <biwanczuk@gmail.com>
Diffstat (limited to 'cli')
-rw-r--r-- | cli/tools/bench/reporters.rs | 4 | ||||
-rw-r--r-- | cli/tools/doc.rs | 15 | ||||
-rw-r--r-- | cli/tools/info.rs | 15 | ||||
-rw-r--r-- | cli/tools/lint/mod.rs | 27 | ||||
-rw-r--r-- | cli/tools/lint/reporters.rs | 4 |
5 files changed, 45 insertions, 20 deletions
diff --git a/cli/tools/bench/reporters.rs b/cli/tools/bench/reporters.rs index 250655be7..9aabd760b 100644 --- a/cli/tools/bench/reporters.rs +++ b/cli/tools/bench/reporters.rs @@ -18,8 +18,11 @@ pub trait BenchReporter { fn report_uncaught_error(&mut self, origin: &str, error: Box<JsError>); } +const JSON_SCHEMA_VERSION: u8 = 1; + #[derive(Debug, Serialize)] struct JsonReporterOutput { + version: u8, runtime: String, cpu: String, benches: Vec<JsonReporterBench>, @@ -28,6 +31,7 @@ struct JsonReporterOutput { impl Default for JsonReporterOutput { fn default() -> Self { Self { + version: JSON_SCHEMA_VERSION, runtime: format!( "{} {}", version::DENO_VERSION_INFO.user_agent, diff --git a/cli/tools/doc.rs b/cli/tools/doc.rs index ce31c8068..0ba3b84fb 100644 --- a/cli/tools/doc.rs +++ b/cli/tools/doc.rs @@ -5,8 +5,7 @@ use crate::args::DocHtmlFlag; use crate::args::DocSourceFileFlag; use crate::args::Flags; use crate::colors; -use crate::display::write_json_to_stdout; -use crate::display::write_to_stdout_ignore_sigpipe; +use crate::display; use crate::factory::CliFactory; use crate::graph_util::graph_exit_lock_errors; use crate::tsc::get_types_declaration_file_text; @@ -17,6 +16,7 @@ use deno_config::glob::PathOrPatternSet; use deno_core::anyhow::bail; use deno_core::anyhow::Context; use deno_core::error::AnyError; +use deno_core::serde_json; use deno_doc as doc; use deno_doc::html::UrlResolveKind; use deno_graph::source::NullFileSystem; @@ -31,6 +31,8 @@ use std::collections::BTreeMap; use std::rc::Rc; use std::sync::Arc; +const JSON_SCHEMA_VERSION: u8 = 1; + async fn generate_doc_nodes_for_builtin_types( doc_flags: DocFlags, parser: &dyn ModuleParser, @@ -228,7 +230,11 @@ pub async fn doc( doc_nodes_by_url.into_values().flatten().collect::<Vec<_>>(); if doc_flags.json { - write_json_to_stdout(&doc_nodes) + let json_output = serde_json::json!({ + "version": JSON_SCHEMA_VERSION, + "nodes": &doc_nodes + }); + display::write_json_to_stdout(&json_output) } else if doc_flags.lint { // don't output docs if running with only the --lint flag log::info!( @@ -553,7 +559,8 @@ fn print_docs_to_stdout( ) }; - write_to_stdout_ignore_sigpipe(details.as_bytes()).map_err(AnyError::from) + display::write_to_stdout_ignore_sigpipe(details.as_bytes()) + .map_err(AnyError::from) } fn check_diagnostics(diagnostics: &[DocDiagnostic]) -> Result<(), AnyError> { diff --git a/cli/tools/info.rs b/cli/tools/info.rs index a32f9dc45..6aa044a92 100644 --- a/cli/tools/info.rs +++ b/cli/tools/info.rs @@ -11,7 +11,6 @@ use deno_core::anyhow::bail; use deno_core::error::AnyError; use deno_core::resolve_url_or_path; use deno_core::serde_json; -use deno_core::serde_json::json; use deno_graph::Dependency; use deno_graph::GraphKind; use deno_graph::Module; @@ -35,6 +34,8 @@ use crate::npm::CliNpmResolver; use crate::npm::ManagedCliNpmResolver; use crate::util::checksum; +const JSON_SCHEMA_VERSION: u8 = 1; + pub async fn info( flags: Arc<Flags>, info_flags: InfoFlags, @@ -79,7 +80,10 @@ pub async fn info( } if info_flags.json { - let mut json_graph = json!(graph); + let mut json_graph = serde_json::json!(graph); + if let Some(output) = json_graph.as_object_mut() { + output.insert("version".to_string(), JSON_SCHEMA_VERSION.into()); + } add_npm_packages_to_json(&mut json_graph, npm_resolver.as_ref()); display::write_json_to_stdout(&json_graph)?; } else { @@ -121,7 +125,8 @@ fn print_cache_info( let local_storage_dir = origin_dir.join("local_storage"); if json { - let mut output = json!({ + let mut json_output = serde_json::json!({ + "version": JSON_SCHEMA_VERSION, "denoDir": deno_dir, "modulesCache": modules_cache, "npmCache": npm_cache, @@ -131,10 +136,10 @@ fn print_cache_info( }); if location.is_some() { - output["localStorage"] = serde_json::to_value(local_storage_dir)?; + json_output["localStorage"] = serde_json::to_value(local_storage_dir)?; } - display::write_json_to_stdout(&output) + display::write_json_to_stdout(&json_output) } else { println!("{} {}", colors::bold("DENO_DIR location:"), deno_dir); println!( diff --git a/cli/tools/lint/mod.rs b/cli/tools/lint/mod.rs index 5b51b2b40..d5d174bf7 100644 --- a/cli/tools/lint/mod.rs +++ b/cli/tools/lint/mod.rs @@ -45,6 +45,7 @@ use crate::colors; use crate::factory::CliFactory; use crate::graph_util::ModuleGraphCreator; use crate::tools::fmt::run_parallelized; +use crate::util::display; use crate::util::file_watcher; use crate::util::fs::canonicalize_path; use crate::util::path::is_script_ext; @@ -60,6 +61,8 @@ pub use rules::collect_no_slow_type_diagnostics; pub use rules::ConfiguredRules; pub use rules::LintRuleProvider; +const JSON_SCHEMA_VERSION: u8 = 1; + static STDIN_FILE_NAME: &str = "$deno$stdin.ts"; pub async fn lint( @@ -440,18 +443,20 @@ pub fn print_rules_list(json: bool, maybe_rules_tags: Option<Vec<String>>) { .rules; if json { - let json_rules: Vec<serde_json::Value> = lint_rules - .iter() - .map(|rule| { - serde_json::json!({ - "code": rule.code(), - "tags": rule.tags(), - "docs": rule.docs(), + let json_output = serde_json::json!({ + "version": JSON_SCHEMA_VERSION, + "rules": lint_rules + .iter() + .map(|rule| { + serde_json::json!({ + "code": rule.code(), + "tags": rule.tags(), + "docs": rule.docs(), + }) }) - }) - .collect(); - let json_str = serde_json::to_string_pretty(&json_rules).unwrap(); - println!("{json_str}"); + .collect::<Vec<serde_json::Value>>(), + }); + display::write_json_to_stdout(&json_output).unwrap(); } else { // The rules should still be printed even if `--quiet` option is enabled, // so use `println!` here instead of `info!`. diff --git a/cli/tools/lint/reporters.rs b/cli/tools/lint/reporters.rs index cb00ad296..bf80be9f2 100644 --- a/cli/tools/lint/reporters.rs +++ b/cli/tools/lint/reporters.rs @@ -12,6 +12,8 @@ use crate::args::LintReporterKind; use super::LintError; +const JSON_SCHEMA_VERSION: u8 = 1; + pub fn create_reporter(kind: LintReporterKind) -> Box<dyn LintReporter + Send> { match kind { LintReporterKind::Pretty => Box::new(PrettyLintReporter::new()), @@ -170,6 +172,7 @@ struct JsonLintDiagnostic { #[derive(Serialize)] struct JsonLintReporter { + version: u8, diagnostics: Vec<JsonLintDiagnostic>, errors: Vec<LintError>, } @@ -177,6 +180,7 @@ struct JsonLintReporter { impl JsonLintReporter { fn new() -> JsonLintReporter { JsonLintReporter { + version: JSON_SCHEMA_VERSION, diagnostics: Vec::new(), errors: Vec::new(), } |