207 Commits

Author SHA1 Message Date
Denis Isaev
39f46be460 Fix staticcheck panic on packages that do not compile
The bug was introduced in golangci-lint when migrating staticcheck to go/packages.
Also, thanks to pkg.IllTyped we can analyze as max as we can by
staticcheck.

Relates: #418, #369, #429, #489
2019-04-21 11:48:33 +03:00
Denis Isaev
ec5bf9b67b Fix linting of goyacc files
Skip yacctab, yaccpar and NONE files.

Relates: #467, #468
2019-04-20 22:30:48 +03:00
Denis Isaev
ed0b551070 Fix linting of preprocessed files
Preprocessed files like .qtpl.go quicktemplate Go files can have
//line directives. They map to a source .qtpl file.
This commit fixes linting of such files:
1. don't fail on AST cache loading
2. output Go filename not .qtpl or similar

Also, here we update golint to the upstream version.

Relates: #316, #466, #467, #468
2019-04-20 21:50:26 +03:00
Aofei Sheng
cc84f896b6 Correct import path of module sourcegraph/go-diff 2019-04-20 13:12:28 +03:00
John.Koepi
de1d1ad903 make use of LoadAllSyntax compatible with the latest x/tools version 2019-04-02 09:56:13 +03:00
Denis Isaev
396a04630d dev: improve memory tracking 2019-03-31 22:33:18 +03:00
Denis Isaev
f516771a92 Fix #415: sort linters list in help commands 2019-03-18 08:46:13 +03:00
Denis Isaev
8c1237b667 Use the newest go vet
The newest go vet based on go/analysis
2019-03-17 23:12:44 +03:00
Denis Isaev
7289a90245 modify goanalysis 2019-03-17 23:12:44 +03:00
Denis Isaev
926e99aed0 copy go/analysis internal/checker into the project as is
use commit f0bfdbff1f9c986484a9f02fc198b1efcfe76ebe
2019-03-17 23:12:44 +03:00
Rodrigo Brito
099f2ae41a Include log level option 2019-03-17 23:06:27 +03:00
Ben Paxton
f13d8387d3 fix help generation; update README 2019-03-17 15:27:45 +03:00
Ben Paxton
c41b1e2034 Add --color flag to force colored output on/off 2019-03-17 15:27:45 +03:00
Denis Isaev
3d2dfac47e Support excluding issues by source line regexp
See issues.exclude-rules[i].source.
Also introduced file data and file lines cache.
2019-03-17 15:17:29 +03:00
Trevor Pounds
7514bf8239 Fix AST cache key consistency.
Ensures the AST cache always consistently loads/stores
by using the normalized file path as the key.
2019-03-05 21:59:44 +03:00
Denis Isaev
96af958205 fix #383: eval symlinks in AST cache 2019-02-18 00:21:49 +03:00
Denis Isaev
307c287356 Fix #388: include staticcheck check name into a message 2019-02-17 23:50:11 +03:00
Denis Isaev
ebadb7a679 Fix #384: support ignore-words option for misspell 2019-02-17 23:47:29 +03:00
Denis Isaev
d437ac8629 Implement auto-fixing for gofmt,goimports,misspell
Also, add more identifier marking patterns.
2019-02-17 20:31:31 +03:00
Aleksandr Razumov
e672537942 remove obvious TODO about concurrent exclude rule processing 2019-02-17 18:40:22 +03:00
Aleksandr Razumov
30bfd60b2b improve tests for exclude rules 2019-02-17 18:40:22 +03:00
Aleksandr Razumov
edd055f862 config: add validation for exclude rules 2019-02-17 18:40:22 +03:00
Aleksandr Razumov
a3a04552bb add support for exclude rules 2019-02-17 18:40:22 +03:00
Denis Isaev
7c49721144
update gochecknoglobals
Apply
abbdf6ec0a
2019-02-11 09:49:05 +03:00
Elliot Shepherd
186fe37bf8 add code-climate output format
Just the minimum of the format, to support GitLab CI Code Quality - https://docs.gitlab.com/ee/user/project/merge_requests/code_quality.html
2019-02-11 14:26:26 +08:00
Denis Isaev
c1085ef5a2
Relates #381, #367: cleanup docs and warn if unparam algo was configured 2019-02-11 08:56:49 +03:00
Jonathan Chappelow
01fb8231f9 unparam: update unparam, and go mod vendor
This updates the unparam linter to the current version that has fewer
false positives. The go.{mod,sum} files and the vendor folder are
updated as follows:

export GO111MODULE=on
go get -u mvdan.cc/unparam
go mod tidy
go mod vendor

The unparam callgraph algorithm is no longer selectable. Ref:
https://github.com/mvdan/unparam/commit/e6a6d1c5
This is the reason for removing the c.CallgraphAlgorithm(us.Algo) line
from pkg/golinters/unparam.go.
2019-02-11 13:48:53 +08:00
Denis Isaev
3e9b681cf0 fix #370: fix go-critic configuration broken in v1.13 2019-01-26 18:35:45 +03:00
Joshua Rubin
aa814eb78e add support for searching for errcheck exclude file
Signed-off-by: Joshua Rubin <joshua@rubixconsulting.com>
2019-01-20 23:19:45 +03:00
Denis Isaev
f6ce931fcf fix #355: don't merge megacheck on linters cmd 2019-01-20 22:52:36 +03:00
Denis Isaev
2216387fa7 speedup typecheck on large project with compilation errors 2019-01-20 22:14:27 +03:00
Denis Isaev
87aae77943 Update gocritic
Fix #324, relates #314

