Skip to main content

DevelopmentNodeEnvironment_MicrosoftVSCodeDependency_22NodeVersion_Bundle_Clean_Debug_ElectronProfile_EsbuildCompiler_Mountain/IPC/DevLog/
IsEnabled.rs

1//! Tag-resolution helper. Reads `Trace` once into a static
2//! list, then matches against four rules per call:
3//!
4//! 1. Explicit tag match always wins.
5//! 2. `Trace=all` opens every tag.
6//! 3. `Trace=short` opens every tag *except* the firehose-mute list
7//!    (`SHORT_MODE_MUTED_TAGS`).
8//! 4. Otherwise the tag is closed.
9
10use std::sync::OnceLock;
11
12static ENABLED_TAGS:OnceLock<Vec<String>> = OnceLock::new();
13
14const SHORT_MODE_MUTED_TAGS:&[&str] = &[
15	"grpc-verbose",
16	"vfs-verbose",
17	"fs-route",
18	"tauri-invoke",
19	"rpc-latency",
20	"tree-latency",
21	"nls",
22	"fs-read",
23	"preflight",
24	"wsns",
25	"storage-verbose",
26	"config-prime",
27	"cel-dispatch",
28	"output-verbose",
29	"command-register",
30	"provider-register",
31	"ext-scan-verbose",
32	"channel-stub",
33	"commands-verbose",
34	"scheme-assets",
35	"cocoon-stderr-verbose",
36	"vscode-api-gap",
37];
38
39pub(super) fn EnabledTags() -> &'static Vec<String> {
40	ENABLED_TAGS.get_or_init(|| {
41		match std::env::var("Trace") {
42			Ok(Val) => Val.split(',').map(|S| S.trim().to_lowercase()).collect(),
43			Err(_) => vec![],
44		}
45	})
46}
47
48pub fn Fn(Tag:&str) -> bool {
49	let Tags = EnabledTags();
50
51	if Tags.is_empty() {
52		return false;
53	}
54
55	let Lower = Tag.to_lowercase();
56
57	if Tags.iter().any(|T| T == Lower.as_str()) {
58		return true;
59	}
60
61	if Tags.iter().any(|T| T == "all") {
62		return true;
63	}
64
65	if Tags.iter().any(|T| T == "short") {
66		return !SHORT_MODE_MUTED_TAGS.iter().any(|Muted| *Muted == Lower.as_str());
67	}
68
69	false
70}