github.com/beauknowssoftware/makehcl@v0.0.0-20200322000747-1b9bb1e1c008/internal/targets/targets.go (about) 1 package targets 2 3 import ( 4 "sort" 5 6 "github.com/beauknowssoftware/makehcl/internal/definition" 7 "github.com/beauknowssoftware/makehcl/internal/parse" 8 ) 9 10 type Plan []definition.Target 11 12 type ParseOptions = parse.Options 13 14 type Options struct { 15 Sort bool 16 CommandOnly bool 17 RuleOnly bool 18 } 19 20 type DoOptions struct { 21 ParseOptions 22 Options 23 } 24 25 func Do(o DoOptions) ([]definition.Target, error) { 26 d, err := parse.Parse(o.ParseOptions) 27 if err != nil { 28 return nil, err 29 } 30 31 rules := d.Rules() 32 r := make([]definition.Target, 0, len(rules)) 33 34 for _, rl := range rules { 35 switch { 36 case o.RuleOnly && !rl.IsPhony: 37 r = append(r, rl.Target) 38 case o.CommandOnly && rl.IsPhony: 39 r = append(r, rl.Target) 40 case !o.RuleOnly && !o.CommandOnly: 41 r = append(r, rl.Target) 42 } 43 } 44 45 if o.Sort { 46 sort.Strings(r) 47 } 48 49 return r, nil 50 }