Awesome
wsl - Whitespace Linter
wsl
is a linter that enforces a very non scientific vision of how to make
code more readable by enforcing empty lines at the right places.
This linter is aggressive and a lot of projects I've tested it on have failed miserably. For this linter to be useful at all I want to be open to new ideas, configurations and discussions! Also note that some of the warnings might be bugs or unintentional false positives so I would love an issue to fix, discuss, change or make something configurable!
Installation
# Latest release
go install github.com/bombsimon/wsl/v4/cmd/wsl@latest
# Main branch
go install github.com/bombsimon/wsl/v4/cmd/wsl@master
Usage
Note: This linter provides a fixer that can fix most issues with the
--fix
flag. However, currentlygolangci-lint
does not support suggested fixes so the--fix
flag ingolangci-lint
will not work.
wsl
uses the analysis
package meaning it will operate on package level with the default analysis flags
and way of working.
wsl --help
wsl [flags] </path/to/package/...>
wsl --allow-cuddle-declarations --fix ./...
wsl
is also integrated in golangci-lint
golangci-lint run --no-config --disable-all --enable wsl
Issues and configuration
The linter suppers a few ways to configure it to satisfy more than one kind of
code style. These settings could be set either with flags or with YAML
configuration if used via golangci-lint
.
The supported configuration can be found in the documentation.
Below are the available checklist for any hit from wsl
. If you do not see any,
feel free to raise an issue.
Note: this linter doesn't take in consideration the issues that will be fixed with
go fmt -s
so ensure that the code is properly formatted before use.
- Anonymous switch statements should never be cuddled
- Append only allowed to cuddle with appended value
- Assignments should only be cuddled with other assignments
- Block should not end with a whitespace (or comment)
- Block should not start with a whitespace
- Case block should end with newline at this size
- Branch statements should not be cuddled if block has more than two lines
- Declarations should never be cuddled
- Defer statements should only be cuddled with expressions on same variable
- Expressions should not be cuddled with blocks
- Expressions should not be cuddled with declarations or returns
- For statement without condition should never be cuddled
- For statements should only be cuddled with assignments used in the iteration
- Go statements can only invoke functions assigned on line above
- If statements should only be cuddled with assignments
- If statements should only be cuddled with assignments used in the if statement itself
- If statements that check an error must be cuddled with the statement that assigned the error
- Only cuddled expressions if assigning variable or using from line above
- Only one cuddle assignment allowed before defer statement
- Only one cuddle assignment allowed before for statement
- Only one cuddle assignment allowed before go statement
- Only one cuddle assignment allowed before if statement
- Only one cuddle assignment allowed before range statement
- Only one cuddle assignment allowed before switch statement
- Only one cuddle assignment allowed before type switch statement
- Ranges should only be cuddled with assignments used in the iteration
- Return statements should not be cuddled if block has more than two lines
- Short declarations should cuddle only with other short declarations
- Switch statements should only be cuddled with variables switched
- Type switch statements should only be cuddled with variables switched