You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

imports.go 1.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. // Copyright 2020 The Gitea Authors. All rights reserved.
  2. // Use of this source code is governed by a MIT-style
  3. // license that can be found in the LICENSE file.
  4. package checks
  5. import (
  6. "strings"
  7. "golang.org/x/tools/go/analysis"
  8. )
  9. var Imports = &analysis.Analyzer{
  10. Name: "imports",
  11. Doc: "check for import order.",
  12. Run: runImports,
  13. }
  14. func runImports(pass *analysis.Pass) (interface{}, error) {
  15. for _, file := range pass.Files {
  16. level := 0
  17. for _, im := range file.Imports {
  18. var lvl int
  19. val := im.Path.Value
  20. if importHasPrefix(val, "code.gitea.io") {
  21. lvl = 2
  22. } else if strings.Contains(val, ".") {
  23. lvl = 3
  24. } else {
  25. lvl = 1
  26. }
  27. if lvl < level {
  28. pass.Reportf(file.Pos(), "Imports are sorted wrong")
  29. break
  30. }
  31. level = lvl
  32. }
  33. }
  34. return nil, nil
  35. }
  36. func importHasPrefix(s, p string) bool {
  37. return strings.HasPrefix(s, "\""+p)
  38. }
  39. func sliceHasPrefix(s string, prefixes ...string) bool {
  40. for _, p := range prefixes {
  41. if importHasPrefix(s, p) {
  42. return true
  43. }
  44. }
  45. return false
  46. }