Skip to content

Commit 57e38da

Browse files
Merge pull request #125 from codacy/default-eslint-8.57
fix eslint config creation and using default 8.57.0 instead 9.3.0 (when init without token)
2 parents a95a19d + f96e66f commit 57e38da

File tree

7 files changed

+121
-9
lines changed

7 files changed

+121
-9
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ The tool is invoked using the `codacy-cli` command, and provides two main comman
3131
runtimes:
3232
3333
tools:
34-
- eslint@9.3.0
34+
- eslint@8.57.0
3535

3636
- **`codacy-cli install`**: Command to install the specified node and eslint versions before running analysis.
3737

cmd/init.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ func configFileTemplate(tools []tools.Tool) string {
138138

139139
// Default versions
140140
defaultVersions := map[string]string{
141-
ESLint: "9.3.0",
141+
ESLint: "8.57.0",
142142
Trivy: "0.59.1",
143143
PyLint: "3.3.6",
144144
PMD: "6.55.0",

cmd/init_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ func TestConfigFileTemplate(t *testing.T) {
2424
expected: []string{
2525
2626
27-
"eslint@9.3.0",
27+
"eslint@8.57.0",
2828
2929
3030

cmd/root.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ Use "{{.CommandPath}} [command] --help" for more information about a command.{{e
129129
runtimes:
130130
131131
tools:
132-
- eslint@9.3.0
132+
- eslint@8.57.0
133133
134134
` + color.New(color.FgCyan).Sprint("For more information and examples, visit:") + `
135135
https://github.com/codacy/codacy-cli-v2

integration-tests/init-without-token/expected/codacy.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ runtimes:
44
55
66
tools:
7-
- eslint@9.3.0
7+
- eslint@8.57.0
88
99
1010

tools/eslintConfigCreator.go

Lines changed: 47 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,22 +53,66 @@ func CreateEslintConfig(configuration []domain.PatternConfiguration) string {
5353

5454
parametersString := ""
5555

56+
// Find default value for unnamedParam if needed
57+
defaultUnnamedParamValue := ""
58+
for _, paramDef := range patternConfiguration.PatternDefinition.Parameters {
59+
if paramDef.Name == "unnamedParam" {
60+
defaultUnnamedParamValue = paramDef.Default
61+
break
62+
}
63+
}
64+
65+
// Process parameters
66+
foundUnnamedParam := false
5667
for _, parameter := range patternConfiguration.Parameters {
5768
if parameter.Name == "unnamedParam" {
58-
parametersString += quoteWhenIsNotJson(parameter.Value)
69+
foundUnnamedParam = true
70+
// If value is empty but we have a default, use the default
71+
if parameter.Value == "" && defaultUnnamedParamValue != "" {
72+
parametersString += quoteWhenIsNotJson(defaultUnnamedParamValue)
73+
} else if parameter.Value != "" {
74+
parametersString += quoteWhenIsNotJson(parameter.Value)
75+
}
5976
}
6077
}
6178

79+
// If we found an unnamed param with empty value but have a default, use it
80+
if foundUnnamedParam && parametersString == "" && defaultUnnamedParamValue != "" {
81+
parametersString += quoteWhenIsNotJson(defaultUnnamedParamValue)
82+
}
83+
6284
// build named parameters json object
6385
namedParametersString := ""
6486
for _, parameter := range patternConfiguration.Parameters {
6587
if parameter.Name != "unnamedParam" {
88+
paramValue := parameter.Value
89+
90+
// If value is empty, look for default in pattern definition
91+
if paramValue == "" {
92+
for _, paramDef := range patternConfiguration.PatternDefinition.Parameters {
93+
if paramDef.Name == parameter.Name && paramDef.Default != "" {
94+
paramValue = paramDef.Default
95+
break
96+
}
97+
}
98+
}
99+
100+
// Skip only if both value and default are empty
101+
if paramValue == "" {
102+
continue
103+
}
104+
66105
if len(namedParametersString) == 0 {
67106
namedParametersString += "{"
68107
} else {
69108
namedParametersString += ", "
70109
}
71-
namedParametersString += fmt.Sprintf("\"%s\": %s", parameter.Name, quoteWhenIsNotJson(parameter.Value))
110+
111+
if paramValue == "true" || paramValue == "false" {
112+
namedParametersString += fmt.Sprintf("\"%s\": %s", parameter.Name, paramValue)
113+
} else {
114+
namedParametersString += fmt.Sprintf("\"%s\": %s", parameter.Name, quoteWhenIsNotJson(paramValue))
115+
}
72116
}
73117
}
74118
if len(namedParametersString) > 0 {
@@ -84,7 +128,7 @@ func CreateEslintConfig(configuration []domain.PatternConfiguration) string {
84128
result += " "
85129

86130
if parametersString == "" {
87-
result += fmt.Sprintf(`"%s": "error",`, rule)
131+
result += fmt.Sprintf(`"%s": ["error"],`, rule)
88132
result += "\n"
89133
} else {
90134
result += fmt.Sprintf(`"%s": ["error", %s],`, rule, parametersString)

tools/eslintConfigCreator_test.go

Lines changed: 69 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ func TestCreateEslintConfigConfig1(t *testing.T) {
3535
`export default [
3636
{
3737
rules: {
38-
"semi": "error",
38+
"semi": ["error"],
3939
}
4040
}
4141
];`)
@@ -133,3 +133,71 @@ func TestCreateEslintConfigDoNotSupportPlugins(t *testing.T) {
133133
}
134134
];`)
135135
}
136+
137+
func TestCreateEslintConfigWithDefaultValues(t *testing.T) {
138+
testConfig(t,
139+
[]domain.PatternConfiguration{
140+
{
141+
PatternDefinition: domain.PatternDefinition{
142+
Id: "ESLint8_no-fallthrough",
143+
Parameters: []domain.ParameterConfiguration{
144+
{
145+
Name: "commentPattern",
146+
Default: "",
147+
},
148+
{
149+
Name: "allowEmptyCase",
150+
Default: "false",
151+
},
152+
},
153+
},
154+
Parameters: []domain.ParameterConfiguration{
155+
{
156+
Name: "commentPattern",
157+
Value: "", // Empty value with empty default - should be skipped
158+
},
159+
{
160+
Name: "allowEmptyCase",
161+
Value: "", // Empty value with default "false" - should use default
162+
},
163+
},
164+
},
165+
},
166+
`export default [
167+
{
168+
rules: {
169+
"no-fallthrough": ["error", {"allowEmptyCase": false}],
170+
}
171+
}
172+
];`)
173+
}
174+
175+
func TestCreateEslintConfigWithUnnamedDefaultValues(t *testing.T) {
176+
testConfig(t,
177+
[]domain.PatternConfiguration{
178+
{
179+
PatternDefinition: domain.PatternDefinition{
180+
Id: "ESLint8_no-inner-declarations",
181+
Parameters: []domain.ParameterConfiguration{
182+
{
183+
Name: "unnamedParam",
184+
Default: "functions",
185+
},
186+
},
187+
},
188+
Parameters: []domain.ParameterConfiguration{
189+
{
190+
Name: "unnamedParam",
191+
Value: "", // Empty value with default "functions" - should use default
192+
},
193+
},
194+
},
195+
},
196+
`export default [
197+
{
198+
rules: {
199+
"no-inner-declarations": ["error", "functions"],
200+
}
201+
}
202+
];`)
203+
}

0 commit comments

Comments
 (0)