caddyfile: Introduce basic linting and fmt check (#3923)

* caddyfile: Introduce basic linting and fmt check

This will help encourage people to keep their Caddyfiles tidy.

* Remove unrelated tests

I am not sure that testing the output of warnings here is quite the
right idea; these tests are just for syntax and parsing success.
This commit is contained in:
Matt Holt
2021-01-04 11:11:36 -07:00
committed by GitHub
parent 1b453dd4fb
commit c8557dc00b
7 changed files with 40 additions and 54 deletions

View File

@ -15,6 +15,7 @@
package caddyfile
import (
"bytes"
"encoding/json"
"fmt"
@ -51,11 +52,17 @@ func (a Adapter) Adapt(body []byte, options map[string]interface{}) ([]byte, []c
return nil, warnings, err
}
marshalFunc := json.Marshal
if options["pretty"] == "true" {
marshalFunc = caddyconfig.JSONIndent
// lint check: see if input was properly formatted; sometimes messy files files parse
// successfully but result in logical errors because the Caddyfile is a bad format
// TODO: also perform this check on imported files
if !bytes.Equal(Format(body), body) {
warnings = append(warnings, caddyconfig.Warning{
File: filename,
Message: "file is not formatted with 'caddy fmt'",
})
}
result, err := marshalFunc(cfg)
result, err := json.Marshal(cfg)
return result, warnings, err
}