Files
2026-05-16 01:39:45 +08:00

44 lines
753 B
Go

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
}