package tree import ( "fmt" "os" "path/filepath" "strings" ) func Generate(root string) (string, error) { ig, _ := Load(root) var builder strings.Builder err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error { if err != nil { return err } if path == root { builder.WriteString(".\n") return nil } rel, _ := filepath.Rel(root, path) // gitignore filter if ig != nil && ig.MatchesPath(rel) { if info.IsDir() { return filepath.SkipDir } return nil } level := strings.Count(rel, string(os.PathSeparator)) prefix := strings.Repeat("│ ", level) builder.WriteString(fmt.Sprintf("%sā”œā”€ā”€ %s\n", prefix, info.Name())) return nil }) return builder.String(), err }