tools/generate: simplify Properties parsing
Separate mapToProperty is unnecessary.
Change-Id: I3463e496f0b48e8784936881ad0b4a5a93d92ef9
Reviewed-on: https://go-review.googlesource.com/c/vscode-go/+/328490
Trust: Hyang-Ah Hana Kim <hyangah@gmail.com>
Run-TryBot: Hyang-Ah Hana Kim <hyangah@gmail.com>
TryBot-Result: kokoro <noreply+kokoro@google.com>
Reviewed-by: Rebecca Stambler <rstambler@golang.org>
diff --git a/tools/generate.go b/tools/generate.go
index 87e9379..9db6175 100644
--- a/tools/generate.go
+++ b/tools/generate.go
@@ -40,7 +40,7 @@
Contributes struct {
Commands []Command `json:"commands,omitempty"`
Configuration struct {
- Properties map[string]Property `json:"properties,omitempty"`
+ Properties map[string]*Property `json:"properties,omitempty"`
} `json:"configuration,omitempty"`
} `json:"contributes,omitempty"`
}
@@ -55,16 +55,18 @@
name string `json:"name,omitempty"` // Set by us.
// Below are defined in package.json
- Properties map[string]interface{} `json:"properties,omitempty"`
- Default interface{} `json:"default,omitempty"`
- MarkdownDescription string `json:"markdownDescription,omitempty"`
- Description string `json:"description,omitempty"`
- MarkdownDeprecationMessage string `json:"markdownDeprecationMessage,omitempty"`
- DeprecationMessage string `json:"deprecationMessage,omitempty"`
- Type interface{} `json:"type,omitempty"`
- Enum []interface{} `json:"enum,omitempty"`
- EnumDescriptions []string `json:"enumDescriptions,omitempty"`
- MarkdownEnumDescriptions []string `json:"markdownEnumDescriptions,omitempty"`
+ Properties map[string]*Property `json:"properties,omitempty"`
+ AnyOf []Property `json:"anyOf,omitempty"`
+ Default interface{} `json:"default,omitempty"`
+ MarkdownDescription string `json:"markdownDescription,omitempty"`
+ Description string `json:"description,omitempty"`
+ MarkdownDeprecationMessage string `json:"markdownDeprecationMessage,omitempty"`
+ DeprecationMessage string `json:"deprecationMessage,omitempty"`
+ Type interface{} `json:"type,omitempty"`
+ Enum []interface{} `json:"enum,omitempty"`
+ EnumDescriptions []string `json:"enumDescriptions,omitempty"`
+ MarkdownEnumDescriptions []string `json:"markdownEnumDescriptions,omitempty"`
+ Items *Property `json:"items,omitempty"`
}
type moduleVersion struct {
@@ -162,8 +164,8 @@
// Clear so that we can rewrite settings.md.
b.Reset()
- var properties []Property
- var goplsProperty Property
+ var properties []*Property
+ var goplsProperty *Property
for name, p := range pkgJSON.Contributes.Configuration.Properties {
p.name = name
if name == "gopls" {
@@ -277,7 +279,7 @@
return version, nil
}
-func writeProperty(b *bytes.Buffer, heading string, p Property) {
+func writeProperty(b *bytes.Buffer, heading string, p *Property) {
desc := p.Description
if p.MarkdownDescription != "" {
desc = p.MarkdownDescription
@@ -313,7 +315,7 @@
}
}
-func defaultDescriptionSnippet(p Property) string {
+func defaultDescriptionSnippet(p *Property) string {
if p.Default == nil {
return ""
}
@@ -367,7 +369,7 @@
fmt.Fprintf(b, "%v}", indent)
}
-func writeGoplsSettingsSection(b *bytes.Buffer, goplsProperty Property) {
+func writeGoplsSettingsSection(b *bytes.Buffer, goplsProperty *Property) {
desc := goplsProperty.MarkdownDescription
b.WriteString(desc)
b.WriteString("\n\n")
@@ -380,58 +382,14 @@
sort.Strings(names)
for _, name := range names {
- pdata, ok := properties[name].(map[string]interface{})
- if !ok {
- fmt.Fprintf(b, "### `%s`\n", name)
- continue
- }
- p := mapToProperty(name, pdata)
+ p := properties[name]
+ p.name = name
writeProperty(b, "###", p)
b.WriteString("\n")
}
}
-func mapToProperty(name string, pdata map[string]interface{}) Property {
- p := Property{name: name}
-
- if v, ok := pdata["properties"].(map[string]interface{}); ok {
- p.Properties = v
- }
- if v, ok := pdata["markdownDescription"].(string); ok {
- p.MarkdownDescription = v
- }
- if v, ok := pdata["description"].(string); ok {
- p.Description = v
- }
- if v, ok := pdata["markdownDeprecationMessage"].(string); ok {
- p.MarkdownDescription = v
- }
- if v, ok := pdata["deprecationMessage"].(string); ok {
- p.DeprecationMessage = v
- }
- if v, ok := pdata["type"].(string); ok {
- p.Type = v
- }
- if v, ok := pdata["enum"].([]interface{}); ok {
- p.Enum = v
- }
- if v, ok := pdata["enumDescriptions"].([]interface{}); ok {
- for _, d := range v {
- p.EnumDescriptions = append(p.EnumDescriptions, d.(string))
- }
- }
- if v, ok := pdata["markdownEnumDescriptions"].([]interface{}); ok {
- for _, d := range v {
- p.MarkdownEnumDescriptions = append(p.MarkdownEnumDescriptions, d.(string))
- }
- }
- if v, ok := pdata["default"]; ok {
- p.Default = v
- }
- return p
-}
-
-func writeSettingsObjectProperties(b *bytes.Buffer, properties map[string]interface{}) {
+func writeSettingsObjectProperties(b *bytes.Buffer, properties map[string]*Property) {
if len(properties) == 0 {
return
}
@@ -449,12 +407,8 @@
if i == len(names)-1 {
ending = ""
}
- pdata, ok := properties[name].(map[string]interface{})
- if !ok {
- fmt.Fprintf(b, "| `%s` | |%v", name, ending)
- continue
- }
- p := mapToProperty(name, pdata)
+ p := properties[name]
+ p.name = name
desc := p.Description
if p.MarkdownDescription != "" {
@@ -487,7 +441,7 @@
}
// enumDescriptionsSnippet returns the snippet for the allowed values.
-func enumDescriptionsSnippet(p Property) string {
+func enumDescriptionsSnippet(p *Property) string {
b := &bytes.Buffer{}
if len(p.Enum) == 0 {
return ""