+++ /dev/null
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package multichecker defines the main function for an analysis driver
-// with several analyzers. This package makes it easy for anyone to build
-// an analysis tool containing just the analyzers they need.
-package multichecker
-
-import (
- "flag"
- "fmt"
- "log"
- "os"
- "path/filepath"
- "strings"
-
- "golang.org/x/tools/go/analysis"
- "golang.org/x/tools/go/analysis/internal/analysisflags"
- "golang.org/x/tools/go/analysis/internal/checker"
- "golang.org/x/tools/go/analysis/unitchecker"
-)
-
-func Main(analyzers ...*analysis.Analyzer) {
- progname := filepath.Base(os.Args[0])
- log.SetFlags(0)
- log.SetPrefix(progname + ": ") // e.g. "vet: "
-
- if err := analysis.Validate(analyzers); err != nil {
- log.Fatal(err)
- }
-
- checker.RegisterFlags()
-
- analyzers = analysisflags.Parse(analyzers, true)
-
- args := flag.Args()
- if len(args) == 0 {
- fmt.Fprintf(os.Stderr, `%[1]s is a tool for static analysis of Go programs.
-
-Usage: %[1]s [-flag] [package]
-
-Run '%[1]s help' for more detail,
- or '%[1]s help name' for details and flags of a specific analyzer.
-`, progname)
- os.Exit(1)
- }
-
- if args[0] == "help" {
- analysisflags.Help(progname, analyzers, args[1:])
- os.Exit(0)
- }
-
- if len(args) == 1 && strings.HasSuffix(args[0], ".cfg") {
- unitchecker.Run(args[0], analyzers)
- panic("unreachable")
- }
-
- os.Exit(checker.Run(args, analyzers))
-}