From 14d625c850270ba92927833300765ab8577d753d Mon Sep 17 00:00:00 2001 From: Kristin Laemmert Date: Tue, 14 May 2019 16:19:31 -0400 Subject: [PATCH] configs/configupgrade: preserve in-line comments for lists (#21299) * configs/configupgrade: preserve in-line comments for lists The configupgrade tool was not writing `LineComments` for lists. Now it is! Fixes #21155 --- .../valid/inline-comments/input/main.tf | 25 +++++++++++++++++++ .../valid/inline-comments/want/main.tf | 25 +++++++++++++++++++ .../valid/inline-comments/want/versions.tf | 3 +++ configs/configupgrade/upgrade_expr.go | 15 ++++++++--- 4 files changed, 64 insertions(+), 4 deletions(-) create mode 100644 configs/configupgrade/test-fixtures/valid/inline-comments/input/main.tf create mode 100644 configs/configupgrade/test-fixtures/valid/inline-comments/want/main.tf create mode 100644 configs/configupgrade/test-fixtures/valid/inline-comments/want/versions.tf diff --git a/configs/configupgrade/test-fixtures/valid/inline-comments/input/main.tf b/configs/configupgrade/test-fixtures/valid/inline-comments/input/main.tf new file mode 100644 index 000000000..82123b303 --- /dev/null +++ b/configs/configupgrade/test-fixtures/valid/inline-comments/input/main.tf @@ -0,0 +1,25 @@ +variable "list" { + type = "list" + + default = [ + "foo", # I am a comment + "bar", # I am also a comment + "baz", + ] +} + +variable "list2" { + type = "list" + + default = [ + "foo", + "bar", + "baz", + ] +} + +variable "list_the_third" { + type = "list" + + default = ["foo", "bar", "baz"] +} diff --git a/configs/configupgrade/test-fixtures/valid/inline-comments/want/main.tf b/configs/configupgrade/test-fixtures/valid/inline-comments/want/main.tf new file mode 100644 index 000000000..256dc473b --- /dev/null +++ b/configs/configupgrade/test-fixtures/valid/inline-comments/want/main.tf @@ -0,0 +1,25 @@ +variable "list" { + type = list(string) + + default = [ + "foo", # I am a comment + "bar", # I am also a comment + "baz", + ] +} + +variable "list2" { + type = list(string) + + default = [ + "foo", + "bar", + "baz", + ] +} + +variable "list_the_third" { + type = list(string) + + default = ["foo", "bar", "baz"] +} \ No newline at end of file diff --git a/configs/configupgrade/test-fixtures/valid/inline-comments/want/versions.tf b/configs/configupgrade/test-fixtures/valid/inline-comments/want/versions.tf new file mode 100644 index 000000000..d9b6f790b --- /dev/null +++ b/configs/configupgrade/test-fixtures/valid/inline-comments/want/versions.tf @@ -0,0 +1,3 @@ +terraform { + required_version = ">= 0.12" +} diff --git a/configs/configupgrade/upgrade_expr.go b/configs/configupgrade/upgrade_expr.go index c8668202f..0be5f1448 100644 --- a/configs/configupgrade/upgrade_expr.go +++ b/configs/configupgrade/upgrade_expr.go @@ -168,10 +168,17 @@ Value: src, moreDiags := upgradeExpr(node, filename, interp, an) diags = diags.Append(moreDiags) buf.Write(src) - if multiline { - buf.WriteString(",\n") - } else if i < len(tv.List)-1 { - buf.WriteString(", ") + if lit, ok := node.(*hcl1ast.LiteralType); ok && lit.LineComment != nil { + for _, comment := range lit.LineComment.List { + buf.WriteString(", " + comment.Text) + buf.WriteString("\n") + } + } else { + if multiline { + buf.WriteString(",\n") + } else if i < len(tv.List)-1 { + buf.WriteString(", ") + } } } buf.WriteString("]")