mirror of
https://github.com/numtide/treefmt.git
synced 2024-08-16 20:30:25 +03:00
For each path we determine the list of formatters that are interested in formatting it. From there, we sort the list of formatters first by priority (lower value, higher priority) and then by name (lexicographically). With this information we create a batch key which is based on the unique sequence of formatters. When enough paths with the same sequence is ready we apply them in order to each formatter. By default, with no special configuration, this model guarantees that a given path will only be processed by one formatter at a time. If a user wishes to influence the order in which formatters are applied they can use the priority field. Signed-off-by: Brian McGee <brian@bmcgee.ie>
43 lines
1.0 KiB
Go
43 lines
1.0 KiB
Go
package config
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/BurntSushi/toml"
|
|
)
|
|
|
|
// Config is used to represent the list of configured Formatters.
|
|
type Config struct {
|
|
Global struct {
|
|
// Excludes is an optional list of glob patterns used to exclude certain files from all formatters.
|
|
Excludes []string
|
|
}
|
|
Formatters map[string]*Formatter `toml:"formatter"`
|
|
}
|
|
|
|
// ReadFile reads from path and unmarshals toml into a Config instance.
|
|
func ReadFile(path string, names []string) (cfg *Config, err error) {
|
|
if _, err = toml.DecodeFile(path, &cfg); err != nil {
|
|
return nil, fmt.Errorf("failed to decode config file: %w", err)
|
|
}
|
|
|
|
// filter formatters based on provided names
|
|
if len(names) > 0 {
|
|
filtered := make(map[string]*Formatter)
|
|
|
|
// check if the provided names exist in the config
|
|
for _, name := range names {
|
|
formatterCfg, ok := cfg.Formatters[name]
|
|
if !ok {
|
|
return nil, fmt.Errorf("formatter %v not found in config", name)
|
|
}
|
|
filtered[name] = formatterCfg
|
|
}
|
|
|
|
// updated formatters
|
|
cfg.Formatters = filtered
|
|
}
|
|
|
|
return
|
|
}
|