Skip to content

Commit

Permalink
linting fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
jahvon committed Oct 9, 2023
1 parent 4674b9b commit cd5fab7
Show file tree
Hide file tree
Showing 34 changed files with 257 additions and 325 deletions.
94 changes: 18 additions & 76 deletions .golangci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -44,25 +44,6 @@ linters-settings:
# Default: 30 (but we recommend 10-20)
min-complexity: 20

gomnd:
# List of function patterns to exclude from analysis.
# Values always ignored: `time.Date`,
# `strconv.FormatInt`, `strconv.FormatUint`, `strconv.FormatFloat`,
# `strconv.ParseInt`, `strconv.ParseUint`, `strconv.ParseFloat`.
# Default: []
ignored-functions:
- flag.Arg
- flag.Duration.*
- flag.Float.*
- flag.Int.*
- flag.Uint.*
- os.Chmod
- os.Mkdir.*
- os.OpenFile
- os.WriteFile
- prometheus.ExponentialBuckets.*
- prometheus.LinearBuckets

gomodguard:
blocked:
# List of blocked modules.
Expand Down Expand Up @@ -103,7 +84,6 @@ linters-settings:
# Default: false
all: true


linters:
disable-all: true
enable:
Expand All @@ -116,7 +96,6 @@ linters:
- typecheck # like the front-end of a Go compiler, parses and type-checks Go code
- unused # checks for unused constants, variables, functions and types
## disabled by default
- asasalint # checks for pass []any as any in variadic func(...any)
- asciicheck # checks that your code does not contain non-ASCII identifiers
- bidichk # checks for dangerous unicode character sequences
- bodyclose # checks whether HTTP response body is closed successfully
Expand All @@ -128,41 +107,28 @@ linters:
- execinquery # checks query string in Query function which reads your Go src files and warning it finds
- exhaustive # checks exhaustiveness of enum switch statements
- exportloopref # checks for pointers to enclosing loop variables
- forbidigo # forbids identifiers
- funlen # tool for detection of long functions
- gocheckcompilerdirectives # validates go compiler directive comments (//go:)
- gochecknoglobals # checks that no global variables exist
- gochecknoinits # checks that no init functions are present in Go code
- gocognit # computes and checks the cognitive complexity of functions
- goconst # finds repeated strings that could be replaced by a constant
- gocritic # provides diagnostics that check for bugs, performance and style issues
- gocyclo # computes and checks the cyclomatic complexity of functions
- godot # checks if comments end in a period
- goimports # in addition to fixing imports, goimports also formats your code in the same style as gofmt
- gomnd # detects magic numbers
- gomoddirectives # manages the use of 'replace', 'retract', and 'excludes' directives in go.mod
- gomodguard # allow and block lists linter for direct Go module dependencies. This is different from depguard where there are different block types for example version constraints and module recommendations
- goprintffuncname # checks that printf-like functions are named with f at the end
- gosec # inspects source code for security problems
- lll # reports long lines
- loggercheck # checks key value pairs for common logger libraries (kitlog,klog,logr,zap)
- makezero # finds slice declarations with non-zero initial length
- mirror # reports wrong mirror patterns of bytes/strings usage
- musttag # enforces field tags in (un)marshaled structs
- nakedret # finds naked returns in functions greater than a specified function length
- nestif # reports deeply nested if statements
- nilerr # finds the code that returns nil even if it checks that the error is not nil
- nilnil # checks that there is no simultaneous return of nil error and an invalid value
- noctx # finds sending http request without context.Context
- nolintlint # reports ill-formed or insufficient nolint directives
- nonamedreturns # reports all named returns
- nosprintfhostport # checks for misuse of Sprintf to construct a host with port in a URL
- predeclared # finds code that shadows one of Go's predeclared identifiers
- promlinter # checks Prometheus metrics naming via promlint
- reassign # checks that package variables are not reassigned
- revive # fast, configurable, extensible, flexible, and beautiful linter for Go, drop-in replacement of golint
- rowserrcheck # checks whether Err of rows is checked successfully
- sqlclosecheck # checks that sql.Rows and sql.Stmt are closed
- stylecheck # is a replacement for golint
- tenv # detects using os.Setenv instead of t.Setenv since Go1.17
- testableexamples # checks if examples are testable (have an expected output)
Expand All @@ -173,55 +139,28 @@ linters:
- usestdlibvars # detects the possibility to use variables/constants from the Go standard library
- wastedassign # finds wasted assignment statements
- whitespace # detects leading and trailing whitespace

