From 26c845daad62cd4b42ad06e6853816c84ffe04ca Mon Sep 17 00:00:00 2001 From: Jason Song Date: Mon, 16 Jan 2023 10:56:16 +0800 Subject: [PATCH] feat: check for dependency level --- checks/dependencies.go | 53 ++++++++++++++++++++++++++++++++++++++++++ main.go | 1 + 2 files changed, 54 insertions(+) create mode 100644 checks/dependencies.go diff --git a/checks/dependencies.go b/checks/dependencies.go new file mode 100644 index 0000000..e9a0f48 --- /dev/null +++ b/checks/dependencies.go @@ -0,0 +1,53 @@ +// Copyright 2023 The Gitea Authors. All rights reserved. +// SPDX-License-Identifier: MIT + +package checks + +import ( + "strings" + + "golang.org/x/tools/go/analysis" +) + +var Dependencies = &analysis.Analyzer{ + Name: "dependencies", + Doc: "check for dependency level", + Run: runDependencies, +} + +func runDependencies(pass *analysis.Pass) (interface{}, error) { + level := getLevel(pass.Pkg.Path()) + if level == 0 { + return nil, nil + } + for _, file := range pass.Files { + for _, im := range file.Imports { + if getLevel(im.Path.Value) > level { + pass.Reportf(im.Pos(), "import %v", im.Path.Value) + } + } + } + return nil, nil +} + +// See https://docs.gitea.io/zh-cn/guidelines-backend/#package-dependencies +var dependencyLevels = map[string]int{ + "code.gitea.io/gitea/cmd": 5, + "code.gitea.io/gitea/routers": 4, + "code.gitea.io/gitea/services": 3, + "code.gitea.io/gitea/models": 2, + "code.gitea.io/gitea/modules": 1, +} + +func getLevel(pkg string) int { + pkg = strings.Trim(pkg, "\"") + if strings.HasSuffix(pkg, "/test") || strings.HasSuffix(pkg, "_test") { + return 0 + } + for k, v := range dependencyLevels { + if strings.HasPrefix(pkg, k) { + return v + } + } + return 0 +} diff --git a/main.go b/main.go index 7baec19..2354e5e 100644 --- a/main.go +++ b/main.go @@ -15,5 +15,6 @@ func main() { checks.License, checks.Migrations, checks.ModelsSession, + checks.Dependencies, ) }