github.com/haalcala/mattermost-server-change-repo@v0.0.0-20210713015153-16753fbeee5f/plugin/checker/check_api.go (about) 1 // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. 2 // See LICENSE.txt for license information. 3 4 package main 5 6 import ( 7 "fmt" 8 "go/ast" 9 "go/token" 10 11 "github.com/mattermost/mattermost-server/v5/plugin/checker/internal/asthelpers" 12 "github.com/mattermost/mattermost-server/v5/plugin/checker/internal/version" 13 ) 14 15 func checkAPIVersionComments(pkgPath string) (result, error) { 16 pkg, err := asthelpers.GetPackage(pkgPath) 17 if err != nil { 18 return result{}, err 19 } 20 21 apiInterface, err := asthelpers.FindInterface("API", pkg.Syntax) 22 if err != nil { 23 return result{}, err 24 } 25 26 invalidMethods := findInvalidMethods(apiInterface.Methods.List) 27 return result{Errors: renderErrors(pkg.Fset, invalidMethods)}, nil 28 } 29 30 func findInvalidMethods(methods []*ast.Field) []*ast.Field { 31 var invalid []*ast.Field 32 for _, m := range methods { 33 if !hasValidMinimumVersionComment(m.Doc.Text()) { 34 invalid = append(invalid, m) 35 } 36 } 37 return invalid 38 } 39 40 func hasValidMinimumVersionComment(s string) bool { 41 return version.ExtractMinimumVersionFromComment(s) != "" 42 } 43 44 func renderErrors(fset *token.FileSet, methods []*ast.Field) []string { 45 var out []string 46 for _, m := range methods { 47 out = append(out, renderWithFilePosition(fset, m.Pos(), fmt.Sprintf("missing a minimum server version comment on method %s", m.Names[0].Name))) 48 } 49 return out 50 }