0
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2025-03-11 22:59:41 -04:00

fix: make deprecation warnings less verbose (#22128)

This commit makes deprecation warnings less verbose by default.

Only a single warnings is issued per deprecated API use.

`DENO_VERBOSE_WARNINGS` env var can be provided to enable more detailed
logging for each use of API including a stack trace.

https://github.com/denoland/deno/assets/13602871/9c036c84-0044-4cb6-9c8e-deb641f43712
This commit is contained in:
Bartek Iwańczuk 2024-01-26 16:41:16 +01:00
parent d2643fadb9
commit 69fe906f65
No known key found for this signature in database
GPG key ID: 0C6BCDDC3B3AD750
9 changed files with 103 additions and 43 deletions

View file

@ -685,6 +685,7 @@ pub struct CliOptions {
overrides: CliOptionOverrides, overrides: CliOptionOverrides,
maybe_workspace_config: Option<WorkspaceConfig>, maybe_workspace_config: Option<WorkspaceConfig>,
pub disable_deprecated_api_warning: bool, pub disable_deprecated_api_warning: bool,
pub verbose_deprecated_api_warning: bool,
} }
impl CliOptions { impl CliOptions {
@ -739,6 +740,9 @@ impl CliOptions {
== Some(log::Level::Error) == Some(log::Level::Error)
|| std::env::var("DENO_NO_DEPRECATION_WARNINGS").ok().is_some(); || std::env::var("DENO_NO_DEPRECATION_WARNINGS").ok().is_some();
let verbose_deprecated_api_warning =
std::env::var("DENO_VERBOSE_WARNINGS").ok().is_some();
Ok(Self { Ok(Self {
flags, flags,
initial_cwd, initial_cwd,
@ -750,6 +754,7 @@ impl CliOptions {
overrides: Default::default(), overrides: Default::default(),
maybe_workspace_config, maybe_workspace_config,
disable_deprecated_api_warning, disable_deprecated_api_warning,
verbose_deprecated_api_warning,
}) })
} }
@ -1096,6 +1101,7 @@ impl CliOptions {
maybe_workspace_config: self.maybe_workspace_config.clone(), maybe_workspace_config: self.maybe_workspace_config.clone(),
overrides: self.overrides.clone(), overrides: self.overrides.clone(),
disable_deprecated_api_warning: self.disable_deprecated_api_warning, disable_deprecated_api_warning: self.disable_deprecated_api_warning,
verbose_deprecated_api_warning: self.verbose_deprecated_api_warning,
} }
} }

View file

@ -751,6 +751,7 @@ impl CliFactory {
self.create_cli_main_worker_options()?, self.create_cli_main_worker_options()?,
self.options.node_ipc_fd(), self.options.node_ipc_fd(),
self.options.disable_deprecated_api_warning, self.options.disable_deprecated_api_warning,
self.options.verbose_deprecated_api_warning,
)) ))
} }

View file

@ -540,6 +540,7 @@ pub async fn run(
}, },
None, None,
metadata.disable_deprecated_api_warning, metadata.disable_deprecated_api_warning,
false,
); );
v8_set_flags(construct_v8_flags(&[], &metadata.v8_flags, vec![])); v8_set_flags(construct_v8_flags(&[], &metadata.v8_flags, vec![]));

View file

