What happened?
Generated *_templ.go files contain a child-component fallback assignment that CodeQL reports as go/useless-assignment-to-local:
ctx = templ.InitializeContext(ctx)
templ_7745c5c3_Var1 := templ.GetChildren(ctx)
if templ_7745c5c3_Var1 == nil {
templ_7745c5c3_Var1 = templ.NopComponent
}
ctx = templ.ClearChildren(ctx)
CodeQL reports the assignment to templ_7745c5c3_Var1 as useless when the generated component does not read the children variable later. This creates noisy code scanning alerts for generated templ output.
This seems related to #1295, but the scanner here is GitHub CodeQL rather than Staticcheck.
Why it looks removable
templ.GetChildren(ctx) already appears to return templ.NopComponent when no children are present:
func GetChildren(ctx context.Context) Component {
_, v := getContext(ctx)
if v.children == nil {
return NopComponent
}
return *v.children
}
So the generated nil check/fallback appears redundant, and when the children variable is not subsequently used, it triggers a dead-store warning.
Reproduction
Generate a templ component that does not use children, then scan the generated Go with CodeQL security-and-quality queries. In our case the generated file header is currently from v0.3.977, with the module pinned to github.com/a-h/templ v0.3.1001.
I also tested generation with v0.3.1020; the same GetChildren/NopComponent pattern is still emitted.
Expected behavior
Ideally generated code should avoid the redundant nil fallback, or avoid declaring the children variable when the component body does not use children, so generated files do not trigger go/useless-assignment-to-local.
templ version
Observed with generated output from v0.3.977; still reproducible when generating with v0.3.1001 and v0.3.1020.
CodeQL rule
go/useless-assignment-to-local
https://codeql.github.com/codeql-query-help/go/go-useless-assignment-to-local/
What happened?
Generated
*_templ.gofiles contain a child-component fallback assignment that CodeQL reports asgo/useless-assignment-to-local:CodeQL reports the assignment to
templ_7745c5c3_Var1as useless when the generated component does not read the children variable later. This creates noisy code scanning alerts for generated templ output.This seems related to #1295, but the scanner here is GitHub CodeQL rather than Staticcheck.
Why it looks removable
templ.GetChildren(ctx)already appears to returntempl.NopComponentwhen no children are present:So the generated nil check/fallback appears redundant, and when the children variable is not subsequently used, it triggers a dead-store warning.
Reproduction
Generate a templ component that does not use children, then scan the generated Go with CodeQL security-and-quality queries. In our case the generated file header is currently from
v0.3.977, with the module pinned github.com/a-h/templ v0.3.1001.I also tested generation with
v0.3.1020; the sameGetChildren/NopComponentpattern is still emitted.Expected behavior
Ideally generated code should avoid the redundant nil fallback, or avoid declaring the children variable when the component body does not use children, so generated files do not trigger
go/useless-assignment-to-local.templ version
Observed with generated output from
v0.3.977; still reproducible when generating withv0.3.1001andv0.3.1020.CodeQL rule
go/useless-assignment-to-localhttps://codeql.github.com/codeql-query-help/go/go-useless-assignment-to-local/