Skip to content

Opinionated code organization linter for Go projects.

License

Notifications You must be signed in to change notification settings

MarioCarrion/nit

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

48 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

nit

Go Report Card Circle CI coverage

nit is an opinionated Code Organization linter for Go.

It defines a collection of rules to determine how each Go file should be organized internally.

Rules

  1. imports is the first section
    • Requires parenthesized declaration,
    • One maximum, and
    • Separated in 3 blocks: standard, external and same package (local).
  2. type is the second section
    • Requires parenthesized declaration,
    • Section must be sorted: exported first, then unexported; and
    • Supports //- comment for separating groups
  3. const is the third section
    • Requires parenthesized declaration,
    • Multiple allowed, and
    • Section must be sorted: exported first, then unexported.
  4. var is the fourth section
    • Requires parenthesized declaration, and
    • Section must be sorted: exported first, then unexported.
  5. func is the fifth section
    • Must be sorted, exported first, then unexported, and
    • Supports //- comment for separating groups.
  6. func method, is the sixth section
    • Must be sorted by type, exported first, then unexported; and
    • Supports //- comment for separating groups.

Fancy State Machine explaining the rules above:

code

Installing

  • Using go (>= 1.13): go get github.com/MarioCarrion/nit/cmd/nit@v0.6.0, for installing v0.6.0 for example; see the releases for other versions.
  • Using it as a dependency with the tools.go paradigm:
// +build tools

package tools

import (
	_ "github.com/MarioCarrion/nit/cmd/nit"
)

Using

After installing you can use:

nit -pkg <base local package> $(go list ./...)

Please use nit -h for other available arguments.

Development requirements

Go >= 1.14.0