From 9a8741dec596b37e4d88d9c3bad164b7c273d4c6 Mon Sep 17 00:00:00 2001 From: Alec Sammon Date: Thu, 12 Feb 2026 00:33:23 +0000 Subject: [PATCH 1/2] Add json formatting --- ghokin/fixtures/json-after.feature | 11 +++++++++++ ghokin/fixtures/json-before.feature | 9 +++++++++ ghokin/transformer.go | 25 +++++++++++++++++++++++++ ghokin/transformer_test.go | 4 ++++ 4 files changed, 49 insertions(+) create mode 100644 ghokin/fixtures/json-after.feature create mode 100644 ghokin/fixtures/json-before.feature diff --git a/ghokin/fixtures/json-after.feature b/ghokin/fixtures/json-after.feature new file mode 100644 index 0000000..835362e --- /dev/null +++ b/ghokin/fixtures/json-after.feature @@ -0,0 +1,11 @@ +Feature: A Feature + + Background: + Given a thing + """json + { + "this": "is a json doc string", + "but": "with a newline in the middle" + } + """ + diff --git a/ghokin/fixtures/json-before.feature b/ghokin/fixtures/json-before.feature new file mode 100644 index 0000000..e99c416 --- /dev/null +++ b/ghokin/fixtures/json-before.feature @@ -0,0 +1,9 @@ +Feature: A Feature + + Background: + Given a thing + """json + {"this": "is a json doc string", + "but": "with a newline in the middle"} + """ + diff --git a/ghokin/transformer.go b/ghokin/transformer.go index 85fb8dd..88b88b7 100644 --- a/ghokin/transformer.go +++ b/ghokin/transformer.go @@ -2,6 +2,7 @@ package ghokin import ( "bytes" + "encoding/json" "fmt" "os/exec" "regexp" @@ -85,6 +86,30 @@ func transform(section *section, indent int, aliases aliases) ([]byte, error) { continue } + if sec.kind == gherkin.TokenTypeDocStringSeparator && len(sec.values) == 1 && sec.values[0].Text == "json" { + document = append( + document, + trimExtraTrailingSpace(indentStrings(paddings[gherkin.TokenTypeOther], []string{`"""json`}))..., + ) + + var jsonLines string + for sec.nex.kind != gherkin.TokenTypeDocStringSeparator { + sec = sec.nex + for _, value := range sec.values { + jsonLines += value.Text + } + } + + var prettyJSON bytes.Buffer + if err := json.Indent(&prettyJSON, []byte(jsonLines), "", " "); err != nil { + return []byte{}, fmt.Errorf("failed to format json: %w", err) + } + + document = append(document, trimExtraTrailingSpace(indentStrings(paddings[gherkin.TokenTypeOther], strings.Split(prettyJSON.String(), "\n")))...) + + continue + } + if sec.kind == 0 { continue } diff --git a/ghokin/transformer_test.go b/ghokin/transformer_test.go index 21c13a0..d22b222 100644 --- a/ghokin/transformer_test.go +++ b/ghokin/transformer_test.go @@ -410,6 +410,10 @@ func TestTransform(t *testing.T) { "fixtures/file1.feature", "fixtures/file1.feature", }, + { + "fixtures/json-before.feature", + "fixtures/json-after.feature", + }, { "fixtures/cmd.input.feature", From 5997872289667a64ecdcf74f5cf7095665b33be1 Mon Sep 17 00:00:00 2001 From: Alec Sammon Date: Fri, 13 Feb 2026 07:42:01 +0000 Subject: [PATCH 2/2] * rename tests --- ghokin/fixtures/{json-after.feature => json.expected.feature} | 0 ghokin/fixtures/{json-before.feature => json.input.feature} | 0 ghokin/transformer_test.go | 4 ++-- 3 files changed, 2 insertions(+), 2 deletions(-) rename ghokin/fixtures/{json-after.feature => json.expected.feature} (100%) rename ghokin/fixtures/{json-before.feature => json.input.feature} (100%) diff --git a/ghokin/fixtures/json-after.feature b/ghokin/fixtures/json.expected.feature similarity index 100% rename from ghokin/fixtures/json-after.feature rename to ghokin/fixtures/json.expected.feature diff --git a/ghokin/fixtures/json-before.feature b/ghokin/fixtures/json.input.feature similarity index 100% rename from ghokin/fixtures/json-before.feature rename to ghokin/fixtures/json.input.feature diff --git a/ghokin/transformer_test.go b/ghokin/transformer_test.go index d22b222..b1127e0 100644 --- a/ghokin/transformer_test.go +++ b/ghokin/transformer_test.go @@ -411,8 +411,8 @@ func TestTransform(t *testing.T) { "fixtures/file1.feature", }, { - "fixtures/json-before.feature", - "fixtures/json-after.feature", + "fixtures/json.input.feature", + "fixtures/json.expected.feature", }, {