1module ShellCheck.Data where 2 3import ShellCheck.Interface 4import Data.Version (showVersion) 5import Paths_ShellCheck (version) 6 7shellcheckVersion = showVersion version -- VERSIONSTRING 8 9internalVariables = [ 10 -- Generic 11 "", "_", "rest", "REST", 12 13 -- Bash 14 "BASH", "BASHOPTS", "BASHPID", "BASH_ALIASES", "BASH_ARGC", 15 "BASH_ARGV", "BASH_CMDS", "BASH_COMMAND", "BASH_EXECUTION_STRING", 16 "BASH_LINENO", "BASH_REMATCH", "BASH_SOURCE", "BASH_SUBSHELL", 17 "BASH_VERSINFO", "BASH_VERSION", "COMP_CWORD", "COMP_KEY", 18 "COMP_LINE", "COMP_POINT", "COMP_TYPE", "COMP_WORDBREAKS", 19 "COMP_WORDS", "COPROC", "DIRSTACK", "EUID", "FUNCNAME", "GROUPS", 20 "HISTCMD", "HOSTNAME", "HOSTTYPE", "LINENO", "MACHTYPE", "MAPFILE", 21 "OLDPWD", "OPTARG", "OPTIND", "OSTYPE", "PIPESTATUS", "PPID", "PWD", 22 "RANDOM", "READLINE_LINE", "READLINE_POINT", "REPLY", "SECONDS", 23 "SHELLOPTS", "SHLVL", "UID", "BASH_ENV", "BASH_XTRACEFD", "CDPATH", 24 "COLUMNS", "COMPREPLY", "EMACS", "ENV", "FCEDIT", "FIGNORE", 25 "FUNCNEST", "GLOBIGNORE", "HISTCONTROL", "HISTFILE", "HISTFILESIZE", 26 "HISTIGNORE", "HISTSIZE", "HISTTIMEFORMAT", "HOME", "HOSTFILE", "IFS", 27 "IGNOREEOF", "INPUTRC", "LANG", "LC_ALL", "LC_COLLATE", "LC_CTYPE", 28 "LC_MESSAGES", "LC_MONETARY", "LC_NUMERIC", "LC_TIME", "LINES", "MAIL", 29 "MAILCHECK", "MAILPATH", "OPTERR", "PATH", "POSIXLY_CORRECT", 30 "PROMPT_COMMAND", "PROMPT_DIRTRIM", "PS1", "PS2", "PS3", "PS4", "SHELL", 31 "TIMEFORMAT", "TMOUT", "TMPDIR", "auto_resume", "histchars", "COPROC", 32 33 -- Other 34 "USER", "TZ", "TERM", "LOGNAME", "LD_LIBRARY_PATH", "LANGUAGE", "DISPLAY", 35 "HOSTNAME", "KRB5CCNAME", "XAUTHORITY" 36 37 -- Ksh 38 , ".sh.version" 39 40 -- shflags 41 , "FLAGS_ARGC", "FLAGS_ARGV", "FLAGS_ERROR", "FLAGS_FALSE", "FLAGS_HELP", 42 "FLAGS_PARENT", "FLAGS_RESERVED", "FLAGS_TRUE", "FLAGS_VERSION", 43 "flags_error", "flags_return" 44 ] 45 46specialVariablesWithoutSpaces = [ 47 "$", "-", "?", "!", "#" 48 ] 49variablesWithoutSpaces = specialVariablesWithoutSpaces ++ [ 50 "BASHPID", "BASH_ARGC", "BASH_LINENO", "BASH_SUBSHELL", "EUID", "LINENO", 51 "OPTIND", "PPID", "RANDOM", "SECONDS", "SHELLOPTS", "SHLVL", "UID", 52 "COLUMNS", "HISTFILESIZE", "HISTSIZE", "LINES" 53 54 -- shflags 55 , "FLAGS_ERROR", "FLAGS_FALSE", "FLAGS_TRUE" 56 ] 57 58specialVariables = specialVariablesWithoutSpaces ++ ["@", "*"] 59 60unbracedVariables = specialVariables ++ [ 61 "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" 62 ] 63 64arrayVariables = [ 65 "BASH_ALIASES", "BASH_ARGC", "BASH_ARGV", "BASH_CMDS", "BASH_LINENO", 66 "BASH_REMATCH", "BASH_SOURCE", "BASH_VERSINFO", "COMP_WORDS", "COPROC", 67 "DIRSTACK", "FUNCNAME", "GROUPS", "MAPFILE", "PIPESTATUS", "COMPREPLY" 68 ] 69 70commonCommands = [ 71 "admin", "alias", "ar", "asa", "at", "awk", "basename", "batch", 72 "bc", "bg", "break", "c99", "cal", "cat", "cd", "cflow", "chgrp", 73 "chmod", "chown", "cksum", "cmp", "colon", "comm", "command", 74 "compress", "continue", "cp", "crontab", "csplit", "ctags", "cut", 75 "cxref", "date", "dd", "delta", "df", "diff", "dirname", "dot", 76 "du", "echo", "ed", "env", "eval", "ex", "exec", "exit", "expand", 77 "export", "expr", "fc", "fg", "file", "find", "fold", "fort77", 78 "fuser", "gencat", "get", "getconf", "getopts", "grep", "hash", 79 "head", "iconv", "ipcrm", "ipcs", "jobs", "join", "kill", "lex", 80 "link", "ln", "locale", "localedef", "logger", "logname", "lp", 81 "ls", "m4", "mailx", "make", "man", "mesg", "mkdir", "mkfifo", 82 "more", "mv", "newgrp", "nice", "nl", "nm", "nohup", "od", "paste", 83 "patch", "pathchk", "pax", "pr", "printf", "prs", "ps", "pwd", 84 "qalter", "qdel", "qhold", "qmove", "qmsg", "qrerun", "qrls", 85 "qselect", "qsig", "qstat", "qsub", "read", "readonly", "renice", 86 "return", "rm", "rmdel", "rmdir", "sact", "sccs", "sed", "set", 87 "sh", "shift", "sleep", "sort", "split", "strings", "strip", "stty", 88 "tabs", "tail", "talk", "tee", "test", "time", "times", "touch", 89 "tput", "tr", "trap", "tsort", "tty", "type", "ulimit", "umask", 90 "unalias", "uname", "uncompress", "unexpand", "unget", "uniq", 91 "unlink", "unset", "uucp", "uudecode", "uuencode", "uustat", "uux", 92 "val", "vi", "wait", "wc", "what", "who", "write", "xargs", "yacc", 93 "zcat" 94 ] 95 96nonReadingCommands = [ 97 "alias", "basename", "bg", "cal", "cd", "chgrp", "chmod", "chown", 98 "cp", "du", "echo", "export", "false", "fg", "fuser", "getconf", 99 "getopt", "getopts", "ipcrm", "ipcs", "jobs", "kill", "ln", "ls", 100 "locale", "mv", "printf", "ps", "pwd", "renice", "rm", "rmdir", 101 "set", "sleep", "touch", "trap", "true", "ulimit", "unalias", "uname" 102 ] 103 104sampleWords = [ 105 "alpha", "bravo", "charlie", "delta", "echo", "foxtrot", 106 "golf", "hotel", "india", "juliett", "kilo", "lima", "mike", 107 "november", "oscar", "papa", "quebec", "romeo", "sierra", 108 "tango", "uniform", "victor", "whiskey", "xray", "yankee", 109 "zulu" 110 ] 111 112binaryTestOps = [ 113 "-nt", "-ot", "-ef", "==", "!=", "<=", ">=", "-eq", "-ne", "-lt", "-le", 114 "-gt", "-ge", "=~", ">", "<", "=", "\\<", "\\>", "\\<=", "\\>=" 115 ] 116 117arithmeticBinaryTestOps = [ 118 "-eq", "-ne", "-lt", "-le", "-gt", "-ge" 119 ] 120 121unaryTestOps = [ 122 "!", "-a", "-b", "-c", "-d", "-e", "-f", "-g", "-h", "-L", "-k", "-p", 123 "-r", "-s", "-S", "-t", "-u", "-w", "-x", "-O", "-G", "-N", "-z", "-n", 124 "-o", "-v", "-R" 125 ] 126 127shellForExecutable :: String -> Maybe Shell 128shellForExecutable name = 129 case name of 130 "sh" -> return Sh 131 "bash" -> return Bash 132 "bats" -> return Bash 133 "dash" -> return Dash 134 "ash" -> return Dash -- There's also a warning for this. 135 "ksh" -> return Ksh 136 "ksh88" -> return Ksh 137 "ksh93" -> return Ksh 138 _ -> Nothing 139 140flagsForRead = "sreu:n:N:i:p:a:t:" 141 142declaringCommands = ["local", "declare", "export", "readonly", "typeset", "let"] 143