12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- // Copyright 2020 The Gitea Authors. All rights reserved.
- // Use of this source code is governed by a MIT-style
- // license that can be found in the LICENSE file.
-
- package checks
-
- import (
- "regexp"
- "strings"
-
- "golang.org/x/tools/go/analysis"
- )
-
- var (
- header = regexp.MustCompile(`.*Copyright.*\d{4}.*(Gitea|Gogs)`)
- goGenerate = "//go:generate"
- buildTag = "// +build"
- )
-
- var License = &analysis.Analyzer{
- Name: "license",
- Doc: "check for a copyright header.",
- Run: runLicense,
- }
-
- func runLicense(pass *analysis.Pass) (interface{}, error) {
- for _, file := range pass.Files {
- if len(file.Comments) == 0 {
- pass.Reportf(file.Pos(), "Copyright not found")
- continue
- }
-
- if len(file.Comments[0].List) == 0 {
- pass.Reportf(file.Pos(), "Copyright not found or wrong")
- continue
- }
-
- commentGroup := 0
- if strings.HasPrefix(file.Comments[0].List[0].Text, goGenerate) {
- if len(file.Comments[0].List) > 1 {
- pass.Reportf(file.Pos(), "Must be an empty line between the go:generate and the Copyright")
- continue
- }
- commentGroup++
- }
-
- if strings.HasPrefix(file.Comments[0].List[0].Text, buildTag) {
- commentGroup++
- }
-
- if len(file.Comments) < commentGroup+1 {
- pass.Reportf(file.Pos(), "Copyright not found")
- continue
- }
-
- if len(file.Comments[commentGroup].List) < 1 {
- pass.Reportf(file.Pos(), "Copyright not found or wrong")
- continue
- }
-
- var check bool
- for _, comment := range file.Comments[commentGroup].List {
- if header.MatchString(comment.Text) {
- check = true
- }
- }
-
- if !check {
- pass.Reportf(file.Pos(), "Copyright did not match check")
- }
- }
- return nil, nil
- }
|