Filter out dev comments from schema (#4319)

- **PR Description**

Filter out [dev] comments earlier. Previously we only filtered them out
from the example config section in Config.md, but they still appeared in
the schema. This is not ideal, because the schema descriptions can
appear in editors on mouse hover or in auto-completions. So filter them
out earlier, so that they don't appear in the schema either.
This commit is contained in:
Stefan Haller 2025-02-25 11:46:15 +01:00 committed by GitHub
commit fd01ca3acf
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 22 additions and 9 deletions

9
.vscode/launch.json vendored
View file

@ -26,6 +26,15 @@
],
"console": "integratedTerminal",
},
{
"name": "JSON Schema generator",
"type": "go",
"request": "launch",
"mode": "auto",
"program": "${workspaceFolder}/pkg/jsonschema/generator.go",
"cwd": "${workspaceFolder}/pkg/jsonschema",
"console": "integratedTerminal",
},
{
"name": "Attach to a running Lazygit",
"type": "go",

View file

@ -56,6 +56,7 @@ func customReflect(v *config.UserConfig) *jsonschema.Schema {
if err := r.AddGoComments("github.com/jesseduffield/lazygit/pkg/config", "../config"); err != nil {
panic(err)
}
filterOutDevComments(r)
schema := r.Reflect(v)
defaultConfig := config.GetDefaultConfig()
userConfigSchema := schema.Definitions["UserConfig"]
@ -76,6 +77,16 @@ func customReflect(v *config.UserConfig) *jsonschema.Schema {
return schema
}
func filterOutDevComments(r *jsonschema.Reflector) {
for k, v := range r.CommentMap {
commentLines := strings.Split(v, "\n")
filteredCommentLines := lo.Filter(commentLines, func(line string, _ int) bool {
return !strings.Contains(line, "[dev]")
})
r.CommentMap[k] = strings.Join(filteredCommentLines, "\n")
}
}
func setDefaultVals(rootSchema, schema *jsonschema.Schema, defaults any) {
t := reflect.TypeOf(defaults)
v := reflect.ValueOf(defaults)

View file

@ -77,20 +77,13 @@ func prepareMarshalledConfig(buffer bytes.Buffer) []byte {
}
func setComment(yamlNode *yaml.Node, description string) {
// Filter out lines containing "[dev]"; this allows us to add developer
// documentation to properties that don't get included in the docs
lines := strings.Split(description, "\n")
lines = lo.Filter(lines, func(s string, _ int) bool {
return !strings.Contains(s, "[dev]")
})
// Workaround for the way yaml formats the HeadComment if it contains
// blank lines: it renders these without a leading "#", but we want a
// leading "#" even on blank lines. However, yaml respects it if the
// HeadComment already contains a leading "#", so we prefix all lines
// (including blank ones) with "#".
yamlNode.HeadComment = strings.Join(
lo.Map(lines, func(s string, _ int) string {
lo.Map(strings.Split(description, "\n"), func(s string, _ int) string {
if s == "" {
return "#" // avoid trailing space on blank lines
}

View file

@ -1468,7 +1468,7 @@
},
"editInTerminal": {
"type": "boolean",
"description": "Whether lazygit suspends until an edit process returns\n[dev] Pointer to bool so that we can distinguish unset (nil) from false.\n[dev] We're naming this `editInTerminal` for backwards compatibility"
"description": "Whether lazygit suspends until an edit process returns"
},
"openDirInEditor": {
"type": "string",