48 lines
1.5 KiB
Go
48 lines
1.5 KiB
Go
//go:build !aego_runtime
|
|
|
|
package docs
|
|
|
|
import (
|
|
"regexp"
|
|
"strings"
|
|
)
|
|
|
|
var parameterName = regexp.MustCompile(`^[A-Za-z_][A-Za-z0-9_]*$`)
|
|
|
|
// documentParams changes documentation labels only, never bindings or ABI.
|
|
func (r *Registry) documentParams(e *Entry, names []string) {
|
|
if (e.Kind != Method && e.Kind != Function) || len(names) != len(e.Params) {
|
|
r.problems = append(r.problems, Problem{ID: e.ID, Error: true, Message: "params must name every parameter of an existing method or function"})
|
|
return
|
|
}
|
|
seen := map[string]bool{}
|
|
for _, name := range names {
|
|
if !parameterName.MatchString(name) || seen[name] {
|
|
r.problems = append(r.problems, Problem{ID: e.ID, Error: true, Message: "params contains an invalid or duplicate name: " + name})
|
|
return
|
|
}
|
|
seen[name] = true
|
|
}
|
|
// Replace simultaneously so swapping two labels cannot change both to one.
|
|
oldNames := map[string]string{}
|
|
for i, name := range names {
|
|
oldNames[e.Params[i].Name] = name
|
|
e.Params[i].Name = name
|
|
}
|
|
e.Signature = regexp.MustCompile(`\b[A-Za-z_][A-Za-z0-9_]*\b`).ReplaceAllStringFunc(e.Signature, func(word string) string {
|
|
if name, ok := oldNames[word]; ok {
|
|
return name
|
|
}
|
|
return word
|
|
})
|
|
}
|
|
|
|
// publicType drops ABI serialization markers while retaining the qualified
|
|
// public type ID. Reference rendering can link this ID to its field list.
|
|
func publicType(raw string) string {
|
|
for _, prefix := range []string{"struct:", "enum:", "handle:"} {
|
|
raw = strings.ReplaceAll(raw, prefix, "")
|
|
}
|
|
return raw
|
|
}
|