From c8e3e98432fd24f6e52afecd8fd85179ff45371f Mon Sep 17 00:00:00 2001 From: Alex Yatskov Date: Sun, 9 Dec 2018 12:45:06 -0800 Subject: [PATCH] simplify filtering --- context.go | 17 ++++++++++++----- interface.go | 2 +- loader.go | 6 ++++-- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/context.go b/context.go index 436ff12..35fe023 100644 --- a/context.go +++ b/context.go @@ -67,9 +67,9 @@ func (ctx *Context) step() { defer close(ctx.outputFiles) var err error - var filters []Filter + var filter Filter if initializer, ok := ctx.plugin.(Initializer); ok { - filters, err = initializer.Initialize(ctx) + filter, err = initializer.Initialize(ctx) if err != nil { ctx.goldsmith.fault(ctx.plugin.Name(), nil, err) return @@ -86,9 +86,16 @@ func (ctx *Context) step() { defer wg.Done() for inputFile := range ctx.inputFiles { accept := processor != nil - for _, filter := range append(ctx.fileFilters, filters...) { - if accept, err = filter.Accept(ctx, inputFile); err != nil { - ctx.goldsmith.fault(filter.Name(), inputFile, err) + + var fileFilters []Filter + fileFilters = append(fileFilters, ctx.fileFilters...) + if filter != nil { + fileFilters = append(fileFilters, filter) + } + + for _, fileFilter := range fileFilters { + if accept, err = fileFilter.Accept(ctx, inputFile); err != nil { + ctx.goldsmith.fault(fileFilter.Name(), inputFile, err) return } if !accept { diff --git a/interface.go b/interface.go index 94582dc..ea9b2b9 100644 --- a/interface.go +++ b/interface.go @@ -1,7 +1,7 @@ package goldsmith type Initializer interface { - Initialize(ctx *Context) ([]Filter, error) + Initialize(ctx *Context) (Filter, error) } type Processor interface { diff --git a/loader.go b/loader.go index 02d351a..ef95410 100644 --- a/loader.go +++ b/loader.go @@ -2,13 +2,15 @@ package goldsmith import "path/filepath" -type loader struct{} +type loader struct { + Initializer +} func (*loader) Name() string { return "loader" } -func (*loader) Initialize(ctx *Context) ([]Filter, error) { +func (*loader) Initialize(ctx *Context) (Filter, error) { infos := make(chan fileInfo) go scanDir(ctx.goldsmith.sourceDir, infos)