diff --git a/parser.go b/parser.go index 1517c155..88855802 100644 --- a/parser.go +++ b/parser.go @@ -181,6 +181,10 @@ func (parser *arguments) addOP(op string) (err error) { } func (parser *arguments) addParam(option string, arg string) (err error) { + if !isArg(option) { + return fmt.Errorf("invalid option '%s'", option) + } + if isOp(option) { err = parser.addOP(option) return @@ -340,6 +344,277 @@ func formatArg(arg string) string { return arg } +func isArg(arg string) bool { + switch arg { + case "D", "database": + return true + case "Q", "query": + return true + case "R", "remove": + return true + case "S", "sync": + return true + case "T", "deptest": + return true + case "U", "upgrade": + return true + case "F", "files": + return true + case "V", "version": + return true + case "h", "help": + return true + case "Y", "yay": + return true + case "P", "print": + return true + case "G", "getpkgbuild": + return true + case "b", "dbpath": + return true + case "r", "root": + return true + case "v", "verbose": + return true + case "arch": + return true + case "cachedir": + return true + case "color": + return true + case "config": + return true + case "debug": + return true + case "gpgdir": + return true + case "hookdir": + return true + case "logfile": + return true + case "noconfirm": + return true + case "confirm": + return true + case "disabledownloadtimeout": + return true + case "sysroot": + return true + case "d", "nodeps": + return true + case "assumeinstalled": + return true + case "dbonly": + return true + case "noprogressbar": + return true + case "noscriptlet": + return true + case "p": + return true + case "printformat": + return true + case "asdeps": + return true + case "asexplicit": + return true + case "ignore": + return true + case "ignoregroup": + return true + case "needed": + return true + case "overwrite": + return true + case "force": + return true + case "c", "changelog": + return true + case "deps": + return true + case "e", "explicit": + return true + case "g", "groups": + return true + case "i", "info": + return true + case "k", "check": + return true + case "l", "list": + return true + case "m", "foreign": + return true + case "n", "native": + return true + case "o", "owns": + return true + case "file": + return true + case "q", "quiet": + return true + case "s", "search": + return true + case "t", "unrequired": + return true + case "u", "upgrades": + return true + case "cascade": + return true + case "nosave": + return true + case "recursive": + return true + case "unneeded": + return true + case "clean": + return true + case "sysupgrade": + return true + case "w", "downloadonly": + return true + case "y", "refresh": + return true + case "x", "regex": + return true + case "machinereadable": + return true + + //yay options + case "save": + return true + case "afterclean": + return true + case "noafterclean": + return true + case "devel": + return true + case "nodevel": + return true + case "timeupdate": + return true + case "notimeupdate": + return true + case "topdown": + return true + case "bottomup": + return true + case "completioninterval": + return true + case "sortby": + return true + case "redownload": + return true + case "redownloadall": + return true + case "noredownload": + return true + case "rebuild": + return true + case "rebuildall": + return true + case "rebuildtree": + return true + case "norebuild": + return true + case "answerclean": + return true + case "noanswerclean": + return true + case "answerdiff": + return true + case "noanswerdiff": + return true + case "answeredit": + return true + case "noansweredit": + return true + case "answerupgrade": + return true + case "noanswerupgrade": + return true + case "gitclone": + return true + case "nogitclone": + return true + case "gpgflags": + return true + case "mflags": + return true + case "gitflags": + return true + case "builddir": + return true + case "editor": + return true + case "editorflags": + return true + case "makepkg": + return true + case "makepkgconf": + return true + case "nomakepkgconf": + return true + case "pacman": + return true + case "tar": + return true + case "git": + return true + case "gpg": + return true + case "requestsplitn": + return true + case "sudoloop": + return true + case "nosudoloop": + return true + case "provides": + return true + case "noprovides": + return true + case "pgpfetch": + return true + case "nopgpfetch": + return true + case "upgrademenu": + return true + case "noupgrademenu": + return true + case "cleanmenu": + return true + case "nocleanmenu": + return true + case "diffmenu": + return true + case "nodiffmenu": + return true + case "editmenu": + return true + case "noeditmenu": + return true + case "useask": + return true + case "nouseask": + return true + case "combinedupgrade": + return true + case "nocombinedupgrade": + return true + case "a", "aur": + return true + case "repo": + return true + case "removemake": + return true + case "noremovemake": + return true + case "askremovemake": + return true + default: + return false + } +} + func isOp(op string) bool { switch op { case "V", "version":