Selaa lähdekoodia

Simlify huge case statments

Instead of having true in every case, rely on the lack of fallthrough
causing the default not to trigger.

Moved handleConfig to parser.go
morganamilo 6 vuotta sitten
vanhempi
commit
4e67c1e886
2 muutettua tiedostoa jossa 158 lisäystä ja 350 poistoa
  1. 0 156
      cmd.go
  2. 158 194
      parser.go

+ 0 - 156
cmd.go

@@ -4,7 +4,6 @@ import (
 	"bufio"
 	"fmt"
 	"os"
-	"strconv"
 
 	alpm "github.com/jguer/go-alpm"
 )
@@ -185,161 +184,6 @@ func handleHelp() error {
 	return show(passToPacman(cmdArgs))
 }
 
-//this function should only set config options
-//but currently still uses the switch left over from old code
-//eventually this should be refactored out further
-//my current plan is to have yay specific operations in its own operator
-//e.g. yay -Y --gendb
-//e.g yay -Yg
-func handleConfig(option, value string) bool {
-	switch option {
-	case "save":
-		shouldSaveConfig = true
-	case "afterclean":
-		config.CleanAfter = true
-	case "noafterclean":
-		config.CleanAfter = false
-	case "devel":
-		config.Devel = true
-	case "nodevel":
-		config.Devel = false
-	case "timeupdate":
-		config.TimeUpdate = true
-	case "notimeupdate":
-		config.TimeUpdate = false
-	case "topdown":
-		config.SortMode = TopDown
-	case "bottomup":
-		config.SortMode = BottomUp
-	case "completioninterval":
-		n, err := strconv.Atoi(value)
-		if err == nil {
-			config.CompletionInterval = n
-		}
-	case "sortby":
-		config.SortBy = value
-	case "noconfirm":
-		config.NoConfirm = true
-	case "config":
-		config.PacmanConf = value
-	case "redownload":
-		config.ReDownload = "yes"
-	case "redownloadall":
-		config.ReDownload = "all"
-	case "noredownload":
-		config.ReDownload = "no"
-	case "rebuild":
-		config.ReBuild = "yes"
-	case "rebuildall":
-		config.ReBuild = "all"
-	case "rebuildtree":
-		config.ReBuild = "tree"
-	case "norebuild":
-		config.ReBuild = "no"
-	case "answerclean":
-		config.AnswerClean = value
-	case "noanswerclean":
-		config.AnswerClean = ""
-	case "answerdiff":
-		config.AnswerDiff = value
-	case "noanswerdiff":
-		config.AnswerDiff = ""
-	case "answeredit":
-		config.AnswerEdit = value
-	case "noansweredit":
-		config.AnswerEdit = ""
-	case "answerupgrade":
-		config.AnswerUpgrade = value
-	case "noanswerupgrade":
-		config.AnswerUpgrade = ""
-	case "gitclone":
-		config.GitClone = true
-	case "nogitclone":
-		config.GitClone = false
-	case "gpgflags":
-		config.GpgFlags = value
-	case "mflags":
-		config.MFlags = value
-	case "gitflags":
-		config.GitFlags = value
-	case "builddir":
-		config.BuildDir = value
-	case "editor":
-		config.Editor = value
-	case "editorflags":
-		config.EditorFlags = value
-	case "makepkg":
-		config.MakepkgBin = value
-	case "makepkgconf":
-		config.MakepkgConf = value
-	case "nomakepkgconf":
-		config.MakepkgConf = ""
-	case "pacman":
-		config.PacmanBin = value
-	case "tar":
-		config.TarBin = value
-	case "git":
-		config.GitBin = value
-	case "gpg":
-		config.GpgBin = value
-	case "requestsplitn":
-		if n, err := strconv.Atoi(value); err == nil && n > 0 {
-			config.RequestSplitN = n
-		}
-	case "sudoloop":
-		config.SudoLoop = true
-	case "nosudoloop":
-		config.SudoLoop = false
-	case "provides":
-		config.Provides = true
-	case "noprovides":
-		config.Provides = false
-	case "pgpfetch":
-		config.PGPFetch = true
-	case "nopgpfetch":
-		config.PGPFetch = false
-	case "upgrademenu":
-		config.UpgradeMenu = true
-	case "noupgrademenu":
-		config.UpgradeMenu = false
-	case "cleanmenu":
-		config.CleanMenu = true
-	case "nocleanmenu":
-		config.CleanMenu = false
-	case "diffmenu":
-		config.DiffMenu = true
-	case "nodiffmenu":
-		config.DiffMenu = false
-	case "editmenu":
-		config.EditMenu = true
-	case "noeditmenu":
-		config.EditMenu = false
-	case "useask":
-		config.UseAsk = true
-	case "nouseask":
-		config.UseAsk = false
-	case "combinedupgrade":
-		config.CombinedUpgrade = true
-	case "nocombinedupgrade":
-		config.CombinedUpgrade = false
-	case "a", "aur":
-		mode = ModeAUR
-	case "repo":
-		mode = ModeRepo
-	case "removemake":
-		config.RemoveMake = "yes"
-	case "noremovemake":
-		config.RemoveMake = "no"
-	case "askremovemake":
-		config.RemoveMake = "ask"
-	default:
-		// the option was not handled by the switch
-		return false
-	}
-	// the option was successfully handled by the switch
-	return true
-}
-
 func handleVersion() {
 	fmt.Printf("yay v%s - libalpm v%s\n", version, alpm.Version())
 }