## you may want to enable
#- decorder # checks declaration order and count of types, constants, variables and functions
- zerologlint # detects the wrong usage of zerolog that a user forgets to dispatch zerolog.Event
- decorder # checks declaration order and count of types, constants, variables and functions
- gci # controls golang package import order and makes it always deterministic
- ginkgolinter # [if you use ginkgo/gomega] enforces standards of using ginkgo and gomega
- interfacebloat # checks the number of methods inside an interface
- tagalign # checks that struct tags are well aligned

## disabled by default, but may be useful at some point
#- forbidigo # forbids identifiers
#- promlinter # checks Prometheus metrics naming via promlint
#- goprintffuncname # checks that printf-like functions are named with f at the end
#- revive # fast, configurable, extensible, flexible, and beautiful linter for Go, drop-in replacement of golint
#- rowserrcheck # checks whether Err of rows is checked successfully
#- sqlclosecheck # checks that sql.Rows and sql.Stmt are closed
#- gochecknoinits # checks that no init functions are present in Go code
#- exhaustruct # [highly recommend to enable] checks if all structure fields are initialized
#- gci # controls golang package import order and makes it always deterministic
#- ginkgolinter # [if you use ginkgo/gomega] enforces standards of using ginkgo and gomega
#- godox # detects FIXME, TODO and other comment keywords
#- goheader # checks is file header matches to pattern
#- interfacebloat # checks the number of methods inside an interface
#- ireturn # accept interfaces, return concrete types
#- prealloc # [premature optimization, but can be used in some cases] finds slice declarations that could potentially be preallocated
#- tagalign # checks that struct tags are well aligned
#- varnamelen # [great idea, but too many false positives] checks that the length of a variable's name matches its scope
#- wrapcheck # checks that errors returned from external packages are wrapped
#- zerologlint # detects the wrong usage of zerolog that a user forgets to dispatch zerolog.Event

## disabled
#- containedctx # detects struct contained context.Context field
#- contextcheck # [too many false positives] checks the function whether use a non-inherited context
#- depguard # [replaced by gomodguard] checks if package imports are in a list of acceptable packages
#- dogsled # checks assignments with too many blank identifiers (e.g. x, _, _, _, := f())
#- dupword # [useless without config] checks for duplicate words in the source code
#- errchkjson # [don't see profit + I'm against of omitting errors like in the first example https://github.com/breml/errchkjson] checks types passed to the json encoding functions. Reports unsupported types and optionally reports occasions, where the check for the returned error can be omitted
#- forcetypeassert # [replaced by errcheck] finds forced type assertions
#- goerr113 # [too strict] checks the errors handling expressions
#- gofmt # [replaced by goimports] checks whether code was gofmt-ed
#- gofumpt # [replaced by goimports, gofumports is not available yet] checks whether code was gofumpt-ed
#- gosmopolitan # reports certain i18n/l10n anti-patterns in your Go codebase
#- grouper # analyzes expression groups
#- importas # enforces consistent import aliases
#- maintidx # measures the maintainability index of each function
#- misspell # [useless] finds commonly misspelled English words in comments
#- nlreturn # [too strict and mostly code is not more readable] checks for a new line before return and branch statements to increase code clarity
#- paralleltest # [too many false positives] detects missing usage of t.Parallel() method in your Go test
#- tagliatelle # checks the struct tags
#- thelper # detects golang test helpers without t.Helper() call and checks the consistency of test helpers
#- wsl # [too strict and mostly code is not more readable] whitespace linter forces you to use empty lines

## deprecated
#- deadcode # [deprecated, replaced by unused] finds unused code
#- exhaustivestruct # [deprecated, replaced by exhaustruct] checks if all struct's fields are initialized
#- golint # [deprecated, replaced by revive] golint differs from gofmt. Gofmt reformats Go source code, whereas golint prints out style mistakes
#- ifshort # [deprecated] checks that your code uses short syntax for if-statements whenever possible
#- interfacer # [deprecated] suggests narrower interface types
#- maligned # [deprecated, replaced by govet fieldalignment] detects Go structs that would take less memory if their fields were sorted
#- nosnakecase # [deprecated, replaced by revive var-naming] detects snake case of variable naming and function name
#- scopelint # [deprecated, replaced by exportloopref] checks for unpinned variables in go programs
#- structcheck # [deprecated, replaced by unused] finds unused struct fields
#- varcheck # [deprecated, replaced by unused] finds unused global variables and constants


issues:
Expand All @@ -230,6 +169,9 @@ issues:
# Default: 3
max-same-issues: 50

exclude:
- 'declaration of "(err|ctx)" shadows declaration at' # shadowing of err and ctx is acceptable

