56 lines
1.3 KiB
Go
56 lines
1.3 KiB
Go
|
|
// Command indexer walks an Einherjar repository checkout, parses every
|
||
|
|
// sibling module, and writes the resulting framework knowledge index to
|
||
|
|
// data/index.json (or the path given by -out).
|
||
|
|
//
|
||
|
|
// Usage:
|
||
|
|
//
|
||
|
|
// go run ./cmd/indexer .. # default output: data/index.json
|
||
|
|
// go run ./cmd/indexer -out idx.json /path/to/einherjar
|
||
|
|
package main
|
||
|
|
|
||
|
|
import (
|
||
|
|
"encoding/json"
|
||
|
|
"flag"
|
||
|
|
"fmt"
|
||
|
|
"os"
|
||
|
|
|
||
|
|
"code.nochebuena.dev/einherjar/mcp/internal/index"
|
||
|
|
)
|
||
|
|
|
||
|
|
func main() {
|
||
|
|
out := flag.String("out", "data/index.json", "output path for the generated index")
|
||
|
|
flag.Usage = func() {
|
||
|
|
fmt.Fprintf(os.Stderr, "usage: indexer [-out path] <einherjar-repo-root>\n")
|
||
|
|
flag.PrintDefaults()
|
||
|
|
}
|
||
|
|
flag.Parse()
|
||
|
|
|
||
|
|
root := flag.Arg(0)
|
||
|
|
if root == "" {
|
||
|
|
root = ".."
|
||
|
|
}
|
||
|
|
|
||
|
|
idx, err := index.Build(root)
|
||
|
|
if err != nil {
|
||
|
|
fmt.Fprintf(os.Stderr, "indexer: %v\n", err)
|
||
|
|
os.Exit(1)
|
||
|
|
}
|
||
|
|
idx.Modules = append(idx.Modules, index.BuildBuiltins())
|
||
|
|
|
||
|
|
f, err := os.Create(*out)
|
||
|
|
if err != nil {
|
||
|
|
fmt.Fprintf(os.Stderr, "indexer: %v\n", err)
|
||
|
|
os.Exit(1)
|
||
|
|
}
|
||
|
|
defer f.Close()
|
||
|
|
|
||
|
|
enc := json.NewEncoder(f)
|
||
|
|
enc.SetIndent("", " ")
|
||
|
|
if err := enc.Encode(idx); err != nil {
|
||
|
|
fmt.Fprintf(os.Stderr, "indexer: encode: %v\n", err)
|
||
|
|
os.Exit(1)
|
||
|
|
}
|
||
|
|
|
||
|
|
fmt.Fprintf(os.Stderr, "indexer: wrote %s (%d modules)\n", *out, len(idx.Modules))
|
||
|
|
}
|