Skip to content

Commit 0ac7f98

Browse files
andrzej-janczakfranciscoovazevedo
authored andcommitted
Pluto 1423 refactor (#154)
* Refactor: Centralize tool configuration file names into constants - Introduced a new constants package to store tool configuration file names, reducing duplication across the codebase. - Updated references in the analyze and config setup files to use the new constants for improved maintainability. - Adjusted tests to align with the new constants structure, ensuring consistency in tool configuration handling. * fix test
1 parent 409883e commit 0ac7f98

File tree

5 files changed

+82
-70
lines changed

5 files changed

+82
-70
lines changed

cmd/analyze.go

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"codacy/cli-v2/cmd/cmdutils"
55
"codacy/cli-v2/cmd/configsetup"
66
"codacy/cli-v2/config"
7+
"codacy/cli-v2/constants"
78
"codacy/cli-v2/domain"
89
"codacy/cli-v2/plugins"
910
"codacy/cli-v2/tools"
@@ -41,22 +42,10 @@ type LanguagesConfig struct {
4142
} `yaml:"tools" json:"tools"`
4243
}
4344

44-
// toolConfigFileName maps tool names to their configuration filenames
45-
var toolConfigFileName = map[string]string{
46-
"eslint": "eslint.config.mjs",
47-
"trivy": "trivy.yaml",
48-
"pmd": "ruleset.xml",
49-
"pylint": "pylint.rc",
50-
"dartanalyzer": "analysis_options.yaml",
51-
"semgrep": "semgrep.yaml",
52-
"revive": "revive.toml",
53-
"lizard": "lizard.yaml",
54-
}
55-
5645
// LoadLanguageConfig loads the language configuration from the file
5746
func LoadLanguageConfig() (*LanguagesConfig, error) {
5847
// First, try to load the YAML config
59-
yamlPath := filepath.Join(config.Config.ToolsConfigDirectory(), "languages-config.yaml")
48+
yamlPath := filepath.Join(config.Config.ToolsConfigDirectory(), constants.LanguagesConfigFileName)
6049

6150
// Check if the YAML file exists
6251
if _, err := os.Stat(yamlPath); err == nil {
@@ -293,7 +282,7 @@ func validateToolName(toolName string) error {
293282
}
294283

295284
func checkIfConfigExistsAndIsNeeded(toolName string, cliLocalMode bool) error {
296-
configFileName := toolConfigFileName[toolName]
285+
configFileName := constants.ToolConfigFileNames[toolName]
297286
if configFileName == "" {
298287
// Tool doesn't use config file
299288
return nil

cmd/analyze_integration_test.go

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"testing"
88

99
"codacy/cli-v2/config"
10+
"codacy/cli-v2/constants"
1011
"codacy/cli-v2/domain"
1112

1213
"github.com/stretchr/testify/assert"
@@ -103,28 +104,28 @@ func TestCheckIfConfigExistsAndIsNeededBehavior(t *testing.T) {
103104
// TestToolConfigFileNameMapCompleteness ensures all expected tools have config mappings
104105
func TestToolConfigFileNameMapCompleteness(t *testing.T) {
105106
expectedTools := map[string]string{
106-
"eslint": "eslint.config.mjs",
107-
"trivy": "trivy.yaml",
108-
"pmd": "ruleset.xml",
109-
"pylint": "pylint.rc",
110-
"dartanalyzer": "analysis_options.yaml",
111-
"semgrep": "semgrep.yaml",
112-
"revive": "revive.toml",
113-
"lizard": "lizard.yaml",
107+
"eslint": constants.ESLintConfigFileName,
108+
"trivy": constants.TrivyConfigFileName,
109+
"pmd": constants.PMDConfigFileName,
110+
"pylint": constants.PylintConfigFileName,
111+
"dartanalyzer": constants.DartAnalyzerConfigFileName,
112+
"semgrep": constants.SemgrepConfigFileName,
113+
"revive": constants.ReviveConfigFileName,
114+
"lizard": constants.LizardConfigFileName,
114115
}
115116

116117
t.Run("all_expected_tools_present", func(t *testing.T) {
117118
for toolName, expectedFileName := range expectedTools {
118-
actualFileName, exists := toolConfigFileName[toolName]
119-
assert.True(t, exists, "Tool %s should exist in toolConfigFileName map", toolName)
119+
actualFileName, exists := constants.ToolConfigFileNames[toolName]
120+
assert.True(t, exists, "Tool %s should exist in constants.ToolConfigFileNames map", toolName)
120121
assert.Equal(t, expectedFileName, actualFileName, "Config filename for %s should match expected", toolName)
121122
}
122123
})
123124

124125
t.Run("no_unexpected_tools", func(t *testing.T) {
125-
for toolName := range toolConfigFileName {
126+
for toolName := range constants.ToolConfigFileNames {
126127
_, expected := expectedTools[toolName]
127-
assert.True(t, expected, "Unexpected tool %s found in toolConfigFileName map", toolName)
128+
assert.True(t, expected, "Unexpected tool %s found in constants.ToolConfigFileNames map", toolName)
128129
}
129130
})
130131

@@ -139,7 +140,7 @@ func TestToolConfigFileNameMapCompleteness(t *testing.T) {
139140
".toml": true,
140141
}
141142

142-
for toolName, fileName := range toolConfigFileName {
143+
for toolName, fileName := range constants.ToolConfigFileNames {
143144
ext := filepath.Ext(fileName)
144145
assert.True(t, validExtensions[ext], "Tool %s has config file %s with unexpected extension %s", toolName, fileName, ext)
145146
}

cmd/analyze_test.go

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
package cmd
22

33
import (
4-
"codacy/cli-v2/plugins"
4+
"codacy/cli-v2/config"
5+
"codacy/cli-v2/constants"
6+
"codacy/cli-v2/domain"
57
"os"
68
"path/filepath"
79
"testing"
810

9-
"codacy/cli-v2/config"
10-
"codacy/cli-v2/domain"
11+
"codacy/cli-v2/plugins"
1112

1213
"github.com/stretchr/testify/assert"
1314
"github.com/stretchr/testify/require"
@@ -342,13 +343,13 @@ func TestCheckIfConfigExistsAndIsNeeded(t *testing.T) {
342343
config.Config = *config.NewConfigType(tmpDir, tmpDir, tmpDir)
343344

344345
// Create config file if needed - using the same path logic as the function under test
345-
if tt.configFileExists && toolConfigFileName[tt.toolName] != "" {
346+
if tt.configFileExists && constants.ToolConfigFileNames[tt.toolName] != "" {
346347
// Use config.Config.ToolsConfigDirectory() to get the exact same path the function will use
347348
toolsConfigDir := config.Config.ToolsConfigDirectory()
348349
err := os.MkdirAll(toolsConfigDir, 0755)
349350
require.NoError(t, err)
350351

351-
configPath := filepath.Join(toolsConfigDir, toolConfigFileName[tt.toolName])
352+
configPath := filepath.Join(toolsConfigDir, constants.ToolConfigFileNames[tt.toolName])
352353
err = os.WriteFile(configPath, []byte("test config"), 0644)
353354
require.NoError(t, err)
354355

@@ -366,9 +367,9 @@ func TestCheckIfConfigExistsAndIsNeeded(t *testing.T) {
366367
err = checkIfConfigExistsAndIsNeeded(tt.toolName, tt.cliLocalMode)
367368

368369
// Clean up any files that might have been created by the function under test
369-
if !tt.configFileExists && toolConfigFileName[tt.toolName] != "" {
370+
if !tt.configFileExists && constants.ToolConfigFileNames[tt.toolName] != "" {
370371
toolsConfigDir := config.Config.ToolsConfigDirectory()
371-
configPath := filepath.Join(toolsConfigDir, toolConfigFileName[tt.toolName])
372+
configPath := filepath.Join(toolsConfigDir, constants.ToolConfigFileNames[tt.toolName])
372373
if _, statErr := os.Stat(configPath); statErr == nil {
373374
os.Remove(configPath)
374375
}
@@ -386,20 +387,20 @@ func TestCheckIfConfigExistsAndIsNeeded(t *testing.T) {
386387

387388
func TestToolConfigFileNameMap(t *testing.T) {
388389
expectedTools := map[string]string{
389-
"eslint": "eslint.config.mjs",
390-
"trivy": "trivy.yaml",
391-
"pmd": "ruleset.xml",
392-
"pylint": "pylint.rc",
393-
"dartanalyzer": "analysis_options.yaml",
394-
"semgrep": "semgrep.yaml",
395-
"revive": "revive.toml",
396-
"lizard": "lizard.yaml",
390+
"eslint": constants.ESLintConfigFileName,
391+
"trivy": constants.TrivyConfigFileName,
392+
"pmd": constants.PMDConfigFileName,
393+
"pylint": constants.PylintConfigFileName,
394+
"dartanalyzer": constants.DartAnalyzerConfigFileName,
395+
"semgrep": constants.SemgrepConfigFileName,
396+
"revive": constants.ReviveConfigFileName,
397+
"lizard": constants.LizardConfigFileName,
397398
}
398399

399400
for toolName, expectedFileName := range expectedTools {
400401
t.Run(toolName, func(t *testing.T) {
401-
actualFileName, exists := toolConfigFileName[toolName]
402-
assert.True(t, exists, "Tool %s should exist in toolConfigFileName map", toolName)
402+
actualFileName, exists := constants.ToolConfigFileNames[toolName]
403+
assert.True(t, exists, "Tool %s should exist in constants.ToolConfigFileNames map", toolName)
403404
assert.Equal(t, expectedFileName, actualFileName, "Config filename for %s should match expected", toolName)
404405
})
405406
}

cmd/configsetup/setup.go

Lines changed: 17 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -20,17 +20,6 @@ import (
2020
"codacy/cli-v2/utils"
2121
)
2222

23-
// Configuration file names - extracted as constants to avoid duplication
24-
const (
25-
LanguagesConfigFileName = "languages-config.yaml"
26-
GitIgnoreFileName = ".gitignore"
27-
PMDConfigFileName = "ruleset.xml"
28-
PylintConfigFileName = "pylint.rc"
29-
TrivyConfigFileName = "trivy.yaml"
30-
DartAnalyzerConfigFileName = "analysis_options.yaml"
31-
SemgrepConfigFileName = "semgrep.yaml"
32-
)
33-
3423
// ToolConfigCreator defines the interface for tool configuration creators
3524
type ToolConfigCreator interface {
3625
CreateConfig(toolsConfigDir string, patterns []domain.PatternConfiguration) error
@@ -76,71 +65,73 @@ type trivyConfigCreator struct{}
7665

7766
func (t *trivyConfigCreator) CreateConfig(toolsConfigDir string, patterns []domain.PatternConfiguration) error {
7867
configString := tools.CreateTrivyConfig(patterns)
79-
err := writeConfigFile(filepath.Join(toolsConfigDir, TrivyConfigFileName), []byte(configString))
68+
err := writeConfigFile(filepath.Join(toolsConfigDir, constants.TrivyConfigFileName), []byte(configString))
8069
if err == nil {
8170
fmt.Println("Trivy configuration created based on Codacy settings")
8271
}
8372
return err
8473
}
8574

86-
func (t *trivyConfigCreator) GetConfigFileName() string { return TrivyConfigFileName }
75+
func (t *trivyConfigCreator) GetConfigFileName() string { return constants.TrivyConfigFileName }
8776
func (t *trivyConfigCreator) GetToolName() string { return "Trivy" }
8877

8978
// pmdConfigCreator implements ToolConfigCreator for PMD
9079
type pmdConfigCreator struct{}
9180

9281
func (p *pmdConfigCreator) CreateConfig(toolsConfigDir string, patterns []domain.PatternConfiguration) error {
9382
configString := tools.CreatePmd6Config(patterns)
94-
return writeConfigFile(filepath.Join(toolsConfigDir, PMDConfigFileName), []byte(configString))
83+
return writeConfigFile(filepath.Join(toolsConfigDir, constants.PMDConfigFileName), []byte(configString))
9584
}
9685

97-
func (p *pmdConfigCreator) GetConfigFileName() string { return PMDConfigFileName }
86+
func (p *pmdConfigCreator) GetConfigFileName() string { return constants.PMDConfigFileName }
9887
func (p *pmdConfigCreator) GetToolName() string { return "PMD" }
9988

10089
// pmd7ConfigCreator implements ToolConfigCreator for PMD7
10190
type pmd7ConfigCreator struct{}
10291

10392
func (p *pmd7ConfigCreator) CreateConfig(toolsConfigDir string, patterns []domain.PatternConfiguration) error {
10493
configString := tools.CreatePmd7Config(patterns)
105-
err := writeConfigFile(filepath.Join(toolsConfigDir, PMDConfigFileName), []byte(configString))
94+
err := writeConfigFile(filepath.Join(toolsConfigDir, constants.PMDConfigFileName), []byte(configString))
10695
if err == nil {
10796
fmt.Println("PMD7 configuration created based on Codacy settings")
10897
}
10998
return err
11099
}
111100

112-
func (p *pmd7ConfigCreator) GetConfigFileName() string { return PMDConfigFileName }
101+
func (p *pmd7ConfigCreator) GetConfigFileName() string { return constants.PMDConfigFileName }
113102
func (p *pmd7ConfigCreator) GetToolName() string { return "PMD7" }
114103

115104
// pylintConfigCreator implements ToolConfigCreator for Pylint
116105
type pylintConfigCreator struct{}
117106

118107
func (p *pylintConfigCreator) CreateConfig(toolsConfigDir string, patterns []domain.PatternConfiguration) error {
119108
configString := pylint.GeneratePylintRC(patterns)
120-
err := writeConfigFile(filepath.Join(toolsConfigDir, PylintConfigFileName), []byte(configString))
109+
err := writeConfigFile(filepath.Join(toolsConfigDir, constants.PylintConfigFileName), []byte(configString))
121110
if err == nil {
122111
fmt.Println("Pylint configuration created based on Codacy settings")
123112
}
124113
return err
125114
}
126115

127-
func (p *pylintConfigCreator) GetConfigFileName() string { return PylintConfigFileName }
116+
func (p *pylintConfigCreator) GetConfigFileName() string { return constants.PylintConfigFileName }
128117
func (p *pylintConfigCreator) GetToolName() string { return "Pylint" }
129118

130119
// dartAnalyzerConfigCreator implements ToolConfigCreator for Dart Analyzer
131120
type dartAnalyzerConfigCreator struct{}
132121

133122
func (d *dartAnalyzerConfigCreator) CreateConfig(toolsConfigDir string, patterns []domain.PatternConfiguration) error {
134123
configString := tools.CreateDartAnalyzerConfig(patterns)
135-
err := writeConfigFile(filepath.Join(toolsConfigDir, DartAnalyzerConfigFileName), []byte(configString))
124+
err := writeConfigFile(filepath.Join(toolsConfigDir, constants.DartAnalyzerConfigFileName), []byte(configString))
136125
if err == nil {
137126
fmt.Println("Dart configuration created based on Codacy settings")
138127
}
139128
return err
140129
}
141130

142-
func (d *dartAnalyzerConfigCreator) GetConfigFileName() string { return DartAnalyzerConfigFileName }
143-
func (d *dartAnalyzerConfigCreator) GetToolName() string { return "Dart Analyzer" }
131+
func (d *dartAnalyzerConfigCreator) GetConfigFileName() string {
132+
return constants.DartAnalyzerConfigFileName
133+
}
134+
func (d *dartAnalyzerConfigCreator) GetToolName() string { return "Dart Analyzer" }
144135

145136
// semgrepConfigCreator implements ToolConfigCreator for Semgrep
146137
type semgrepConfigCreator struct{}
@@ -150,14 +141,14 @@ func (s *semgrepConfigCreator) CreateConfig(toolsConfigDir string, patterns []do
150141
if err != nil {
151142
return fmt.Errorf("failed to create Semgrep config: %v", err)
152143
}
153-
err = writeConfigFile(filepath.Join(toolsConfigDir, SemgrepConfigFileName), configData)
144+
err = writeConfigFile(filepath.Join(toolsConfigDir, constants.SemgrepConfigFileName), configData)
154145
if err == nil {
155146
fmt.Println("Semgrep configuration created based on Codacy settings")
156147
}
157148
return err
158149
}
159150

160-
func (s *semgrepConfigCreator) GetConfigFileName() string { return SemgrepConfigFileName }
151+
func (s *semgrepConfigCreator) GetConfigFileName() string { return constants.SemgrepConfigFileName }
161152
func (s *semgrepConfigCreator) GetToolName() string { return "Semgrep" }
162153

163154
// lizardConfigCreator implements ToolConfigCreator for Lizard
@@ -220,11 +211,11 @@ func CreateLanguagesConfigFileLocal(toolsConfigDir string) error {
220211
languages: [Multiple]
221212
extensions: []`
222213

223-
return writeConfigFile(filepath.Join(toolsConfigDir, LanguagesConfigFileName), []byte(content))
214+
return writeConfigFile(filepath.Join(toolsConfigDir, constants.LanguagesConfigFileName), []byte(content))
224215
}
225216

226217
func CreateGitIgnoreFile() error {
227-
gitIgnorePath := filepath.Join(config.Config.LocalCodacyDirectory(), GitIgnoreFileName)
218+
gitIgnorePath := filepath.Join(config.Config.LocalCodacyDirectory(), constants.GitIgnoreFileName)
228219
content := "# Codacy CLI\ntools-configs/\n.gitignore\ncli-config.yaml\nlogs/\n"
229220
return writeConfigFile(gitIgnorePath, []byte(content))
230221
}

constants/tool_configs.go

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package constants
2+
3+
// Tool configuration file names - shared constants to avoid duplication
4+
const (
5+
// Language and project configuration files
6+
LanguagesConfigFileName = "languages-config.yaml"
7+
GitIgnoreFileName = ".gitignore"
8+
9+
// Tool-specific configuration files
10+
ESLintConfigFileName = "eslint.config.mjs"
11+
TrivyConfigFileName = "trivy.yaml"
12+
PMDConfigFileName = "ruleset.xml"
13+
PylintConfigFileName = "pylint.rc"
14+
DartAnalyzerConfigFileName = "analysis_options.yaml"
15+
SemgrepConfigFileName = "semgrep.yaml"
16+
ReviveConfigFileName = "revive.toml"
17+
LizardConfigFileName = "lizard.yaml"
18+
)
19+
20+
// ToolConfigFileNames maps tool names to their configuration filenames
21+
var ToolConfigFileNames = map[string]string{
22+
"eslint": ESLintConfigFileName,
23+
"trivy": TrivyConfigFileName,
24+
"pmd": PMDConfigFileName,
25+
"pylint": PylintConfigFileName,
26+
"dartanalyzer": DartAnalyzerConfigFileName,
27+
"semgrep": SemgrepConfigFileName,
28+
"revive": ReviveConfigFileName,
29+
"lizard": LizardConfigFileName,
30+
}

0 commit comments

Comments
 (0)