diff --git a/BUILD.bazel b/BUILD.bazel index d40e69681d56..49721eb64d88 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -317,6 +317,8 @@ nogo( "//dev/linters/gocritic", "//dev/linters/ineffassign", "//dev/linters/unparam", + # Disabled because we currently have a lot of unused code + # "//dev/linters/unused", ] + STATIC_CHECK_ANALYZERS, }), ) diff --git a/dev/linters/unused/BUILD.bazel b/dev/linters/unused/BUILD.bazel new file mode 100644 index 000000000000..54669035cd97 --- /dev/null +++ b/dev/linters/unused/BUILD.bazel @@ -0,0 +1,13 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "unused", + srcs = ["unused.go"], + importpath = "github.com/sourcegraph/sourcegraph/dev/linters/unused", + visibility = ["//visibility:public"], + deps = [ + "//dev/linters/nolint", + "@co_honnef_go_tools//unused", + "@org_golang_x_tools//go/analysis", + ], +) diff --git a/dev/linters/unused/unused.go b/dev/linters/unused/unused.go new file mode 100644 index 000000000000..738e084b817b --- /dev/null +++ b/dev/linters/unused/unused.go @@ -0,0 +1,31 @@ +package unused + +import ( + "fmt" + "go/token" + "reflect" + + "github.com/sourcegraph/sourcegraph/dev/linters/nolint" + "golang.org/x/tools/go/analysis" + "honnef.co/go/tools/unused" +) + +var Analyzer = nolint.Wrap(&analysis.Analyzer{ + Name: "unused", + Doc: "Unused code", + Run: func(pass *analysis.Pass) (interface{}, error) { + // This is just a lightweight wrapper around the default unused + // analyzer that reports a diagnostic error rather than just returning + // a result + allUnused := pass.ResultOf[unused.Analyzer.Analyzer].(unused.Result).Unused + for _, u := range allUnused { + pass.Report(analysis.Diagnostic{ + Pos: token.Pos(u.Position.Offset), + Message: fmt.Sprintf("%s is unused", u.Name), + }) + } + return nil, nil + }, + Requires: []*analysis.Analyzer{unused.Analyzer.Analyzer}, + ResultType: reflect.TypeOf(nil), +})