module ShellCheck.Data where

import ShellCheck.Interface
import Data.Version (showVersion)
import Paths_ShellCheck (version)

shellcheckVersion :: String
shellcheckVersion = Version -> String
showVersion Version
version -- VERSIONSTRING

internalVariables :: [String]
internalVariables = [
    -- Generic
    String
"", String
"_", String
"rest", String
"REST",

    -- Bash
    String
"BASH", String
"BASHOPTS", String
"BASHPID", String
"BASH_ALIASES", String
"BASH_ARGC",
    String
"BASH_ARGV", String
"BASH_CMDS", String
"BASH_COMMAND", String
"BASH_EXECUTION_STRING",
    String
"BASH_LINENO", String
"BASH_REMATCH", String
"BASH_SOURCE", String
"BASH_SUBSHELL",
    String
"BASH_VERSINFO", String
"BASH_VERSION", String
"COMP_CWORD", String
"COMP_KEY",
    String
"COMP_LINE", String
"COMP_POINT", String
"COMP_TYPE", String
"COMP_WORDBREAKS",
    String
"COMP_WORDS", String
"COPROC", String
"DIRSTACK", String
"EUID", String
"FUNCNAME", String
"GROUPS",
    String
"HISTCMD", String
"HOSTNAME", String
"HOSTTYPE", String
"LINENO", String
"MACHTYPE", String
"MAPFILE",
    String
"OLDPWD", String
"OPTARG", String
"OPTIND", String
"OSTYPE", String
"PIPESTATUS", String
"PPID", String
"PWD",
    String
"RANDOM", String
"READLINE_LINE", String
"READLINE_POINT", String
"REPLY", String
"SECONDS",
    String
"SHELLOPTS", String
"SHLVL", String
"UID", String
"BASH_ENV", String
"BASH_XTRACEFD", String
"CDPATH",
    String
"COLUMNS", String
"COMPREPLY", String
"EMACS", String
"ENV", String
"FCEDIT", String
"FIGNORE",
    String
"FUNCNEST", String
"GLOBIGNORE", String
"HISTCONTROL", String
"HISTFILE", String
"HISTFILESIZE",
    String
"HISTIGNORE", String
"HISTSIZE", String
"HISTTIMEFORMAT", String
"HOME", String
"HOSTFILE", String
"IFS",
    String
"IGNOREEOF", String
"INPUTRC", String
"LANG", String
"LC_ALL", String
"LC_COLLATE", String
"LC_CTYPE",
    String
"LC_MESSAGES", String
"LC_MONETARY", String
"LC_NUMERIC", String
"LC_TIME", String
"LINES", String
"MAIL",
    String
"MAILCHECK", String
"MAILPATH", String
"OPTERR", String
"PATH", String
"POSIXLY_CORRECT",
    String
"PROMPT_COMMAND", String
"PROMPT_DIRTRIM", String
"PS1", String
"PS2", String
"PS3", String
"PS4", String
"SHELL",
    String
"TIMEFORMAT", String
"TMOUT", String
"TMPDIR", String
"auto_resume", String
"histchars", String
"COPROC",

    -- Other
    String
"USER", String
"TZ", String
"TERM", String
"LOGNAME", String
"LD_LIBRARY_PATH", String
"LANGUAGE", String
"DISPLAY",
    String
"HOSTNAME", String
"KRB5CCNAME", String
"XAUTHORITY"

    -- Ksh
    , String
".sh.version"

    -- shflags
    , String
"FLAGS_ARGC", String
"FLAGS_ARGV", String
"FLAGS_ERROR", String
"FLAGS_FALSE", String
"FLAGS_HELP",
    String
"FLAGS_PARENT", String
"FLAGS_RESERVED", String
"FLAGS_TRUE", String
"FLAGS_VERSION",
    String
"flags_error", String
"flags_return"
  ]

specialVariablesWithoutSpaces :: [String]
specialVariablesWithoutSpaces = [
    String
"$", String
"-", String
"?", String
"!", String
"#"
  ]
