Skip to content

Commit

Permalink
Allow repeated importas aliases
Browse files Browse the repository at this point in the history
The standalone importas takes arguments in the form "{package}:{alias}"
and stores them in a map in which package is the key. The intent is to
describe the one alias that is appropriate for a unique package path.

We cannot use the package path as a map key due to Viper's dot notation.
Instead use a list with package/alias pairs.
  • Loading branch information
cbandy committed May 8, 2021
1 parent 07a0568 commit eb65ac6
Show file tree
Hide file tree
Showing 7 changed files with 32 additions and 10 deletions.
9 changes: 6 additions & 3 deletions .golangci.example.yml
Expand Up @@ -410,13 +410,16 @@ linters-settings:
# List of aliases
alias:
# using `servingv1` alias for `knative.dev/serving/pkg/apis/serving/v1` package
servingv1: knative.dev/serving/pkg/apis/serving/v1
- pkg: knative.dev/serving/pkg/apis/serving/v1
alias: servingv1
# using `autoscalingv1alpha1` alias for `knative.dev/serving/pkg/apis/autoscaling/v1alpha1` package
autoscalingv1alpha1: knative.dev/serving/pkg/apis/autoscaling/v1alpha1
- pkg: knative.dev/serving/pkg/apis/autoscaling/v1alpha1
alias: autoscalingv1alpha1
# You can specify the package path by regular expression,
# and alias by regular expression expansion syntax like below.
# see https://github.com/julz/importas#use-regular-expression for details
"$1$2": 'knative.dev/serving/pkg/apis/(\w+)/(v[\w\d]+)'
- pkg: knative.dev/serving/pkg/apis/(\w+)/(v[\w\d]+)
alias: $1$2

lll:
# max line length, lines longer will be reported. Default is 120.
Expand Down
7 changes: 6 additions & 1 deletion pkg/config/linters_settings.go
Expand Up @@ -312,10 +312,15 @@ type IfshortSettings struct {
}

type ImportAsSettings struct {
Alias map[string]string
Alias []ImportAsAlias
NoUnaliased bool `mapstructure:"no-unaliased"`
}

type ImportAsAlias struct {
Pkg string
Alias string
}

type LllSettings struct {
LineLength int `mapstructure:"line-length"`
TabWidth int `mapstructure:"tab-width"`
Expand Down
4 changes: 2 additions & 2 deletions pkg/golinters/importas.go
Expand Up @@ -33,8 +33,8 @@ func NewImportAs(settings *config.ImportAsSettings) *goanalysis.Linter {
lintCtx.Log.Errorf("failed to parse configuration: %v", err)
}

for alias, pkg := range settings.Alias {
err := analyzer.Flags.Set("alias", fmt.Sprintf("%s:%s", pkg, alias))
for i := range settings.Alias {
err := analyzer.Flags.Set("alias", fmt.Sprintf("%s:%s", settings.Alias[i].Pkg, settings.Alias[i].Alias))
if err != nil {
lintCtx.Log.Errorf("failed to parse configuration: %v", err)
}
Expand Down
8 changes: 6 additions & 2 deletions test/testdata/configs/importas.yml
@@ -1,5 +1,9 @@
linters-settings:
importas:
alias:
fff: fmt
std_os: os
- pkg: fmt
alias: fff
- pkg: os
alias: std_os
- pkg: github.com/pkg/errors
alias: pkgerr
8 changes: 6 additions & 2 deletions test/testdata/configs/importas_strict.yml
Expand Up @@ -2,5 +2,9 @@ linters-settings:
importas:
no-unaliased: true
alias:
fff: fmt
std_os: os
- pkg: fmt
alias: fff
- pkg: os
alias: std_os
- pkg: github.com/pkg/errors
alias: pkgerr
3 changes: 3 additions & 0 deletions test/testdata/importas.go
Expand Up @@ -6,10 +6,13 @@ import (
wrong_alias "fmt" // ERROR `import "fmt" imported as "wrong_alias" but must be "fff" according to config`
"os"
wrong_alias_again "os" // ERROR `import "os" imported as "wrong_alias_again" but must be "std_os" according to config`

wrong "github.com/pkg/errors" // ERROR `import "github.com/pkg/errors" imported as "wrong" but must be "pkgerr" according to config`
)

func ImportAsWrongAlias() {
wrong_alias.Println("foo")
wrong_alias_again.Stdout.WriteString("bar")
os.Stdout.WriteString("test")
_ = wrong.New("baz")
}
3 changes: 3 additions & 0 deletions test/testdata/importas_strict.go
Expand Up @@ -6,10 +6,13 @@ import (
wrong_alias "fmt" // ERROR `import "fmt" imported as "wrong_alias" but must be "fff" according to config`
"os" // ERROR `import "os" imported without alias but must be with alias "std_os" according to config`
wrong_alias_again "os" // ERROR `import "os" imported as "wrong_alias_again" but must be "std_os" according to config`

wrong "github.com/pkg/errors" // ERROR `import "github.com/pkg/errors" imported as "wrong" but must be "pkgerr" according to config`
)

func ImportAsStrictWrongAlias() {
wrong_alias.Println("foo")
wrong_alias_again.Stdout.WriteString("bar")
os.Stdout.WriteString("test")
_ = wrong.New("baz")
}

0 comments on commit eb65ac6

Please sign in to comment.