+ 158 - 194
parser.go

@@ -347,415 +347,379 @@ func formatArg(arg string) string {
 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
 	}
+
+	return true
+}
+
+func handleConfig(option, value string) bool {
+	switch option {
+	case "save":
+		shouldSaveConfig = true
+	case "afterclean":
+		config.CleanAfter = true
+	case "noafterclean":
+		config.CleanAfter = false
+	case "devel":
+		config.Devel = true
+	case "nodevel":
+		config.Devel = false
+	case "timeupdate":
+		config.TimeUpdate = true
+	case "notimeupdate":
+		config.TimeUpdate = false
+	case "topdown":
+		config.SortMode = TopDown
+	case "bottomup":
+		config.SortMode = BottomUp
+	case "completioninterval":
+		n, err := strconv.Atoi(value)
+		if err == nil {
+			config.CompletionInterval = n
+		}
+	case "sortby":
+		config.SortBy = value
+	case "noconfirm":
+		config.NoConfirm = true
+	case "config":
+		config.PacmanConf = value
+	case "redownload":
+		config.ReDownload = "yes"
+	case "redownloadall":
+		config.ReDownload = "all"
+	case "noredownload":
+		config.ReDownload = "no"
+	case "rebuild":
+		config.ReBuild = "yes"
+	case "rebuildall":
+		config.ReBuild = "all"
+	case "rebuildtree":
+		config.ReBuild = "tree"
+	case "norebuild":
+		config.ReBuild = "no"
+	case "answerclean":
+		config.AnswerClean = value
+	case "noanswerclean":
+		config.AnswerClean = ""
+	case "answerdiff":
+		config.AnswerDiff = value
+	case "noanswerdiff":
+		config.AnswerDiff = ""
+	case "answeredit":
+		config.AnswerEdit = value
+	case "noansweredit":
+		config.AnswerEdit = ""
+	case "answerupgrade":
+		config.AnswerUpgrade = value
+	case "noanswerupgrade":
+		config.AnswerUpgrade = ""
+	case "gitclone":
+		config.GitClone = true
+	case "nogitclone":
+		config.GitClone = false
+	case "gpgflags":
+		config.GpgFlags = value
+	case "mflags":
+		config.MFlags = value
+	case "gitflags":
+		config.GitFlags = value
+	case "builddir":
+		config.BuildDir = value
+	case "editor":
+		config.Editor = value
+	case "editorflags":
+		config.EditorFlags = value
+	case "makepkg":
+		config.MakepkgBin = value
+	case "makepkgconf":
+		config.MakepkgConf = value
+	case "nomakepkgconf":
+		config.MakepkgConf = ""
+	case "pacman":
+		config.PacmanBin = value
+	case "tar":
+		config.TarBin = value
+	case "git":
+		config.GitBin = value
+	case "gpg":
+		config.GpgBin = value
+	case "requestsplitn":
+		n, err := strconv.Atoi(value)
+		if err == nil && n > 0 {
+			config.RequestSplitN = n
+		}
+	case "sudoloop":
+		config.SudoLoop = true
+	case "nosudoloop":
+		config.SudoLoop = false
+	case "provides":
+		config.Provides = true
+	case "noprovides":
+		config.Provides = false
+	case "pgpfetch":
+		config.PGPFetch = true
+	case "nopgpfetch":
+		config.PGPFetch = false
+	case "upgrademenu":
+		config.UpgradeMenu = true
+	case "noupgrademenu":
+		config.UpgradeMenu = false
+	case "cleanmenu":
+		config.CleanMenu = true
+	case "nocleanmenu":
+		config.CleanMenu = false
+	case "diffmenu":
+		config.DiffMenu = true
+	case "nodiffmenu":
+		config.DiffMenu = false
+	case "editmenu":
+		config.EditMenu = true
+	case "noeditmenu":
+		config.EditMenu = false
+	case "useask":
+		config.UseAsk = true
+	case "nouseask":
+		config.UseAsk = false
+	case "combinedupgrade":
+		config.CombinedUpgrade = true
+	case "nocombinedupgrade":
+		config.CombinedUpgrade = false
+	case "a", "aur":
+		mode = ModeAUR
+	case "repo":
+		mode = ModeRepo
+	case "removemake":
+		config.RemoveMake = "yes"
+	case "noremovemake":
+		config.RemoveMake = "no"
+	case "askremovemake":
+		config.RemoveMake = "ask"
+	default:
+		return false
+	}
+
+	return true
 }
 
 func isOp(op string) bool {
 	switch op {
 	case "V", "version":
-		return true
 	case "D", "database":
-		return true
 	case "F", "files":
-		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
-
-		// yay specific
+	// yay specific
 	case "Y", "yay":
-		return true
 	case "P", "print":
-		return true
 	case "G", "getpkgbuild":
-		return true
 	default:
 		return false
 	}
+
+	return true
 }
 
 func isGlobal(op string) bool {
 	switch op {
 	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
 	default:
 		return false
 	}
+
+	return true
 }
 
 func hasParam(arg string) bool {
 	switch arg {
 	case "dbpath", "b":
-		return true
 	case "root", "r":
-		return true
 	case "sysroot":
-		return true
 	case "config":
-		return true
 	case "ignore":
-		return true
 	case "assume-installed":
-		return true
 	case "overwrite":
-		return true
 	case "ask":
-		return true
 	case "cachedir":
-		return true
 	case "hookdir":
-		return true
 	case "logfile":
-		return true
 	case "ignoregroup":
-		return true
 	case "arch":
-		return true
 	case "print-format":
-		return true
 	case "gpgdir":
-		return true
 	case "color":
-		return true
-
 	//yay params
 	case "mflags":
-		return true
 	case "gpgflags":
-		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 "pacman":
-		return true
 	case "tar":
-		return true
 	case "git":
-		return true
 	case "gpg":
-		return true
 	case "requestsplitn":
-		return true
 	case "answerclean":
-		return true
 	case "answerdiff":
-		return true
 	case "answeredit":
-		return true
 	case "answerupgrade":
-		return true
 	case "completioninterval":
-		return true
 	case "sortby":
-		return true
 	default:
 		return false
 	}
+
+	return true
 }
 
 // Parses short hand options such as: