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  }