From e1909805df26755486b47d26b73bbcf9dd7c2b9b Mon Sep 17 00:00:00 2001 From: Fernandez Ludovic Date: Fri, 13 Dec 2024 15:23:51 +0100 Subject: [PATCH 1/3] importas: allow multiple empty aliases --- pkg/golinters/importas/importas.go | 14 +++++++++----- .../testdata/importas_several_empty_aliases.go | 16 ++++++++++++++++ .../testdata/importas_several_empty_aliases.yml | 9 +++++++++ 3 files changed, 34 insertions(+), 5 deletions(-) create mode 100644 pkg/golinters/importas/testdata/importas_several_empty_aliases.go create mode 100644 pkg/golinters/importas/testdata/importas_several_empty_aliases.yml diff --git a/pkg/golinters/importas/importas.go b/pkg/golinters/importas/importas.go index 45117c9a488b..be9462011109 100644 --- a/pkg/golinters/importas/importas.go +++ b/pkg/golinters/importas/importas.go @@ -51,11 +51,15 @@ func New(settings *config.ImportAsSettings) *goanalysis.Linter { uniqPackages[a.Pkg] = a } - // skip the duplication check when the alias is a regular expression replacement pattern (ie. contains `$`). - if v, ok := uniqAliases[a.Alias]; ok && !strings.Contains(a.Alias, "$") { - lintCtx.Log.Errorf("invalid configuration, multiple packages with the same alias: alias=%s packages=[%s,%s]", a.Alias, a.Pkg, v.Pkg) - } else { - uniqAliases[a.Alias] = a + // Ignore duplication for empty aliases. + if a.Alias != "" { + // skip the duplication check when the alias is a regular expression replacement pattern (ie. contains `$`). + v, ok := uniqAliases[a.Alias] + if ok && !strings.Contains(a.Alias, "$") { + lintCtx.Log.Errorf("invalid configuration, multiple packages with the same alias: alias=%s packages=[%s,%s]", a.Alias, a.Pkg, v.Pkg) + } else { + uniqAliases[a.Alias] = a + } } err := analyzer.Flags.Set("alias", fmt.Sprintf("%s:%s", a.Pkg, a.Alias)) diff --git a/pkg/golinters/importas/testdata/importas_several_empty_aliases.go b/pkg/golinters/importas/testdata/importas_several_empty_aliases.go new file mode 100644 index 000000000000..0253f38deb43 --- /dev/null +++ b/pkg/golinters/importas/testdata/importas_several_empty_aliases.go @@ -0,0 +1,16 @@ +//golangcitest:args -Eimportas +//golangcitest:config_path testdata/importas_several_empty_aliases.yml +//golangcitest:expected_exitcode 0 +package testdata + +import ( + "fmt" + "math" + "os" +) + +func _() { + fmt.Println("a") + fmt.Fprint(os.Stderr, "b") + println(math.MaxInt) +} diff --git a/pkg/golinters/importas/testdata/importas_several_empty_aliases.yml b/pkg/golinters/importas/testdata/importas_several_empty_aliases.yml new file mode 100644 index 000000000000..1f6b9a77e7f4 --- /dev/null +++ b/pkg/golinters/importas/testdata/importas_several_empty_aliases.yml @@ -0,0 +1,9 @@ +linters-settings: + importas: + alias: + - pkg: fmt + alias: '' + - pkg: os + alias: '' + - pkg: math + alias: '' From 588df60075da9d872a63ce1f1449fc36802e84df Mon Sep 17 00:00:00 2001 From: Fernandez Ludovic Date: Fri, 13 Dec 2024 15:46:30 +0100 Subject: [PATCH 2/3] review: simplify --- pkg/golinters/importas/importas.go | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/pkg/golinters/importas/importas.go b/pkg/golinters/importas/importas.go index be9462011109..c118ccb5a961 100644 --- a/pkg/golinters/importas/importas.go +++ b/pkg/golinters/importas/importas.go @@ -51,15 +51,12 @@ func New(settings *config.ImportAsSettings) *goanalysis.Linter { uniqPackages[a.Pkg] = a } - // Ignore duplication for empty aliases. - if a.Alias != "" { - // skip the duplication check when the alias is a regular expression replacement pattern (ie. contains `$`). - v, ok := uniqAliases[a.Alias] - if ok && !strings.Contains(a.Alias, "$") { - lintCtx.Log.Errorf("invalid configuration, multiple packages with the same alias: alias=%s packages=[%s,%s]", a.Alias, a.Pkg, v.Pkg) - } else { - uniqAliases[a.Alias] = a - } + // skip the duplication check when the alias is a regular expression replacement pattern (ie. contains `$`). + v, ok := uniqAliases[a.Alias] + if ok && !strings.Contains(a.Alias, "$") { + lintCtx.Log.Errorf("invalid configuration, multiple packages with the same alias: alias=%s packages=[%s,%s]", a.Alias, a.Pkg, v.Pkg) + } else if a.Alias != "" { // Ignore duplication for empty aliases. + uniqAliases[a.Alias] = a } err := analyzer.Flags.Set("alias", fmt.Sprintf("%s:%s", a.Pkg, a.Alias)) From 569025bcfbd0b2e44dd636438e27751bb884676c Mon Sep 17 00:00:00 2001 From: Fernandez Ludovic Date: Fri, 13 Dec 2024 16:00:45 +0100 Subject: [PATCH 3/3] review: simplify --- pkg/golinters/importas/importas.go | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/pkg/golinters/importas/importas.go b/pkg/golinters/importas/importas.go index c118ccb5a961..b7c6c35aeaa6 100644 --- a/pkg/golinters/importas/importas.go +++ b/pkg/golinters/importas/importas.go @@ -51,11 +51,13 @@ func New(settings *config.ImportAsSettings) *goanalysis.Linter { uniqPackages[a.Pkg] = a } - // skip the duplication check when the alias is a regular expression replacement pattern (ie. contains `$`). + // Skips the duplication check when: + // - the alias is empty. + // - the alias is a regular expression replacement pattern (ie. contains `$`). v, ok := uniqAliases[a.Alias] - if ok && !strings.Contains(a.Alias, "$") { + if ok && a.Alias != "" && !strings.Contains(a.Alias, "$") { lintCtx.Log.Errorf("invalid configuration, multiple packages with the same alias: alias=%s packages=[%s,%s]", a.Alias, a.Pkg, v.Pkg) - } else if a.Alias != "" { // Ignore duplication for empty aliases. + } else { uniqAliases[a.Alias] = a }