func parseFlags(checker *errcheck.Checker, args []string) ([]string, int) { flags := flag.NewFlagSet(args[0], flag.ContinueOnError) flags.BoolVar(&checker.Blank, "blank", false, "if true, check for errors assigned to blank identifier") flags.BoolVar(&checker.Asserts, "asserts", false, "if true, check for ignored type assertion results") flags.BoolVar(&checker.Verbose, "verbose", false, "produce more verbose logging") tags := tagsFlag{} flags.Var(&tags, "tags", "space-separated list of build tags to include") ignorePkg := flags.String("ignorepkg", "", "comma-separated list of package paths to ignore") ignore := ignoreFlag(map[string]*regexp.Regexp{ "fmt": dotStar, }) flags.Var(ignore, "ignore", "comma-separated list of pairs of the form pkg:regex\n"+ " the regex is used to ignore names within pkg") if err := flags.Parse(args[1:]); err != nil { return nil, exitFatalError } checker.Tags = tags for _, pkg := range strings.Split(*ignorePkg, ",") { if pkg != "" { ignore[pkg] = dotStar } } checker.Ignore = ignore ctx := gotool.Context{ BuildContext: build.Default, } ctx.BuildContext.BuildTags = tags // ImportPaths normalizes paths and expands '...' return gotool.ImportPaths(flags.Args()), exitCodeOk }
func parseFlags(checker *errcheck.Checker, args []string) ([]string, int) { flags := flag.NewFlagSet(args[0], flag.ContinueOnError) flags.BoolVar(&checker.Blank, "blank", false, "if true, check for errors assigned to blank identifier") flags.BoolVar(&checker.Asserts, "asserts", false, "if true, check for ignored type assertion results") flags.BoolVar(&checker.WithoutTests, "ignoretests", false, "if true, checking of _test.go files is disabled") flags.BoolVar(&checker.Verbose, "verbose", false, "produce more verbose logging") flags.BoolVar(&abspath, "abspath", false, "print absolute paths to files") tags := tagsFlag{} flags.Var(&tags, "tags", "space-separated list of build tags to include") ignorePkg := flags.String("ignorepkg", "", "comma-separated list of package paths to ignore") ignore := ignoreFlag(map[string]*regexp.Regexp{ "fmt": dotStar, }) flags.Var(ignore, "ignore", "[deprecated] comma-separated list of pairs of the form pkg:regex\n"+ " the regex is used to ignore names within pkg.") var excludeFile string flags.StringVar(&excludeFile, "exclude", "", "Path to a file containing a list of functions to exclude from checking") if err := flags.Parse(args[1:]); err != nil { return nil, exitFatalError } if excludeFile != "" { exclude := make(map[string]bool) fh, err := os.Open(excludeFile) if err != nil { fmt.Fprintf(os.Stderr, "Could not read exclude file: %s\n", err) return nil, exitFatalError } scanner := bufio.NewScanner(fh) for scanner.Scan() { exclude[scanner.Text()] = true } if err := scanner.Err(); err != nil { fmt.Fprintf(os.Stderr, "Could not read exclude file: %s\n", err) return nil, exitFatalError } checker.SetExclude(exclude) } checker.Tags = tags for _, pkg := range strings.Split(*ignorePkg, ",") { if pkg != "" { ignore[pkg] = dotStar } } checker.Ignore = ignore // ImportPaths normalizes paths and expands '...' return gotool.ImportPaths(flags.Args()), exitCodeOk }