gitstack

grindlemire/go-tui code browser

2.7 KB Go 105 lines 2026-03-04 · 438b3f5 raw
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
// Package main provides the CLI tool for the .gsx DSL compiler.
//
// Usage:
//
//	tui generate [path...]    Generate Go code from .gsx files
//	tui check [path...]       Check .gsx files without generating
//	tui help                  Show help
//
// Examples:
//
//	tui generate ./...        Recursively find and compile all .gsx files
//	tui generate ./components Process a specific directory
//	tui generate header.gsx   Process a specific file
//	tui check header.gsx      Check syntax without generating
package main

import (
	"fmt"
	"os"
	"runtime/debug"
)

var version = "dev"

func getVersion() string {
	if version != "dev" {
		return version
	}
	if info, ok := debug.ReadBuildInfo(); ok && info.Main.Version != "" && info.Main.Version != "(devel)" {
		return info.Main.Version
	}
	return "dev"
}

const usage = `tui - DSL compiler for go-tui element trees

Usage:
  tui <command> [options] [path...]

Commands:
  generate    Generate Go code from .gsx files
  check       Check .gsx files without generating code
  fmt         Format .gsx files
  lsp         Start the language server (for editor integration)
  version     Print version information
  help        Show this help message

Options:
  -v          Verbose output

Examples:
  tui generate ./...              Recursively process all .gsx files
  tui generate ./components       Process files in a directory
  tui generate header.gsx         Process a specific file
  tui generate -v ./...           Verbose output during generation
  tui check header.gsx            Check syntax without generating
  tui fmt ./...                   Format all .gsx files recursively
  tui fmt --check ./...           Check formatting without modifying
  tui fmt --stdout file.gsx       Print formatted output to stdout
  tui lsp                         Start LSP server on stdio
  tui lsp --log /tmp/tui-lsp.log  Start with debug logging

For more information, see https://github.com/grindlemire/go-tui
`

func main() {
	if len(os.Args) < 2 {
		fmt.Print(usage)
		os.Exit(1)
	}

	command := os.Args[1]
	args := os.Args[2:]

	switch command {
	case "generate":
		if err := runGenerate(args); err != nil {
			fmt.Fprintf(os.Stderr, "error: %v\n", err)
			os.Exit(1)
		}
	case "check":
		if err := runCheck(args); err != nil {
			fmt.Fprintf(os.Stderr, "error: %v\n", err)
			os.Exit(1)
		}
	case "fmt":
		if err := runFmt(args); err != nil {
			fmt.Fprintf(os.Stderr, "error: %v\n", err)
			os.Exit(1)
		}
	case "lsp":
		if err := runLSP(args); err != nil {
			fmt.Fprintf(os.Stderr, "error: %v\n", err)
			os.Exit(1)
		}
	case "version":
		fmt.Printf("tui version %s\n", getVersion())
	case "help", "-h", "--help":
		fmt.Print(usage)
	default:
		fmt.Fprintf(os.Stderr, "unknown command: %s\n\n", command)
		fmt.Print(usage)
		os.Exit(1)
	}
}