Files
2026-07-13 13:33:09 +08:00

87 lines
1.6 KiB
Go

package main
import (
"context"
"fmt"
"os"
"plandex-server/syntax/file_map"
"sync"
"time"
shared "plandex-shared"
)
func main() {
ctx, cancel := context.WithTimeout(context.Background(), time.Minute)
defer cancel()
args := os.Args[1:]
if len(args) < 1 {
fmt.Println("usage: mapper [files-or-dirs...]")
os.Exit(1)
}
var parserTree bool = false
for i, arg := range args {
if arg == "--trees" {
parserTree = true
args = append(args[:i], args[i+1:]...)
break
}
}
paths := args
var filteredPaths []string
for _, path := range paths {
if shared.HasFileMapSupport(path) {
filteredPaths = append(filteredPaths, path)
}
}
errCh := make(chan error, len(filteredPaths))
fileInputs := map[string]string{}
var mu sync.Mutex
for _, path := range filteredPaths {
go func(path string) {
content, err := os.ReadFile(path)
if err != nil {
errCh <- fmt.Errorf("error reading file: %v", err)
return
}
mu.Lock()
fileInputs[path] = string(content)
mu.Unlock()
errCh <- nil
}(path)
}
for i := 0; i < len(filteredPaths); i++ {
err := <-errCh
if err != nil {
fmt.Printf("error reading file: %v\n", err)
os.Exit(1)
}
}
if parserTree {
trees, err := file_map.ProcessMapTrees(ctx, fileInputs)
if err != nil {
fmt.Printf("error processing map files: %v\n", err)
os.Exit(1)
}
fmt.Println(trees.CombinedTrees())
} else {
mapBodies, err := file_map.ProcessMapFiles(ctx, fileInputs)
if err != nil {
fmt.Printf("error processing map files: %v\n", err)
os.Exit(1)
}
fmt.Println(mapBodies.CombinedMap(map[string]int{}))
}
}