From 5950329e2cca62cdac114afa6dec27026bb224a0 Mon Sep 17 00:00:00 2001 From: Mike Farah Date: Tue, 23 May 2023 15:35:39 +1000 Subject: [PATCH] Added docs on yes/no being strings in yaml spec 1.2 --- README.md | 1 + pkg/yqlib/doc/operators/boolean-operators.md | 18 ++++++++++++++++++ pkg/yqlib/operator_booleans_test.go | 10 ++++++++++ 3 files changed, 29 insertions(+) diff --git a/README.md b/README.md index 6d17241c..637bd2ad 100644 --- a/README.md +++ b/README.md @@ -362,5 +362,6 @@ Use "yq [command] --help" for more information about a command. ## Known Issues / Missing Features - `yq` attempts to preserve comment positions and whitespace as much as possible, but it does not handle all scenarios (see https://github.com/go-yaml/yaml/tree/v3 for details) - Powershell has its own...[opinions on quoting yq](https://mikefarah.gitbook.io/yq/usage/tips-and-tricks#quotes-in-windows-powershell) +- "yes", "no" were dropped as boolean values in the yaml 1.2 standard - which is the standard yq assumes. See [tips and tricks](https://mikefarah.gitbook.io/yq/usage/tips-and-tricks) for more common problems and solutions. diff --git a/pkg/yqlib/doc/operators/boolean-operators.md b/pkg/yqlib/doc/operators/boolean-operators.md index c409445a..887817d7 100644 --- a/pkg/yqlib/doc/operators/boolean-operators.md +++ b/pkg/yqlib/doc/operators/boolean-operators.md @@ -26,6 +26,24 @@ will output true ``` +## "yes" and "no" are strings +In the yaml 1.2 standard, support for yes/no as booleans was dropped - they are now considered strings. See '10.2.1.2. Boolean' in https://yaml.org/spec/1.2.2/ + +Given a sample.yml file of: +```yaml +- yes +- no +``` +then +```bash +yq '.[] | tag' sample.yml +``` +will output +```yaml +!!str +!!str +``` + ## `and` example Running ```bash diff --git a/pkg/yqlib/operator_booleans_test.go b/pkg/yqlib/operator_booleans_test.go index dc219ad1..c48c5307 100644 --- a/pkg/yqlib/operator_booleans_test.go +++ b/pkg/yqlib/operator_booleans_test.go @@ -12,6 +12,16 @@ var booleanOperatorScenarios = []expressionScenario{ "D0, P[], (!!bool)::true\n", }, }, + { + description: "\"yes\" and \"no\" are strings", + subdescription: "In the yaml 1.2 standard, support for yes/no as booleans was dropped - they are now considered strings. See '10.2.1.2. Boolean' in https://yaml.org/spec/1.2.2/", + document: `[yes, no]`, + expression: `.[] | tag`, + expected: []string{ + "D0, P[0], (!!str)::!!str\n", + "D0, P[1], (!!str)::!!str\n", + }, + }, { skipDoc: true, document: "b: hi",