variablesWithoutSpaces :: [String]
variablesWithoutSpaces = [String]
specialVariablesWithoutSpaces [String] -> [String] -> [String]
forall a. [a] -> [a] -> [a]
++ [
    String
"BASHPID", String
"BASH_ARGC", String
"BASH_LINENO", String
"BASH_SUBSHELL", String
"EUID", String
"LINENO",
    String
"OPTIND", String
"PPID", String
"RANDOM", String
"SECONDS", String
"SHELLOPTS", String
"SHLVL", String
"UID",
    String
"COLUMNS", String
"HISTFILESIZE", String
"HISTSIZE", String
"LINES"

    -- shflags
    , String
"FLAGS_ERROR", String
"FLAGS_FALSE", String
"FLAGS_TRUE"
  ]

specialVariables :: [String]
specialVariables = [String]
specialVariablesWithoutSpaces [String] -> [String] -> [String]
forall a. [a] -> [a] -> [a]
++ [String
"@", String
"*"]

unbracedVariables :: [String]
unbracedVariables = [String]
specialVariables [String] -> [String] -> [String]
forall a. [a] -> [a] -> [a]
++ [
    String
"0", String
"1", String
"2", String
"3", String
"4", String
"5", String
"6", String
"7", String
"8", String
"9"
  ]

arrayVariables :: [String]
arrayVariables = [
    String
"BASH_ALIASES", String
"BASH_ARGC", String
"BASH_ARGV", String
"BASH_CMDS", String
"BASH_LINENO",
    String
"BASH_REMATCH", String
"BASH_SOURCE", String
"BASH_VERSINFO", String
"COMP_WORDS", String
"COPROC",
    String
"DIRSTACK", String
"FUNCNAME", String
"GROUPS", String
"MAPFILE", String
"PIPESTATUS", String
"COMPREPLY"
  ]

commonCommands :: [String]
commonCommands = [
    String
"admin", String
"alias", String
"ar", String
"asa", String
"at", String
"awk", String
"basename", String
"batch",
    String
"bc", String
"bg", String
"break", String
"c99", String
"cal", String
"cat", String
"cd", String
"cflow", String
"chgrp",
    String
"chmod", String
"chown", String
"cksum", String
"cmp", String
"colon", String
"comm", String
"command",
    String
"compress", String
"continue", String
"cp", String
"crontab", String
"csplit", String
"ctags", String
"cut",
    String
"cxref", String
"date", String
"dd", String
"delta", String
"df", String
"diff", String
"dirname", String
"dot",
    String
"du", String
"echo", String
"ed", String
"env", String
"eval", String
"ex", String
"exec", String
"exit", String
"expand",
    String
"export", String
"expr", String
"fc", String
"fg", String
"file", String
"find", String
"fold", String
"fort77",
    String
"fuser", String
"gencat", String
"get", String
"getconf", String
"getopts", String
"grep", String
"hash",
    String
"head", String
"iconv", String
"ipcrm", String
"ipcs", String
"jobs", String
"join", String
"kill", String
"lex",
    String
"link", String
"ln", String
"locale", String
"localedef", String
"logger", String
"logname", String
"lp",
    String
"ls", String
"m4", String
"mailx", String
"make", String
"man", String
"mesg", String
"mkdir", String
"mkfifo",
    String
"more", String
"mv", String
"newgrp", String
"nice", String
"nl", String
"nm", String
"nohup", String
"od", String
"paste",
    String
"patch", String
"pathchk", String
"pax", String
"pr", String
"printf", String
"prs", String
"ps", String
"pwd",
    String
"qalter", String
"qdel", String
"qhold", String
"qmove", String
"qmsg", String
"qrerun", String
"qrls",
    String
"qselect", String
"qsig", String
"qstat", String
"qsub", String
"read", String
"readonly", String
"renice",
    String
"return", String
"rm", String
"rmdel", String
"rmdir", String
"sact", String
"sccs", String
"sed", String
"set",
    String
"sh", String
"shift", String
"sleep", String
"sort", String
"split", String
"strings", String
"strip", String
"stty",
    String
"tabs", String
"tail", String
"talk", String
"tee", String
"test", String
"time", String
"times", String
"touch",
    String
"tput", String
"tr", String
"trap", String
"tsort", String
"tty", String
"type", String
"ulimit", String
"umask",
    String
"unalias", String
"uname", String
"uncompress", String
"unexpand", String
"unget", String
"uniq",
    String
"unlink", String
"unset", String
"uucp", String
"uudecode", String
"uuencode", String
"uustat", String
"uux",
    String
"val", String
"vi", String
"wait", String
"wc", String
"what", String
"who", String
"write", String
"xargs", String
"yacc",
    String
"zcat"
  ]

