mirror of
				https://gitea.com/gitea/tea.git
				synced 2025-10-31 09:15:26 +01:00 
			
		
		
		
	Add gitea-vet (#121)
Close #119 Co-authored-by: 6543 <6543@obermui.de> Co-authored-by: jolheiser <john.olheiser@gmail.com> Reviewed-on: https://gitea.com/gitea/tea/pulls/121 Reviewed-by: John Olheiser <john.olheiser@gmail.com> Reviewed-by: Andrew Thornton <art27@cantab.net>
This commit is contained in:
		
							
								
								
									
										5
									
								
								vendor/gitea.com/jolheiser/gitea-vet/.gitignore
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								vendor/gitea.com/jolheiser/gitea-vet/.gitignore
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| # GoLand | ||||
| .idea/ | ||||
|  | ||||
| # Binaries | ||||
| /gitea-vet* | ||||
							
								
								
									
										19
									
								
								vendor/gitea.com/jolheiser/gitea-vet/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								vendor/gitea.com/jolheiser/gitea-vet/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | ||||
| Copyright (c) 2020 The Gitea Authors | ||||
|  | ||||
| Permission is hereby granted, free of charge, to any person obtaining a copy | ||||
| of this software and associated documentation files (the "Software"), to deal | ||||
| in the Software without restriction, including without limitation the rights | ||||
| to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||||
| copies of the Software, and to permit persons to whom the Software is | ||||
| furnished to do so, subject to the following conditions: | ||||
|  | ||||
| The above copyright notice and this permission notice shall be included in | ||||
| all copies or substantial portions of the Software. | ||||
|  | ||||
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||
| IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||
| FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||||
| AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||||
| LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||||
| OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||||
| THE SOFTWARE. | ||||
							
								
								
									
										7
									
								
								vendor/gitea.com/jolheiser/gitea-vet/Makefile
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								vendor/gitea.com/jolheiser/gitea-vet/Makefile
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | ||||
| .PHONY: build | ||||
| build: | ||||
| 	go build | ||||
|  | ||||
| .PHONY: fmt | ||||
| fmt: | ||||
| 	go fmt ./... | ||||
							
								
								
									
										7
									
								
								vendor/gitea.com/jolheiser/gitea-vet/README.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								vendor/gitea.com/jolheiser/gitea-vet/README.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | ||||
| # gitea-vet | ||||
| `go vet` tool for Gitea | ||||
|  | ||||
| | Analyzer | Description                                                         | | ||||
| |----------|---------------------------------------------------------------------| | ||||
| | Imports  | Checks for import sorting. stdlib->code.gitea.io->other             | | ||||
| | License  | Checks file headers for some form of `Copyright...YYYY...Gitea/Gogs`| | ||||
							
								
								
									
										54
									
								
								vendor/gitea.com/jolheiser/gitea-vet/checks/imports.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								vendor/gitea.com/jolheiser/gitea-vet/checks/imports.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,54 @@ | ||||
| // 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 ( | ||||
| 	"strings" | ||||
|  | ||||
| 	"golang.org/x/tools/go/analysis" | ||||
| ) | ||||
|  | ||||
| var Imports = &analysis.Analyzer{ | ||||
| 	Name: "imports", | ||||
| 	Doc:  "check for import order.", | ||||
| 	Run:  runImports, | ||||
| } | ||||
|  | ||||
| func runImports(pass *analysis.Pass) (interface{}, error) { | ||||
| 	for _, file := range pass.Files { | ||||
| 		level := 0 | ||||
| 		for _, im := range file.Imports { | ||||
| 			var lvl int | ||||
| 			val := im.Path.Value | ||||
| 			if importHasPrefix(val, "code.gitea.io") { | ||||
| 				lvl = 2 | ||||
| 			} else if strings.Contains(val, ".") { | ||||
| 				lvl = 3 | ||||
| 			} else { | ||||
| 				lvl = 1 | ||||
| 			} | ||||
|  | ||||
| 			if lvl < level { | ||||
| 				pass.Reportf(file.Pos(), "Imports are sorted wrong") | ||||
| 				break | ||||
| 			} | ||||
| 			level = lvl | ||||
| 		} | ||||
| 	} | ||||
| 	return nil, nil | ||||
| } | ||||
|  | ||||
| func importHasPrefix(s, p string) bool { | ||||
| 	return strings.HasPrefix(s, "\""+p) | ||||
| } | ||||
|  | ||||
| func sliceHasPrefix(s string, prefixes ...string) bool { | ||||
| 	for _, p := range prefixes { | ||||
| 		if importHasPrefix(s, p) { | ||||
| 			return true | ||||
| 		} | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
							
								
								
									
										73
									
								
								vendor/gitea.com/jolheiser/gitea-vet/checks/license.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								vendor/gitea.com/jolheiser/gitea-vet/checks/license.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,73 @@ | ||||
| // 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 | ||||
| } | ||||
							
								
								
									
										5
									
								
								vendor/gitea.com/jolheiser/gitea-vet/go.mod
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								vendor/gitea.com/jolheiser/gitea-vet/go.mod
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| module gitea.com/jolheiser/gitea-vet | ||||
|  | ||||
| go 1.14 | ||||
|  | ||||
| require golang.org/x/tools v0.0.0-20200325010219-a49f79bcc224 | ||||
							
								
								
									
										20
									
								
								vendor/gitea.com/jolheiser/gitea-vet/go.sum
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								vendor/gitea.com/jolheiser/gitea-vet/go.sum
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,20 @@ | ||||
| github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= | ||||
| golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= | ||||
| golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= | ||||
| golang.org/x/mod v0.2.0 h1:KU7oHjnv3XNWfa5COkzUifxZmxp1TyI7ImMXqFxLwvQ= | ||||
| golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= | ||||
| golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= | ||||
| golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= | ||||
| golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= | ||||
| golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||||
| golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||||
| golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | ||||
| golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||||
| golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= | ||||
| golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= | ||||
| golang.org/x/tools v0.0.0-20200325010219-a49f79bcc224 h1:azwY/v0y0K4mFHVsg5+UrTgchqALYWpqVo6vL5OmkmI= | ||||
| golang.org/x/tools v0.0.0-20200325010219-a49f79bcc224/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= | ||||
| golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | ||||
| golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | ||||
| golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= | ||||
| golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | ||||
							
								
								
									
										17
									
								
								vendor/gitea.com/jolheiser/gitea-vet/main.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								vendor/gitea.com/jolheiser/gitea-vet/main.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | ||||
| // 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 main | ||||
|  | ||||
| import ( | ||||
| 	"gitea.com/jolheiser/gitea-vet/checks" | ||||
| 	"golang.org/x/tools/go/analysis/unitchecker" | ||||
| ) | ||||
|  | ||||
| func main() { | ||||
| 	unitchecker.Main( | ||||
| 		checks.Imports, | ||||
| 		checks.License, | ||||
| 	) | ||||
| } | ||||
		Reference in New Issue
	
	Block a user
	 6543
					6543