74 lines
1.8 KiB
Go
74 lines
1.8 KiB
Go
package commands
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
|
|
"github.com/spf13/cobra"
|
|
"github.com/spf13/pflag"
|
|
"github.com/spf13/viper"
|
|
|
|
"github.com/golangci/golangci-lint/pkg/config"
|
|
"github.com/golangci/golangci-lint/pkg/exitcodes"
|
|
"github.com/golangci/golangci-lint/pkg/fsutils"
|
|
)
|
|
|
|
func (e *Executor) initConfig() {
|
|
cmd := &cobra.Command{
|
|
Use: "config",
|
|
Short: "Config file information",
|
|
Args: cobra.NoArgs,
|
|
RunE: func(cmd *cobra.Command, _ []string) error {
|
|
return cmd.Help()
|
|
},
|
|
}
|
|
e.rootCmd.AddCommand(cmd)
|
|
|
|
pathCmd := &cobra.Command{
|
|
Use: "path",
|
|
Short: "Print used config path",
|
|
Args: cobra.NoArgs,
|
|
ValidArgsFunction: cobra.NoFileCompletions,
|
|
Run: e.executePathCmd,
|
|
}
|
|
|
|
fs := pathCmd.Flags()
|
|
fs.SortFlags = false // sort them as they are defined here
|
|
|
|
initConfigFileFlagSet(fs, &e.cfg.Run)
|
|
|
|
cmd.AddCommand(pathCmd)
|
|
}
|
|
|
|
// getUsedConfig returns the resolved path to the golangci config file, or the empty string
|
|
// if no configuration could be found.
|
|
func (e *Executor) getUsedConfig() string {
|
|
usedConfigFile := viper.ConfigFileUsed()
|
|
if usedConfigFile == "" {
|
|
return ""
|
|
}
|
|
|
|
prettyUsedConfigFile, err := fsutils.ShortestRelPath(usedConfigFile, "")
|
|
if err != nil {
|
|
e.log.Warnf("Can't pretty print config file path: %s", err)
|
|
return usedConfigFile
|
|
}
|
|
|
|
return prettyUsedConfigFile
|
|
}
|
|
|
|
func (e *Executor) executePathCmd(_ *cobra.Command, _ []string) {
|
|
usedConfigFile := e.getUsedConfig()
|
|
if usedConfigFile == "" {
|
|
e.log.Warnf("No config file detected")
|
|
os.Exit(exitcodes.NoConfigFileDetected)
|
|
}
|
|
|
|
fmt.Println(usedConfigFile)
|
|
}
|
|
|
|
func initConfigFileFlagSet(fs *pflag.FlagSet, cfg *config.Run) {
|
|
fs.StringVarP(&cfg.Config, "config", "c", "", wh("Read config from file path `PATH`"))
|
|
fs.BoolVar(&cfg.NoConfig, "no-config", false, wh("Don't read config file"))
|
|
}
|