From 737a3e82f46142c24537a870ad76e7c4c1526621 Mon Sep 17 00:00:00 2001 From: "v.funtikov" Date: Thu, 23 Dec 2021 12:45:28 +0300 Subject: [PATCH] fix: sol.go file gen by tpl now pure golang --- Makefile | 14 +-------- tpl/soltpl.gotext | 30 ++++++++++++++++++++ tpl/tpl.go | 72 +++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 103 insertions(+), 13 deletions(-) create mode 100644 tpl/soltpl.gotext create mode 100644 tpl/tpl.go diff --git a/Makefile b/Makefile index 4bc7d06..48fdad1 100644 --- a/Makefile +++ b/Makefile @@ -14,16 +14,4 @@ test: .PNONY:new-day new-day: @read -p "Enter day number: " num; \ - folder="./day$$num"; \ - if test -d "$$folder"; \ - then echo Folder already exists; \ - else echo "Creating $$folder"; \ - mkdir -p "$$folder"; \ - touch "$$folder/sol.go"; \ - echo "package day$$num\n\n\ -func Part1(lines []string) int{\n\ -\t//todo: write code here\n\ -\treturn -1\n\ -}\n" >> "./day$$num/sol.go"; \ - fi - + go run -tags gen ./tpl/. -day $$num diff --git a/tpl/soltpl.gotext b/tpl/soltpl.gotext new file mode 100644 index 0000000..e93c048 --- /dev/null +++ b/tpl/soltpl.gotext @@ -0,0 +1,30 @@ +package day{{.Day}} + +import "aoc" + +/* + Note: output arg type of Part1 and Part2 can be freely changed. +*/ + +func Part1(lines []string) int { + //todo: write code here + return -1 +} + +func Part2(lines []string) int { + //todo: write code here + return -1 +} + +func init() { + // this registers solution to be able to run from ./cmd/main.go, + // BUT you must add import like `_ "aoc/day{{.Day}}"` in "main.go" by hands! + aoc.RegisterSolution({{.Day}}, aoc.DaySolution{ + Part1: func(lines []string) interface{} { + return Part1(lines) + }, + Part2: func(lines []string) interface{} { + return Part2(lines) + }, + }) +} \ No newline at end of file diff --git a/tpl/tpl.go b/tpl/tpl.go new file mode 100644 index 0000000..987781d --- /dev/null +++ b/tpl/tpl.go @@ -0,0 +1,72 @@ +// +build gen + +package main + +import ( + _ "embed" + "flag" + "fmt" + "log" + "os" + "path/filepath" + "text/template" +) + +//go:embed soltpl.gotext +var tpl string + +var errLog = log.New(os.Stderr, "ERR ", log.LstdFlags) +var warnLog = log.New(os.Stderr, "WRN ", log.LstdFlags) + +func main() { + fmt.Println("Solution file generator") + + t, err := template.New("").Parse(tpl) + if err != nil { + errLog.Println("template parse:", err) + os.Exit(1) + } + + var day int + flag.IntVar(&day, "day", 0, "day number (ex: 1)") + flag.Parse() + + if day <= 0 { + errLog.Println("wrong day number") + } + + folder := filepath.Join(".", fmt.Sprintf("day%2d", day)) + + _, err = os.Stat(folder) + if err == nil { + warnLog.Println("folder already exists, wrong day?") + os.Exit(1) + } + + err = os.Mkdir(folder, 0755) + if err != nil { + errLog.Println(err) + os.Exit(1) + } + + f, err := os.Create(filepath.Join(folder, "sol.go")) + if err != nil { + errLog.Println("create solution go-file:", err) + os.Exit(1) + } + defer f.Close() + + type data struct { + Day int + } + + err = t.Execute(f, data{Day: day}) + if err != nil { + errLog.Println("process template:", err) + os.Exit(1) + } + + log.Println("folder crated:", folder) + + fmt.Println("Done.") +}