only generate routes for partials or pages that have *h.RequestContext as a param
This commit is contained in:
parent
6ec582a834
commit
dc8a62313c
2 changed files with 35 additions and 2 deletions
|
|
@ -100,6 +100,32 @@ func sliceCommonPrefix(dir1, dir2 string) string {
|
||||||
return normalizePath(slicedDir2)
|
return normalizePath(slicedDir2)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func hasOnlyReqContextParam(funcType *ast.FuncType) bool {
|
||||||
|
if len(funcType.Params.List) != 1 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if funcType.Params.List[0].Names == nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if len(funcType.Params.List[0].Names) != 1 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
t := funcType.Params.List[0].Type
|
||||||
|
name, ok := t.(*ast.StarExpr)
|
||||||
|
if !ok {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
selectorExpr, ok := name.X.(*ast.SelectorExpr)
|
||||||
|
if !ok {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
ident, ok := selectorExpr.X.(*ast.Ident)
|
||||||
|
if !ok {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return ident.Name == "h" && selectorExpr.Sel.Name == "RequestContext"
|
||||||
|
}
|
||||||
|
|
||||||
func findPublicFuncsReturningHPartial(dir string, predicate func(partial Partial) bool) ([]Partial, error) {
|
func findPublicFuncsReturningHPartial(dir string, predicate func(partial Partial) bool) ([]Partial, error) {
|
||||||
var partials []Partial
|
var partials []Partial
|
||||||
cwd := process.GetWorkingDir()
|
cwd := process.GetWorkingDir()
|
||||||
|
|
@ -136,7 +162,7 @@ func findPublicFuncsReturningHPartial(dir string, predicate func(partial Partial
|
||||||
if selectorExpr, ok := starExpr.X.(*ast.SelectorExpr); ok {
|
if selectorExpr, ok := starExpr.X.(*ast.SelectorExpr); ok {
|
||||||
// Check if the package name is 'h' and type is 'Partial'.
|
// Check if the package name is 'h' and type is 'Partial'.
|
||||||
if ident, ok := selectorExpr.X.(*ast.Ident); ok && ident.Name == "h" {
|
if ident, ok := selectorExpr.X.(*ast.Ident); ok && ident.Name == "h" {
|
||||||
if selectorExpr.Sel.Name == "Partial" {
|
if selectorExpr.Sel.Name == "Partial" && hasOnlyReqContextParam(funcDecl.Type) {
|
||||||
p := Partial{
|
p := Partial{
|
||||||
Package: node.Name.Name,
|
Package: node.Name.Name,
|
||||||
Path: normalizePath(sliceCommonPrefix(cwd, path)),
|
Path: normalizePath(sliceCommonPrefix(cwd, path)),
|
||||||
|
|
@ -203,7 +229,7 @@ func findPublicFuncsReturningHPage(dir string) ([]Page, error) {
|
||||||
if selectorExpr, ok := starExpr.X.(*ast.SelectorExpr); ok {
|
if selectorExpr, ok := starExpr.X.(*ast.SelectorExpr); ok {
|
||||||
// Check if the package name is 'h' and type is 'Partial'.
|
// Check if the package name is 'h' and type is 'Partial'.
|
||||||
if ident, ok := selectorExpr.X.(*ast.Ident); ok && ident.Name == "h" {
|
if ident, ok := selectorExpr.X.(*ast.Ident); ok && ident.Name == "h" {
|
||||||
if selectorExpr.Sel.Name == "Page" {
|
if selectorExpr.Sel.Name == "Page" && hasOnlyReqContextParam(funcDecl.Type) {
|
||||||
pages = append(pages, Page{
|
pages = append(pages, Page{
|
||||||
Package: node.Name.Name,
|
Package: node.Name.Name,
|
||||||
Import: normalizePath(filepath.Dir(path)),
|
Import: normalizePath(filepath.Dir(path)),
|
||||||
|
|
|
||||||
|
|
@ -9,3 +9,10 @@ func CountersPartial(ctx *h.RequestContext) *h.Partial {
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func SwapFormError(ctx *h.RequestContext, error string) *h.Partial {
|
||||||
|
return h.SwapPartial(
|
||||||
|
ctx,
|
||||||
|
h.Div(),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue