Merge pull request #24471 from hashicorp/alisdair/fmt-source
command/fmt: Include source snippets in errors
This commit is contained in:
commit
7b94ddd2f6
|
@ -167,6 +167,10 @@ func (c *FmtCommand) processFile(path string, r io.Reader, w io.Writer, isStdout
|
||||||
return diags
|
return diags
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Register this path as a synthetic configuration source, so that any
|
||||||
|
// diagnostic errors can include the source code snippet
|
||||||
|
c.registerSynthConfigSource(path, src)
|
||||||
|
|
||||||
// File must be parseable as HCL native syntax before we'll try to format
|
// File must be parseable as HCL native syntax before we'll try to format
|
||||||
// it. If not, the formatter is likely to make drastic changes that would
|
// it. If not, the formatter is likely to make drastic changes that would
|
||||||
// be hard for the user to undo.
|
// be hard for the user to undo.
|
||||||
|
|
|
@ -66,6 +66,41 @@ a = 1 +
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestFmt_snippetInError(t *testing.T) {
|
||||||
|
tempDir := testTempDir(t)
|
||||||
|
|
||||||
|
backendSrc := `terraform {backend "s3" {}}`
|
||||||
|
|
||||||
|
err := ioutil.WriteFile(filepath.Join(tempDir, "backend.tf"), []byte(backendSrc), 0644)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
ui := new(cli.MockUi)
|
||||||
|
c := &FmtCommand{
|
||||||
|
Meta: Meta{
|
||||||
|
testingOverrides: metaOverridesForProvider(testProvider()),
|
||||||
|
Ui: ui,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
args := []string{tempDir}
|
||||||
|
if code := c.Run(args); code != 2 {
|
||||||
|
t.Fatalf("wrong exit code. errors: \n%s", ui.ErrorWriter.String())
|
||||||
|
}
|
||||||
|
|
||||||
|
substrings := []string{
|
||||||
|
"Argument definition required",
|
||||||
|
"line 1, in terraform",
|
||||||
|
`1: terraform {backend "s3" {}}`,
|
||||||
|
}
|
||||||
|
for _, substring := range substrings {
|
||||||
|
if actual := ui.ErrorWriter.String(); !strings.Contains(actual, substring) {
|
||||||
|
t.Errorf("expected:\n%s\n\nto include: %q", actual, substring)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestFmt_tooManyArgs(t *testing.T) {
|
func TestFmt_tooManyArgs(t *testing.T) {
|
||||||
ui := new(cli.MockUi)
|
ui := new(cli.MockUi)
|
||||||
c := &FmtCommand{
|
c := &FmtCommand{
|
||||||
|
|
Loading…
Reference in New Issue