use std::collections::HashSet;
use std::sync::LazyLock;
pub const SHELL_KEYWORDS: &[&str] = &[
"git",
"svn",
"hg",
"docker",
"kubectl",
"helm",
"podman",
"nerdctl",
"npm",
"npx",
"pnpm",
"yarn",
"node",
"bun",
"cargo",
"rustc",
"rustup",
"make",
"cmake",
"meson",
"ninja",
"aws",
"gcloud",
"az",
"terraform",
"terragrunt",
"ls",
"cd",
"pwd",
"mkdir",
"rm",
"rmdir",
"cp",
"mv",
"cat",
"echo",
"printf",
"grep",
"egrep",
"fgrep",
"sed",
"awk",
"find",
"xargs",
"sort",
"uniq",
"head",
"tail",
"wc",
"cut",
"tr",
"tee",
"chmod",
"chown",
"chgrp",
"umask",
"curl",
"wget",
"ssh",
"scp",
"rsync",
"netstat",
"ss",
"ip",
"ifconfig",
"ping",
"traceroute",
"nslookup",
"dig",
"host",
"nmap",
"telnet",
"ftp",
"sftp",
"tar",
"zip",
"unzip",
"gzip",
"gunzip",
"bzip2",
"xz",
"7z",
"rar",
"systemctl",
"journalctl",
"ps",
"kill",
"killall",
"pkill",
"pgrep",
"pidof",
"pstree",
"top",
"htop",
"btop",
"atop",
"df",
"du",
"mount",
"umount",
"ln",
"touch",
"file",
"fdisk",
"parted",
"lsblk",
"blkid",
"mkfs",
"fsck",
"which",
"whereis",
"type",
"alias",
"export",
"source",
"env",
"set",
"unset",
"read",
"exit",
"return",
"break",
"continue",
"shift",
"trap",
"exec",
"eval",
"test",
"true",
"false",
"case",
"esac",
"select",
"function",
"time",
"timeout",
"watch",
"strace",
"ltrace",
"gdb",
"lsof",
"stat",
"md5sum",
"sha256sum",
"base64",
"xxd",
"od",
"hexdump",
"apt",
"apt-get",
"yum",
"dnf",
"pacman",
"zypper",
"brew",
"pip",
"pip3",
"poetry",
"vim",
"vi",
"nano",
"emacs",
"code",
"subl",
"helix",
"sudo",
"su",
"chroot",
"cron",
"at",
"crontab",
"screen",
"tmux",
"tmuxp",
"loginctl",
"useradd",
"usermod",
"userdel",
"groupadd",
"passwd",
"id",
"whoami",
"last",
"uptime",
"date",
"cal",
"bc",
"factor",
"shuf",
"seq",
];
pub static SHELL_KEYWORDS_SET: LazyLock<HashSet<&'static str>> =
LazyLock::new(|| SHELL_KEYWORDS.iter().copied().collect());