diff options
| author | ayyansea <ayyansea@gmail.com> | 2024-11-18 21:53:29 +0300 |
|---|---|---|
| committer | ayyansea <ayyansea@gmail.com> | 2024-11-18 21:53:29 +0300 |
| commit | 574e76ae935c4931ec50b14a94dee930ed6f3d5a (patch) | |
| tree | a289a98536930cd90a0d8e7e05420f3a35934923 | |
| parent | d741a3187f0e8abb00ee34356b3e61ab9087c0d9 (diff) | |
feat: restructure project + add a basic cli arg parser
| -rw-r--r-- | .gitignore | 1 | ||||
| -rw-r--r-- | Makefile | 2 | ||||
| -rw-r--r-- | cmd/uptfs.go | 56 | ||||
| -rw-r--r-- | cmd/uptfs/main.go | 60 | ||||
| -rw-r--r-- | go.mod | 9 | ||||
| -rw-r--r-- | go.sum | 8 | ||||
| -rw-r--r-- | internal/config/config.go (renamed from util/config/config.go) | 0 | ||||
| -rw-r--r-- | internal/filter/filter.go (renamed from cmd/filter.go) | 2 | ||||
| -rw-r--r-- | internal/filter/filters.go (renamed from cmd/filters.go) | 2 | ||||
| -rw-r--r-- | internal/split/split.go (renamed from util/split/split.go) | 10 | ||||
| -rw-r--r-- | internal/token/linked_token_list.go (renamed from cmd/linked_token_list.go) | 10 | ||||
| -rw-r--r-- | internal/token/token.go (renamed from cmd/token.go) | 2 | ||||
| -rw-r--r-- | main.go | 7 |
13 files changed, 99 insertions, 70 deletions
@@ -26,6 +26,7 @@ go.work.sum # binary uptfs +!cmd/uptfs/ # config config.yaml @@ -6,7 +6,7 @@ all: build .PHONY: build build: @echo "Building Go uptfs..." - go build + go build ./cmd/uptfs .PHONY: clean clean: diff --git a/cmd/uptfs.go b/cmd/uptfs.go deleted file mode 100644 index 531b102..0000000 --- a/cmd/uptfs.go +++ /dev/null @@ -1,56 +0,0 @@ -package cmd - -import ( - "bufio" - "errors" - "fmt" - "os" - "strings" - "uptfs/util/split" -) - -func Run() { - scanner := bufio.NewScanner(os.Stdin) - scanner.Scan() - inputString := scanner.Text() - - if inputString == "" { - err := errors.New("the input string is empty") - fmt.Printf("%v\n", err) - os.Exit(1) - } - - additionalDelimeters := []string{",", "."} - tokens := strings.Split(inputString, " ") - tokens = formatInput(tokens, additionalDelimeters) - - if len(tokens) == 0 { - err := errors.New("the slice is empty") - fmt.Printf("%v\n", err) - os.Exit(1) - } - - var linkedTokens LinkedTokenList - SliceToLinkedTokenSlice(tokens, &linkedTokens) - - lowercaseFilter := NewLowercaseFilterWithExtraSteps() - uppercaseFilter := NewUppercaseFilter() - - for current := linkedTokens.head; current != nil; current = current.GetNextToken() { - current.content = lowercaseFilter.Filter(current.content) - current.content = uppercaseFilter.Filter(current.content) - } - - fmt.Println("Head: ", linkedTokens.head.content) - fmt.Println("Tail: ", linkedTokens.tail.content) -} - -func formatInput(tokenArray []string, delimeterArray []string) []string { - for _, delimeter := range delimeterArray { - for index, element := range tokenArray { - tokenArray = split.NewArrayWithSplit(tokenArray, index, element, delimeter) - } - } - - return tokenArray -} diff --git a/cmd/uptfs/main.go b/cmd/uptfs/main.go new file mode 100644 index 0000000..4ecb045 --- /dev/null +++ b/cmd/uptfs/main.go @@ -0,0 +1,60 @@ +package main + +import ( + "bufio" + "errors" + "fmt" + "os" + "strings" + + "github.com/alexflint/go-arg" + "github.com/ayyansea/uptfs/internal/filter" + "github.com/ayyansea/uptfs/internal/split" + "github.com/ayyansea/uptfs/internal/token" +) + +var args struct { + Foo string `help:"it's a foo"` + Bar bool `help:"it's a bar"` +} + +func main() { + arg.MustParse(&args) + fmt.Println(args.Foo, args.Bar) + + scanner := bufio.NewScanner(os.Stdin) + scanner.Scan() + inputString := scanner.Text() + + if inputString == "" { + err := errors.New("the input string is empty") + fmt.Printf("%v\n", err) + os.Exit(1) + } + + additionalDelimeters := []string{",", "."} + tokens := strings.Split(inputString, " ") + tokens = split.FormatInput(tokens, additionalDelimeters) + + if len(tokens) == 0 { + err := errors.New("the slice is empty") + fmt.Printf("%v\n", err) + os.Exit(1) + } + + var linkedTokens token.LinkedTokenList + token.SliceToLinkedTokenSlice(tokens, &linkedTokens) + + lowercaseFilter := filter.NewLowercaseFilterWithExtraSteps() + uppercaseFilter := filter.NewUppercaseFilter() + + for current := linkedTokens.GetHead(); current != nil; current = current.GetNextToken() { + current.SetContent(lowercaseFilter.Filter(current.GetContent())) + current.SetContent(uppercaseFilter.Filter(current.GetContent())) + } + + head := linkedTokens.GetHead() + tail := linkedTokens.GetTail() + fmt.Println("Head: ", head.GetContent()) + fmt.Println("Tail: ", tail.GetContent()) +} @@ -1,5 +1,10 @@ -module uptfs +module github.com/ayyansea/uptfs go 1.23.2 -require gopkg.in/yaml.v3 v3.0.1 // indirect +require gopkg.in/yaml.v3 v3.0.1 + +require ( + github.com/alexflint/go-arg v1.5.1 // indirect + github.com/alexflint/go-scalar v1.2.0 // indirect +) @@ -1,3 +1,11 @@ +github.com/alexflint/go-arg v1.5.1 h1:nBuWUCpuRy0snAG+uIJ6N0UvYxpxA0/ghA/AaHxlT8Y= +github.com/alexflint/go-arg v1.5.1/go.mod h1:A7vTJzvjoaSTypg4biM5uYNTkJ27SkNTArtYXnlqVO8= +github.com/alexflint/go-scalar v1.2.0 h1:WR7JPKkeNpnYIOfHRa7ivM21aWAdHD0gEWHCx+WQBRw= +github.com/alexflint/go-scalar v1.2.0/go.mod h1:LoFvNMqS1CPrMVltza4LvnGKhaSpc3oyLEBUZVhhS2o= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/util/config/config.go b/internal/config/config.go index ad35ee7..ad35ee7 100644 --- a/util/config/config.go +++ b/internal/config/config.go diff --git a/cmd/filter.go b/internal/filter/filter.go index 9d8ccac..3fff07f 100644 --- a/cmd/filter.go +++ b/internal/filter/filter.go @@ -1,4 +1,4 @@ -package cmd +package filter import ( "fmt" diff --git a/cmd/filters.go b/internal/filter/filters.go index 28592ba..8532fef 100644 --- a/cmd/filters.go +++ b/internal/filter/filters.go @@ -1,4 +1,4 @@ -package cmd +package filter import ( "strings" diff --git a/util/split/split.go b/internal/split/split.go index 2fc29db..e03335c 100644 --- a/util/split/split.go +++ b/internal/split/split.go @@ -4,6 +4,16 @@ import ( "strings" ) +func FormatInput(tokenArray []string, delimeterArray []string) []string { + for _, delimeter := range delimeterArray { + for index, element := range tokenArray { + tokenArray = NewArrayWithSplit(tokenArray, index, element, delimeter) + } + } + + return tokenArray +} + func checkArrayElementsEmpty(array []string) bool { for _, str := range array { if str != "" { diff --git a/cmd/linked_token_list.go b/internal/token/linked_token_list.go index c8c876f..5fe42a9 100644 --- a/cmd/linked_token_list.go +++ b/internal/token/linked_token_list.go @@ -1,9 +1,17 @@ -package cmd +package token type LinkedTokenList struct { head, tail *Token } +func (lts *LinkedTokenList) GetHead() *Token { + return lts.head +} + +func (lts *LinkedTokenList) GetTail() *Token { + return lts.tail +} + func (lts *LinkedTokenList) AddToken(content string) { newToken := &Token{ content: content, diff --git a/cmd/token.go b/internal/token/token.go index 7652be7..c4dffd8 100644 --- a/cmd/token.go +++ b/internal/token/token.go @@ -1,4 +1,4 @@ -package cmd +package token type Token struct { content string diff --git a/main.go b/main.go deleted file mode 100644 index 10c5c9a..0000000 --- a/main.go +++ /dev/null @@ -1,7 +0,0 @@ -package main - -import "uptfs/cmd" - -func main() { - cmd.Run() -} |
