{"record":{"id":"f09b21da0c06a8c7","repo":"golangci/golangci-lint","slug":"can-t-combine-option-config-and-no-config","errorCode":null,"errorMessage":"can't combine option --config and --no-config","messagePattern":"can't combine option --config and --no-config","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/config/base_loader.go","lineNumber":85,"sourceCode":"\t}\n\n\tif configFile != \"\" {\n\t\tl.viper.SetConfigFile(configFile)\n\n\t\t// Assume YAML if the file has no extension.\n\t\tif filepath.Ext(configFile) == \"\" {\n\t\t\tl.viper.SetConfigType(\"yaml\")\n\t\t}\n\t} else {\n\t\tl.setupConfigFileSearch()\n\t}\n\n\treturn nil\n}\n\nfunc (l *BaseLoader) evaluateOptions() (string, error) {\n\tif l.opts.NoConfig && l.opts.Config != \"\" {\n\t\treturn \"\", errors.New(\"can't combine option --config and --no-config\")\n\t}\n\n\tif l.opts.NoConfig {\n\t\treturn \"\", errConfigDisabled\n\t}\n\n\tconfigFile, err := homedir.Expand(l.opts.Config)\n\tif err != nil {\n\t\treturn \"\", errors.New(\"failed to expand configuration path\")\n\t}\n\n\treturn configFile, nil\n}\n\nfunc (l *BaseLoader) setupConfigFileSearch() {\n\tl.viper.SetConfigName(\".golangci\")\n\n\tconfigSearchPaths := l.getConfigSearchPaths()","sourceCodeStart":67,"sourceCodeEnd":103,"githubUrl":"https://github.com/golangci/golangci-lint/blob/ed7a235d2d771152056fdc142a9855567c5796a9/pkg/config/base_loader.go#L67-L103","documentation":"The golangci-lint configuration loader (BaseLoader.evaluateOptions) refuses to run when both --config (or opts.Config) and --no-config (opts.NoConfig) are supplied, since they are mutually exclusive ways to control config discovery. It is a CLI/config contradiction detected before any file is read.","triggerScenarios":"Running golangci-lint with both `--config <file>` and `--no-config` flags, or programmatically calling setConfigFile after setting opts.NoConfig = true (or vice versa) before Load.","commonSituations":"Shell scripts/aliases where --no-config is baked in and a CI job appends --config; users overriding a default flag; passing both flags to `golangci-lint config` or `run` subcommands.","solutions":["Remove the --no-config flag if you want a specific config file.","Remove --config and keep --no-config if you want defaults only.","In code, ensure only one of l.opts.Config / l.opts.NoConfig is set before calling Load/setConfigFile."],"exampleFix":"// before\ngolangci-lint run --no-config --config .golangci.yml\n\n// after\ngolangci-lint run --config .golangci.yml","handlingStrategy":"validation","validationCode":"const flags = process.argv.slice(2);\nif (flags.includes('--no-config') && flags.some(f => f.startsWith('--config'))) {\n  throw new Error('Remove either --no-config or --config before running golangci-lint');\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Keep --no-config out of shared scripts/aliases; scope it to specific invocations.","Build CLI args from a single source of truth (CI config) so flags can't duplicate.","Run `golangci-lint config verify` in CI to catch config/flag conflicts early."],"tags":["cli","configuration","golangci-lint"],"backgroundTag":"conflicting-cli-flags","analyzedSha":"ed7a235d2d771152056fdc142a9855567c5796a9","analyzedAt":"2026-09-02T18:47:33.865Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}