Skip to content

Commit c2fc56f

Browse files
authored
fix: fix escape error in document (#445)
* fix: fix escape error in document Signed-off-by: zongz <zongzhe1024@163.com> * fix: fix test case Signed-off-by: zongz <zongzhe1024@163.com> * fix: add test case Signed-off-by: zongz <zongzhe1024@163.com> --------- Signed-off-by: zongz <zongzhe1024@163.com>
1 parent 64cefec commit c2fc56f

File tree

8 files changed

+83
-8
lines changed

8 files changed

+83
-8
lines changed

pkg/tools/gen/genkcl_test.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package gen
22

33
import (
44
"bytes"
5+
"fmt"
56
"log"
67
"os"
78
"path/filepath"
@@ -142,11 +143,14 @@ func TestGenKclFromJsonSchema(t *testing.T) {
142143
for _, testcase := range cases {
143144
t.Run(testcase.name, func(t *testing.T) {
144145
var buf bytes.Buffer
145-
err := GenKcl(&buf, testcase.input, nil, &GenKclOptions{})
146+
err := GenKcl(&buf, testcase.input, nil, &GenKclOptions{
147+
Mode: ModeJsonSchema,
148+
})
146149
if err != nil {
147150
t.Fatal(err)
148151
}
149152
result := buf.Bytes()
153+
fmt.Printf("result: %v\n", string(result))
150154
assert2.Equal(t, testcase.expect, string(bytes.ReplaceAll(result, []byte("\r\n"), []byte("\n"))))
151155
})
152156
}

pkg/tools/gen/genkcl_value.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ type printer struct {
5252
writer io.Writer
5353
listInline bool
5454
configInline bool
55+
escape bool
5556
}
5657

5758
func (p *printer) writeIndent() {
@@ -243,7 +244,7 @@ func (p *printer) walkValue(v any) error {
243244
p.writeConfigEnd()
244245
case reflect.String:
245246
value := val.String()
246-
if isStringEscaped(value) {
247+
if isStringEscaped(value) && p.escape {
247248
if value[len(value)-1] == '"' {
248249
// if the string ends with '"' then we need to add a space after the closing triple quote
249250
p.write(fmt.Sprintf(`r"""%s """`, value))

pkg/tools/gen/template.go

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,11 @@ var (
2929
)
3030

3131
var funcs = template.FuncMap{
32-
"formatType": formatType,
33-
"formatValue": formatValue,
34-
"formatName": formatName,
35-
"indentLines": indentLines,
32+
"formatType": formatType,
33+
"formatValue": formatValue,
34+
"formatValueWithEscape": formatValueWithEscape,
35+
"formatName": formatName,
36+
"indentLines": indentLines,
3637
"isKclData": func(v interface{}) bool {
3738
_, ok := v.([]data)
3839
return ok
@@ -92,12 +93,13 @@ func formatType(t typeInterface) string {
9293
return typAny
9394
}
9495

95-
func formatValue(v interface{}) string {
96+
func formatValueWithEscape(v interface{}, escape bool) string {
9697
var buf bytes.Buffer
9798
p := &printer{
9899
listInline: true,
99100
configInline: true,
100101
writer: &buf,
102+
escape: escape,
101103
}
102104
err := p.walkValue(v)
103105
if err != nil {
@@ -107,6 +109,10 @@ func formatValue(v interface{}) string {
107109
}
108110
}
109111

112+
func formatValue(v interface{}) string {
113+
return formatValueWithEscape(v, true)
114+
}
115+
110116
var kclKeywords = map[string]struct{}{
111117
"True": {},
112118
"False": {},

pkg/tools/gen/templates/kcl/document.gotmpl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
----------
1111
{{- range .Properties }}
1212
{{ formatName .Name }} : {{ formatType .Type }}, {{ if .Required }}required{{ else }}optional{{ end }}
13-
{{- if .HasDefault }}, default is {{ formatValue .DefaultValue }}{{ end }}
13+
{{- if .HasDefault }}, default is {{ formatValueWithEscape .DefaultValue false}}{{ end }}
1414
{{- if .Description }}{{ "\n" }}{{ indentLines .Description " " }}{{ end }}
1515
{{- end -}}
1616

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
"""
2+
This file was generated by the KCL auto-gen tool. DO NOT EDIT.
3+
Editing this file might prove futile when you re-run the KCL auto-gen generate command.
4+
"""
5+
6+
schema Input:
7+
r"""
8+
Input
9+
10+
Attributes
11+
----------
12+
foo : str, required, default is "more \"quotes\""
13+
"""
14+
15+
foo: str = r"""more "quotes" """
16+
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"type": "object",
3+
"properties": {
4+
"foo": {
5+
"type": "string",
6+
"default": "more \"quotes\""
7+
}
8+
},
9+
"required": [
10+
"foo"
11+
]
12+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
"""
2+
This file was generated by the KCL auto-gen tool. DO NOT EDIT.
3+
Editing this file might prove futile when you re-run the KCL auto-gen generate command.
4+
"""
5+
6+
schema Input:
7+
r"""
8+
Input
9+
10+
Attributes
11+
----------
12+
foo : str, required, default is "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque pellentesque ligula consequat, aliquam elit vitae, dapibus velit. Donec posuere venenatis diam, et viverra mi facilisis nec. Mauris eget velit eu risus ornare accumsan. Suspendisse rutrum vehicula tellus. Morbi lobortis lorem eget odio consequat dapibus. Etiam metus arcu, tincidunt id enim eget, mollis tempor purus. Sed finibus ante id odio dignissim mollis. Fusce auctor sit amet risus nec dictum. Interdum et malesuada fames ac ante ipsum primis in faucibus. Donec ornare orci nec fermentum accumsan. Vivamus fermentum dolor non ligula consequat, vitae pellentesque quam accumsan. Ut lobortis facilisis pharetra. Nullam tristique orci in nisi tempor, ut consequat metus molestie.\n\nSuspendisse justo quam, fermentum id ultrices sed, fringilla non eros. Ut leo risus, efficitur id posuere sit amet, sagittis vitae risus. Nullam mattis arcu quis ligula tempus ullamcorper. Donec vel nibh vel sem fermentum efficitur id a velit. Maecenas congue iaculis arcu et consectetur. Maecenas gravida nisl vitae eros dignissim, rutrum malesuada felis pulvinar. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae;\n\nCurabitur vitae augue et sapien pulvinar scelerisque. Proin eleifend varius feugiat. Nullam sagittis ante at ligula pharetra, vitae molestie turpis aliquet. Donec vitae odio nec tortor accumsan condimentum. Phasellus suscipit semper tortor, ac sodales orci varius non. Praesent iaculis ultrices dui in fringilla. Sed tristique libero sed sapien sagittis eleifend.\n\nCurabitur id fermentum ex, ac aliquam ligula. Duis tellus neque, luctus eu tristique eget, viverra vitae magna. Maecenas facilisis mauris quam, eu sodales elit vulputate quis. Suspendisse nulla ipsum, auctor ut efficitur sed, rhoncus ut nisi. Donec viverra libero a rhoncus bibendum. Nullam sit amet metus nisi. Nunc venenatis eu ante quis egestas.\n\nUt sollicitudin pellentesque sem in consectetur. Nunc imperdiet lacus in venenatis consectetur. Vestibulum sed turpis tempor, mattis velit eu, hendrerit quam. Morbi ac pretium orci, ut mattis felis. Phasellus id faucibus orci, lobortis bibendum eros. Nunc nec libero consectetur, elementum tortor vitae, cursus orci. Curabitur nisl velit, auctor eu rutrum id, suscipit cursus est."
13+
"""
14+
15+
foo: str = r"""Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque pellentesque ligula consequat, aliquam elit vitae, dapibus velit. Donec posuere venenatis diam, et viverra mi facilisis nec. Mauris eget velit eu risus ornare accumsan. Suspendisse rutrum vehicula tellus. Morbi lobortis lorem eget odio consequat dapibus. Etiam metus arcu, tincidunt id enim eget, mollis tempor purus. Sed finibus ante id odio dignissim mollis. Fusce auctor sit amet risus nec dictum. Interdum et malesuada fames ac ante ipsum primis in faucibus. Donec ornare orci nec fermentum accumsan. Vivamus fermentum dolor non ligula consequat, vitae pellentesque quam accumsan. Ut lobortis facilisis pharetra. Nullam tristique orci in nisi tempor, ut consequat metus molestie.
16+
17+
Suspendisse justo quam, fermentum id ultrices sed, fringilla non eros. Ut leo risus, efficitur id posuere sit amet, sagittis vitae risus. Nullam mattis arcu quis ligula tempus ullamcorper. Donec vel nibh vel sem fermentum efficitur id a velit. Maecenas congue iaculis arcu et consectetur. Maecenas gravida nisl vitae eros dignissim, rutrum malesuada felis pulvinar. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae;
18+
19+
Curabitur vitae augue et sapien pulvinar scelerisque. Proin eleifend varius feugiat. Nullam sagittis ante at ligula pharetra, vitae molestie turpis aliquet. Donec vitae odio nec tortor accumsan condimentum. Phasellus suscipit semper tortor, ac sodales orci varius non. Praesent iaculis ultrices dui in fringilla. Sed tristique libero sed sapien sagittis eleifend.
20+
21+
Curabitur id fermentum ex, ac aliquam ligula. Duis tellus neque, luctus eu tristique eget, viverra vitae magna. Maecenas facilisis mauris quam, eu sodales elit vulputate quis. Suspendisse nulla ipsum, auctor ut efficitur sed, rhoncus ut nisi. Donec viverra libero a rhoncus bibendum. Nullam sit amet metus nisi. Nunc venenatis eu ante quis egestas.
22+
23+
Ut sollicitudin pellentesque sem in consectetur. Nunc imperdiet lacus in venenatis consectetur. Vestibulum sed turpis tempor, mattis velit eu, hendrerit quam. Morbi ac pretium orci, ut mattis felis. Phasellus id faucibus orci, lobortis bibendum eros. Nunc nec libero consectetur, elementum tortor vitae, cursus orci. Curabitur nisl velit, auctor eu rutrum id, suscipit cursus est."""
24+
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"type": "object",
3+
"properties": {
4+
"foo": {
5+
"type": "string",
6+
"default": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque pellentesque ligula consequat, aliquam elit vitae, dapibus velit. Donec posuere venenatis diam, et viverra mi facilisis nec. Mauris eget velit eu risus ornare accumsan. Suspendisse rutrum vehicula tellus. Morbi lobortis lorem eget odio consequat dapibus. Etiam metus arcu, tincidunt id enim eget, mollis tempor purus. Sed finibus ante id odio dignissim mollis. Fusce auctor sit amet risus nec dictum. Interdum et malesuada fames ac ante ipsum primis in faucibus. Donec ornare orci nec fermentum accumsan. Vivamus fermentum dolor non ligula consequat, vitae pellentesque quam accumsan. Ut lobortis facilisis pharetra. Nullam tristique orci in nisi tempor, ut consequat metus molestie.\n\nSuspendisse justo quam, fermentum id ultrices sed, fringilla non eros. Ut leo risus, efficitur id posuere sit amet, sagittis vitae risus. Nullam mattis arcu quis ligula tempus ullamcorper. Donec vel nibh vel sem fermentum efficitur id a velit. Maecenas congue iaculis arcu et consectetur. Maecenas gravida nisl vitae eros dignissim, rutrum malesuada felis pulvinar. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae;\n\nCurabitur vitae augue et sapien pulvinar scelerisque. Proin eleifend varius feugiat. Nullam sagittis ante at ligula pharetra, vitae molestie turpis aliquet. Donec vitae odio nec tortor accumsan condimentum. Phasellus suscipit semper tortor, ac sodales orci varius non. Praesent iaculis ultrices dui in fringilla. Sed tristique libero sed sapien sagittis eleifend.\n\nCurabitur id fermentum ex, ac aliquam ligula. Duis tellus neque, luctus eu tristique eget, viverra vitae magna. Maecenas facilisis mauris quam, eu sodales elit vulputate quis. Suspendisse nulla ipsum, auctor ut efficitur sed, rhoncus ut nisi. Donec viverra libero a rhoncus bibendum. Nullam sit amet metus nisi. Nunc venenatis eu ante quis egestas.\n\nUt sollicitudin pellentesque sem in consectetur. Nunc imperdiet lacus in venenatis consectetur. Vestibulum sed turpis tempor, mattis velit eu, hendrerit quam. Morbi ac pretium orci, ut mattis felis. Phasellus id faucibus orci, lobortis bibendum eros. Nunc nec libero consectetur, elementum tortor vitae, cursus orci. Curabitur nisl velit, auctor eu rutrum id, suscipit cursus est."
7+
}
8+
},
9+
"required": [
10+
"foo"
11+
]
12+
}

0 commit comments

Comments
 (0)