Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cannot easily disable typecheck #2912

Closed
4 tasks done
Callisto13 opened this issue Jun 8, 2022 · 10 comments
Closed
4 tasks done

Cannot easily disable typecheck #2912

Callisto13 opened this issue Jun 8, 2022 · 10 comments
Labels
duplicate This issue or pull request already exists question Further information is requested

Comments

@Callisto13
Copy link

Callisto13 commented Jun 8, 2022

Welcome

  • Yes, I'm using a binary release within 2 latest major releases. Only such installations are supported.
  • Yes, I've searched similar issues on GitHub and didn't find any.
  • Yes, I've included all information below (version, config, etc).
  • Yes, I've tried with the standalone linter if available. (https://golangci-lint.run/usage/linters/)

Description of the problem

While waiting for full 1.18 support, I attempted to disable the typecheck linter which was giving me grief.

I added it to this section of my config:

linters:
  enable-all: true
  disable:
  - typecheck
  - etc...

But it had no effect.

According to the docs this should be possible.

In the end I did the following, which worked:

issues:
  exclude-rules:
  - path: /
    linters:
    - typecheck

Version of golangci-lint

$ golangci-lint --version
golangci-lint has version 1.46.2 built from a3336890 on 2022-05-17T11:31:29Z

Configuration file

$ cat .golangci.yml
run:
    go: "1.18"
    timeout: 10m
    tests: false
    allow-parallel-runners: true
    skip-dirs:
      - "./*/mock"

linters-settings:
  funlen:
    lines: 110
    statements: 60
  staticcheck:
    go: "1.18"
  stylecheck:
    go: "1.18"
  cyclop:
    max-complexity: 15
    skip-tests: true
  gosec:
    exclude-generated: true
  lll:
    line-length: 120
  misspell:
    locale: GB
  goimports:
    local-prefixes: github.com/weaveworks/flintlock
  govet:
    check-shadowing: true
  nolintlint:
    allow-leading-space: false
    allow-unused: false
    require-explanation: true
    require-specific: false
  varnamelen:
    ignore-names:
    - err
    - wg
    - fs
    - id
    - vm
    - ns
    - ip

issues:
  max-same-issues: 0
  max-issues-per-linter: 0
  exclude-rules:
  - text: "should not use dot imports|don't use an underscore in package name"
    linters:
    - golint
  - text: "local replacement are not allowed: github.com/weaveworks/flintlock/"
    linters:
    - gomoddirectives
  - text: "sig: func github.com/weaveworks/flintlock/"
    linters:
    - wrapcheck
  - source: "https://"
    linters:
    - lll
  - path: pkg/defaults/
    linters:
    - lll
  - path: _test\.go
    linters:
    - goerr113
    - gocyclo
    - errcheck
    - gosec
    - dupl
    - funlen
    - scopelint
    - testpackage
  - path: internal/version/
    linters:
    - gochecknoglobals
  - path: internal/command/
    linters:
    - exhaustivestruct
    - lll
    - wrapcheck
  - source: "// .* #\\d+"
    linters:
    - godox
  - path: test/e2e/
    linters:
    - goerr113
    - gomnd

linters:
  enable-all: true
  disable:
  - exhaustivestruct
  - golint
  - interfacer
  - ireturn
  - maligned
  - nilnil
  - scopelint
  - tagliatelle
  - gomoddirectives
  - typecheck

Go environment

$ go version && go env
go version go1.18.3 linux/amd64
GO111MODULE=""
GOARCH="amd64"
GOBIN=""
GOCACHE="/home/claudia/.cache/go-build"
GOENV="/home/claudia/.config/go/env"
GOEXE=""
GOEXPERIMENT=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOINSECURE=""
GOMODCACHE="/home/claudia/go/pkg/mod"
GONOPROXY=""
GONOSUMDB=""
GOOS="linux"
GOPATH="/home/claudia/go"
GOPRIVATE=""
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/usr/local/go"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64"
GOVCS=""
GOVERSION="go1.18.3"
GCCGO="gccgo"
GOAMD64="v1"
AR="ar"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD="/home/claudia/workspace/flintlock/go.mod"
GOWORK=""
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build1873054285=/tmp/go-build -gno-record-gcc-switches"

