Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
add golangcilint
  • Loading branch information
alessio-perugini committed Sep 25, 2023
commit 6ac283ac3c134c6f40a40d523e0def8e5d53d266
6 changes: 4 additions & 2 deletions .github/workflows/check-go-task.yml
Original file line number Diff line number Diff line change
Expand Up @@ -146,8 +146,10 @@ jobs:
repo-token: ${{ secrets.GITHUB_TOKEN }}
version: 3.x

- name: Install golint
run: go install golang.org/x/lint/golint@latest
- name: golangci-lint
uses: golangci/golangci-lint-action@v3
with:
version: v1.54

- name: Check style
env:
Expand Down
121 changes: 121 additions & 0 deletions .golangci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
run:
timeout: 10m
go: '1.21'
tests: true

linters:
# Disable all linters.
disable-all: true
# Enable specific linter
enable:
#- errcheck
- errorlint
- exportloopref
- gofmt
- goimports
- gosimple
- govet
- revive
- gosec
- misspell
- staticcheck
- typecheck
- unconvert
- ineffassign
- tenv
# Nice to have
#- thelper
#- depguard
#We have to dig deeper
#- gocritic

linters-settings:
revive:
confidence: 0.8
rules:
#- name: error-return
#- name: unused-parameter
#- name: var-naming
- name: blank-imports
- name: context-as-argument
- name: context-keys-type
- name: dot-imports
- name: empty-block
- name: error-naming
- name: error-strings
- name: errorf
- name: exported
- name: increment-decrement
- name: indent-error-flow
- name: package-comments
- name: range
- name: receiver-naming
- name: redefines-builtin-id
- name: superfluous-else
- name: time-naming
- name: unexported-return
- name: unreachable-code
- name: var-declaration
- name: defer
- name: atomic
- name: waitgroup-by-value

errorlint:
# Check for plain error comparisons.
comparison: true

# We might evalute to allow the asserts and errofs in the future
# Do not check for plain type assertions and type switches.
asserts: false
# Do not check whether fmt.Errorf uses the %w verb for formatting errors.
errorf: false

issues:
# Fix found issues (if it's supported by the linter).
fix: true
# List of regexps of issue texts to exclude.
#
# But independently of this option we use default exclude patterns,
# it can be disabled by `exclude-use-default: false`.
# To list all excluded by default patterns execute `golangci-lint run --help`
#
# Default: https://golangci-lint.run/usage/false-positives/#default-exclusions
exclude-rules:
# Exclude some linters from running on tests files.
- path: _test\.go
linters: [gosec, errcheck]
# G401: Use of weak cryptographic primitive
- linters: [gosec]
text: "G401"
# G501: Blocklisted import crypto/md5: weak cryptographic primitive
- linters: [gosec]
text: "G501"
# G112: Potential Slowloris Attack because ReadHeaderTimeout is not configured in the http.Server
- linters: [gosec]
path: internal/integrationtest/
text: "G112"
# G204: Subprocess launched with a potential tainted input or cmd arguments
- linters: [gosec]
path: executils/process.go
text: "G204"
# SA1019: req.GetQuery is deprecated: Marked as deprecated in cc/arduino/cli/commands/v1/lib.proto.
- linters: [staticcheck]
path: commands/lib/search.go
text: "SA1019"

# Ignore revive emptyblock
- linters: [revive]
path: arduino/libraries/loader.go
text: "empty-block"
- linters: [revive]
path: arduino/serialutils/serialutils.go
text: "empty-block"
- linters: [revive]
path: arduino/resources/download.go
text: "empty-block"
- linters: [revive]
path: arduino/builder/internal/progress/progress_test.go
text: "empty-block"
- linters: [revive]
path: internal/algorithms/channels.go
text: "empty-block"
6 changes: 2 additions & 4 deletions Taskfile.yml
Original file line number Diff line number Diff line change
Expand Up @@ -81,13 +81,11 @@ tasks:
cmds:
- |
if ! which golint &>/dev/null; then
echo "golint not installed or not in PATH. Please install: https://github.com/golang/lint#installation"
echo "golangci-lint not installed or not in PATH. Please install: https://golangci-lint.run/usage/install/"
exit 1
fi
- |
golint \
{{default "-min_confidence 0.8 -set_exit_status" .GO_LINT_FLAGS}} \
{{default .DEFAULT_GO_PACKAGES .GO_PACKAGES}}
golangci-lint run

# Source: https://github.com/arduino/tooling-project-assets/blob/main/workflow-templates/assets/test-go-task/Taskfile.yml
go:test:
Expand Down