module ShellCheck.Data where

import ShellCheck.Interface
import Data.Version (showVersion)


{-
If you are here because you saw an error about Paths_ShellCheck in this file,
simply comment out the import below and define the version as a constant string.

Instead of:

    import Paths_ShellCheck (version)
    shellcheckVersion = showVersion version

Use:

    -- import Paths_ShellCheck (version)
    shellcheckVersion = "kludge"

-}

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_ARGV0", String
"BASH_CMDS", String
"BASH_COMMAND",
    String
"BASH_EXECUTION_STRING", String
"BASH_LINENO", String
"BASH_LOADABLES_PATH",
    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
"EPOCHREALTIME", String
"EPOCHSECONDS", 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_ARGUMENT", String
"READLINE_LINE", String
"READLINE_MARK", String
"READLINE_POINT",
    String
"REPLY", String
"SECONDS", String
"SHELLOPTS", String
"SHLVL", String
"SRANDOM", String
"UID", String
"BASH_COMPAT",
    String
"BASH_ENV", String
"BASH_XTRACEFD", String
"CDPATH", String
"CHILD_MAX", String
"COLUMNS",
    String
"COMPREPLY", String
"EMACS", String
"ENV", String
"EXECIGNORE", 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
"INSIDE_EMACS", 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
"PS0", String
"PS1",
    String
"PS2", String
"PS3", String
"PS4", String
"SHELL", String
"TIMEFORMAT", String
"TMOUT", String
"TMPDIR",
    String
"auto_resume", String
"histchars",

    -- 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"
  ]

specialIntegerVariables :: [String]
specialIntegerVariables = [
    String
"$", String
"?", String
"!", String
"#"
  ]

specialVariablesWithoutSpaces :: [String]
specialVariablesWithoutSpaces = String
"-" String -> [String] -> [String]
forall a. a -> [a] -> [a]
: [String]
specialIntegerVariables

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
"EPOCHREALTIME", String
"EPOCHSECONDS", String
"LINENO", String
"OPTIND", String
"PPID", String
"RANDOM",
    String
"READLINE_ARGUMENT", String
"READLINE_MARK", String
"READLINE_POINT", String
"SECONDS",
    String
"SHELLOPTS", String
"SHLVL", String
"SRANDOM", 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
"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
"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 a. a -> Maybe a
forall (m :: * -> *) a. Monad m => a -> m a
return Shell
Sh
        String
"bash"  -> Shell -> Maybe Shell
forall a. a -> Maybe a
forall (m :: * -> *) a. Monad m => a -> m a
return Shell
Bash
        String
"bats"  -> Shell -> Maybe Shell
forall a. a -> Maybe a
forall (m :: * -> *) a. Monad m => a -> m a
return Shell
Bash
        String
"busybox"  -> Shell -> Maybe Shell
forall a. a -> Maybe a
forall (m :: * -> *) a. Monad m => a -> m a
return Shell
BusyboxSh -- Used for directives and --shell=busybox
        String
"busybox sh"  -> Shell -> Maybe Shell
forall a. a -> Maybe a
forall (m :: * -> *) a. Monad m => a -> m a
return Shell
BusyboxSh
        String
"busybox ash"  -> Shell -> Maybe Shell
forall a. a -> Maybe a
forall (m :: * -> *) a. Monad m => a -> m a
return Shell
BusyboxSh
        String
"dash"  -> Shell -> Maybe Shell
forall a. a -> Maybe a
forall (m :: * -> *) a. Monad m => a -> m a
return Shell
Dash
        String
"ash"   -> Shell -> Maybe Shell
forall a. a -> Maybe a
forall (m :: * -> *) a. Monad m => a -> m a
return Shell
Dash -- There's also a warning for this.
        String
"ksh"   -> Shell -> Maybe Shell
forall a. a -> Maybe a
forall (m :: * -> *) a. Monad m => a -> m a
return Shell
Ksh
        String
"ksh88" -> Shell -> Maybe Shell
forall a. a -> Maybe a
forall (m :: * -> *) a. Monad m => a -> m a
return Shell
Ksh
        String
"ksh93" -> Shell -> Maybe Shell
forall a. a -> Maybe a
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:"
flagsForMapfile :: String
flagsForMapfile = String
"d:n:O:s:u:C:c:t"

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