exclude-rules:
- source: "(noinspection|TODO)"
linters: [ godot ]
Expand Down
3 changes: 1 addition & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,7 @@ default: help
local/deps:
go mod tidy
go install github.com/spf13/[email protected]
go install github.com/goreleaser/goreleaser@latest
go install github.com/golangci/golangci-lint/cmd/[email protected]
go install github.com/golangci/golangci-lint/cmd/[email protected]

## Locally run the golang test.
go/test:
Expand Down
27 changes: 18 additions & 9 deletions cmd/create.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,22 +4,21 @@ import (
"errors"
"fmt"

"github.com/spf13/cobra"

"github.com/jahvon/flow/internal/common"
"github.com/jahvon/flow/internal/config"
"github.com/jahvon/flow/internal/io"
"github.com/spf13/cobra"
)

// createCmd represents the create command
// createCmd represents the create command.
var createCmd = &cobra.Command{
Use: "create",
Aliases: []string{"c"},
GroupID: CrudGroup.ID,
Short: "Create a configuration, environment, or workspace option.",
}

// createWorkspaceCmd represents the create workspace subcommand
// createWorkspaceCmd represents the create workspace subcommand.
var createWorkspaceCmd = &cobra.Command{
Use: "workspace <name>",
Aliases: []string{"w"},
Expand All @@ -31,7 +30,7 @@ var createWorkspaceCmd = &cobra.Command{

rootCfg := config.LoadConfig()
if rootCfg == nil {
log.Fatal().Msg("failed to load config")
log.Panic().Msg("failed to load config")
}

name := args[0]
Expand All @@ -45,7 +44,7 @@ var createWorkspaceCmd = &cobra.Command{
name := args[0]
rootCfg := config.LoadConfig()
if rootCfg == nil {
log.Fatal().Msg("failed to load config")
log.Panic().Msg("failed to load config")
}

path := cmd.Flag("path").Value.String()
Expand All @@ -65,11 +64,21 @@ var createWorkspaceCmd = &cobra.Command{
}

func init() {
createWorkspaceCmd.Flags().StringP("path", "p", common.ConfigDirPath(), "Path to the directory where the workspace should be created")
createWorkspaceCmd.Flags().StringP(
"path",
"p",
common.ConfigDirPath(),
"Path to the directory where the workspace should be created",
)
if err := createWorkspaceCmd.MarkFlagDirname("path"); err != nil {
log.Fatal().Err(err).Msg("Failed to mark path flag as a directory")
log.Panic().Err(err).Msg("Failed to mark path flag as a directory")
}
createWorkspaceCmd.Flags().BoolP("set", "s", false, "Set the newly created workspace as the current workspace")
createWorkspaceCmd.Flags().BoolP(
"set",
"s",
false,
"Set the newly created workspace as the current workspace",
)

createCmd.AddCommand(createWorkspaceCmd)
rootCmd.AddCommand(createCmd)
Expand Down
15 changes: 7 additions & 8 deletions cmd/delete.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,33 +4,32 @@ import (
"errors"
"fmt"

"github.com/spf13/cobra"

"github.com/jahvon/flow/internal/config"
"github.com/jahvon/flow/internal/io"
"github.com/spf13/cobra"
)

// deleteCmd represents the delete command
// deleteCmd represents the delete command.
var deleteCmd = &cobra.Command{
Use: "delete",
GroupID: CrudGroup.ID,
Short: "Delete a configuration, environment, or workspace option.",
}

// deleteWorkspaceCmd represents the delete workspace subcommand
// deleteWorkspaceCmd represents the delete workspace subcommand.
var deleteWorkspaceCmd = &cobra.Command{
Use: "workspace <name>",
Short: "Delete an existing workspace.",
Long: "Delete an existing workspace. File contents will remain in the corresponding directory but the workspace will be " +
"unlinked from flow's conv. Note: You cannot delete the current workspace.",
Long: "Delete an existing workspace. File contents will remain in the corresponding directory but the " +
"workspace will be unlinked from flow's conv. Note: You cannot delete the current workspace.",
Args: func(cmd *cobra.Command, args []string) error {
if len(args) != 1 {
return errors.New("requires a name argument")
}

rootCfg := config.LoadConfig()
if rootCfg == nil {
log.Fatal().Msg("failed to load config")
log.Panic().Msg("failed to load config")
}

name := args[0]
Expand All @@ -54,7 +53,7 @@ var deleteWorkspaceCmd = &cobra.Command{

rootCfg := config.LoadConfig()
if rootCfg == nil {
log.Fatal().Msg("failed to load config")
log.Panic().Msg("failed to load config")
}

if err := config.DeleteWorkspace(rootCfg, name); err != nil {
Expand Down
Loading

0 comments on commit cd5fab7

Please sign in to comment.