Skip to content

Commit 1e221b5

Browse files
committed
Add conditional verbose logging for debugging
- Add --verbose-logs CLI flag (disabled by default) - Generate log statements in BindApp/Render only when flag is enabled - Only generate guix_helpers_gen.go when verbose logging is enabled - Enable verbose logging in CI/CD workflows for easier debugging - Keep generated files clean (no logs) in repository by default This makes it easier to debug component lifecycle issues in test pipelines while keeping production code clean and efficient.
1 parent 46a588f commit 1e221b5

6 files changed

Lines changed: 54 additions & 51 deletions

File tree

.github/workflows/e2e.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ jobs:
3030

3131
- name: Generate and build counter example
3232
run: |
33-
./guix generate -p examples/counter
33+
./guix generate -p examples/counter --verbose-logs
3434
cd examples/counter
3535
# Copy wasm_exec.js from Go installation
3636
GOROOT="$(go env GOROOT)"
@@ -89,7 +89,7 @@ jobs:
8989

9090
- name: Generate and build calculator example
9191
run: |
92-
./guix generate -p examples/calculator
92+
./guix generate -p examples/calculator --verbose-logs
9393
cd examples/calculator
9494
9595
# Copy wasm_exec.js from Go installation

cmd/guix/main.go

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,10 @@ func main() {
5252
Name: "verbose",
5353
Usage: "Verbose output",
5454
},
55+
&cli.BoolFlag{
56+
Name: "verbose-logs",
57+
Usage: "Generate verbose logging statements in code (for debugging)",
58+
},
5559
},
5660
Action: runGenerate,
5761
},
@@ -115,6 +119,7 @@ func runGenerate(c *cli.Context) error {
115119
watchMode := c.Bool("watch")
116120
lazy := c.Bool("lazy")
117121
verbose := c.Bool("verbose")
122+
verboseLogs := c.Bool("verbose-logs")
118123

119124
// Load or create cache
120125
var genCache *cache.Cache
@@ -127,13 +132,15 @@ func runGenerate(c *cli.Context) error {
127132
}
128133
}
129134

