func processConfig()

in clang/config.go [13:57]


func processConfig(c thirdpartyscan.Context) (string, error) {
	var excludeRules []string
	var includeRules []string

	yaml := c.QodanaYamlConfig()
	var checks string
	utils.Bootstrap(yaml.Bootstrap, c.ProjectDir())
	if yaml.Version != "" || len(yaml.Includes) > 0 || len(yaml.Excludes) > 0 {
		fmt.Println("Found qodana.yaml. Note that only bootstrap command and inspection names from include and exclude sections are supported.")
		for _, include := range yaml.Includes {
			if strings.HasPrefix(strings.TrimSpace(include.Name), "clion-") {
				continue
			}
			if strings.ContainsAny(include.Name, "\"") {
				log.Warnf("Skipping include rule with invalid characters: %s", include.Name)
				continue
			}
			includeRules = append(includeRules, include.Name)
		}
		for _, exclude := range yaml.Excludes {
			if strings.ContainsAny(exclude.Name, "\"") {
				log.Warnf("Skipping exclude rule with invalid characters: %s", exclude.Name)
				continue
			}
			excludeRules = append(excludeRules, exclude.Name)
		}
	}
	plusChecks := strings.Join(includeRules, ",")
	for i, minusCheck := range excludeRules {
		excludeRules[i] = "-" + minusCheck
	}
	minusChecks := strings.Join(excludeRules, ",")
	if plusChecks != "" && minusChecks != "" {
		checks = fmt.Sprintf("--checks=%s,%s", plusChecks, minusChecks)
	} else if plusChecks != "" {
		checks = fmt.Sprintf("--checks=%s", plusChecks)
	} else if minusChecks != "" {
		checks = fmt.Sprintf("--checks=*,%s", minusChecks)
	} else {
		// Default to all checks when no configuration is provided
		// This is needed because recent clang-tidy versions enable no checks by default
		checks = "--checks=*"
	}
	return checks, nil
}