Skip to content

Commit fadcaaa

Browse files
committed
cli: Fix double-quoted map keys in diff UI
A previous change added missing quoting around object keys which do not parse as barewords. At the same time we introduced a bug where map keys could be double-quoted, due to calling the `displayAttributeName` helper function (to quote non-bareword keys) then using the `writeValue` method (which quotes all strings). This commit fixes this and adds test coverage for map keys which require quoting.
1 parent 8eaf7fe commit fadcaaa

File tree

2 files changed

+16
-13
lines changed

2 files changed

+16
-13
lines changed

internal/command/format/diff.go

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1473,24 +1473,21 @@ func (p *blockBodyDiffPrinter) writeValueDiff(old, new cty.Value, indent int, pa
14731473
p.buf.WriteString("\n")
14741474

14751475
var allKeys []string
1476-
displayKeys := make(map[string]string)
14771476
keyLen := 0
14781477
for it := old.ElementIterator(); it.Next(); {
14791478
k, _ := it.Element()
14801479
keyStr := k.AsString()
14811480
allKeys = append(allKeys, keyStr)
1482-
displayKeys[keyStr] = displayAttributeName(keyStr)
1483-
if len(displayKeys[keyStr]) > keyLen {
1484-
keyLen = len(displayKeys[keyStr])
1481+
if len(keyStr) > keyLen {
1482+
keyLen = len(keyStr)
14851483
}
14861484
}
14871485
for it := new.ElementIterator(); it.Next(); {
14881486
k, _ := it.Element()
14891487
keyStr := k.AsString()
14901488
allKeys = append(allKeys, keyStr)
1491-
displayKeys[keyStr] = displayAttributeName(keyStr)
1492-
if len(displayKeys[keyStr]) > keyLen {
1493-
keyLen = len(displayKeys[keyStr])
1489+
if len(keyStr) > keyLen {
1490+
keyLen = len(keyStr)
14941491
}
14951492
}
14961493

@@ -1533,8 +1530,8 @@ func (p *blockBodyDiffPrinter) writeValueDiff(old, new cty.Value, indent int, pa
15331530

15341531
p.buf.WriteString(strings.Repeat(" ", indent+2))
15351532
p.writeActionSymbol(action)
1536-
p.writeValue(cty.StringVal(displayKeys[k]), action, indent+4)
1537-
p.buf.WriteString(strings.Repeat(" ", keyLen-len(displayKeys[k])))
1533+
p.writeValue(cty.StringVal(k), action, indent+4)
1534+
p.buf.WriteString(strings.Repeat(" ", keyLen-len(k)))
15381535
p.buf.WriteString(" = ")
15391536
switch action {
15401537
case plans.Create, plans.NoOp:

internal/command/format/diff_test.go

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2115,6 +2115,7 @@ func TestResourceChange_map(t *testing.T) {
21152115
"ami": cty.StringVal("ami-STATIC"),
21162116
"map_field": cty.MapVal(map[string]cty.Value{
21172117
"new-key": cty.StringVal("new-element"),
2118+
"be:ep": cty.StringVal("boop"),
21182119
}),
21192120
}),
21202121
Schema: &configschema.Block{
@@ -2129,6 +2130,7 @@ func TestResourceChange_map(t *testing.T) {
21292130
~ resource "test_instance" "example" {
21302131
~ id = "i-02ae66f368e8518a9" -> (known after apply)
21312132
+ map_field = {
2133+
+ "be:ep" = "boop"
21322134
+ "new-key" = "new-element"
21332135
}
21342136
# (1 unchanged attribute hidden)
@@ -2148,6 +2150,7 @@ func TestResourceChange_map(t *testing.T) {
21482150
"ami": cty.StringVal("ami-STATIC"),
21492151
"map_field": cty.MapVal(map[string]cty.Value{
21502152
"new-key": cty.StringVal("new-element"),
2153+
"be:ep": cty.StringVal("boop"),
21512154
}),
21522155
}),
21532156
Schema: &configschema.Block{
@@ -2162,6 +2165,7 @@ func TestResourceChange_map(t *testing.T) {
21622165
~ resource "test_instance" "example" {
21632166
~ id = "i-02ae66f368e8518a9" -> (known after apply)
21642167
~ map_field = {
2168+
+ "be:ep" = "boop"
21652169
+ "new-key" = "new-element"
21662170
}
21672171
# (1 unchanged attribute hidden)
@@ -2183,9 +2187,10 @@ func TestResourceChange_map(t *testing.T) {
21832187
"id": cty.UnknownVal(cty.String),
21842188
"ami": cty.StringVal("ami-STATIC"),
21852189
"map_field": cty.MapVal(map[string]cty.Value{
2186-
"a": cty.StringVal("aaaa"),
2187-
"b": cty.StringVal("bbbb"),
2188-
"c": cty.StringVal("cccc"),
2190+
"a": cty.StringVal("aaaa"),
2191+
"b": cty.StringVal("bbbb"),
2192+
"b:b": cty.StringVal("bbbb"),
2193+
"c": cty.StringVal("cccc"),
21892194
}),
21902195
}),
21912196
Schema: &configschema.Block{
@@ -2200,7 +2205,8 @@ func TestResourceChange_map(t *testing.T) {
22002205
~ resource "test_instance" "example" {
22012206
~ id = "i-02ae66f368e8518a9" -> (known after apply)
22022207
~ map_field = {
2203-
+ "b" = "bbbb"
2208+
+ "b" = "bbbb"
2209+
+ "b:b" = "bbbb"
22042210
# (2 unchanged elements hidden)
22052211
}
22062212
# (1 unchanged attribute hidden)

0 commit comments

Comments
 (0)