Skip to content

Quick Start

Create a filter and check files:

package main
import (
"fmt"
"github.com/LarsArtmann/gogenfilter/v3"
)
func main() {
opts, err := gogenfilter.WithFilterOptions(gogenfilter.FilterAll)
if err != nil {
panic(err)
}
f, err := gogenfilter.NewFilter(opts)
if err != nil {
panic(err)
}
filtered, err := f.Filter("db/models.go")
if err != nil {
panic(err)
}
if filtered {
fmt.Println("skipping generated file")
}
}

Target only the generators you care about:

opts, err := gogenfilter.WithFilterOptions(
gogenfilter.FilterSQLC,
gogenfilter.FilterTempl,
)
if err != nil {
panic(err)
}
f, err := gogenfilter.NewFilter(opts)
if err != nil {
panic(err)
}

Get detailed information about why a file was filtered:

opts, err := gogenfilter.WithFilterOptions(gogenfilter.FilterAll)
if err != nil {
panic(err)
}
f, err := gogenfilter.NewFilter(opts)
if err != nil {
panic(err)
}
result, err := f.FilterDetailed("db/models.go")
if result.Filtered {
fmt.Printf("Reason: %s, Trace: %s\n", result.Reason, result.Trace)
}

A disabled filter passes everything through — useful for feature flags:

f, _ := gogenfilter.NewFilter()
filtered, _ := f.Filter("db/models.go") // always false

Use detection functions directly without creating a Filter:

content, _ := os.ReadFile("db/models.go")
reason := gogenfilter.DetectReason("db/models.go", string(content),
gogenfilter.FilterSQLC,
gogenfilter.FilterGeneric,
)
if reason != gogenfilter.ReasonNotFiltered {
fmt.Printf("Generated by: %s\n", reason)
}