Skip to content

go1.21: load rules: parse rules file: typechecker error: ...: could not import  #1349

@ldez

Description

@ldez

Hello,

I know it's a bit early but I started to work on go1.21 for golangci-lint.
golangci/golangci-lint#3922

And there is an issue with go-critic.
I run the tests of go-critic and there is the same problem:

ruleguard init error, skip ./rules.go: typechecker error: ./rules.go:6:8: could not import github.com/quasilyte/go-ruleguard/dsl (can't find import: "github.com/quasilyte/go-ruleguard/dsl")

Currently, I don't know the root cause but I want to share it with you, I think will you see the problem faster than me.

Maybe it's related to the new package initialization order, I don't know.

go test
$ go test ./...                       
go: downloading github.com/cristalhq/acmd v0.11.1
go: downloading golang.org/x/exp/typeparams v0.0.0-20230213192124-5e25df0256eb
?       github.com/go-critic/go-critic  [no test files]
?       github.com/go-critic/go-critic/checkers/analyzer        [no test files]
?       github.com/go-critic/go-critic/checkers/internal/astwalk        [no test files]
?       github.com/go-critic/go-critic/checkers/internal/linttest       [no test files]
?       github.com/go-critic/go-critic/checkers/internal/lintutil       [no test files]
?       github.com/go-critic/go-critic/checkers/rules   [no test files]
?       github.com/go-critic/go-critic/checkers/rulesdata       [no test files]
?       github.com/go-critic/go-critic/cmd/gocritic-analysis    [no test files]
?       github.com/go-critic/go-critic/cmd/makedocs     [no test files]
?       github.com/go-critic/go-critic/framework/linter [no test files]
--- FAIL: TestIntegration (11.70s)
    --- FAIL: TestIntegration/ruleguard (1.30s)
        integration.go:103: linttest.params:1: output mismatch:
              []string{
                "exit status 1",
                strings.Join({
            -           "./f1.go:8:1: ruleguard: error as an underlying type is probably ",
            -           "a mistake",
            +           "ruleguard init error, skip ./rules.go: typechecker error: ./rule",
            +           "s.go:6:8: could not import github.com/quasilyte/go-ruleguard/dsl",
            +           ` (can't find import: "github.com/quasilyte/go-ruleguard/dsl")`,
                }, ""),
                strings.Join({
                        "./f1.go:1",
            -           "2:36: ruleguard: suggestion: s1+s2",
            +           ":1: ruleguard: execution error: used Run() with an empty rule se",
            +           "t; forgot to call Load() first?",
                }, ""),
            -   `./f1.go:29:6: ruleguard: use errors.New(k()) or fmt.Errorf("%s", k()) instead`,
              }
        integration.go:104: linter output was: exit status 1
            ruleguard init error, skip ./rules.go: typechecker error: ./rules.go:6:8: could not import github.com/quasilyte/go-ruleguard/dsl (can't find import: "github.com/quasilyte/go-ruleguard/dsl")
            ./f1.go:1:1: ruleguard: execution error: used Run() with an empty rule set; forgot to call Load() first?
        integration.go:103: linttest.params:2: output mismatch:
              []string{
                "exit status 1",
                strings.Join({
            -           `./f1.go:29:6: ruleguard: use errors.New(k()) or fmt.Errorf("%s",`,
            -           " k()) instead",
            +           "ruleguard init error, skip ./rules.go: typechecker error: ./rule",
            +           "s.go:6:8: could not import github.com/quasilyte/go-ruleguard/dsl",
            +           ` (can't find import: "github.com/quasilyte/go-ruleguard/dsl")`,
                }, ""),
            +   "./f1.go:1:1: ruleguard: execution error: used Run() with an empty rule set; forgot to call Load() first?",
              }
        integration.go:104: linter output was: exit status 1
            ruleguard init error, skip ./rules.go: typechecker error: ./rules.go:6:8: could not import github.com/quasilyte/go-ruleguard/dsl (can't find import: "github.com/quasilyte/go-ruleguard/dsl")
            ./f1.go:1:1: ruleguard: execution error: used Run() with an empty rule set; forgot to call Load() first?
        integration.go:103: linttest.params:3: output mismatch:
              []string{
                "exit status 1",
                strings.Join({
            -           "./f1.go:18:2: ruleguard: may be simplified to one if",
            +           "ruleguard init error, skip ./rules.go: typechecker error: ./rule",
            +           "s.go:6:8: could not import github.com/quasilyte/go-ruleguard/dsl",
            +           ` (can't find import: "github.com/quasilyte/go-ruleguard/dsl")`,
                }, ""),
                strings.Join({
                        "./f1.go:1",
            -           "2",
                        ":1",
            -           "0",
                        ": ruleguard: ",
            -           "regexp compilation should be avoided on the hot paths",
            +           "execution error: used Run() with an empty rule set; forgot to ca",
            +           "ll Load() first?",
                }, ""),
            -   `./f1.go:29:6: ruleguard: use errors.New(k()) or fmt.Errorf("%s", k()) instead`,
              }
        integration.go:104: linter output was: exit status 1
            ruleguard init error, skip ./rules.go: typechecker error: ./rules.go:6:8: could not import github.com/quasilyte/go-ruleguard/dsl (can't find import: "github.com/quasilyte/go-ruleguard/dsl")
            ./f1.go:1:1: ruleguard: execution error: used Run() with an empty rule set; forgot to call Load() first?
        integration.go:103: linttest.params:4: output mismatch:
              []string{
                "exit status 1",
                strings.Join({
            -           "./f1.go:8:1: ruleguard: error as an underlying type is probably ",
            -           "a mistake",
            +           "ruleguard init error, skip ./rules.go: typechecker error: ./rule",
            +           "s.go:6:8: could not import github.com/quasilyte/go-ruleguard/dsl",
            +           ` (can't find import: "github.com/quasilyte/go-ruleguard/dsl")`,
                }, ""),
                strings.Join({
                        "./f1.go:1",
            -           "8:2: ruleguard: may be simplified to one if",
            +           ":1: ruleguard: execution error: used Run() with an empty rule se",
            +           "t; forgot to call Load() first?",
                }, ""),
            -   "./f1.go:12:36: ruleguard: suggestion: s1+s2",
            -   `./f1.go:29:6: ruleguard: use errors.New(k()) or fmt.Errorf("%s", k()) instead`,
              }
        integration.go:104: linter output was: exit status 1
            ruleguard init error, skip ./rules.go: typechecker error: ./rules.go:6:8: could not import github.com/quasilyte/go-ruleguard/dsl (can't find import: "github.com/quasilyte/go-ruleguard/dsl")
            ./f1.go:1:1: ruleguard: execution error: used Run() with an empty rule set; forgot to call Load() first?
    --- FAIL: TestIntegration/ruleguard-glob (0.24s)
        integration.go:103: linttest.params:1: output mismatch:
              []string{
                "exit status 1",
                strings.Join({
            -           "./file.go:20:2: ruleguard: maybe mu.RLock() was intended?",
            +           "ruleguard init error, skip rules1.go: typechecker error: rules1.",
            +           "go:5:8: could not import github.com/quasilyte/go-ruleguard/dsl (",
            +           `can't find import: "github.com/quasilyte/go-ruleguard/dsl")`,
                }, ""),
                strings.Join({
            -           "./file.go:10:16: ruleguard: suggestion: filepath.Separator",
            +           "ruleguard init error, skip rules2.go: typechecker error: rules2.",
            +           "go:5:8: could not import github.com/quasilyte/go-ruleguard/dsl (",
            +           `can't find import: "github.com/quasilyte/go-ruleguard/dsl")`,
                }, ""),
            +   "./file.go:1:1: ruleguard: execution error: used Run() with an empty rule set; forgot to call Load() first?",
              }
        integration.go:104: linter output was: exit status 1
            ruleguard init error, skip rules1.go: typechecker error: rules1.go:5:8: could not import github.com/quasilyte/go-ruleguard/dsl (can't find import: "github.com/quasilyte/go-ruleguard/dsl")
            ruleguard init error, skip rules2.go: typechecker error: rules2.go:5:8: could not import github.com/quasilyte/go-ruleguard/dsl (can't find import: "github.com/quasilyte/go-ruleguard/dsl")
            ./file.go:1:1: ruleguard: execution error: used Run() with an empty rule set; forgot to call Load() first?
    --- FAIL: TestIntegration/ruleguard-multi (0.32s)
        integration.go:103: linttest.params:1: output mismatch:
              []string{
                "exit status 1",
                strings.Join({
            -           "./file.go:20:2: ruleguard: maybe mu.RLock() was intended?",
            +           "ruleguard init error, skip rules1.go: typechecker error: rules1.",
            +           "go:5:8: could not import github.com/quasilyte/go-ruleguard/dsl (",
            +           `can't find import: "github.com/quasilyte/go-ruleguard/dsl")`,
                }, ""),
                strings.Join({
            -           "./file.go:10:16: ruleguard: suggestion: filepath.Separator",
            +           "ruleguard init error, skip rules2.go: typechecker error: rules2.",
            +           "go:5:8: could not import github.com/quasilyte/go-ruleguard/dsl (",
            +           `can't find import: "github.com/quasilyte/go-ruleguard/dsl")`,
                }, ""),
            +   "./file.go:1:1: ruleguard: execution error: used Run() with an empty rule set; forgot to call Load() first?",
              }
        integration.go:104: linter output was: exit status 1
            ruleguard init error, skip rules1.go: typechecker error: rules1.go:5:8: could not import github.com/quasilyte/go-ruleguard/dsl (can't find import: "github.com/quasilyte/go-ruleguard/dsl")
            ruleguard init error, skip rules2.go: typechecker error: rules2.go:5:8: could not import github.com/quasilyte/go-ruleguard/dsl (can't find import: "github.com/quasilyte/go-ruleguard/dsl")
            ./file.go:1:1: ruleguard: execution error: used Run() with an empty rule set; forgot to call Load() first?
FAIL
FAIL    github.com/go-critic/go-critic/checkers 16.219s
ok      github.com/go-critic/go-critic/cmd/gocritic     0.001s
ok      github.com/go-critic/go-critic/linter   0.001s
--- FAIL: TestRules (0.38s)
    analysistest.go:300: error analyzing ruleguard@_/home/ldez/sources/golangci-lint/go-critic/rulestest/testdata/checkers: load rules: parse rules file: typechecker error: ../rules.go:5:2: could not import github.com/quasilyte/go-ruleguard/dsl (can't find import: "github.com/quasilyte/go-ruleguard/dsl")
FAIL
FAIL    github.com/go-critic/go-critic/rulestest        0.382s
FAIL

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions