Skip to content

Commit 9f60591

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 f363fe3 commit 9f60591

File tree

5 files changed

+81
-69
lines changed

5 files changed

+81
-69
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"
@@ -43,22 +44,10 @@ type LanguagesConfig struct {
4344
} `yaml:"tools" json:"tools"`
4445
}
4546

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

6352
// Check if the YAML file exists
6453
if _, err := os.Stat(yamlPath); err == nil {
@@ -295,7 +284,7 @@ func validateToolName(toolName string) error {
295284
}
296285

297286
func checkIfConfigExistsAndIsNeeded(toolName string, cliLocalMode bool) error {
298-
configFileName := toolConfigFileName[toolName]
287+
configFileName := constants.ToolConfigFileNames[toolName]
299288
if configFileName == "" {
300289
// Tool doesn't use config file
301290
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: 16 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -22,17 +22,6 @@ import (
2222
"gopkg.in/yaml.v3"
2323
)
2424

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

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

88-
func (t *trivyConfigCreator) GetConfigFileName() string { return TrivyConfigFileName }
77+
func (t *trivyConfigCreator) GetConfigFileName() string { return constants.TrivyConfigFileName }
8978
func (t *trivyConfigCreator) GetToolName() string { return "Trivy" }
9079

9180
// pmdConfigCreator implements ToolConfigCreator for PMD
9281
type pmdConfigCreator struct{}
9382

9483
func (p *pmdConfigCreator) CreateConfig(toolsConfigDir string, patterns []domain.PatternConfiguration) error {
9584
configString := tools.CreatePmd6Config(patterns)
96-
return writeConfigFile(filepath.Join(toolsConfigDir, PMDConfigFileName), []byte(configString))
85+
return writeConfigFile(filepath.Join(toolsConfigDir, constants.PMDConfigFileName), []byte(configString))
9786
}
9887

99-
func (p *pmdConfigCreator) GetConfigFileName() string { return PMDConfigFileName }
88+
func (p *pmdConfigCreator) GetConfigFileName() string { return constants.PMDConfigFileName }
10089
func (p *pmdConfigCreator) GetToolName() string { return "PMD" }
10190

10291
// pmd7ConfigCreator implements ToolConfigCreator for PMD7
10392
type pmd7ConfigCreator struct{}
10493

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

114-
func (p *pmd7ConfigCreator) GetConfigFileName() string { return PMDConfigFileName }
103+
func (p *pmd7ConfigCreator) GetConfigFileName() string { return constants.PMDConfigFileName }
115104
func (p *pmd7ConfigCreator) GetToolName() string { return "PMD7" }
116105

117106
// pylintConfigCreator implements ToolConfigCreator for Pylint
118107
type pylintConfigCreator struct{}
119108

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

129-
func (p *pylintConfigCreator) GetConfigFileName() string { return PylintConfigFileName }
118+
func (p *pylintConfigCreator) GetConfigFileName() string { return constants.PylintConfigFileName }
130119
func (p *pylintConfigCreator) GetToolName() string { return "Pylint" }
131120

132121
// dartAnalyzerConfigCreator implements ToolConfigCreator for Dart Analyzer
133122
type dartAnalyzerConfigCreator struct{}
134123

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

144-
func (d *dartAnalyzerConfigCreator) GetConfigFileName() string { return DartAnalyzerConfigFileName }
145-
func (d *dartAnalyzerConfigCreator) GetToolName() string { return "Dart Analyzer" }
133+
func (d *dartAnalyzerConfigCreator) GetConfigFileName() string {
134+
return constants.DartAnalyzerConfigFileName
135+
}
136+
func (d *dartAnalyzerConfigCreator) GetToolName() string { return "Dart Analyzer" }
146137

147138
// semgrepConfigCreator implements ToolConfigCreator for Semgrep
148139
type semgrepConfigCreator struct{}
@@ -152,14 +143,14 @@ func (s *semgrepConfigCreator) CreateConfig(toolsConfigDir string, patterns []do
152143
if err != nil {
153144
return fmt.Errorf("failed to create Semgrep config: %v", err)
154145
}
155-
err = writeConfigFile(filepath.Join(toolsConfigDir, SemgrepConfigFileName), configData)
146+
err = writeConfigFile(filepath.Join(toolsConfigDir, constants.SemgrepConfigFileName), configData)
156147
if err == nil {
157148
fmt.Println("Semgrep configuration created based on Codacy settings")
158149
}
159150
return err
160151
}
161152

162-
func (s *semgrepConfigCreator) GetConfigFileName() string { return SemgrepConfigFileName }
153+
func (s *semgrepConfigCreator) GetConfigFileName() string { return constants.SemgrepConfigFileName }
163154
func (s *semgrepConfigCreator) GetToolName() string { return "Semgrep" }
164155

165156
// lizardConfigCreator implements ToolConfigCreator for Lizard
@@ -217,7 +208,7 @@ func CreateLanguagesConfigFileLocal(toolsConfigDir string) error {
217208
}
218209

219210
func CreateGitIgnoreFile() error {
220-
gitIgnorePath := filepath.Join(config.Config.LocalCodacyDirectory(), GitIgnoreFileName)
211+
gitIgnorePath := filepath.Join(config.Config.LocalCodacyDirectory(), constants.GitIgnoreFileName)
221212
content := "# Codacy CLI\ntools-configs/\n.gitignore\ncli-config.yaml\nlogs/\n"
222213
return writeConfigFile(gitIgnorePath, []byte(content))
223214
}

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)