Skip to content

Commit 09fd610

Browse files
merge and now running pylint fetching the .rc file
1 parent 5e80896 commit 09fd610

File tree

7 files changed

+257
-181
lines changed

7 files changed

+257
-181
lines changed

cmd/init.go

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -308,6 +308,19 @@ func createToolFileConfigurations(tool tools.Tool, patternConfiguration []domain
308308
}
309309
}
310310
fmt.Println("PMD configuration created based on Codacy settings")
311+
case PyLint:
312+
if len(patternConfiguration) > 0 {
313+
err := createPylintConfigFile(patternConfiguration, toolsConfigDir)
314+
if err != nil {
315+
return fmt.Errorf("failed to create Pylint config: %v", err)
316+
}
317+
} else {
318+
err := createDefaultPylintConfigFile(toolsConfigDir)
319+
if err != nil {
320+
return fmt.Errorf("failed to create default Pylint config: %v", err)
321+
}
322+
}
323+
fmt.Println("Pylint configuration created based on Codacy settings")
311324
}
312325
return nil
313326
}
@@ -320,11 +333,17 @@ func createPMDConfigFile(config []domain.PatternConfiguration, toolsConfigDir st
320333
func createDefaultPMDConfigFile(toolsConfigDir string) error {
321334
content := tools.CreatePmdConfig([]domain.PatternConfiguration{})
322335
return os.WriteFile(filepath.Join(toolsConfigDir, "pmd-ruleset.xml"), []byte(content), utils.DefaultFilePerms)
336+
337+
}
338+
339+
func createPylintConfigFile(config []domain.PatternConfiguration, toolsConfigDir string) error {
340+
pylintConfigurationString := pylint.GeneratePylintRC(config)
341+
return os.WriteFile(filepath.Join(toolsConfigDir, "pylint.rc"), []byte(pylintConfigurationString), utils.DefaultFilePerms)
323342
}
324343

325-
func createDefaultPylintConfigFile() error {
344+
func createDefaultPylintConfigFile(toolsConfigDir string) error {
326345
pylintConfigurationString := pylint.GeneratePylintRCDefault()
327-
return os.WriteFile(".pylintrc", []byte(pylintConfigurationString), 0644)
346+
return os.WriteFile(filepath.Join(toolsConfigDir, "pylint.rc"), []byte(pylintConfigurationString), utils.DefaultFilePerms)
328347
}
329348

330349
// createTrivyConfigFile creates a trivy.yaml configuration file based on the API configuration

tools/pylint/pylintConfigParser.go

Lines changed: 35 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
package pylint
22

33
import (
4-
"codacy/cli-v2/tools/types"
4+
"codacy/cli-v2/domain"
55
"fmt"
66
"log"
77
"strings"
88
)
99

1010
// getDefaultParametersForPatterns returns a map of pattern IDs to their default parameters
11-
func getDefaultParametersForPatterns(patternIDs []string) map[string][]types.ParameterConfiguration {
12-
defaultParams := make(map[string][]types.ParameterConfiguration)
11+
func getDefaultParametersForPatterns(patternIDs []string) map[string][]domain.ParameterConfiguration {
12+
defaultParams := make(map[string][]domain.ParameterConfiguration)
1313

1414
for _, patternID := range patternIDs {
1515
if params, exists := PatternDefaultParameters[patternID]; exists {
@@ -39,7 +39,7 @@ func writeEnabledPatterns(rcContent *strings.Builder, patternIDs []string) {
3939
}
4040

4141
// writeParametersBySection writes the parameters grouped by section to the RC content
42-
func writeParametersBySection(rcContent *strings.Builder, groupedParams map[string][]types.PylintPatternParameterConfiguration) {
42+
func writeParametersBySection(rcContent *strings.Builder, groupedParams map[string][]domain.ParameterConfiguration) {
4343
for sectionName, params := range groupedParams {
4444
rcContent.WriteString(fmt.Sprintf("[%s]\n", sectionName))
4545
for _, param := range params {
@@ -50,30 +50,41 @@ func writeParametersBySection(rcContent *strings.Builder, groupedParams map[stri
5050
}
5151

5252
// groupParametersByPatterns groups parameters from patterns into sections
53-
func groupParametersByPatterns(patterns []types.PatternConfiguration) map[string][]types.PylintPatternParameterConfiguration {
54-
groupedParams := make(map[string][]types.PylintPatternParameterConfiguration)
53+
func groupParametersByPatterns(patterns []domain.PatternConfiguration) map[string][]domain.ParameterConfiguration {
54+
groupedParams := make(map[string][]domain.ParameterConfiguration)
5555

5656
for _, pattern := range patterns {
57-
patternID := extractPatternId(pattern.InternalId)
57+
patternID := extractPatternId(pattern.PatternDefinition.Id)
5858
params := pattern.Parameters
5959

6060
// If no parameters, check defaults
6161
if len(params) == 0 {
62-
params = PatternDefaultParameters[patternID]
62+
if defaultParams, exists := PatternDefaultParameters[patternID]; exists {
63+
params = defaultParams
64+
}
6365
}
6466

67+
// Add parameters to their respective sections
6568
for _, param := range params {
6669
sectionName := GetParameterSection(param.Name)
6770
if sectionName == nil {
6871
log.Printf("Parameter %s has no section name", param.Name)
6972
continue
7073
}
7174

72-
groupedParams[*sectionName] = append(groupedParams[*sectionName], types.PylintPatternParameterConfiguration{
73-
Name: param.Name,
74-
Value: param.Value,
75-
SectionName: sectionName,
76-
})
75+
// Check if parameter already exists in section
76+
exists := false
77+
for _, existingParam := range groupedParams[*sectionName] {
78+
if existingParam.Name == param.Name {
79+
exists = true
80+
break
81+
}
82+
}
83+
84+
// Only add if not already present
85+
if !exists {
86+
groupedParams[*sectionName] = append(groupedParams[*sectionName], param)
87+
}
7788
}
7889
}
7990

@@ -90,10 +101,12 @@ func GeneratePylintRCDefault() string {
90101
defaultParams := getDefaultParametersForPatterns(DefaultPatterns)
91102

92103
// Convert default parameters to pattern configurations
93-
var patterns []types.PatternConfiguration
104+
var patterns []domain.PatternConfiguration
94105
for patternID, params := range defaultParams {
95-
patterns = append(patterns, types.PatternConfiguration{
96-
InternalId: "PyLintPython3_" + patternID,
106+
patterns = append(patterns, domain.PatternConfiguration{
107+
PatternDefinition: domain.PatternDefinition{
108+
Id: "PyLintPython3_" + patternID,
109+
},
97110
Parameters: params,
98111
})
99112
}
@@ -106,24 +119,23 @@ func GeneratePylintRCDefault() string {
106119
}
107120

108121
// GeneratePylintRC generates a pylintrc file content with the specified patterns enabled
109-
func GeneratePylintRC(config types.ToolConfiguration) string {
122+
func GeneratePylintRC(config []domain.PatternConfiguration) string {
110123
var rcContent strings.Builder
111124

112125
writePylintRCHeader(&rcContent)
113126

114127
// Collect enabled pattern IDs
115128
var enabledPatternsIds []string
116-
if config.IsEnabled {
117-
for _, pattern := range config.Patterns {
118-
patternID := extractPatternId(pattern.InternalId)
119-
enabledPatternsIds = append(enabledPatternsIds, patternID)
120-
}
129+
130+
for _, pattern := range config {
131+
patternID := extractPatternId(pattern.PatternDefinition.Id)
132+
enabledPatternsIds = append(enabledPatternsIds, patternID)
121133
}
122134

123135
writeEnabledPatterns(&rcContent, enabledPatternsIds)
124136

125137
// Group and write parameters
126-
groupedParams := groupParametersByPatterns(config.Patterns)
138+
groupedParams := groupParametersByPatterns(config)
127139
writeParametersBySection(&rcContent, groupedParams)
128140

129141
return rcContent.String()

tools/pylint/pylintDefaults.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package pylint
22

3-
import "codacy/cli-v2/tools/types"
3+
import "codacy/cli-v2/domain"
44

55
// PatternDefaultParameters contains the default parameters for Pylint patterns
6-
var PatternDefaultParameters = map[string][]types.ParameterConfiguration{
6+
var PatternDefaultParameters = map[string][]domain.ParameterConfiguration{
77
"R0914": {
88
{
99
Name: "max-locals",

0 commit comments

Comments
 (0)