mirror of
https://github.com/mikefarah/yq.git
synced 2026-07-10 16:55:40 +00:00
Expand Lua examples
This commit is contained in:
parent
11605f6b63
commit
e756ac2c5a
@ -80,7 +80,7 @@ yq -P sample.json
|
|||||||
|
|
||||||
rootCmd.PersistentFlags().StringVar(&yqlib.ConfiguredLuaPreferences.DocPrefix, "lua-prefix", yqlib.ConfiguredLuaPreferences.DocPrefix, "prefix")
|
rootCmd.PersistentFlags().StringVar(&yqlib.ConfiguredLuaPreferences.DocPrefix, "lua-prefix", yqlib.ConfiguredLuaPreferences.DocPrefix, "prefix")
|
||||||
rootCmd.PersistentFlags().StringVar(&yqlib.ConfiguredLuaPreferences.DocSuffix, "lua-suffix", yqlib.ConfiguredLuaPreferences.DocSuffix, "suffix")
|
rootCmd.PersistentFlags().StringVar(&yqlib.ConfiguredLuaPreferences.DocSuffix, "lua-suffix", yqlib.ConfiguredLuaPreferences.DocSuffix, "suffix")
|
||||||
rootCmd.PersistentFlags().BoolVar(&yqlib.ConfiguredLuaPreferences.UnquotedKeys, "lua-unquoted-keys", yqlib.ConfiguredLuaPreferences.UnquotedKeys, "output unquoted string keys (e.g. {foo=\"bar\"})")
|
rootCmd.PersistentFlags().BoolVar(&yqlib.ConfiguredLuaPreferences.UnquotedKeys, "lua-unquoted", yqlib.ConfiguredLuaPreferences.UnquotedKeys, "output unquoted string keys (e.g. {foo=\"bar\"})")
|
||||||
|
|
||||||
rootCmd.PersistentFlags().BoolVarP(&nullInput, "null-input", "n", false, "Don't read input, simply evaluate the expression given. Useful for creating docs from scratch.")
|
rootCmd.PersistentFlags().BoolVarP(&nullInput, "null-input", "n", false, "Don't read input, simply evaluate the expression given. Useful for creating docs from scratch.")
|
||||||
rootCmd.PersistentFlags().BoolVarP(&noDocSeparators, "no-doc", "N", false, "Don't print document separators (---)")
|
rootCmd.PersistentFlags().BoolVarP(&noDocSeparators, "no-doc", "N", false, "Don't print document separators (---)")
|
||||||
|
|||||||
@ -3,10 +3,77 @@
|
|||||||
Given a sample.yml file of:
|
Given a sample.yml file of:
|
||||||
```yaml
|
```yaml
|
||||||
---
|
---
|
||||||
|
country: Australia # this place
|
||||||
|
cities:
|
||||||
|
- Sydney
|
||||||
|
- Melbourne
|
||||||
|
- Brisbane
|
||||||
|
- Perth
|
||||||
|
```
|
||||||
|
then
|
||||||
|
```bash
|
||||||
|
yq -o=lua '.' sample.yml
|
||||||
|
```
|
||||||
|
will output
|
||||||
|
```lua
|
||||||
|
return {
|
||||||
|
["country"] = "Australia";
|
||||||
|
["cities"] = {
|
||||||
|
"Sydney",
|
||||||
|
"Melbourne",
|
||||||
|
"Brisbane",
|
||||||
|
"Perth",
|
||||||
|
};
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
## Unquoted keys
|
||||||
|
Uses the `--lua-unquoted` option to produce a nicer-looking output.
|
||||||
|
|
||||||
|
Given a sample.yml file of:
|
||||||
|
```yaml
|
||||||
|
---
|
||||||
|
country: Australia # this place
|
||||||
|
cities:
|
||||||
|
- Sydney
|
||||||
|
- Melbourne
|
||||||
|
- Brisbane
|
||||||
|
- Perth
|
||||||
|
```
|
||||||
|
then
|
||||||
|
```bash
|
||||||
|
yq -o=lua '.' sample.yml
|
||||||
|
```
|
||||||
|
will output
|
||||||
|
```lua
|
||||||
|
return {
|
||||||
|
country = "Australia";
|
||||||
|
cities = {
|
||||||
|
"Sydney",
|
||||||
|
"Melbourne",
|
||||||
|
"Brisbane",
|
||||||
|
"Perth",
|
||||||
|
};
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
## Elaborate example
|
||||||
|
Given a sample.yml file of:
|
||||||
|
```yaml
|
||||||
|
---
|
||||||
hello: world
|
hello: world
|
||||||
? look: non-string keys
|
tables:
|
||||||
: True
|
like: this
|
||||||
numbers: [123,456]
|
keys: values
|
||||||
|
? look: non-string keys
|
||||||
|
: True
|
||||||
|
numbers:
|
||||||
|
- decimal: 12345
|
||||||
|
- hex: 0x7fabc123
|
||||||
|
- octal: 0o30
|
||||||
|
- float: 123.45
|
||||||
|
- infinity: .inf
|
||||||
|
- not: .nan
|
||||||
|
|
||||||
```
|
```
|
||||||
then
|
then
|
||||||
@ -17,12 +84,32 @@ will output
|
|||||||
```lua
|
```lua
|
||||||
return {
|
return {
|
||||||
["hello"] = "world";
|
["hello"] = "world";
|
||||||
|
["tables"] = {
|
||||||
|
["like"] = "this";
|
||||||
|
["keys"] = "values";
|
||||||
[{
|
[{
|
||||||
["look"] = "non-string keys";
|
["look"] = "non-string keys";
|
||||||
}] = true;
|
}] = true;
|
||||||
|
};
|
||||||
["numbers"] = {
|
["numbers"] = {
|
||||||
123,
|
{
|
||||||
456,
|
["decimal"] = 12345;
|
||||||
|
},
|
||||||
|
{
|
||||||
|
["hex"] = 0x7fabc123;
|
||||||
|
},
|
||||||
|
{
|
||||||
|
["octal"] = 24;
|
||||||
|
},
|
||||||
|
{
|
||||||
|
["float"] = 123.45;
|
||||||
|
},
|
||||||
|
{
|
||||||
|
["infinity"] = (1/0);
|
||||||
|
},
|
||||||
|
{
|
||||||
|
["not"] = (0/0);
|
||||||
|
},
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|||||||
@ -11,20 +11,93 @@ import (
|
|||||||
var luaScenarios = []formatScenario{
|
var luaScenarios = []formatScenario{
|
||||||
{
|
{
|
||||||
description: "Basic example",
|
description: "Basic example",
|
||||||
|
scenarioType: "encode",
|
||||||
|
input: `---
|
||||||
|
country: Australia # this place
|
||||||
|
cities:
|
||||||
|
- Sydney
|
||||||
|
- Melbourne
|
||||||
|
- Brisbane
|
||||||
|
- Perth`,
|
||||||
|
// TODO comments, -- this place
|
||||||
|
expected: `return {
|
||||||
|
["country"] = "Australia";
|
||||||
|
["cities"] = {
|
||||||
|
"Sydney",
|
||||||
|
"Melbourne",
|
||||||
|
"Brisbane",
|
||||||
|
"Perth",
|
||||||
|
};
|
||||||
|
};
|
||||||
|
`,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
description: "Unquoted keys",
|
||||||
|
subdescription: "Uses the `--lua-unquoted` option to produce a nicer-looking output.",
|
||||||
|
scenarioType: "unquoted-encode",
|
||||||
|
input: `---
|
||||||
|
country: Australia # this place
|
||||||
|
cities:
|
||||||
|
- Sydney
|
||||||
|
- Melbourne
|
||||||
|
- Brisbane
|
||||||
|
- Perth`,
|
||||||
|
expected: `return {
|
||||||
|
country = "Australia";
|
||||||
|
cities = {
|
||||||
|
"Sydney",
|
||||||
|
"Melbourne",
|
||||||
|
"Brisbane",
|
||||||
|
"Perth",
|
||||||
|
};
|
||||||
|
};
|
||||||
|
`,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
description: "Elaborate example",
|
||||||
input: `---
|
input: `---
|
||||||
hello: world
|
hello: world
|
||||||
? look: non-string keys
|
tables:
|
||||||
: True
|
like: this
|
||||||
numbers: [123,456]
|
keys: values
|
||||||
|
? look: non-string keys
|
||||||
|
: True
|
||||||
|
numbers:
|
||||||
|
- decimal: 12345
|
||||||
|
- hex: 0x7fabc123
|
||||||
|
- octal: 0o30
|
||||||
|
- float: 123.45
|
||||||
|
- infinity: .inf
|
||||||
|
- not: .nan
|
||||||
`,
|
`,
|
||||||
expected: `return {
|
expected: `return {
|
||||||
["hello"] = "world";
|
["hello"] = "world";
|
||||||
|
["tables"] = {
|
||||||
|
["like"] = "this";
|
||||||
|
["keys"] = "values";
|
||||||
[{
|
[{
|
||||||
["look"] = "non-string keys";
|
["look"] = "non-string keys";
|
||||||
}] = true;
|
}] = true;
|
||||||
|
};
|
||||||
["numbers"] = {
|
["numbers"] = {
|
||||||
123,
|
{
|
||||||
456,
|
["decimal"] = 12345;
|
||||||
|
},
|
||||||
|
{
|
||||||
|
["hex"] = 0x7fabc123;
|
||||||
|
},
|
||||||
|
{
|
||||||
|
["octal"] = 24;
|
||||||
|
},
|
||||||
|
{
|
||||||
|
["float"] = 123.45;
|
||||||
|
},
|
||||||
|
{
|
||||||
|
["infinity"] = (1/0);
|
||||||
|
},
|
||||||
|
{
|
||||||
|
["not"] = (0/0);
|
||||||
|
},
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
`,
|
`,
|
||||||
@ -78,6 +151,12 @@ func testLuaScenario(t *testing.T, s formatScenario) {
|
|||||||
switch s.scenarioType {
|
switch s.scenarioType {
|
||||||
case "encode":
|
case "encode":
|
||||||
test.AssertResultWithContext(t, s.expected, mustProcessFormatScenario(s, NewYamlDecoder(ConfiguredYamlPreferences), NewLuaEncoder(ConfiguredLuaPreferences)), s.description)
|
test.AssertResultWithContext(t, s.expected, mustProcessFormatScenario(s, NewYamlDecoder(ConfiguredYamlPreferences), NewLuaEncoder(ConfiguredLuaPreferences)), s.description)
|
||||||
|
case "unquoted-encode":
|
||||||
|
test.AssertResultWithContext(t, s.expected, mustProcessFormatScenario(s, NewYamlDecoder(ConfiguredYamlPreferences), NewLuaEncoder(LuaPreferences{
|
||||||
|
DocPrefix: "return ",
|
||||||
|
DocSuffix: ";\n",
|
||||||
|
UnquotedKeys: true,
|
||||||
|
})), s.description)
|
||||||
default:
|
default:
|
||||||
panic(fmt.Sprintf("unhandled scenario type %q", s.scenarioType))
|
panic(fmt.Sprintf("unhandled scenario type %q", s.scenarioType))
|
||||||
}
|
}
|
||||||
@ -90,7 +169,7 @@ func documentLuaScenario(t *testing.T, w *bufio.Writer, i interface{}) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
switch s.scenarioType {
|
switch s.scenarioType {
|
||||||
case "encode":
|
case "encode", "unquoted-encode":
|
||||||
documentLuaEncodeScenario(w, s)
|
documentLuaEncodeScenario(w, s)
|
||||||
default:
|
default:
|
||||||
panic(fmt.Sprintf("unhandled scenario type %q", s.scenarioType))
|
panic(fmt.Sprintf("unhandled scenario type %q", s.scenarioType))
|
||||||
@ -105,14 +184,27 @@ func documentLuaEncodeScenario(w *bufio.Writer, s formatScenario) {
|
|||||||
writeOrPanic(w, "\n\n")
|
writeOrPanic(w, "\n\n")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
prefs := ConfiguredLuaPreferences
|
||||||
|
if s.scenarioType == "unquoted-encode" {
|
||||||
|
prefs = LuaPreferences{
|
||||||
|
DocPrefix: "return ",
|
||||||
|
DocSuffix: ";\n",
|
||||||
|
UnquotedKeys: true,
|
||||||
|
}
|
||||||
|
}
|
||||||
writeOrPanic(w, "Given a sample.yml file of:\n")
|
writeOrPanic(w, "Given a sample.yml file of:\n")
|
||||||
writeOrPanic(w, fmt.Sprintf("```yaml\n%v\n```\n", s.input))
|
writeOrPanic(w, fmt.Sprintf("```yaml\n%v\n```\n", s.input))
|
||||||
|
|
||||||
writeOrPanic(w, "then\n")
|
writeOrPanic(w, "then\n")
|
||||||
|
switch s.scenarioType {
|
||||||
|
case "unquoted-encode":
|
||||||
|
writeOrPanic(w, "```bash\nyq -o=lua --lua-unquoted '.' sample.yml\n```\n")
|
||||||
|
default:
|
||||||
writeOrPanic(w, "```bash\nyq -o=lua '.' sample.yml\n```\n")
|
writeOrPanic(w, "```bash\nyq -o=lua '.' sample.yml\n```\n")
|
||||||
|
}
|
||||||
writeOrPanic(w, "will output\n")
|
writeOrPanic(w, "will output\n")
|
||||||
|
|
||||||
writeOrPanic(w, fmt.Sprintf("```lua\n%v```\n\n", mustProcessFormatScenario(s, NewYamlDecoder(ConfiguredYamlPreferences), NewLuaEncoder(ConfiguredLuaPreferences))))
|
writeOrPanic(w, fmt.Sprintf("```lua\n%v```\n\n", mustProcessFormatScenario(s, NewYamlDecoder(ConfiguredYamlPreferences), NewLuaEncoder(prefs))))
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestLuaScenarios(t *testing.T) {
|
func TestLuaScenarios(t *testing.T) {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user