use super::interface::Shell;
pub const INTERNAL_VARIABLES: &[&str] = &[
"",
"_",
"rest",
"REST",
"BASH",
"BASHOPTS",
"BASHPID",
"BASH_ALIASES",
"BASH_ARGC",
"BASH_ARGV",
"BASH_ARGV0",
"BASH_CMDS",
"BASH_COMMAND",
"BASH_EXECUTION_STRING",
"BASH_LINENO",
"BASH_LOADABLES_PATH",
"BASH_REMATCH",
"BASH_SOURCE",
"BASH_SUBSHELL",
"BASH_VERSINFO",
"BASH_VERSION",
"COMP_CWORD",
"COMP_KEY",
"COMP_LINE",
"COMP_POINT",
"COMP_TYPE",
"COMP_WORDBREAKS",
"COMP_WORDS",
"COPROC",
"DIRSTACK",
"EPOCHREALTIME",
"EPOCHSECONDS",
"EUID",
"FUNCNAME",
"GROUPS",
"HISTCMD",
"HOSTNAME",
"HOSTTYPE",
"LINENO",
"MACHTYPE",
"MAPFILE",
"OLDPWD",
"OPTARG",
"OPTIND",
"OSTYPE",
"PIPESTATUS",
"PPID",
"PWD",
"RANDOM",
"READLINE_ARGUMENT",
"READLINE_LINE",
"READLINE_MARK",
"READLINE_POINT",
"REPLY",
"SECONDS",
"SHELLOPTS",
"SHLVL",
"SRANDOM",
"UID",
"BASH_COMPAT",
"BASH_ENV",
"BASH_XTRACEFD",
"CDPATH",
"CHILD_MAX",
"COLUMNS",
"COMPREPLY",
"EMACS",
"ENV",
"EXECIGNORE",
"FCEDIT",
"FIGNORE",
"FUNCNEST",
"GLOBIGNORE",
"HISTCONTROL",
"HISTFILE",
"HISTFILESIZE",
"HISTIGNORE",
"HISTSIZE",
"HISTTIMEFORMAT",
"HOME",
"HOSTFILE",
"IFS",
"IGNOREEOF",
"INPUTRC",
"INSIDE_EMACS",
"LANG",
"LC_ALL",
"LC_COLLATE",
"LC_CTYPE",
"LC_MESSAGES",
"LC_MONETARY",
"LC_NUMERIC",
"LC_TIME",
"LINES",
"MAIL",
"MAILCHECK",
"MAILPATH",
"OPTERR",
"PATH",
"POSIXLY_CORRECT",
"PROMPT_COMMAND",
"PROMPT_DIRTRIM",
"PS0",
"PS1",
"PS2",
"PS3",
"PS4",
"SHELL",
"TIMEFORMAT",
"TMOUT",
"TMPDIR",
"BASH_MONOSECONDS",
"BASH_TRAPSIG",
"GLOBSORT",
"auto_resume",
"histchars",
"USER",
"TZ",
"TERM",
"LOGNAME",
"LD_LIBRARY_PATH",
"LANGUAGE",
"DISPLAY",
"HOSTNAME",
"KRB5CCNAME",
"XAUTHORITY",
".sh.version",
"FLAGS_ARGC",
"FLAGS_ARGV",
"FLAGS_ERROR",
"FLAGS_FALSE",
"FLAGS_HELP",
"FLAGS_PARENT",
"FLAGS_RESERVED",
"FLAGS_TRUE",
"FLAGS_VERSION",
"flags_error",
"flags_return",
"stderr",
"stderr_lines",
];
pub const SPECIAL_INTEGER_VARIABLES: &[&str] = &["$", "?", "!", "#"];
pub const SPECIAL_VARIABLES_WITHOUT_SPACES: &[&str] = &["-", "$", "?", "!", "#"];
pub const VARIABLES_WITHOUT_SPACES: &[&str] = &[
"-",
"$",
"?",
"!",
"#",
"BASHPID",
"BASH_ARGC",
"BASH_LINENO",
"BASH_SUBSHELL",
"EUID",
"EPOCHREALTIME",
"EPOCHSECONDS",
"LINENO",
"OPTIND",
"PPID",
"RANDOM",
"READLINE_ARGUMENT",
"READLINE_MARK",
"READLINE_POINT",
"SECONDS",
"SHELLOPTS",
"SHLVL",
"SRANDOM",
"UID",
"COLUMNS",
"HISTFILESIZE",
"HISTSIZE",
"LINES",
"BASH_MONOSECONDS",
"BASH_TRAPSIG",
"FLAGS_ERROR",
"FLAGS_FALSE",
"FLAGS_TRUE",
];
pub const UNBRACED_VARIABLES: &[&str] = &[
"-", "$", "?", "!", "#", "@", "*", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
];
pub const ARRAY_VARIABLES: &[&str] = &[
"BASH_ALIASES",
"BASH_ARGC",
"BASH_ARGV",
"BASH_CMDS",
"BASH_LINENO",
"BASH_REMATCH",
"BASH_SOURCE",
"BASH_VERSINFO",
"COMP_WORDS",
"COPROC",
"DIRSTACK",
"FUNCNAME",
"GROUPS",
"MAPFILE",
"PIPESTATUS",
"COMPREPLY",
];
pub const COMMON_COMMANDS: &[&str] = &[
"admin",
"alias",
"ar",
"asa",
"at",
"awk",
"basename",
"batch",
"bc",
"bg",
"break",
"c99",
"cal",
"cat",
"cd",
"cflow",
"chgrp",
"chmod",
"chown",
"cksum",
"cmp",
"colon",
"comm",
"command",
"compress",
"continue",
"cp",
"crontab",
"csplit",
"ctags",
"cut",
"cxref",
"date",
"dd",
"delta",
"df",
"diff",
"dirname",
"dot",
"du",
"echo",
"ed",
"env",
"eval",
"ex",
"exec",
"exit",
"expand",
"export",
"expr",
"fc",
"fg",
"file",
"find",
"fold",
"fort77",
"fuser",
"gencat",
"get",
"getconf",
"getopts",
"grep",
"hash",
"head",
"iconv",
"ipcrm",
"ipcs",
"jobs",
"join",
"kill",
"lex",
"link",
"ln",
"locale",
"localedef",
"logger",
"logname",
"lp",
"ls",
"m4",
"mailx",
"make",
"man",
"mesg",
"mkdir",
"mkfifo",
"more",
"mv",
"newgrp",
"nice",
"nl",
"nm",
"nohup",
"od",
"paste",
"patch",
"pathchk",
"pax",
"pr",
"printf",
"prs",
"ps",
"pwd",
"qalter",
"qdel",
"qhold",
"qmove",
"qmsg",
"qrerun",
"qrls",
"qselect",
"qsig",
"qstat",
"qsub",
"read",
"readonly",
"renice",
"return",
"rm",
"rmdel",
"rmdir",
"sact",
"sccs",
"sed",
"set",
"sh",
"shift",
"sleep",
"sort",
"split",
"strings",
"strip",
"stty",
"tabs",
"tail",
"talk",
"tee",
"test",
"time",
"times",
"touch",
"tput",
"tr",
"trap",
"tsort",
"tty",
"type",
"ulimit",
"umask",
"unalias",
"uname",
"uncompress",
"unexpand",
"unget",
"uniq",
"unlink",
"unset",
"uucp",
"uudecode",
"uuencode",
"uustat",
"uux",
"val",
"vi",
"wait",
"wc",
"what",
"who",
"write",
"xargs",
"yacc",
"zcat",
];
pub const NON_READING_COMMANDS: &[&str] = &[
"alias", "basename", "bg", "cal", "cd", "chgrp", "chmod", "chown", "cp", "du", "echo",
"export", "fg", "fuser", "getconf", "getopt", "getopts", "ipcrm", "ipcs", "jobs", "kill", "ln",
"ls", "locale", "mv", "printf", "ps", "pwd", "renice", "rm", "rmdir", "set", "sleep", "touch",
"trap", "ulimit", "unalias", "uname",
];
pub const SAMPLE_WORDS: &[&str] = &[
"alpha", "bravo", "charlie", "delta", "echo", "foxtrot", "golf", "hotel", "india", "juliett",
"kilo", "lima", "mike", "november", "oscar", "papa", "quebec", "romeo", "sierra", "tango",
"uniform", "victor", "whiskey", "xray", "yankee", "zulu",
];
pub const BINARY_TEST_OPS: &[&str] = &[
"-nt", "-ot", "-ef", "==", "!=", "<=", ">=", "-eq", "-ne", "-lt", "-le", "-gt", "-ge", "=~",
">", "<", "=", "\\<", "\\>", "\\<=", "\\>=",
];
pub const ARITHMETIC_BINARY_TEST_OPS: &[&str] = &["-eq", "-ne", "-lt", "-le", "-gt", "-ge"];
pub const UNARY_TEST_OPS: &[&str] = &[
"!", "-a", "-b", "-c", "-d", "-e", "-f", "-g", "-h", "-L", "-k", "-p", "-r", "-s", "-S", "-t",
"-u", "-w", "-x", "-O", "-G", "-N", "-z", "-n", "-o", "-v", "-R",
];
pub fn shell_for_executable(name: &str) -> Option<Shell> {
match name {
"sh" => Some(Shell::Sh),
"bash" | "bats" => Some(Shell::Bash),
"busybox" | "busybox sh" | "busybox ash" => Some(Shell::BusyboxSh),
"dash" | "ash" => Some(Shell::Dash),
"ksh" | "ksh88" | "ksh93" | "oksh" => Some(Shell::Ksh),
_ => None,
}
}
pub const FLAGS_FOR_READ: &str = "sreu:n:N:i:p:a:t:";
pub const FLAGS_FOR_MAPFILE: &str = "d:n:O:s:u:C:c:t";
pub const DECLARING_COMMANDS: &[&str] =
&["local", "declare", "export", "readonly", "typeset", "let"];