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
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)
}
}
|