in pkg/grept_config.go [42:87]
func loadGreptHclBlocks(ignoreUnsupportedBlock bool, dir string) ([]*golden.HclBlock, error) {
fs := FsFactory()
matches, err := afero.Glob(fs, filepath.Join(dir, "*.grept.hcl"))
if err != nil {
return nil, err
}
if len(matches) == 0 {
return nil, fmt.Errorf("no `.grept.hcl` file found at %s", dir)
}
var blocks []*golden.HclBlock
for _, filename := range matches {
content, fsErr := afero.ReadFile(fs, filename)
if fsErr != nil {
err = multierror.Append(err, fsErr)
continue
}
readFile, diag := hclsyntax.ParseConfig(content, filename, hcl.InitialPos)
if diag.HasErrors() {
err = multierror.Append(err, diag.Errs()...)
continue
}
writeFile, _ := hclwrite.ParseConfig(content, filename, hcl.InitialPos)
readBody := readFile.Body.(*hclsyntax.Body)
writeBody := writeFile.Body()
blocks = append(blocks, golden.AsHclBlocks(readBody.Blocks, writeBody.Blocks())...)
}
if err != nil {
return nil, err
}
var r []*golden.HclBlock
// First loop: parse all rule blocks
for _, b := range blocks {
if golden.IsBlockTypeWanted(b.Type) {
r = append(r, b)
continue
}
if !ignoreUnsupportedBlock {
err = multierror.Append(err, fmt.Errorf("invalid block type: %s %s", b.Type, b.Range().String()))
}
}
return r, err
}