From 21fda2eb3d29b8529015c0b17c0ebbdc4466d537 Mon Sep 17 00:00:00 2001 From: Kim Alvefur Date: Sun, 30 Jul 2023 20:54:59 +0200 Subject: [PATCH] Print simple keys unquoted in Lua output String keys that satisfy the requirements for variable names can be used as keys without quotes in tables. --- pkg/yqlib/encoder_lua.go | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/pkg/yqlib/encoder_lua.go b/pkg/yqlib/encoder_lua.go index b3f82b01..416de9b5 100644 --- a/pkg/yqlib/encoder_lua.go +++ b/pkg/yqlib/encoder_lua.go @@ -89,6 +89,22 @@ func (le *luaEncoder) encodeArray(writer io.Writer, node *yaml.Node) error { return writeString(writer, "}") } +func needsQuoting(s string) bool { + // [%a_][%w_]* + for i, c := range s { + if i == 0 { + if !((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || c == '_') { + return true + } + } else { + if !((c >= '0' && c <= '9') || (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || c == '_') { + return true + } + } + } + return false +} + func (le *luaEncoder) encodeMap(writer io.Writer, node *yaml.Node) error { err := writeString(writer, "{") if err != nil { @@ -105,6 +121,11 @@ func (le *luaEncoder) encodeMap(writer io.Writer, node *yaml.Node) error { if err != nil { return err } + } else if child.Tag == "!!str" && !needsQuoting(child.Value) { + err = writeString(writer, child.Value+"=") + if err != nil { + return err + } } else { // key err := writeString(writer, "[")