1717package nilaway
1818
1919import (
20+ "fmt"
21+ "regexp"
22+
2023 "go.uber.org/nilaway/accumulation"
2124 "go.uber.org/nilaway/config"
22- "go.uber.org/nilaway/util"
2325 "go.uber.org/nilaway/util/analysishelper"
2426 "golang.org/x/tools/go/analysis"
2527)
@@ -43,10 +45,29 @@ func run(p *analysis.Pass) (interface{}, error) {
4345 deferredErrors := pass .ResultOf [accumulation .Analyzer ].([]analysis.Diagnostic )
4446 for _ , e := range deferredErrors {
4547 if conf .PrettyPrint {
46- e .Message = util . PrettyPrintErrorMessage (e .Message )
48+ e .Message = PrettyPrintErrorMessage (e .Message )
4749 }
4850 pass .Report (e )
4951 }
5052
5153 return nil , nil
5254}
55+
56+ var codeReferencePattern = regexp .MustCompile ("\\ `(.*?)\\ `" )
57+ var pathPattern = regexp .MustCompile (`"(.*?)"` )
58+ var nilabilityPattern = regexp .MustCompile (`([\(|^\t](?i)(found\s|must\sbe\s)(nilable|nonnil)[\)]?)` )
59+
60+ // PrettyPrintErrorMessage is used in error reporting to post process and pretty print the output with colors
61+ func PrettyPrintErrorMessage (msg string ) string {
62+ // TODO: below string parsing should not be required after is implemented
63+ errorStr := fmt .Sprintf ("\x1b [%dm%s\x1b [0m" , 31 , "error: " ) // red
64+ codeStr := fmt .Sprintf ("\u001B [%dm%s\u001B [0m" , 95 , "`${1}`" ) // magenta
65+ pathStr := fmt .Sprintf ("\u001B [%dm%s\u001B [0m" , 36 , "${1}" ) // cyan
66+ nilabilityStr := fmt .Sprintf ("\u001B [%dm%s\u001B [0m" , 1 , "${1}" ) // bold
67+
68+ msg = nilabilityPattern .ReplaceAllString (msg , nilabilityStr )
69+ msg = codeReferencePattern .ReplaceAllString (msg , codeStr )
70+ msg = pathPattern .ReplaceAllString (msg , pathStr )
71+ msg = errorStr + msg
72+ return msg
73+ }
0 commit comments