From 3c8633ff041a95b15f7bf7fc4a881c410708194b Mon Sep 17 00:00:00 2001 From: Dan Anglin Date: Sun, 18 Aug 2024 07:18:57 +0100 Subject: [PATCH] refactor: minimise the main package Minimise the main package by moving all flag parsing to the Execute function. --- .../templates/executor/execute.go.gotmpl | 38 +++++++++++++++---- cmd/enbas/main.go | 38 +------------------ internal/executor/execute.go | 36 +++++++++++++++--- 3 files changed, 62 insertions(+), 50 deletions(-) diff --git a/cmd/enbas-codegen/templates/executor/execute.go.gotmpl b/cmd/enbas-codegen/templates/executor/execute.go.gotmpl index 7150211..16a75d6 100644 --- a/cmd/enbas-codegen/templates/executor/execute.go.gotmpl +++ b/cmd/enbas-codegen/templates/executor/execute.go.gotmpl @@ -11,22 +11,46 @@ package executor {{ print "" }} {{ print "" }} import "fmt" +import "flag" +import "os" import "codeflow.dananglin.me.uk/apollo/enbas/internal/config" +import internalFlag "codeflow.dananglin.me.uk/apollo/enbas/internal/flag" import "codeflow.dananglin.me.uk/apollo/enbas/internal/printer" +import "codeflow.dananglin.me.uk/apollo/enbas/internal/usage" {{ print "" }} {{ print "" }} -func Execute( - command string, - args []string, - noColor bool, - configDir string, -) error { +func Execute() error { var ( + configDir string + noColorFlag internalFlag.BoolPtrValue + noColor bool enbasConfig *config.Config enbasPrinter *printer.Printer err error ) + flag.StringVar(&configDir, "config-dir", "", "The path to your configuration directory") + flag.Var(&noColorFlag, "no-color", "Set to true to disable ANSI colour output when displaying text on screen") + + flag.Usage = usage.AppUsageFunc() + + flag.Parse() + + if flag.NArg() < 1 { + flag.Usage() + + return nil + } + + if noColorFlag.Value != nil { + noColor = *noColorFlag.Value + } else if os.Getenv("NO_COLOR") != "" { + noColor = true + } + + command := flag.Arg(0) + args := flag.Args()[1:] + switch command { case "init", "version": enbasPrinter = printer.NewPrinter(noColor, "", 0) @@ -94,7 +118,7 @@ func execute( exe, ok := executorMap[command] if !ok { - return UnknownCommandError{Command: command} + return UnknownCommandError{command: command} } if err := exe.Parse(args); err != nil { diff --git a/cmd/enbas/main.go b/cmd/enbas/main.go index 3407d92..a88c613 100644 --- a/cmd/enbas/main.go +++ b/cmd/enbas/main.go @@ -1,49 +1,13 @@ package main import ( - "flag" "os" "codeflow.dananglin.me.uk/apollo/enbas/internal/executor" - internalFlag "codeflow.dananglin.me.uk/apollo/enbas/internal/flag" - "codeflow.dananglin.me.uk/apollo/enbas/internal/usage" ) func main() { - if err := run(); err != nil { + if err := executor.Execute(); err != nil { os.Exit(1) } } - -func run() error { - var ( - configDir string - noColorFlag internalFlag.BoolPtrValue - ) - - flag.StringVar(&configDir, "config-dir", "", "Specify your config directory") - flag.Var(&noColorFlag, "no-color", "Disable ANSI colour output when displaying text on screen") - - flag.Usage = usage.AppUsageFunc() - - flag.Parse() - - if flag.NArg() < 1 { - flag.Usage() - - return nil - } - - var noColor bool - - if noColorFlag.Value != nil { - noColor = *noColorFlag.Value - } else if os.Getenv("NO_COLOR") != "" { - noColor = true - } - - command := flag.Arg(0) - args := flag.Args()[1:] - - return executor.Execute(command, args, noColor, configDir) //nolint:wrapcheck -} diff --git a/internal/executor/execute.go b/internal/executor/execute.go index d42d3c2..44b0616 100644 --- a/internal/executor/execute.go +++ b/internal/executor/execute.go @@ -6,24 +6,48 @@ package executor import ( + "flag" "fmt" + "os" "codeflow.dananglin.me.uk/apollo/enbas/internal/config" + internalFlag "codeflow.dananglin.me.uk/apollo/enbas/internal/flag" "codeflow.dananglin.me.uk/apollo/enbas/internal/printer" + "codeflow.dananglin.me.uk/apollo/enbas/internal/usage" ) -func Execute( - command string, - args []string, - noColor bool, - configDir string, -) error { +func Execute() error { var ( + configDir string + noColorFlag internalFlag.BoolPtrValue + noColor bool enbasConfig *config.Config enbasPrinter *printer.Printer err error ) + flag.StringVar(&configDir, "config-dir", "", "The path to your configuration directory") + flag.Var(&noColorFlag, "no-color", "Set to true to disable ANSI colour output when displaying text on screen") + + flag.Usage = usage.AppUsageFunc() + + flag.Parse() + + if flag.NArg() < 1 { + flag.Usage() + + return nil + } + + if noColorFlag.Value != nil { + noColor = *noColorFlag.Value + } else if os.Getenv("NO_COLOR") != "" { + noColor = true + } + + command := flag.Arg(0) + args := flag.Args()[1:] + switch command { case "init", "version": enbasPrinter = printer.NewPrinter(noColor, "", 0)