Skip to content

Commit

Permalink
refactor: form field tag parsing
Browse files Browse the repository at this point in the history
  • Loading branch information
crhntr committed Feb 25, 2025
1 parent bbea3fb commit 98dae71
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 25 deletions.
32 changes: 8 additions & 24 deletions internal/muxt/routes.go
Original file line number Diff line number Diff line change
Expand Up @@ -539,10 +539,14 @@ func appendFormParseStatements(statements []ast.Stmt, t *Template, imports *sour
}

for i := 0; i < form.NumFields(); i++ {
field := form.Field(i)
inputName, fieldTemplate, err := fieldTags(imports, t.template, field)
if err != nil {
return nil, err
field, tags := form.Field(i), reflect.StructTag(form.Tag(i))
inputName := field.Name()
if name, found := tags.Lookup(InputAttributeNameStructTag); found {
inputName = name
}
var fieldTemplate *template.Template
if name, found := tags.Lookup(InputAttributeTemplateStructTag); found {
fieldTemplate = t.template.Lookup(name)
}
var templateNodes []*html.Node
if fieldTemplate != nil {
Expand All @@ -552,7 +556,6 @@ func appendFormParseStatements(statements []ast.Stmt, t *Template, imports *sour
Data: atom.Body.String(),
})
}

var (
parseResult func(expr ast.Expr) ast.Stmt
str ast.Expr
Expand Down Expand Up @@ -620,25 +623,6 @@ func appendFormParseStatements(statements []ast.Stmt, t *Template, imports *sour
return nil, fmt.Errorf("expected form parameter type to be a struct")
}

func fieldTags(imports *source.Imports, t *template.Template, field *types.Var) (string, *template.Template, error) {
inputName := field.Name()
syntaxField, err := imports.FieldTag(field.Pos())
if err == nil && syntaxField != nil && syntaxField.Tag != nil {
unquoted, err := strconv.Unquote(syntaxField.Tag.Value)
if err != nil {
return "", nil, err
}
tags := reflect.StructTag(unquoted)
if name, found := tags.Lookup(InputAttributeNameStructTag); found {
inputName = name
}
if name, found := tags.Lookup(InputAttributeTemplateStructTag); found {
t = t.Lookup(name)
}
}
return inputName, t, nil
}

func formVariableDeclaration(imports *source.Imports, arg *ast.Ident, tp types.Type) (*ast.DeclStmt, error) {
typeExp, err := astTypeExpression(imports, tp)
if err != nil {
Expand Down
2 changes: 1 addition & 1 deletion internal/source/imports.go
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ func (imports *Imports) SyntaxFile(pos token.Pos) (*ast.File, *token.FileSet, er
return file, fSet, err
}

func (imports *Imports) FieldTag(pos token.Pos) (*ast.Field, error) {
func (imports *Imports) StructField(pos token.Pos) (*ast.Field, error) {
file, fileSet, err := imports.SyntaxFile(pos)
if err != nil {
return nil, err
Expand Down

0 comments on commit 98dae71

Please sign in to comment.