1. Update gocritic to the latest version
2. Use proper gocritic checkers repo, old repo was archived
3. Get enabled by default gocritic checks in sync with go-critic: don't
enable performance, experimental and opinionated checks by default
4. Support of `enabled-tags` options for gocritic
5. Enable almost all gocritic checks for the project
6. Make rich debugging for gocritic
7. Meticulously validate gocritic checks config
2019-01-09 09:51:48 +03:00
Denis Isaev
7705f82591 Update megacheck to the latest version
Also do following improvements:
  - show proper sublinter name for megacheck sublinters
  - refactor and make more simple and robust megacheck
  merging/optimizing
  - improve handling of unknown linter names in //nolint directives
  - minimize diff of our megacheck version from the upstream,
  https://github.com/golang/go/issues/29612 blocks usage of the upstream
  version
  - support the new `stylecheck` linter
  - improve tests coverage for megacheck and nolint related cases
  - update and use upstream versions of unparam and interfacer instead of forked
  ones
  - don't use golangci/tools repo anymore
  - fix newly found issues after updating linters

Also should be noted that megacheck works much faster and consumes less
memory in the newest release, therefore golangci-lint works noticeably
faster and consumes less memory for large repos.

Relates: #314
2019-01-08 21:16:15 +03:00
David López
d9a1bdb831 gocritic: fix code to pass newly added gocritic checks
Fix code to pass newly added gocritic checks, mainly pointer receivers and import shadows
2019-01-08 09:59:24 +03:00
David López
0192cb3955 gocritic: update default checks list
Update gocritic default checks list, add the current gocritic stable checks list
2019-01-08 09:59:24 +03:00
Denis Isaev
609de3254c Fix #331: fix errcheck "ignore" config directive.
Make tests for "ignore" and "exclude" directives.
Mark all hidden command-line options as deprecated.
2018-12-23 12:33:41 +03:00
Denis Isaev
21c2590ba8
Fix #318: better validate linters and help commands 2018-12-22 15:55:53 +03:00
Denis Isaev
a4a7100011 Fix #263: update goimports
The new version of goimports works 100x faster
with go modules. Also it has some new features:

$ git cherry -v 6c7e314b6563 92cdcd90bf52 | fgrep imports
+ 5bbcdc15656ef390fab5dd6e8daf95354f7171e3 imports: redesign fixImports
+ ee45598d2ff288037f53f9e13ae0b1a6e2165ad5 imports: create named imports for name/path mismatches (again)
+ 4c53570e0460bc32468f75bf9dd71c018d03bfa9 imports: ignore globals in different packages
+ 1d424dbce8dd500e9e449fd3ff9d0668c09e2ae1 imports: clean up customization seam
+ 6a3e9aa2ab7749d72d1006ee484271b4a11f96c2 imports: fix renamed sibling imports
+ 5f4a60f04f23ac48e0665f257413ae3eacf339be imports: fix renamed sibling imports more
+ bbccd8cae4a9a47e0f978e03ff4b5df88a9fde1e imports: use go/packages, support modules
+ d4971274fe382404aee0e8c163af974f2bf738e6 imports: don't remove imports that conflict with globals
2018-12-22 15:50:16 +03:00
David López
37e6995b45 lintpack/gocritic: update lintpack & gocritic versions
update lintpack & gocritic versions to support all the new gocritic checks
2018-12-22 15:34:16 +03:00
David Golub
7063a9d870 Fix errors when specifying absolute path 2018-12-22 13:44:30 +03:00
Denis Isaev
99329fb637
dev: remove extra logging in skip dirs processor 2018-12-22 13:44:16 +03:00
Denis Isaev
09c65fcf42 rework modules download mode option 2018-12-22 13:37:17 +03:00
Nicolae Vartolomei
b693037af0 Allow configure module download mode 2018-12-22 13:37:17 +03:00
Denis Isaev
7dfb9cff3d rework skip dir algorithm 2018-12-22 12:24:43 +03:00
Sean Chittenden
441bdb33d1 Fix the skip-dirs option.
Prior to this change the SkipDir runner was not skipping files such as
`foo/bar/baz.go` with a `skip-dir` entry of `foo/bar` when the `run`
command was invoked with an argument of `foo/...`.  This is both a
surprising and problematic behavior change.

The pathology was:

1. `shouldPassIssue()` was receiving an input like `foo/bar/baz.go`
2. `shouldPassIssue()` would call `p.getLongestArgRelativeIssuePath()`
   which was returning `bar`, not `foo/bar` as expected.
3. The reason for this was because inside of
   `getLongestArgRelativeIssuePath()` it was trimming the prefix that
   matched the path prefix (e.g. `foo/`).

If you have the file structure:

  - foo/bar/baz.go
  - bur/bar/baz.go

There is no way to isolate `foo/bar` from `bur/baz` without strictly
controlling both your `skip-dirs` configuration and the arguments to
`run`.

The rest of the logic to skip files that don't match `run`'s argument
is valid, however the regexp should be evaluated based on the
`filepath.Dir()` of the input (e.g. `foo/bar`) and not the truncated
version of the issue's filepath.

Fixes: #301
2018-12-22 12:24:43 +03:00
Denis Isaev
4be4794406 don't stop megacheck on main packages
even if the main package does not compile, analyze a program by megacheck
2018-11-24 19:39:15 +03:00
Denis Isaev
255a39bcb1 fix #302: fix concurrent astcache access 2018-11-24 09:09:31 +03:00
Denis Isaev
dba3907ff3 improve typecheck errors parsing 2018-11-23 18:40:25 +03:00
Denis Isaev
55a18ae18a
don't make typecheck issues without file/line info 2018-11-18 16:45:06 +03:00
Denis Isaev
7278b7ae8a
setup typecheck error file if it's empty 2018-11-18 15:50:15 +03:00