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

When you need the file content for your own post-detection checks (e.g., classifying a ReasonGeneric hit into a specific generator), use FilterDetailedAndContent to get the content gogenfilter already read — no double-read:

result, content, err := f.FilterDetailedAndContent("repository.go")
if err != nil {
log.Fatal(err)
}
// content is nil unless phase-2 read the file; non-nil content was read once
// and can be reused for additional checks without re-reading the file.
if result.Filtered && result.Reason == gogenfilter.ReasonGeneric {
if isSQLC(content) { // your own classification logic
fmt.Println("rescued from generic catch-all")
}
}

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