Verbose output of running

$ golangci-lint cache clean
$ golangci-lint run -v
INFO [config_reader] Config search paths: [./ /home/claudia/workspace/flintlock /home/claudia/workspace /home/claudia /home /]
INFO [config_reader] Used config file .golangci.yml
INFO [lintersdb] Active 73 linters: [asciicheck bidichk bodyclose contextcheck cyclop deadcode depguard dogsled dupl durationcheck errcheck errname errorlint exhaustive exportloopref forbidigo forcetypeassert funlen gci gochecknoglobals gochecknoinits gocognit goconst gocritic gocyclo godot godox goerr113 gofmt gofumpt goheader goimports gomnd gomodguard goprintffuncname gosec gosimple govet ifshort importas ineffassign lll makezero misspell nakedret nestif nilerr nlreturn noctx nolintlint paralleltest prealloc predeclared promlinter revive rowserrcheck sqlclosecheck staticcheck structcheck stylecheck tenv testpackage thelper tparallel unconvert unparam unused varcheck varnamelen wastedassign whitespace wrapcheck wsl]
INFO [loader] Go packages loading at mode 575 (deps|exports_file|imports|compiled_files|files|name|types_sizes) took 271.667642ms
INFO [runner/filename_unadjuster] Pre-built 0 adjustments in 5.868339ms
INFO [linters context] importas settings found, but no aliases listed. List aliases under alias: key.
INFO [linters context/goanalysis] analyzers took 2.284062685s with top 10 stages: the_only_name: 72.982384ms, gocritic: 34.429007ms, godox: 28.403245ms, ineffassign: 23.718449ms, directives: 20.996316ms, buildtag: 20.314691ms, testpackage: 20.134428ms, errorlint: 20.052842ms, dupl: 19.97993ms, ST1012: 17.987856ms
INFO [runner] Issues before processing: 11228, after processing: 51
INFO [runner] Processors filtering stat (out/in): max_per_file_from_linter: 51/51, filename_unadjuster: 11228/11228, path_prettifier: 11228/11228, diff: 51/51, sort_results: 51/51, autogenerated_exclude: 11228/11228, identifier_marker: 11228/11228, max_same_issues: 51/51, max_from_linter: 51/51, source_code: 51/51, path_shortener: 51/51, severity-rules: 51/51, skip_files: 11228/11228, skip_dirs: 11228/11228, nolint: 11220/11220, uniq_by_line: 51/11220, path_prefixer: 51/51, cgo: 11228/11228, exclude: 11228/11228, exclude-rules: 11220/11228
INFO [runner] processing took 420.037627ms with stages: exclude-rules: 286.927974ms, identifier_marker: 120.318589ms, nolint: 4.713532ms, path_prettifier: 3.85884ms, skip_dirs: 1.113003ms, cgo: 811.036µs, uniq_by_line: 762.391µs, autogenerated_exclude: 714.042µs, filename_unadjuster: 660.512µs, source_code: 141.818µs, path_shortener: 9.496µs, max_per_file_from_linter: 3.414µs, max_same_issues: 1.146µs, skip_files: 414ns, diff: 344ns, sort_results: 305ns, severity-rules: 253ns, max_from_linter: 234ns, exclude: 205ns, path_prefixer: 79ns
INFO [runner] linters took 4.236279675s with stages: goanalysis_metalinter: 3.816156997s
INFO File cache stats: 14 entries of total size 57.8KiB
INFO Memory: 47 samples, avg is 336.5MB, max is 409.5MB
INFO Execution took 4.518303126s
hack/tools/bin/golangci-lint run -v --fast=false 
core/models/vmid.go:4:2: could not import encoding (-: could not load export data: cannot import "encoding" (unstable iexport format version 2, just rebuild compiler and std library), export data is newer version - update tool) (typecheck)
	"encoding"
	^
