diff options
author | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2023-06-13 18:01:23 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-06-13 18:01:23 +0200 |
commit | 60a2cdf72db31d746da21ab2e32b6c51830b5fd9 (patch) | |
tree | cbee7b1e8241ecf51f2dbbe1d74438a916aea99a /config | |
parent | e08cfc8ca0cb5b1a5872bcbed4011e6055e1ab9f (diff) |
Fix config merge regression with root slices (e.g. disableKinds)
Fixes #11089
Diffstat (limited to 'config')
-rw-r--r-- | config/allconfig/allconfig.go | 18 |
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: |