From dbd96badb6959c2b7070664aecbcf0f7c299c538 Mon Sep 17 00:00:00 2001 From: Daniel Nephin Date: Thu, 12 Oct 2017 11:44:03 -0400 Subject: [PATCH] Add nakedret linter. Signed-off-by: Daniel Nephin --- cli/command/cli.go | 6 +++--- cli/command/container/prune.go | 6 +++--- cli/command/container/stats_helpers.go | 5 +++-- cli/command/formatter/disk_usage.go | 28 ++++++++++---------------- cli/command/image/build_session.go | 10 ++++----- cli/command/image/prune.go | 6 +++--- cli/command/network/prune.go | 6 +++--- cli/command/plugin/install.go | 6 +++--- cli/command/volume/prune.go | 6 +++--- dockerfiles/Dockerfile.lint | 7 +++++++ docs/yaml/yaml.go | 2 +- gometalinter.json | 7 +++++++ opts/network.go | 10 ++++----- 13 files changed, 57 insertions(+), 48 deletions(-) diff --git a/cli/command/cli.go b/cli/command/cli.go index 62af0c30..6bd487c6 100644 --- a/cli/command/cli.go +++ b/cli/command/cli.go @@ -207,7 +207,8 @@ func NewAPIClientFromFlags(opts *cliflags.CommonOptions, configFile *configfile. return client.NewClient(host, verStr, httpClient, customHeaders) } -func getServerHost(hosts []string, tlsOptions *tlsconfig.Options) (host string, err error) { +func getServerHost(hosts []string, tlsOptions *tlsconfig.Options) (string, error) { + var host string switch len(hosts) { case 0: host = os.Getenv("DOCKER_HOST") @@ -217,8 +218,7 @@ func getServerHost(hosts []string, tlsOptions *tlsconfig.Options) (host string, return "", errors.New("Please specify only one -H") } - host, err = dopts.ParseHost(tlsOptions != nil, host) - return + return dopts.ParseHost(tlsOptions != nil, host) } func newHTTPClient(host string, tlsOptions *tlsconfig.Options) (*http.Client, error) { diff --git a/cli/command/container/prune.go b/cli/command/container/prune.go index 38ac6472..f466c44a 100644 --- a/cli/command/container/prune.go +++ b/cli/command/container/prune.go @@ -52,12 +52,12 @@ func runPrune(dockerCli command.Cli, options pruneOptions) (spaceReclaimed uint6 pruneFilters := command.PruneFilters(dockerCli, options.filter.Value()) if !options.force && !command.PromptForConfirmation(dockerCli.In(), dockerCli.Out(), warning) { - return + return 0, "", nil } report, err := dockerCli.Client().ContainersPrune(context.Background(), pruneFilters) if err != nil { - return + return 0, "", err } if len(report.ContainersDeleted) > 0 { @@ -68,7 +68,7 @@ func runPrune(dockerCli command.Cli, options pruneOptions) (spaceReclaimed uint6 spaceReclaimed = report.SpaceReclaimed } - return + return spaceReclaimed, output, nil } // RunPrune calls the Container Prune API diff --git a/cli/command/container/stats_helpers.go b/cli/command/container/stats_helpers.go index 5f5a05cf..df5a048a 100644 --- a/cli/command/container/stats_helpers.go +++ b/cli/command/container/stats_helpers.go @@ -200,7 +200,8 @@ func calculateCPUPercentWindows(v *types.StatsJSON) float64 { return 0.00 } -func calculateBlockIO(blkio types.BlkioStats) (blkRead uint64, blkWrite uint64) { +func calculateBlockIO(blkio types.BlkioStats) (uint64, uint64) { + var blkRead, blkWrite uint64 for _, bioEntry := range blkio.IoServiceBytesRecursive { switch strings.ToLower(bioEntry.Op) { case "read": @@ -209,7 +210,7 @@ func calculateBlockIO(blkio types.BlkioStats) (blkRead uint64, blkWrite uint64) blkWrite = blkWrite + bioEntry.Value } } - return + return blkRead, blkWrite } func calculateNetwork(network map[string]types.NetworkStats) (float64, float64) { diff --git a/cli/command/formatter/disk_usage.go b/cli/command/formatter/disk_usage.go index 5681f296..9ac1db7b 100644 --- a/cli/command/formatter/disk_usage.go +++ b/cli/command/formatter/disk_usage.go @@ -118,11 +118,11 @@ func (ctx *DiskUsageContext) Write() (err error) { return err } -func (ctx *DiskUsageContext) verboseWrite() (err error) { +func (ctx *DiskUsageContext) verboseWrite() error { // First images tmpl, err := ctx.startSubsection(defaultDiskUsageImageTableFormat) if err != nil { - return + return err } ctx.Output.Write([]byte("Images space usage:\n\n")) @@ -141,14 +141,14 @@ func (ctx *DiskUsageContext) verboseWrite() (err error) { } } - err = ctx.contextFormat(tmpl, &imageContext{ + err := ctx.contextFormat(tmpl, &imageContext{ repo: repo, tag: tag, trunc: true, i: *i, }) if err != nil { - return + return err } } ctx.postFormat(tmpl, newImageContext()) @@ -157,17 +157,14 @@ func (ctx *DiskUsageContext) verboseWrite() (err error) { ctx.Output.Write([]byte("\nContainers space usage:\n\n")) tmpl, err = ctx.startSubsection(defaultDiskUsageContainerTableFormat) if err != nil { - return + return err } for _, c := range ctx.Containers { // Don't display the virtual size c.SizeRootFs = 0 - err = ctx.contextFormat(tmpl, &containerContext{ - trunc: true, - c: *c, - }) + err := ctx.contextFormat(tmpl, &containerContext{trunc: true, c: *c}) if err != nil { - return + return err } } ctx.postFormat(tmpl, newContainerContext()) @@ -176,21 +173,18 @@ func (ctx *DiskUsageContext) verboseWrite() (err error) { ctx.Output.Write([]byte("\nLocal Volumes space usage:\n\n")) tmpl, err = ctx.startSubsection(defaultDiskUsageVolumeTableFormat) if err != nil { - return + return err } for _, v := range ctx.Volumes { - err = ctx.contextFormat(tmpl, &volumeContext{ - v: *v, - }) - if err != nil { - return + if err := ctx.contextFormat(tmpl, &volumeContext{v: *v}); err != nil { + return err } } ctx.postFormat(tmpl, newVolumeContext()) // And build cache fmt.Fprintf(ctx.Output, "\nBuild cache usage: %s\n\n", units.HumanSize(float64(ctx.BuilderSize))) - return + return nil } type diskUsageImagesContext struct { diff --git a/cli/command/image/build_session.go b/cli/command/image/build_session.go index e27e67e3..897d237c 100644 --- a/cli/command/image/build_session.go +++ b/cli/command/image/build_session.go @@ -128,18 +128,18 @@ func getBuildSharedKey(dir string) (string, error) { return hex.EncodeToString(s[:]), nil } -func tryNodeIdentifier() (out string) { - out = cliconfig.Dir() // return config dir as default on permission error +func tryNodeIdentifier() string { + out := cliconfig.Dir() // return config dir as default on permission error if err := os.MkdirAll(cliconfig.Dir(), 0700); err == nil { sessionFile := filepath.Join(cliconfig.Dir(), ".buildNodeID") if _, err := os.Lstat(sessionFile); err != nil { if os.IsNotExist(err) { // create a new file with stored randomness b := make([]byte, 32) if _, err := rand.Read(b); err != nil { - return + return out } if err := ioutil.WriteFile(sessionFile, []byte(hex.EncodeToString(b)), 0600); err != nil { - return + return out } } } @@ -149,5 +149,5 @@ func tryNodeIdentifier() (out string) { return string(dt) } } - return + return out } diff --git a/cli/command/image/prune.go b/cli/command/image/prune.go index 8e521b61..c49edac2 100644 --- a/cli/command/image/prune.go +++ b/cli/command/image/prune.go @@ -65,12 +65,12 @@ func runPrune(dockerCli command.Cli, options pruneOptions) (spaceReclaimed uint6 warning = allImageWarning } if !options.force && !command.PromptForConfirmation(dockerCli.In(), dockerCli.Out(), warning) { - return + return 0, "", nil } report, err := dockerCli.Client().ImagesPrune(context.Background(), pruneFilters) if err != nil { - return + return 0, "", err } if len(report.ImagesDeleted) > 0 { @@ -85,7 +85,7 @@ func runPrune(dockerCli command.Cli, options pruneOptions) (spaceReclaimed uint6 spaceReclaimed = report.SpaceReclaimed } - return + return spaceReclaimed, output, nil } // RunPrune calls the Image Prune API diff --git a/cli/command/network/prune.go b/cli/command/network/prune.go index b31db99d..1b00a5c0 100644 --- a/cli/command/network/prune.go +++ b/cli/command/network/prune.go @@ -50,12 +50,12 @@ func runPrune(dockerCli command.Cli, options pruneOptions) (output string, err e pruneFilters := command.PruneFilters(dockerCli, options.filter.Value()) if !options.force && !command.PromptForConfirmation(dockerCli.In(), dockerCli.Out(), warning) { - return + return "", nil } report, err := dockerCli.Client().NetworksPrune(context.Background(), pruneFilters) if err != nil { - return + return "", err } if len(report.NetworksDeleted) > 0 { @@ -65,7 +65,7 @@ func runPrune(dockerCli command.Cli, options pruneOptions) (output string, err e } } - return + return output, nil } // RunPrune calls the Network Prune API diff --git a/cli/command/plugin/install.go b/cli/command/plugin/install.go index 5f187fe0..c4c978b3 100644 --- a/cli/command/plugin/install.go +++ b/cli/command/plugin/install.go @@ -57,12 +57,12 @@ type pluginRegistryService struct { registry.Service } -func (s pluginRegistryService) ResolveRepository(name reference.Named) (repoInfo *registry.RepositoryInfo, err error) { - repoInfo, err = s.Service.ResolveRepository(name) +func (s pluginRegistryService) ResolveRepository(name reference.Named) (*registry.RepositoryInfo, error) { + repoInfo, err := s.Service.ResolveRepository(name) if repoInfo != nil { repoInfo.Class = "plugin" } - return + return repoInfo, err } func newRegistryService() (registry.Service, error) { diff --git a/cli/command/volume/prune.go b/cli/command/volume/prune.go index 157f883b..abbbff39 100644 --- a/cli/command/volume/prune.go +++ b/cli/command/volume/prune.go @@ -52,12 +52,12 @@ func runPrune(dockerCli command.Cli, options pruneOptions) (spaceReclaimed uint6 pruneFilters := command.PruneFilters(dockerCli, options.filter.Value()) if !options.force && !command.PromptForConfirmation(dockerCli.In(), dockerCli.Out(), warning) { - return + return 0, "", nil } report, err := dockerCli.Client().VolumesPrune(context.Background(), pruneFilters) if err != nil { - return + return 0, "", err } if len(report.VolumesDeleted) > 0 { @@ -68,7 +68,7 @@ func runPrune(dockerCli command.Cli, options pruneOptions) (spaceReclaimed uint6 spaceReclaimed = report.SpaceReclaimed } - return + return spaceReclaimed, output, nil } // RunPrune calls the Volume Prune API diff --git a/dockerfiles/Dockerfile.lint b/dockerfiles/Dockerfile.lint index f72b43b8..75ca90c4 100644 --- a/dockerfiles/Dockerfile.lint +++ b/dockerfiles/Dockerfile.lint @@ -10,6 +10,13 @@ RUN go get -d github.com/alecthomas/gometalinter && \ gometalinter --install && \ rm -rf /go/src/* /go/pkg/* +ARG NAKEDRET_SHA=3ddb495a6d63bc9041ba843e7d651cf92639d8cb +RUN go get -d github.com/alexkohler/nakedret && \ + cd /go/src/github.com/alexkohler/nakedret && \ + git checkout -q "$NAKEDRET_SHA" && \ + go build -v -o /usr/local/bin/nakedret . && \ + rm -rf /go/src/* /go/pkg/* + WORKDIR /go/src/github.com/docker/cli ENV CGO_ENABLED=0 ENV DISABLE_WARN_OUTSIDE_CONTAINER=1 diff --git a/docs/yaml/yaml.go b/docs/yaml/yaml.go index 528eefbb..bea3c14c 100644 --- a/docs/yaml/yaml.go +++ b/docs/yaml/yaml.go @@ -225,7 +225,7 @@ func parseMDContent(mdString string) (description string, examples string) { examples = strings.Trim(s, "Examples\n") } } - return + return description, examples } type byName []*cobra.Command diff --git a/gometalinter.json b/gometalinter.json index e3230994..79fa8d01 100644 --- a/gometalinter.json +++ b/gometalinter.json @@ -7,6 +7,12 @@ "parameter .* always receives" ], "EnableGC": true, + "Linters": { + "nakedret": { + "Command": "nakedret", + "Pattern": "^(?P.*?\\.go):(?P\\d+)\\s*(?P.*)$" + } + }, "DisableAll": true, "Enable": [ @@ -20,6 +26,7 @@ "interfacer", "lll", "misspell", + "nakedret", "unconvert", "unparam", "unused", diff --git a/opts/network.go b/opts/network.go index 317a7ac5..ec4967ff 100644 --- a/opts/network.go +++ b/opts/network.go @@ -95,12 +95,12 @@ func (n *NetworkOpt) String() string { return "" } -func parseDriverOpt(driverOpt string) (key string, value string, err error) { +func parseDriverOpt(driverOpt string) (string, string, error) { parts := strings.SplitN(driverOpt, "=", 2) if len(parts) != 2 { - err = fmt.Errorf("invalid key value pair format in driver options") + return "", "", fmt.Errorf("invalid key value pair format in driver options") } - key = strings.TrimSpace(strings.ToLower(parts[0])) - value = strings.TrimSpace(strings.ToLower(parts[1])) - return + key := strings.TrimSpace(strings.ToLower(parts[0])) + value := strings.TrimSpace(strings.ToLower(parts[1])) + return key, value, nil }