From 875dd3d1bbde541bdaf2879765b636fea71e0e42 Mon Sep 17 00:00:00 2001 From: Braydon Kains <93549768+braydonk@users.noreply.github.com> Date: Wed, 29 Mar 2023 23:29:50 -0400 Subject: [PATCH] encoder: add option to drop merge tag (#14) The !!merge tag is superfluous for most people. Need an option to drop it when it's unnecessary. --- encode.go | 17 +++++++++++------ formattest/encode_test.go | 11 +++++++++++ .../testdata/drop_merge_tag/expected.yaml | 3 +++ formattest/testdata/drop_merge_tag/input.yaml | 3 +++ yaml.go | 5 +++++ 5 files changed, 33 insertions(+), 6 deletions(-) create mode 100644 formattest/testdata/drop_merge_tag/expected.yaml create mode 100644 formattest/testdata/drop_merge_tag/input.yaml diff --git a/encode.go b/encode.go index de9e72a3..e077fd7a 100644 --- a/encode.go +++ b/encode.go @@ -29,12 +29,13 @@ import ( ) type encoder struct { - emitter yaml_emitter_t - event yaml_event_t - out []byte - flow bool - indent int - doneInit bool + emitter yaml_emitter_t + event yaml_event_t + out []byte + flow bool + indent int + doneInit bool + optDropMergeTag bool } func newEncoder() *encoder { @@ -468,6 +469,10 @@ func (e *encoder) node(node *Node, tail string) { } } + if tag == mergeTag && e.optDropMergeTag { + tag = "" + } + switch node.Kind { case DocumentNode: yaml_document_start_event_initialize(&e.event, nil, nil, true) diff --git a/formattest/encode_test.go b/formattest/encode_test.go index da561d8f..aa2eec9b 100644 --- a/formattest/encode_test.go +++ b/formattest/encode_test.go @@ -51,3 +51,14 @@ func TestBlockScalar(t *testing.T) { }, }.Run(t) } + +func TestDropMergeTag(t *testing.T) { + formatTestCase{ + name: "drop merge tag", + folder: "drop_merge_tag", + configureDecoder: noopDecoder, + configureEncoder: func(enc *yaml.Encoder) { + enc.SetDropMergeTag(true) + }, + }.Run(t) +} diff --git a/formattest/testdata/drop_merge_tag/expected.yaml b/formattest/testdata/drop_merge_tag/expected.yaml new file mode 100644 index 00000000..db0ab072 --- /dev/null +++ b/formattest/testdata/drop_merge_tag/expected.yaml @@ -0,0 +1,3 @@ +a: &a +b: + <<: *a diff --git a/formattest/testdata/drop_merge_tag/input.yaml b/formattest/testdata/drop_merge_tag/input.yaml new file mode 100644 index 00000000..db0ab072 --- /dev/null +++ b/formattest/testdata/drop_merge_tag/input.yaml @@ -0,0 +1,3 @@ +a: &a +b: + <<: *a diff --git a/yaml.go b/yaml.go index cbc0609f..fed2025e 100644 --- a/yaml.go +++ b/yaml.go @@ -318,6 +318,11 @@ func (e *Encoder) SetIndentlessBlockSequence(indentlessBlockSequence bool) { yaml_emitter_set_indentless_block_sequence(&e.encoder.emitter, indentlessBlockSequence) } +// SetDropMergeTag sets optDropMergeTag on the encoder. +func (e *Encoder) SetDropMergeTag(dropMergeTag bool) { + e.encoder.optDropMergeTag = dropMergeTag +} + // Close closes the encoder by writing any remaining data. // It does not write a stream terminating string "...". func (e *Encoder) Close() (err error) {