nonReadingCommands :: [String]
nonReadingCommands = [
    String
"alias", String
"basename", String
"bg", String
"cal", String
"cd", String
"chgrp", String
"chmod", String
"chown",
    String
"cp", String
"du", String
"echo", String
"export", String
"false", String
"fg", String
"fuser", String
"getconf",
    String
"getopt", String
"getopts", String
"ipcrm", String
"ipcs", String
"jobs", String
"kill", String
"ln", String
"ls",
    String
"locale", String
"mv", String
"printf", String
"ps", String
"pwd", String
"renice", String
"rm", String
"rmdir",
    String
"set", String
"sleep", String
"touch", String
"trap", String
"true", String
"ulimit", String
"unalias", String
"uname"
    ]

sampleWords :: [String]
sampleWords = [
    String
"alpha", String
"bravo", String
"charlie", String
"delta", String
"echo", String
"foxtrot",
    String
"golf", String
"hotel", String
"india", String
"juliett", String
"kilo", String
"lima", String
"mike",
    String
"november", String
"oscar", String
"papa", String
"quebec", String
"romeo", String
"sierra",
    String
"tango", String
"uniform", String
"victor", String
"whiskey", String
"xray", String
"yankee",
    String
"zulu"
  ]

binaryTestOps :: [String]
binaryTestOps = [
    String
"-nt", String
"-ot", String
"-ef", String
"==", String
"!=", String
"<=", String
">=", String
"-eq", String
"-ne", String
"-lt", String
"-le",
    String
"-gt", String
"-ge", String
"=~", String
">", String
"<", String
"=", String
"\\<", String
"\\>", String
"\\<=", String
"\\>="
  ]

arithmeticBinaryTestOps :: [String]
arithmeticBinaryTestOps = [
    String
"-eq", String
"-ne", String
"-lt", String
"-le", String
"-gt", String
"-ge"
  ]

unaryTestOps :: [String]
unaryTestOps = [
    String
"!", String
"-a", String
"-b", String
"-c", String
"-d", String
"-e", String
"-f", String
"-g", String
"-h", String
"-L", String
"-k", String
"-p",
    String
"-r", String
"-s", String
"-S", String
"-t", String
"-u", String
"-w", String
"-x", String
"-O", String
"-G", String
"-N", String
"-z", String
"-n",
    String
"-o", String
"-v", String
"-R"
  ]

shellForExecutable :: String -> Maybe Shell
shellForExecutable :: String -> Maybe Shell
shellForExecutable String
name =
    case String
name of
        String
"sh"    -> Shell -> Maybe Shell
forall (m :: * -> *) a. Monad m => a -> m a
return Shell
Sh
        String
"bash"  -> Shell -> Maybe Shell
forall (m :: * -> *) a. Monad m => a -> m a
return Shell
Bash
        String
"bats"  -> Shell -> Maybe Shell
forall (m :: * -> *) a. Monad m => a -> m a
return Shell
Bash
        String
"dash"  -> Shell -> Maybe Shell
forall (m :: * -> *) a. Monad m => a -> m a
return Shell
Dash
        String
"ash"   -> Shell -> Maybe Shell
forall (m :: * -> *) a. Monad m => a -> m a
return Shell
Dash -- There's also a warning for this.
        String
"ksh"   -> Shell -> Maybe Shell
forall (m :: * -> *) a. Monad m => a -> m a
return Shell
Ksh
        String
"ksh88" -> Shell -> Maybe Shell
forall (m :: * -> *) a. Monad m => a -> m a
return Shell
Ksh
        String
"ksh93" -> Shell -> Maybe Shell
forall (m :: * -> *) a. Monad m => a -> m a
return Shell
Ksh
        String
_ -> Maybe Shell
forall a. Maybe a
Nothing

flagsForRead :: String
flagsForRead = String
"sreu:n:N:i:p:a:t:"

declaringCommands :: [String]
declaringCommands = [String
"local", String
"declare", String
"export", String
"readonly", String
"typeset", String
"let"]