internal/command/flags/urfave.go:9:29: undeclared name: `cli` (typecheck)
type WithFlagsFunc func() []cli.Flag
                            ^
internal/command/flags/urfave.go:11:43: undeclared name: `cli` (typecheck)
func CLIFlags(options ...WithFlagsFunc) []cli.Flag {
                                          ^
internal/command/flags/urfave.go:62:37: undeclared name: `cli` (typecheck)
func ParseFlags(cfg *config.Config) cli.BeforeFunc {
                                    ^
internal/command/flags/urfave.go:12:13: undeclared name: `cli` (typecheck)
	flags := []cli.Flag{}
	           ^
internal/command/flags/urfave.go:22:18: undeclared name: `cli` (typecheck)
	return func() []cli.Flag {
	                ^
internal/command/flags/urfave.go:23:12: undeclared name: `cli` (typecheck)
		return []cli.Flag{
		         ^
internal/command/flags/urfave.go:24:5: undeclared name: `cli` (typecheck)
			&cli.StringFlag{
			 ^
internal/command/flags/urfave.go:29:5: undeclared name: `cli` (typecheck)
			&cli.StringFlag{
			 ^
internal/command/flags/urfave.go:39:18: undeclared name: `cli` (typecheck)
	return func() []cli.Flag {
	                ^
internal/command/flags/urfave.go:40:12: undeclared name: `cli` (typecheck)
		return []cli.Flag{
		         ^
internal/command/flags/urfave.go:41:5: undeclared name: `cli` (typecheck)
			&cli.StringFlag{
			 ^
internal/command/flags/urfave.go:51:18: undeclared name: `cli` (typecheck)
	return func() []cli.Flag {
	                ^
internal/command/flags/urfave.go:52:12: undeclared name: `cli` (typecheck)
		return []cli.Flag{
		         ^
internal/command/flags/urfave.go:53:5: undeclared name: `cli` (typecheck)
			&cli.StringFlag{
			 ^
internal/command/flags/urfave.go:63:19: undeclared name: `cli` (typecheck)
	return func(ctx *cli.Context) error {
	                 ^
internal/command/flags/urfave.go:4:2: "github.com/urfave/cli/v2" imported but not used (typecheck)
	"github.com/urfave/cli/v2"
	^
core/application/commands.go:10:2: could not import github.com/weaveworks-liquidmetal/flintlock/client/cloudinit (-: could not load export data: cannot import "github.com/weaveworks-liquidmetal/flintlock/client/cloudinit" (unstable iexport format version 2, just rebuild compiler and std library), export data is newer version - update tool) (typecheck)
	"github.com/weaveworks-liquidmetal/flintlock/client/cloudinit"
	^
core/application/commands.go:11:2: could not import github.com/weaveworks-liquidmetal/flintlock/client/cloudinit/instance (-: could not load export data: cannot import "github.com/weaveworks-liquidmetal/flintlock/client/cloudinit/instance" (unstable iexport format version 2, just rebuild compiler and std library), export data is newer version - update tool) (typecheck)
	"github.com/weaveworks-liquidmetal/flintlock/client/cloudinit/instance"
	^
infrastructure/containerd/client_interface.go:57:16: undeclared name: `tasks` (typecheck)
	TaskService() tasks.TasksClient
	              ^
infrastructure/containerd/repo.go:268:73: undeclared name: `digest` (typecheck)
func (r *containerdRepo) getWithDigest(ctx context.Context, metadigest *digest.Digest) (*models.MicroVM, error) {
                                                                        ^
infrastructure/containerd/repo.go:288:5: undeclared name: `digest` (typecheck)
) (*digest.Digest, error) {
    ^
infrastructure/containerd/repo.go:337:96: undeclared name: `digest` (typecheck)
func (r *containerdRepo) findAllDigestForSpec(ctx context.Context, name, namespace string) ([]*digest.Digest, error) {
                                                                                               ^
infrastructure/containerd/repo.go:146:25: undeclared name: `digest` (typecheck)
	digests := map[string]*digest.Digest{}
	                       ^
infrastructure/containerd/repo.go:289:14: undeclared name: `digest` (typecheck)
	var digest *digest.Digest
	            ^
infrastructure/containerd/repo.go:343:16: undeclared name: `digest` (typecheck)
	digests := []*digest.Digest{}
	              ^
infrastructure/containerd/client_interface.go:7:2: "github.com/containerd/containerd/api/services/tasks/v1" imported but not used (typecheck)
	"github.com/containerd/containerd/api/services/tasks/v1"
	^
infrastructure/containerd/repo.go:15:2: "github.com/opencontainers/go-digest" imported but not used (typecheck)
	"github.com/opencontainers/go-digest"
	^
infrastructure/controllers/microvm_controller.go:11:2: "github.com/weaveworks-liquidmetal/flintlock/api/events" imported but not used (typecheck)
	"github.com/weaveworks-liquidmetal/flintlock/api/events"
	^
infrastructure/firecracker/config.go:8:12: could not import github.com/weaveworks-liquidmetal/flintlock/client/cloudinit/network (-: could not load export data: cannot import "github.com/weaveworks-liquidmetal/flintlock/client/cloudinit/network" (unstable iexport format version 2, just rebuild compiler and std library), export data is newer version - update tool) (typecheck)
	cinetwork "github.com/weaveworks-liquidmetal/flintlock/client/cloudinit/network"
	          ^
infrastructure/firecracker/config.go:211:11: undeclared name: `firecracker` (typecheck)
			DHCP4: firecracker.Bool(true),
			       ^
infrastructure/firecracker/config.go:212:11: undeclared name: `firecracker` (typecheck)
			DHCP6: firecracker.Bool(true),
			       ^
infrastructure/firecracker/config.go:230:13: undeclared name: `yaml` (typecheck)
	nd, err := yaml.Marshal(network)
	           ^
infrastructure/firecracker/config.go:270:14: undeclared name: `firecracker` (typecheck)
	eth.DHCP4 = firecracker.Bool(false)
	            ^
infrastructure/firecracker/config.go:271:14: undeclared name: `firecracker` (typecheck)
	eth.DHCP6 = firecracker.Bool(false)
	            ^
infrastructure/firecracker/create.go:54:9: undeclared name: `firecracker` (typecheck)
	cmd := firecracker.VMCommandBuilder{}.
	       ^
infrastructure/firecracker/config.go:7:2: "github.com/firecracker-microvm/firecracker-go-sdk" imported but not used (typecheck)
	"github.com/firecracker-microvm/firecracker-go-sdk"
	^
infrastructure/firecracker/config.go:12:2: "gopkg.in/yaml.v3" imported but not used (typecheck)
	"gopkg.in/yaml.v3"
	^
infrastructure/firecracker/create.go:10:2: "github.com/firecracker-microvm/firecracker-go-sdk" imported but not used (typecheck)
	"github.com/firecracker-microvm/firecracker-go-sdk"
	^
infrastructure/grpc/convert.go:7:2: could not import github.com/weaveworks-liquidmetal/flintlock/client/cloudinit/instance (-: could not load export data: cannot import "github.com/weaveworks-liquidmetal/flintlock/client/cloudinit/instance" (unstable iexport format version 2, just rebuild compiler and std library), export data is newer version - update tool) (typecheck)
	"github.com/weaveworks-liquidmetal/flintlock/client/cloudinit/instance"
	^
infrastructure/grpc/server.go:56:16: undeclared name: `validator` (typecheck)
	var valErrors validator.ValidationErrors
	              ^
infrastructure/grpc/server.go:8:2: "github.com/go-playground/validator/v10" imported but not used (typecheck)
	"github.com/go-playground/validator/v10"
	^
internal/command/metrics/main.go:9:29: undeclared name: `cli` (typecheck)
func NewApp(out io.Writer) *cli.App {
                            ^
internal/command/metrics/main.go:23:20: undeclared name: `cli` (typecheck)
func commands() []*cli.Command {
                   ^
internal/command/metrics/serve.go:20:22: undeclared name: `cli` (typecheck)
func serveCommand() *cli.Command {
                     ^
internal/command/metrics/main.go:10:9: undeclared name: `cli` (typecheck)
	app := cli.NewApp()
	       ^
internal/command/metrics/main.go:24:12: undeclared name: `cli` (typecheck)
	return []*cli.Command{
	          ^
internal/command/metrics/serve.go:23:10: undeclared name: `cli` (typecheck)
	return &cli.Command{
	        ^
internal/command/metrics/serve.go:33:19: undeclared name: `cli` (typecheck)
		Action: func(c *cli.Context) error {
		                ^
internal/command/metrics/main.go:6:2: "github.com/urfave/cli/v2" imported but not used (typecheck)
	"github.com/urfave/cli/v2"
	^
internal/command/metrics/serve.go:10:2: "github.com/urfave/cli/v2" imported but not used (typecheck)
	"github.com/urfave/cli/v2"
	^

Code example or link to a public repository

https://github.com/weaveworks-liquidmetal/flintlock

@Callisto13 Callisto13 added the bug Something isn't working label Jun 8, 2022
@boring-cyborg
Copy link

boring-cyborg bot commented Jun 8, 2022

Hey, thank you for opening your first Issue ! 🙂 If you would like to contribute we have a guide for contributors.

@ldez
Copy link
Member

ldez commented Jun 8, 2022

Hello,

typecheck is not a real linter it's just a way to parse/display "compilation" and linters errors (linter reports are not errors), typecheck cannot be disabled because of that.
All the linters can trigger a typecheck issue, but some linters require that the code compile, those linters will produce more typecheck issues.
A linter that reports typecheck issue is not able to report other issues for a package because that kind of issue doesn't allow it to perform its own analysis.

@ldez ldez closed this as completed Jun 8, 2022
@ldez ldez added duplicate This issue or pull request already exists question Further information is requested and removed bug Something isn't working labels Jun 8, 2022
@Thynix
Copy link

Thynix commented Nov 22, 2022

May I propose that this be considered as an area for documentation improvement?

Given that typecheck is an internal mechanism for reporting build and linter errors, I found it very confusing that in all the documentation I checked, it's presented as though it's a linter. It's listed in linters enabled by default, and in run configuration.

Would y'all accept a PR to remove it from those lists, and possibly add a section about how typecheck is not actually a linter? The output format including (typecheck) could be misleading in suggesting that it is.

@prochac
Copy link

prochac commented Nov 28, 2022

@ldez since you closed the issue and marked as duplicate, where I can find the active issue? The problem doesn't seem to be solved to me. And this is the issue I found by googling. Would be nice to know what to follow and what link to add to our tweak in .golangci.yaml

@ldez
Copy link
Member

ldez commented Nov 28, 2022

where I can find the active issue?

There is no active issue because it's not a bug: compilation errors are not bugs.

#2912 (comment)

@wafaking

This comment was marked as off-topic.

@seanlangbrown
Copy link

Hi folks, @ldez, where can we request improvements to the documentation like @Thynix suggested above? #2912 (comment)

@bombsimon
Copy link
Member

bombsimon commented Jan 5, 2023

Hi folks, @ldez, where can we request improvements to the documentation like @Thynix suggested above? #2912 (comment)

I opened #3460

@adamwoolhether
Copy link

adamwoolhether commented Jan 24, 2023

so, how to disable it? Anyone know?

results in tons of false positive for embedded objects.

@ldez
Copy link
Member

ldez commented Jan 24, 2023

It's not possible to disable the type checking.
If you are using CGO you have to check your OS dependencies.

#2912 (comment)

@golangci golangci locked as too heated and limited conversation to collaborators Jan 24, 2023
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
duplicate This issue or pull request already exists question Further information is requested
Projects
None yet
Development

No branches or pull requests

8 participants