@ -5099,6 +5099,14 @@ itest!(warn_on_deprecated_api {
exit_code: 0, exit_code: 0,
}); });
itest!(warn_on_deprecated_api_verbose {
args: "run -A run/warn_on_deprecated_api/main.js",
output: "run/warn_on_deprecated_api/main.verbose.out",
envs: vec![("DENO_VERBOSE_WARNINGS".to_string(), "1".to_string())],
http_server: true,
exit_code: 0,
});
itest!(warn_on_deprecated_api_with_flag { itest!(warn_on_deprecated_api_with_flag {
args: "run -A --quiet run/warn_on_deprecated_api/main.js", args: "run -A --quiet run/warn_on_deprecated_api/main.js",
output: "run/warn_on_deprecated_api/main_disabled_flag.out", output: "run/warn_on_deprecated_api/main_disabled_flag.out",

View file

@ -1,38 +1,8 @@
Download http://localhost:4545/run/warn_on_deprecated_api/mod.ts Download http://localhost:4545/run/warn_on_deprecated_api/mod.ts
warning: Use of deprecated "Deno.run()" API. This API will be removed in Deno 2. warning: Use of deprecated "Deno.run()" API. This API will be removed in Deno 2. Run again with DENO_VERBOSE_WARNINGS=1 to get more details.
hello world
Stack trace: hello world
at [WILDCARD]warn_on_deprecated_api/main.js:3:16 hello world
hint: Use "Deno.Command()" API instead.
hello world
warning: Use of deprecated "Deno.run()" API. This API will be removed in Deno 2.
Stack trace:
at runEcho ([WILDCARD]warn_on_deprecated_api/main.js:14:18)
at [WILDCARD]warn_on_deprecated_api/main.js:25:7
hint: Use "Deno.Command()" API instead.
hello world
warning: Use of deprecated "Deno.run()" API. This API will be removed in Deno 2.
Stack trace:
at runEcho ([WILDCARD]warn_on_deprecated_api/main.js:14:18)
at [WILDCARD]warn_on_deprecated_api/main.js:26:7
hint: Use "Deno.Command()" API instead.
hello world
warning: Use of deprecated "Deno.run()" API. This API will be removed in Deno 2.
Stack trace:
at runEcho ([WILDCARD]warn_on_deprecated_api/main.js:14:18)
at [WILDCARD]warn_on_deprecated_api/main.js:29:9
hint: Use "Deno.Command()" API instead.
hello world hello world
hello world hello world
hello world hello world
@ -43,13 +13,4 @@ hello world
hello world hello world
hello world hello world
hello world hello world
warning: Use of deprecated "Deno.run()" API. This API will be removed in Deno 2.
Stack trace:
at runEcho (http://localhost:4545/run/warn_on_deprecated_api/mod.ts:2:18)
at [WILDCARD]warn_on_deprecated_api/main.js:32:7
hint: Use "Deno.Command()" API instead.
hint: It appears this API is used by a remote dependency. Try upgrading to the latest version of that dependency.
hello world hello world

View file

@ -0,0 +1,55 @@
Download http://localhost:4545/run/warn_on_deprecated_api/mod.ts
warning: Use of deprecated "Deno.run()" API. This API will be removed in Deno 2.
Stack trace:
at [WILDCARD]warn_on_deprecated_api/main.js:3:16
hint: Use "Deno.Command()" API instead.
hello world
warning: Use of deprecated "Deno.run()" API. This API will be removed in Deno 2.
Stack trace:
at runEcho ([WILDCARD]warn_on_deprecated_api/main.js:14:18)
at [WILDCARD]warn_on_deprecated_api/main.js:25:7
hint: Use "Deno.Command()" API instead.
hello world
warning: Use of deprecated "Deno.run()" API. This API will be removed in Deno 2.
Stack trace:
at runEcho ([WILDCARD]warn_on_deprecated_api/main.js:14:18)
at [WILDCARD]warn_on_deprecated_api/main.js:26:7
hint: Use "Deno.Command()" API instead.
hello world
warning: Use of deprecated "Deno.run()" API. This API will be removed in Deno 2.
Stack trace:
at runEcho ([WILDCARD]warn_on_deprecated_api/main.js:14:18)
at [WILDCARD]warn_on_deprecated_api/main.js:29:9
hint: Use "Deno.Command()" API instead.
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
warning: Use of deprecated "Deno.run()" API. This API will be removed in Deno 2.
Stack trace:
at runEcho (http://localhost:4545/run/warn_on_deprecated_api/mod.ts:2:18)
at [WILDCARD]warn_on_deprecated_api/main.js:32:7
hint: Use "Deno.Command()" API instead.
hint: It appears this API is used by a remote dependency. Try upgrading to the latest version of that dependency.
hello world

View file

@ -126,6 +126,7 @@ struct SharedWorkerState {
feature_checker: Arc<FeatureChecker>, feature_checker: Arc<FeatureChecker>,
node_ipc: Option<i64>, node_ipc: Option<i64>,
disable_deprecated_api_warning: bool, disable_deprecated_api_warning: bool,
verbose_deprecated_api_warning: bool,
} }
impl SharedWorkerState { impl SharedWorkerState {
@ -407,6 +408,7 @@ impl CliMainWorkerFactory {
options: CliMainWorkerOptions, options: CliMainWorkerOptions,
node_ipc: Option<i64>, node_ipc: Option<i64>,
disable_deprecated_api_warning: bool, disable_deprecated_api_warning: bool,
verbose_deprecated_api_warning: bool,
) -> Self { ) -> Self {
Self { Self {
shared: Arc::new(SharedWorkerState { shared: Arc::new(SharedWorkerState {
@ -429,6 +431,7 @@ impl CliMainWorkerFactory {
feature_checker, feature_checker,
node_ipc, node_ipc,
disable_deprecated_api_warning, disable_deprecated_api_warning,
verbose_deprecated_api_warning,
}), }),
} }
} }
@ -592,6 +595,7 @@ impl CliMainWorkerFactory {
.clone(), .clone(),
node_ipc_fd: shared.node_ipc, node_ipc_fd: shared.node_ipc,
disable_deprecated_api_warning: shared.disable_deprecated_api_warning, disable_deprecated_api_warning: shared.disable_deprecated_api_warning,
verbose_deprecated_api_warning: shared.verbose_deprecated_api_warning,
}, },
extensions: custom_extensions, extensions: custom_extensions,
startup_snapshot: crate::js::deno_isolate_init(), startup_snapshot: crate::js::deno_isolate_init(),
@ -797,6 +801,7 @@ fn create_web_worker_callback(
.clone(), .clone(),
node_ipc_fd: None, node_ipc_fd: None,
disable_deprecated_api_warning: shared.disable_deprecated_api_warning, disable_deprecated_api_warning: shared.disable_deprecated_api_warning,
verbose_deprecated_api_warning: shared.verbose_deprecated_api_warning,
}, },
extensions: vec![], extensions: vec![],
startup_snapshot: crate::js::deno_isolate_init(), startup_snapshot: crate::js::deno_isolate_init(),

View file

@ -96,6 +96,7 @@ ObjectDefineProperties(Symbol, {
let windowIsClosing = false; let windowIsClosing = false;
let globalThis_; let globalThis_;
let verboseDeprecatedApiWarning = false;
let deprecatedApiWarningDisabled = false; let deprecatedApiWarningDisabled = false;
const ALREADY_WARNED_DEPRECATED = new SafeSet(); const ALREADY_WARNED_DEPRECATED = new SafeSet();
@ -104,6 +105,19 @@ function warnOnDeprecatedApi(apiName, stack, ...suggestions) {
return; return;
} }
if (!verboseDeprecatedApiWarning) {
if (ALREADY_WARNED_DEPRECATED.has(apiName)) {
return;
}
ALREADY_WARNED_DEPRECATED.add(apiName);
console.error(
`%cwarning: %cUse of deprecated "${apiName}" API. This API will be removed in Deno 2. Run again with DENO_VERBOSE_WARNINGS=1 to get more details.`,
"color: yellow;",
"font-weight: bold;",
);
return;
}
if (ALREADY_WARNED_DEPRECATED.has(apiName + stack)) { if (ALREADY_WARNED_DEPRECATED.has(apiName + stack)) {
return; return;
} }
@ -563,9 +577,11 @@ function bootstrapMainRuntime(runtimeOptions) {
5: hasNodeModulesDir, 5: hasNodeModulesDir,
6: maybeBinaryNpmCommandName, 6: maybeBinaryNpmCommandName,
7: shouldDisableDeprecatedApiWarning, 7: shouldDisableDeprecatedApiWarning,
8: shouldUseVerboseDeprecatedApiWarning,
} = runtimeOptions; } = runtimeOptions;
deprecatedApiWarningDisabled = shouldDisableDeprecatedApiWarning; deprecatedApiWarningDisabled = shouldDisableDeprecatedApiWarning;
verboseDeprecatedApiWarning = shouldUseVerboseDeprecatedApiWarning;
performance.setTimeOrigin(DateNow()); performance.setTimeOrigin(DateNow());
globalThis_ = globalThis; globalThis_ = globalThis;
@ -703,9 +719,11 @@ function bootstrapWorkerRuntime(
5: hasNodeModulesDir, 5: hasNodeModulesDir,
6: maybeBinaryNpmCommandName, 6: maybeBinaryNpmCommandName,
7: shouldDisableDeprecatedApiWarning, 7: shouldDisableDeprecatedApiWarning,
8: shouldUseVerboseDeprecatedApiWarning,
} = runtimeOptions; } = runtimeOptions;
deprecatedApiWarningDisabled = shouldDisableDeprecatedApiWarning; deprecatedApiWarningDisabled = shouldDisableDeprecatedApiWarning;
verboseDeprecatedApiWarning = shouldUseVerboseDeprecatedApiWarning;
performance.setTimeOrigin(DateNow()); performance.setTimeOrigin(DateNow());
globalThis_ = globalThis; globalThis_ = globalThis;

View file

@ -61,6 +61,7 @@ pub struct BootstrapOptions {
pub maybe_binary_npm_command_name: Option<String>, pub maybe_binary_npm_command_name: Option<String>,
pub node_ipc_fd: Option<i64>, pub node_ipc_fd: Option<i64>,
pub disable_deprecated_api_warning: bool, pub disable_deprecated_api_warning: bool,
pub verbose_deprecated_api_warning: bool,
} }
impl Default for BootstrapOptions { impl Default for BootstrapOptions {
@ -90,6 +91,7 @@ impl Default for BootstrapOptions {
maybe_binary_npm_command_name: None, maybe_binary_npm_command_name: None,
node_ipc_fd: None, node_ipc_fd: None,
disable_deprecated_api_warning: false, disable_deprecated_api_warning: false,
verbose_deprecated_api_warning: false,
} }
} }
} }
@ -121,6 +123,8 @@ struct BootstrapV8<'a>(
Option<&'a str>, Option<&'a str>,
// disable_deprecated_api_warning, // disable_deprecated_api_warning,
bool, bool,
// verbose_deprecated_api_warning
bool,
); );
impl BootstrapOptions { impl BootstrapOptions {
@ -141,6 +145,7 @@ impl BootstrapOptions {
self.has_node_modules_dir, self.has_node_modules_dir,
self.maybe_binary_npm_command_name.as_deref(), self.maybe_binary_npm_command_name.as_deref(),
self.disable_deprecated_api_warning, self.disable_deprecated_api_warning,
self.verbose_deprecated_api_warning,
); );
bootstrap.serialize(ser).unwrap() bootstrap.serialize(ser).unwrap()