coremodels: Remove "Model" prefix from Go types (#53801)

Using the prefix "Model" on all generated types was adding more
verbosity to already lengthy generated types. This removed that prefix,
only replacing the base generated struct with the literal "Model" to
avoid a redundant name, e.g. dashboard.Dashboard.
This commit is contained in:
sam boyer
2022-08-17 05:42:41 -04:00
committed by GitHub
parent 81957732ab
commit 8ef6820f06
2 changed files with 123 additions and 130 deletions

View File

@@ -182,8 +182,7 @@ func (ls *ExtractedLineage) GenerateGoCoremodel(path string) (WriteDiffer, error
if err != nil {
return nil, fmt.Errorf("generated go file parsing failed: %w", err)
}
m := makeReplacer(lin.Name())
ast.Walk(m, gf)
ast.Walk(prefixDropper(strings.Title(lin.Name())), gf)
var buf bytes.Buffer
err = format.Node(&buf, fset, gf)
@@ -223,7 +222,7 @@ func (ls *ExtractedLineage) GenerateTypescriptCoremodel(path string) (WriteDiffe
return nil, fmt.Errorf("cuetsy parts gen failed: %w", err)
}
top, err := cuetsy.GenerateSingleAST(string(makeReplacer(ls.Lineage.Name())), schv, cuetsy.TypeInterface)
top, err := cuetsy.GenerateSingleAST(strings.Title(ls.Lineage.Name()), schv, cuetsy.TypeInterface)
if err != nil {
return nil, fmt.Errorf("cuetsy top gen failed: %w", err)
}
@@ -260,25 +259,19 @@ func (ls *ExtractedLineage) GenerateTypescriptCoremodel(path string) (WriteDiffe
return wd, nil
}
type modelReplacer string
type prefixDropper string
func makeReplacer(name string) modelReplacer {
return modelReplacer(fmt.Sprintf("%s%s", string(strings.ToUpper(name)[0]), name[1:]))
}
func (m modelReplacer) Visit(n ast.Node) ast.Visitor {
func (d prefixDropper) Visit(n ast.Node) ast.Visitor {
asstr := string(d)
switch x := n.(type) {
case *ast.Ident:
x.Name = m.replacePrefix(x.Name)
if x.Name != asstr {
x.Name = strings.TrimPrefix(x.Name, asstr)
} else {
x.Name = "Model"
}
}
return m
}
func (m modelReplacer) replacePrefix(str string) string {
if len(str) >= len(m) && str[:len(m)] == string(m) {
return strings.Replace(str, string(m), "Model", 1)
}
return str
return d
}
// GenerateCoremodelRegistry produces Go files that define a registry with