From ac2889c296ebbcf923be812403f37ee0da75a70b Mon Sep 17 00:00:00 2001 From: Mike Farah Date: Tue, 16 Dec 2025 14:22:50 +1100 Subject: [PATCH] Fixed scalar encoding for HCL --- pkg/yqlib/encoder_hcl.go | 5 ++++- pkg/yqlib/hcl_test.go | 8 ++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/pkg/yqlib/encoder_hcl.go b/pkg/yqlib/encoder_hcl.go index af8315f7..2ba34e06 100644 --- a/pkg/yqlib/encoder_hcl.go +++ b/pkg/yqlib/encoder_hcl.go @@ -43,6 +43,9 @@ func (he *hclEncoder) PrintLeadingContent(_ io.Writer, _ string) error { func (he *hclEncoder) Encode(writer io.Writer, node *CandidateNode) error { log.Debugf("I need to encode %v", NodeToString(node)) + if node.Kind == ScalarNode { + return writeString(writer, node.Value+"\n") + } f := hclwrite.NewEmptyFile() body := f.Body() @@ -490,7 +493,7 @@ func (he *hclEncoder) encodeBlockIfMapping(body *hclwrite.Body, key string, valu // encodeNode encodes a CandidateNode directly to HCL, preserving style information func (he *hclEncoder) encodeNode(body *hclwrite.Body, node *CandidateNode) error { if node.Kind != MappingNode { - return fmt.Errorf("HCL encoder expects a mapping at the root level") + return fmt.Errorf("HCL encoder expects a mapping at the root level, got %v", kindToString(node.Kind)) } for i := 0; i < len(node.Content); i += 2 { diff --git a/pkg/yqlib/hcl_test.go b/pkg/yqlib/hcl_test.go index 963067ea..05d314de 100644 --- a/pkg/yqlib/hcl_test.go +++ b/pkg/yqlib/hcl_test.go @@ -325,6 +325,14 @@ var hclFormatScenarios = []formatScenario{ expected: "# Configuration\nport = 8080\n", scenarioType: "roundtrip", }, + { + description: "Roundtrip: extraction", + skipDoc: true, + input: simpleSample, + expression: ".shouty_message", + expected: "upper(message)\n", + scenarioType: "roundtrip", + }, { description: "Roundtrip: With templates, functions and arithmetic", input: simpleSample,