From 0d5b93bd07cb1e4d2817036b3cafeef95517016f Mon Sep 17 00:00:00 2001 From: jflyfox Date: Tue, 29 Dec 2020 19:43:25 +0800 Subject: [PATCH] fix issue in incorrect parsing error message for gview --- os/gview/gview_parse.go | 51 +++++++++++++++++++++++++++-------------- 1 file changed, 34 insertions(+), 17 deletions(-) diff --git a/os/gview/gview_parse.go b/os/gview/gview_parse.go index cd0a632af..8c7a3026b 100644 --- a/os/gview/gview_parse.go +++ b/os/gview/gview_parse.go @@ -58,8 +58,12 @@ func (view *View) Parse(file string, params ...Params) (result string, err error var tpl interface{} // It caches the file, folder and its content to enhance performance. r := view.fileCacheMap.GetOrSetFuncLock(file, func() interface{} { - var path, folder, content string - var resource *gres.File + var ( + path string + folder string + content string + resource *gres.File + ) // Searching the absolute file path for . path, folder, resource, err = view.searchFile(file) if err != nil { @@ -215,15 +219,14 @@ func (view *View) getTemplate(filePath, folderPath, pattern string) (tpl interfa // Key for template cache. key := fmt.Sprintf("%s_%v", filePath, view.config.Delimiters) result := templates.GetOrSetFuncLock(key, func() interface{} { - // Do not use but the as the parameter for function New, - // because when error occurs the will be printed out for error locating. + tplName := filePath if view.config.AutoEncode { - tpl = htmltpl.New(filePath).Delims( + tpl = htmltpl.New(tplName).Delims( view.config.Delimiters[0], view.config.Delimiters[1], ).Funcs(view.funcMap) } else { - tpl = texttpl.New(filePath).Delims( + tpl = texttpl.New(tplName).Delims( view.config.Delimiters[0], view.config.Delimiters[1], ).Funcs(view.funcMap) @@ -232,16 +235,22 @@ func (view *View) getTemplate(filePath, folderPath, pattern string) (tpl interfa if !gres.IsEmpty() { if files := gres.ScanDirFile(folderPath, pattern, true); len(files) > 0 { var err error - for _, v := range files { - if view.config.AutoEncode { - _, err = tpl.(*htmltpl.Template).New(v.FileInfo().Name()).Parse(string(v.Content())) + if view.config.AutoEncode { + t := tpl.(*htmltpl.Template) + for _, v := range files { + _, err = t.New(v.FileInfo().Name()).Parse(string(v.Content())) if err != nil { - intlog.Error(err) + err = view.formatTemplateObjectCreatingError(v.Name(), tplName, err) + return nil } - } else { - _, err = tpl.(*texttpl.Template).New(v.FileInfo().Name()).Parse(string(v.Content())) + } + } else { + t := tpl.(*texttpl.Template) + for _, v := range files { + _, err = t.New(v.FileInfo().Name()).Parse(string(v.Content())) if err != nil { - intlog.Error(err) + err = view.formatTemplateObjectCreatingError(v.Name(), tplName, err) + return nil } } } @@ -260,16 +269,16 @@ func (view *View) getTemplate(filePath, folderPath, pattern string) (tpl interfa if view.config.AutoEncode { t := tpl.(*htmltpl.Template) for _, file := range files { - _, err = t.Parse(gfile.GetContents(file)) - if err != nil { + if _, err = t.Parse(gfile.GetContents(file)); err != nil { + err = view.formatTemplateObjectCreatingError(file, tplName, err) return nil } } } else { t := tpl.(*texttpl.Template) for _, file := range files { - _, err = t.Parse(gfile.GetContents(file)) - if err != nil { + if _, err = t.Parse(gfile.GetContents(file)); err != nil { + err = view.formatTemplateObjectCreatingError(file, tplName, err) return nil } } @@ -282,6 +291,14 @@ func (view *View) getTemplate(filePath, folderPath, pattern string) (tpl interfa return } +// formatTemplateObjectCreatingError formats the error that creted from creating template object. +func (view *View) formatTemplateObjectCreatingError(filePath, tplName string, err error) error { + if err != nil { + return gerror.NewSkip(1, gstr.Replace(err.Error(), tplName, filePath)) + } + return nil +} + // searchFile returns the found absolute path for and its template folder path. // Note that, the returned is the template folder path, but not the folder of // the returned template file .