summaryrefslogtreecommitdiffstats
path: root/config
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2023-06-13 18:01:23 +0200
committerGitHub <noreply@github.com>2023-06-13 18:01:23 +0200
commit60a2cdf72db31d746da21ab2e32b6c51830b5fd9 (patch)
treecbee7b1e8241ecf51f2dbbe1d74438a916aea99a /config
parente08cfc8ca0cb5b1a5872bcbed4011e6055e1ab9f (diff)
Fix config merge regression with root slices (e.g. disableKinds)
Fixes #11089
Diffstat (limited to 'config')
-rw-r--r--config/allconfig/allconfig.go18
1 files changed, 18 insertions, 0 deletions
diff --git a/config/allconfig/allconfig.go b/config/allconfig/allconfig.go
index ade9607dd..08792d870 100644
--- a/config/allconfig/allconfig.go
+++ b/config/allconfig/allconfig.go
@@ -191,6 +191,22 @@ type configCompiler interface {
func (c Config) cloneForLang() *Config {
x := c
x.C = nil
+ copyStringSlice := func(in []string) []string {
+ if in == nil {
+ return nil
+ }
+ out := make([]string, len(in))
+ copy(out, in)
+ return out
+ }
+
+ // Copy all the slices to avoid sharing.
+ x.DisableKinds = copyStringSlice(x.DisableKinds)
+ x.DisableLanguages = copyStringSlice(x.DisableLanguages)
+ x.MainSections = copyStringSlice(x.MainSections)
+ x.IgnoreErrors = copyStringSlice(x.IgnoreErrors)
+ x.IgnoreFiles = copyStringSlice(x.IgnoreFiles)
+ x.Theme = copyStringSlice(x.Theme)
// Collapse all static dirs to one.
x.StaticDir = x.staticDirs()
@@ -787,12 +803,14 @@ func fromLoadConfigResult(fs afero.Fs, logger loggers.Logger, res config.LoadCon
// Create a copy of the complete config and replace the root keys with the language specific ones.
clone := all.cloneForLang()
+
if err := decodeConfigFromParams(fs, bcfg, mergedConfig, clone, differentRootKeys); err != nil {
return nil, fmt.Errorf("failed to decode config for language %q: %w", k, err)
}
if err := clone.CompileConfig(logger); err != nil {
return nil, err
}
+
langConfigMap[k] = clone
case maps.ParamsMergeStrategy:
default: