From f83fdcbe7abcf77d7e7aa8e0ee2076b9e52b5845 Mon Sep 17 00:00:00 2001 From: Oussama Makhlouk Date: Sat, 20 Apr 2024 23:29:35 +0100 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20Cleanup=20code?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- service/service.go | 40 ++++++++++++++++++---------------------- service/util.go | 40 ++++++++++++++++++++++++++++------------ 2 files changed, 46 insertions(+), 34 deletions(-) diff --git a/service/service.go b/service/service.go index e941d87..b2ecff2 100644 --- a/service/service.go +++ b/service/service.go @@ -3,12 +3,10 @@ package service import ( "fmt" + "github.com/oussamaM1/treels/module" "log" "os" "path/filepath" - "sort" - - "github.com/oussamaM1/treels/module" ) const ( @@ -39,10 +37,8 @@ func listDirectory(options module.Options) { log.Fatalf("Error reading directory: %s\n", err) } - // Sort files by name - sort.Slice(files, func(i, j int) bool { - return files[i].Name() < files[j].Name() - }) + // sort files by name + sortSlice(files) // Print files and directories for _, file := range files { @@ -68,11 +64,23 @@ func treeDirectory(options module.Options, indent string, isLastFolder bool) { } // Sort files by name - sort.Slice(files, func(i, j int) bool { - return files[i].Name() < files[j].Name() - }) + sortSlice(files) // Print files and directories + printFilesAndDirectoriesTreeFormat(files, options, indent, isLastFolder) +} + +func getLastVisibleIndex(files []os.FileInfo, showHidden bool) int { + for i := len(files) - 1; i >= 0; i-- { + if !isHidden(files[i].Name()) || showHidden { + return i + } + } + return -1 +} + +// printFilesAndDirectoriesTreeFormat - prints files and directories in tree format +func printFilesAndDirectoriesTreeFormat(files []os.FileInfo, options module.Options, indent string, isLastFolder bool) { lastVisibleIndex := getLastVisibleIndex(files, options.Flags.ShowHidden) for i, file := range files { if !isHidden(file.Name()) || options.Flags.ShowHidden { @@ -80,9 +88,6 @@ func treeDirectory(options module.Options, indent string, isLastFolder bool) { if i == lastVisibleIndex && isLastFolder { prefix = indent + boxUpAndRight childIndentNext = indent + whiteSpaces - } else if i == lastVisibleIndex { - prefix = indent + boxUpAndRight - childIndentNext = indent + whiteSpaces } else { prefix = indent + boxLightVerticalAndRight childIndentNext = indent + boxLightVertical @@ -102,12 +107,3 @@ func treeDirectory(options module.Options, indent string, isLastFolder bool) { } } } - -func getLastVisibleIndex(files []os.FileInfo, showHidden bool) int { - for i := len(files) - 1; i >= 0; i-- { - if !isHidden(files[i].Name()) || showHidden { - return i - } - } - return -1 -} diff --git a/service/util.go b/service/util.go index 3e3c855..4ea6b2b 100644 --- a/service/util.go +++ b/service/util.go @@ -6,9 +6,16 @@ import ( "github.com/oussamaM1/treels/module" "log" "os" + "sort" "strings" ) +// Define constant for formatting +const ( + IconFileFormat = "%s%s%s %s%s" + IconFolderFormat = "%s%s%s%s %s%s" +) + // CheckDefaultDirectory func - returns current working directory if no directory is specified func CheckDefaultDirectory(directory *string) { if *directory == "" { @@ -97,23 +104,23 @@ func printIconFiles(prefix string, file os.FileInfo, extension string) string { var format string switch extension { case module.Go, module.Mod, module.Sum: - format = fmt.Sprintf("%s%s%s %s%s", prefix, module.LightBlue, module.GoLang, module.Reset, file.Name()) + format = fmt.Sprintf(IconFileFormat, prefix, module.LightBlue, module.GoLang, module.Reset, file.Name()) case module.Md: - format = fmt.Sprintf("%s%s%s %s%s", prefix, module.Grey, module.Markdown, module.Reset, file.Name()) + format = fmt.Sprintf(IconFileFormat, prefix, module.Grey, module.Markdown, module.Reset, file.Name()) case module.Gitignore: - format = fmt.Sprintf("%s%s%s %s%s", prefix, module.Orange, module.Git, module.Reset, file.Name()) + format = fmt.Sprintf(IconFileFormat, prefix, module.Orange, module.Git, module.Reset, file.Name()) case module.JSON: - format = fmt.Sprintf("%s%s%s %s%s", prefix, module.Yellow, module.JSONIcon, module.Reset, file.Name()) + format = fmt.Sprintf(IconFileFormat, prefix, module.Yellow, module.JSONIcon, module.Reset, file.Name()) case module.Yml, module.Yaml: - format = fmt.Sprintf("%s%s%s %s%s", prefix, module.LightGreen, module.YamlIcon, module.Reset, file.Name()) + format = fmt.Sprintf(IconFileFormat, prefix, module.LightGreen, module.YamlIcon, module.Reset, file.Name()) case module.Pls, module.Plb, module.SQL: - format = fmt.Sprintf("%s%s%s %s%s", prefix, module.Red, module.Database, module.Reset, file.Name()) + format = fmt.Sprintf(IconFileFormat, prefix, module.Red, module.Database, module.Reset, file.Name()) case module.Java, module.Class: - format = fmt.Sprintf("%s%s%s %s%s", prefix, module.LightRed, module.JavaLang, module.Reset, file.Name()) + format = fmt.Sprintf(IconFileFormat, prefix, module.LightRed, module.JavaLang, module.Reset, file.Name()) case module.Cpp: - format = fmt.Sprintf("%s%s%s %s%s", prefix, module.LightBlue, module.CppLang, module.Reset, file.Name()) + format = fmt.Sprintf(IconFileFormat, prefix, module.LightBlue, module.CppLang, module.Reset, file.Name()) case module.C: - format = fmt.Sprintf("%s%s%s %s%s", prefix, module.LightBlue, module.CLang, module.Reset, file.Name()) + format = fmt.Sprintf(IconFileFormat, prefix, module.LightBlue, module.CLang, module.Reset, file.Name()) default: format = fmt.Sprintf("%s%s %s", prefix, module.File, file.Name()) } @@ -125,11 +132,11 @@ func printIconFolders(prefix string, file os.FileInfo, extension string) string var format string switch extension { case module.Github, module.GitFolder: - format = fmt.Sprintf("%s%s%s%s %s%s", prefix, module.Bold, module.Orange, module.Git, file.Name(), module.Reset) + format = fmt.Sprintf(IconFolderFormat, prefix, module.Bold, module.Orange, module.Git, file.Name(), module.Reset) case module.IntellijFolder: - format = fmt.Sprintf("%s%s%s%s %s%s", prefix, module.Bold, module.LightBlue, module.Intellij, file.Name(), module.Reset) + format = fmt.Sprintf(IconFolderFormat, prefix, module.Bold, module.LightBlue, module.Intellij, file.Name(), module.Reset) default: - format = fmt.Sprintf("%s%s%s%s %s%s", prefix, module.Bold, module.Pink, module.Folder, file.Name(), module.Reset) + format = fmt.Sprintf(IconFolderFormat, prefix, module.Bold, module.Pink, module.Folder, file.Name(), module.Reset) } return format } @@ -144,3 +151,12 @@ func printFilesAndFolderWithoutIcons(prefix string, file os.FileInfo) string { } return format } + +// sortSlice func - sorts a slice of os.FileInfo objects alphabetically by file name. +// It modifies the original slice in place. +func sortSlice(files []os.FileInfo) { + // Sort files by name + sort.Slice(files, func(i, j int) bool { + return files[i].Name() < files[j].Name() + }) +}