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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
|
package argvpb
import (
"go.wit.com/log"
)
// verify the application has the needed function calls defined
func verifyApplication(tmp interface{}) {
// START NEEDED FUNCS // 2025/10/18 (review in a few months)
if tmp, ok := tmp.(initArgvI); ok {
me.initArgvFunc = tmp.InitArgv
} else {
panic("you must define in your app the function: (args) func InitArgv() (string, string, string)")
}
if tmp, ok := tmp.(mustParseI); ok {
me.mustParseFunc = tmp.MustParse
} else {
panic("you must define in your app the function: func (args) MustParse() error")
}
if tmp, ok := tmp.(writeHelpForAutocompleteI); ok {
me.writeHelpForAutocompleteFunc = tmp.WriteHelpForAutocomplete
} else {
helpWriteHelpForAutocomplete()
}
if tmp, ok := tmp.(writeHelpForAutocompleteDebugI); ok {
me.writeHelpForAutocompleteDebugFunc = tmp.WriteHelpForAutocompleteDebug
} else {
helpWriteHelpForAutocompleteDebug()
}
if tmp, ok := tmp.(writeHelpForSubcommandI); ok {
me.writeHelpForSubcommandFunc = tmp.WriteHelpForSubcommand
} else {
helpWriteHelpForSubcommand()
}
if tmp, ok := tmp.(writeHelpI); ok {
me.writeHelpFunc = tmp.WriteHelp
} else {
helpWriteHelp()
}
if tmp, ok := tmp.(parseFlagsI); ok {
me.parseFlagsFunc = tmp.ParseFlags
} else {
parseFlagsHelp()
}
if tmp, ok := tmp.(initGuiI); ok {
me.initGuiFunc = tmp.InitGui
if err := tmp.InitGui(); err != nil {
log.Info("go.wit.com/gui failed to initialize", err)
panic("gui failed to init")
}
} else {
// panic("you must add this function to argv.go: (argv) func InitGui() error")
}
// END NEEDED FUNCS // 2025/10/18 (review in a few months)
// TODO: SORT OUT STUFF BELOW HERE
if tmp, ok := tmp.(examplesI); ok {
me.examples = tmp.Examples
}
if tmp, ok := tmp.(autoFuncI); ok {
me.autoFunc = tmp.DoAutoComplete
} else {
// panic("you need to make the function argv.DoAutoComplete()")
}
if tmp, ok := tmp.(sendCompletionStringsI); ok {
me.autoFunc = tmp.SendCompletionStrings
} else {
// panic("you need to make the function argv.DoAutoComplete()")
}
if tmp, ok := tmp.(exitI); ok {
me.appExit = tmp.Exit
} else {
// panic("you need to make the function argv.Exit()")
}
}
// WORKING ON START
type initArgvI interface {
InitArgv() (string, string, string)
}
type mustParseI interface {
MustParse() error
}
type parseFlagsI interface {
ParseFlags([]string) error
}
type writeHelpForAutocompleteI interface {
WriteHelpForAutocomplete(string, ...string) error
}
type writeHelpForAutocompleteDebugI interface {
WriteHelpForAutocompleteDebug(string, ...string) error
}
type writeHelpForSubcommandI interface {
WriteHelpForSubcommand(cmd string) error
}
type writeHelpI interface {
WriteHelp() error
}
type initGuiI interface {
// Version returns the version string that will be printed on a line by itself
// at the top of the help message.
InitGui() error
}
// WORKING ON END
// NOTSURE ABOUT START
type appnameI interface {
// Version returns the version string that will be printed on a line by itself
// at the top of the help message.
Appname() string
}
// deprecate
type autoFuncI interface {
// Version returns the version string that will be printed on a line by itself
// at the top of the help message.
DoAutoComplete(*Argv)
}
type sendCompletionStringsI interface {
// Version returns the version string that will be printed on a line by itself
// at the top of the help message.
SendCompletionStrings(*Argv)
}
type buildtimeI interface {
Buildtime() (string, string)
}
type examplesI interface {
// Version returns the version string that will be printed on a line by itself
// at the top of the help message.
Examples() string
}
type guiI interface {
// Version returns the version string that will be printed on a line by itself
// at the top of the help message.
ArgvGui() error
}
type exitI interface {
// allows a custom app Exit()
Exit()
}
func helpWriteHelpForSubcommand() {
log.Info("")
log.Info("// add this funcgion: this will print the help")
log.Info("func (args) WriteHelpForSubcommand() error {")
log.Info(" me.pp.WriteHelpForSubcommand(os.Stderr, me.argv.Cmd)")
log.Info(" return nil")
log.Info("}")
log.Info("")
log.Info("cp ~/go/src/go.wit.com/apps/forge/argv.template.go .")
panic("copy the argv.template.go file from forge")
}
func helpWriteHelp() {
log.Info("")
log.Info("// add this funcgion: this will print the help")
log.Info("func (args) WriteHelp() error {")
log.Info(" me.pp.WriteHelp(os.Stderr)")
log.Info(" return nil")
log.Info("}")
log.Info("")
panic("best to just copy the argv.template.go file from forge")
}
func helpWriteHelpForAutocompleteDebug() {
log.Info("")
log.Info("// this will print the help for the subcmd")
log.Info("func (args) WriteHelpForAutocompleteDebug(part string, subcmd ...string) error {")
log.Info(" return argvpp.WriteHelpForAutocomplete(f, os.Stdout, part, subcmd...)")
log.Info("}")
log.Info("")
log.Info("cp ~/go/src/go.wit.com/apps/forge/argv.template.go .")
panic("best to just copy the argv.template.go file from forge")
}
// func (p *Parser) WriteHelpForAutocomplete(stderr io.Writer, stdout io.Writer, partial string, subcommand ...string) error {
// me.pp.WriteHelpForAutocomplete(os.Stderr, os.Stdout, partial, cmd...)
func helpWriteHelpForAutocomplete() {
log.Info("")
log.Info("// this will print the help for the subcmd")
log.Info("func (args) WriteHelpForAutocomplete(part string, subcmd ...string) error {")
log.Info(" return argvpp.WriteHelpForAutocomplete(os.Stderr, os.Stdout, part, subcmd...)")
log.Info("}")
log.Info("")
log.Info("Just copy the argv.template.go file from forge")
log.Info("")
panic("you must define this function in your application code")
}
func parseFlagsHelp() {
log.Info("")
log.Info("// this function will send the current argv PB to go-args for parsing")
log.Info("func (args) ParseFlags(flags []string) error {")
log.Info(" arg.ParseFlags(flags)")
log.Info("}")
log.Info("")
panic("you must define in your app the function: func (args) ParseFlags([]string) error")
}
|