130-
// Generate helpers file first
131-
if err := generateHelpersFile(path); err != nil {
132-
return fmt.Errorf("failed to generate helpers: %w", err)
135+
// Generate helpers file first (only if verbose logs are enabled)
136+
if verboseLogs {
137+
if err := generateHelpersFile(path); err != nil {
138+
return fmt.Errorf("failed to generate helpers: %w", err)
139+
}
133140
}
134141

135142
// Generate all files initially
136-
if err := generateAll(path, genCache, verbose); err != nil {
143+
if err := generateAll(path, genCache, verbose, verboseLogs); err != nil {
137144
return err
138145
}
139146

@@ -146,13 +153,13 @@ func runGenerate(c *cli.Context) error {
146153

147154
// Watch mode
148155
if watchMode {
149-
return watchFiles(path, genCache, verbose, lazy)
156+
return watchFiles(path, genCache, verbose, verboseLogs, lazy)
150157
}
151158

152159
return nil
153160
}
154161

155-
func generateAll(root string, genCache *cache.Cache, verbose bool) error {
162+
func generateAll(root string, genCache *cache.Cache, verbose bool, verboseLogs bool) error {
156163
p, err := parser.New()
157164
if err != nil {
158165
return fmt.Errorf("failed to create parser: %w", err)
@@ -191,7 +198,7 @@ func generateAll(root string, genCache *cache.Cache, verbose bool) error {
191198
}
192199
}
193200

194-
if err := generateFile(path, p, verbose); err != nil {
201+
if err := generateFile(path, p, verbose, verboseLogs); err != nil {
195202
return fmt.Errorf("failed to generate %s: %w", path, err)
196203
}
197204

@@ -231,7 +238,7 @@ func formatFile(path string) error {
231238
return nil
232239
}
233240

234-
func generateFile(srcPath string, p *parser.Parser, verbose bool) error {
241+
func generateFile(srcPath string, p *parser.Parser, verbose bool, verboseLogs bool) error {
235242
if verbose {
236243
log.Printf("Generating %s", srcPath)
237244
}
@@ -255,6 +262,7 @@ func generateFile(srcPath string, p *parser.Parser, verbose bool) error {
255262

256263
// Generate Go code
257264
gen := codegen.New(file.Package)
265+
gen.SetVerbose(verboseLogs)
258266
output, err := gen.Generate(file)
259267
if err != nil {
260268
return err
@@ -278,7 +286,7 @@ func generateFile(srcPath string, p *parser.Parser, verbose bool) error {
278286
return nil
279287
}
280288

281-
func watchFiles(root string, genCache *cache.Cache, verbose bool, lazy bool) error {
289+
func watchFiles(root string, genCache *cache.Cache, verbose bool, verboseLogs bool, lazy bool) error {
282290
watcher, err := fsnotify.NewWatcher()
283291
if err != nil {
284292
return fmt.Errorf("failed to create watcher: %w", err)
@@ -346,7 +354,7 @@ func watchFiles(root string, genCache *cache.Cache, verbose bool, lazy bool) err
346354

347355
log.Printf("File changed: %s", event.Name)
348356

349-
if err := generateFile(event.Name, p, verbose); err != nil {
357+
if err := generateFile(event.Name, p, verbose, verboseLogs); err != nil {
350358
log.Printf("Error generating %s: %v", event.Name, err)
351359
} else {
352360
log.Printf("Successfully regenerated %s", event.Name)

examples/calculator/app_gen.go

Lines changed: 0 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

examples/calculator/calculator_gen.go

Lines changed: 0 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

examples/calculator/guix_helpers_gen.go

Lines changed: 0 additions & 19 deletions
This file was deleted.

pkg/codegen/codegen.go

Lines changed: 34 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ type Generator struct {
2929
currentCompBody *guixast.Body // Current component body being generated
3030
currentComp *guixast.Component // Current component being generated
3131
componentParams map[string]bool // Track current component's parameter names
32+
verbose bool // Generate verbose logging statements
3233
}
3334

3435
// New creates a new code generator
@@ -37,9 +38,15 @@ func New(pkg string) *Generator {
3738
fset: token.NewFileSet(),
3839
pkg: pkg,
3940
components: make(map[string]bool),
41+
verbose: false, // Verbose logging disabled by default
4042
}
4143
}
4244

45+
// SetVerbose enables or disables verbose logging in generated code
46+
func (g *Generator) SetVerbose(verbose bool) {
47+
g.verbose = verbose
48+
}
49+
4350
// isComponentFunc checks if a function is a UI component (returns Component interface)
4451
// or just a regular helper function
4552
func (g *Generator) isComponentFunc(comp *guixast.Component) bool {
@@ -854,10 +861,12 @@ func (g *Generator) generateRenderMethod(comp *guixast.Component) *ast.FuncDecl
854861
},
855862
},
856863
},
857-
Body: &ast.BlockStmt{
858-
List: []ast.Stmt{
859-
// log("ComponentName: Render called")
860-
&ast.ExprStmt{
864+
Body: func() *ast.BlockStmt {
865+
stmts := []ast.Stmt{}
866+
867+
// Add verbose logging if enabled
868+
if g.verbose {
869+
stmts = append(stmts, &ast.ExprStmt{
861870
X: &ast.CallExpr{
862871
Fun: ast.NewIdent("log"),
863872
Args: []ast.Expr{
@@ -867,12 +876,16 @@ func (g *Generator) generateRenderMethod(comp *guixast.Component) *ast.FuncDecl
867876
},
868877
},
869878
},
870-
},
871-
&ast.ReturnStmt{
872-
Results: []ast.Expr{body},
873-
},
874-
},
875-
},
879+
})
880+
}
881+
882+
// Add return statement
883+
stmts = append(stmts, &ast.ReturnStmt{
884+
Results: []ast.Expr{body},
885+
})
886+
887+
return &ast.BlockStmt{List: stmts}
888+
}(),
876889
}
877890
}
878891

@@ -1941,9 +1954,11 @@ func (g *Generator) generateUpdateMethod(comp *guixast.Component) *ast.FuncDecl
19411954

19421955
// generateBindAppMethod generates the BindApp method for components with channels
19431956
func (g *Generator) generateBindAppMethod(comp *guixast.Component) *ast.FuncDecl {
1944-
stmts := []ast.Stmt{
1945-
// log("ComponentName: BindApp called")
1946-
&ast.ExprStmt{
1957+
stmts := []ast.Stmt{}
1958+
1959+
// Add verbose logging if enabled
1960+
if g.verbose {
1961+
stmts = append(stmts, &ast.ExprStmt{
19471962
X: &ast.CallExpr{
19481963
Fun: ast.NewIdent("log"),
19491964
Args: []ast.Expr{
@@ -1953,8 +1968,11 @@ func (g *Generator) generateBindAppMethod(comp *guixast.Component) *ast.FuncDecl
19531968
},
19541969
},
19551970
},
1956-
},
1957-
// c.app = app
1971+
})
1972+
}
1973+
1974+
// c.app = app
1975+
stmts = append(stmts,
19581976
&ast.AssignStmt{
19591977
Lhs: []ast.Expr{
19601978
&ast.SelectorExpr{
@@ -1965,7 +1983,7 @@ func (g *Generator) generateBindAppMethod(comp *guixast.Component) *ast.FuncDecl
19651983
Tok: token.ASSIGN,
19661984
Rhs: []ast.Expr{ast.NewIdent("app")},
19671985
},
1968-
}
1986+
)
19691987

19701988
// Check if component has channel parameters
19711989
hasChannels := g.hasChannelParams(comp)

0 commit comments

Comments
 (0)