Skip to content

Commit 809f0bc

Browse files
zhamborovaheliocodacy
authored andcommitted
[PLUTO-1374] Pmd config (#51)
* pmd configuration
1 parent 642a151 commit 809f0bc

15 files changed

+745
-101
lines changed

.codacy/codacy.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,4 @@ tools:
55
66
77
8-
- pmd@7.12.0
8+
- pmd@6.55.0

cmd/init.go

Lines changed: 95 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,6 @@ var initCmd = &cobra.Command{
6565
}
6666

6767
func createConfigurationFile(tools []tools.Tool) error {
68-
6968
configFile, err := os.Create(config.Config.ProjectConfigFile())
7069
defer configFile.Close()
7170
if err != nil {
@@ -86,7 +85,8 @@ func configFileTemplate(tools []tools.Tool) string {
8685
eslintVersion := "9.3.0"
8786
trivyVersion := "0.59.1" // Latest stable version
8887
pylintVersion := "3.3.6"
89-
pmdVersion := "7.12.0"
88+
pmdVersion := "6.55.0"
89+
9090
for _, tool := range tools {
9191
if tool.Uuid == "f8b29663-2cb2-498d-b923-a10c6a8c05cd" {
9292
eslintVersion = tool.Version
@@ -97,6 +97,9 @@ func configFileTemplate(tools []tools.Tool) string {
9797
if tool.Uuid == "31677b6d-4ae0-4f56-8041-606a8d7a8e61" {
9898
pylintVersion = tool.Version
9999
}
100+
if tool.Uuid == "9ed24812-b6ee-4a58-9004-0ed183c45b8f" {
101+
pmdVersion = tool.Version
102+
}
100103
}
101104

102105
return fmt.Sprintf(`runtimes:
@@ -111,7 +114,6 @@ tools:
111114
}
112115

113116
func buildRepositoryConfigurationFiles(token string) error {
114-
115117
fmt.Println("Building project configuration files ...")
116118
fmt.Println("Fetching project configuration from codacy ...")
117119

@@ -152,46 +154,76 @@ func buildRepositoryConfigurationFiles(token string) error {
152154
}
153155

154156
var objmap map[string]json.RawMessage
155-
_ = json.Unmarshal(body, &objmap)
157+
err = json.Unmarshal(body, &objmap)
158+
if err != nil {
159+
fmt.Println("Error unmarshaling response:", err)
160+
return err
161+
}
156162

157163
var apiToolConfigurations []CodacyToolConfiguration
158164
err = json.Unmarshal(objmap["toolConfiguration"], &apiToolConfigurations)
165+
if err != nil {
166+
fmt.Println("Error unmarshaling tool configurations:", err)
167+
return err
168+
}
159169

170+
// ESLint configuration
160171
eslintApiConfiguration := extractESLintConfiguration(apiToolConfigurations)
172+
if eslintApiConfiguration != nil {
173+
eslintDomainConfiguration := convertAPIToolConfigurationToDomain(*eslintApiConfiguration)
174+
eslintConfigurationString := tools.CreateEslintConfig(eslintDomainConfiguration)
161175

162-
eslintDomainConfiguration := convertAPIToolConfigurationToDomain(*eslintApiConfiguration)
163-
164-
eslintConfigurationString := tools.CreateEslintConfig(eslintDomainConfiguration)
165-
166-
eslintConfigFile, err := os.Create("eslint.config.mjs")
167-
defer eslintConfigFile.Close()
168-
if err != nil {
169-
log.Fatal(err)
170-
}
176+
eslintConfigFile, err := os.Create("eslint.config.mjs")
177+
if err != nil {
178+
return fmt.Errorf("failed to create eslint config file: %v", err)
179+
}
180+
defer eslintConfigFile.Close()
171181

172-
_, err = eslintConfigFile.WriteString(eslintConfigurationString)
173-
if err != nil {
174-
log.Fatal(err)
182+
_, err = eslintConfigFile.WriteString(eslintConfigurationString)
183+
if err != nil {
184+
return fmt.Errorf("failed to write eslint config: %v", err)
185+
}
186+
fmt.Println("ESLint configuration created based on Codacy settings")
187+
} else {
188+
err = createDefaultEslintConfigFile()
189+
if err != nil {
190+
return fmt.Errorf("failed to create default ESLint config: %v", err)
191+
}
192+
fmt.Println("Default ESLint configuration created")
175193
}
176194

177-
// Create Trivy configuration after processing ESLint
195+
// Trivy configuration
178196
trivyApiConfiguration := extractTrivyConfiguration(apiToolConfigurations)
179197
if trivyApiConfiguration != nil {
180-
// Create trivy.yaml file based on API configuration
181198
err = createTrivyConfigFile(*trivyApiConfiguration)
182199
if err != nil {
183-
log.Fatal(err)
200+
return fmt.Errorf("failed to create Trivy config: %v", err)
184201
}
185202
fmt.Println("Trivy configuration created based on Codacy settings")
186203
} else {
187-
// Create default trivy.yaml if no configuration from API
188204
err = createDefaultTrivyConfigFile()
189205
if err != nil {
190-
log.Fatal(err)
206+
return fmt.Errorf("failed to create default Trivy config: %v", err)
191207
}
192208
fmt.Println("Default Trivy configuration created")
193209
}
194210

211+
// PMD configuration
212+
pmdApiConfiguration := extractPMDConfiguration(apiToolConfigurations)
213+
if pmdApiConfiguration != nil {
214+
err = createPMDConfigFile(*pmdApiConfiguration)
215+
if err != nil {
216+
return fmt.Errorf("failed to create PMD config: %v", err)
217+
}
218+
fmt.Println("PMD configuration created based on Codacy settings")
219+
} else {
220+
err = createDefaultPMDConfigFile()
221+
if err != nil {
222+
return fmt.Errorf("failed to create default PMD config: %v", err)
223+
}
224+
fmt.Println("Default PMD configuration created")
225+
}
226+
195227
return nil
196228
}
197229

@@ -203,16 +235,16 @@ func convertAPIToolConfigurationToDomain(config CodacyToolConfiguration) tools.T
203235

204236
for _, parameter := range pattern.Parameters {
205237
parameters = append(parameters, tools.PatternParameterConfiguration{
206-
Name: parameter.name,
207-
Value: parameter.value,
238+
Name: parameter.Name,
239+
Value: parameter.Value,
208240
})
209241
}
210242

211243
patterns = append(
212244
patterns,
213245
tools.PatternConfiguration{
214-
PatternId: pattern.InternalId,
215-
ParamenterConfigurations: parameters,
246+
PatternId: pattern.InternalId,
247+
ParameterConfigurations: parameters,
216248
},
217249
)
218250
}
@@ -250,6 +282,29 @@ func extractTrivyConfiguration(toolConfigurations []CodacyToolConfiguration) *Co
250282
return nil
251283
}
252284

285+
// Add PMD-specific functions
286+
func extractPMDConfiguration(toolConfigurations []CodacyToolConfiguration) *CodacyToolConfiguration {
287+
const PMDUUID = "9ed24812-b6ee-4a58-9004-0ed183c45b8f"
288+
for _, toolConfiguration := range toolConfigurations {
289+
if toolConfiguration.Uuid == PMDUUID {
290+
return &toolConfiguration
291+
}
292+
}
293+
return nil
294+
}
295+
296+
func createPMDConfigFile(config CodacyToolConfiguration) error {
297+
pmdDomainConfiguration := convertAPIToolConfigurationToDomain(config)
298+
pmdConfigurationString := tools.CreatePmdConfig(pmdDomainConfiguration)
299+
return os.WriteFile("pmd-ruleset.xml", []byte(pmdConfigurationString), 0644)
300+
}
301+
302+
func createDefaultPMDConfigFile() error {
303+
emptyConfig := tools.ToolConfiguration{}
304+
content := tools.CreatePmdConfig(emptyConfig)
305+
return os.WriteFile("pmd-ruleset.xml", []byte(content), 0644)
306+
}
307+
253308
type CodacyToolConfiguration struct {
254309
Uuid string `json:"uuid"`
255310
IsEnabled bool `json:"isEnabled"`
@@ -262,8 +317,8 @@ type PatternConfiguration struct {
262317
}
263318

264319
type ParameterConfiguration struct {
265-
name string `json:"name"`
266-
value string `json:"value"`
320+
Name string `json:"name"`
321+
Value string `json:"value"`
267322
}
268323

269324
// createTrivyConfigFile creates a trivy.yaml configuration file based on the API configuration
@@ -292,7 +347,7 @@ func convertAPIToolConfigurationForTrivy(config CodacyToolConfiguration) tools.T
292347

293348
// Check if there's an explicit enabled parameter
294349
for _, param := range pattern.Parameters {
295-
if param.name == "enabled" && param.value == "false" {
350+
if param.Name == "enabled" && param.Value == "false" {
296351
patternEnabled = false
297352
}
298353
}
@@ -306,8 +361,8 @@ func convertAPIToolConfigurationForTrivy(config CodacyToolConfiguration) tools.T
306361
patterns = append(
307362
patterns,
308363
tools.PatternConfiguration{
309-
PatternId: pattern.InternalId,
310-
ParamenterConfigurations: parameters,
364+
PatternId: pattern.InternalId,
365+
ParameterConfigurations: parameters,
311366
},
312367
)
313368
}
@@ -327,3 +382,13 @@ func createDefaultTrivyConfigFile() error {
327382
// Write to file
328383
return os.WriteFile("trivy.yaml", []byte(content), 0644)
329384
}
385+
386+
// createDefaultEslintConfigFile creates a default eslint.config.mjs configuration file
387+
func createDefaultEslintConfigFile() error {
388+
// Use empty tool configuration to get default settings
389+
emptyConfig := tools.ToolConfiguration{}
390+
content := tools.CreateEslintConfig(emptyConfig)
391+
392+
// Write to file
393+
return os.WriteFile("eslint.config.mjs", []byte(content), 0644)
394+
}

plugins/tools/pmd/plugin.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
name: pmd
22
description: PMD - An extensible cross-language static code analyzer
33
download:
4-
url_template: https://github.com/pmd/pmd/releases/download/pmd_releases%2F{{.Version}}/pmd-dist-{{.Version}}-bin.zip
5-
file_name_template: pmd-dist-{{.Version}}-bin.zip
4+
url_template: "https://github.com/pmd/pmd/releases/download/pmd_releases%2F{{.Version}}/pmd-bin-{{.Version}}.zip"
5+
file_name_template: pmd-bin-{{.Version}}
66
extension:
77
default: .zip
88
binaries:
99
- name: pmd
10-
path: pmd-bin-{{.Version}}/bin/pmd
10+
path: pmd-bin-{{.Version}}/bin/run.sh

tools/ToolConfigurationStruct.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ type PatternParameterConfiguration struct {
66
}
77

88
type PatternConfiguration struct {
9-
PatternId string
10-
ParamenterConfigurations []PatternParameterConfiguration
9+
PatternId string
10+
ParameterConfigurations []PatternParameterConfiguration
1111
}
1212

1313
type ToolConfiguration struct {

tools/eslintConfigCreator.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,15 +35,15 @@ func CreateEslintConfig(configuration ToolConfiguration) string {
3535

3636
parametersString := ""
3737

38-
for _, parameter := range patternConfiguration.ParamenterConfigurations {
38+
for _, parameter := range patternConfiguration.ParameterConfigurations {
3939
if parameter.Name == "unnamedParam" {
4040
parametersString += quoteWhenIsNotJson(parameter.Value)
4141
}
4242
}
4343

4444
// build named parameters json object
4545
namedParametersString := ""
46-
for _, parameter := range patternConfiguration.ParamenterConfigurations {
46+
for _, parameter := range patternConfiguration.ParameterConfigurations {
4747

4848
if parameter.Name != "unnamedParam" {
4949
if len(namedParametersString) == 0 {

tools/eslintConfigCreator_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ func TestCreateEslintConfigUnnamedParam(t *testing.T) {
4646
PatternsConfiguration: []PatternConfiguration{
4747
{
4848
PatternId: "ESLint8_semi",
49-
ParamenterConfigurations: []PatternParameterConfiguration{
49+
ParameterConfigurations: []PatternParameterConfiguration{
5050
{
5151
Name: "unnamedParam",
5252
Value: "never",
@@ -70,7 +70,7 @@ func TestCreateEslintConfigNamedParam(t *testing.T) {
7070
PatternsConfiguration: []PatternConfiguration{
7171
{
7272
PatternId: "consistent-return",
73-
ParamenterConfigurations: []PatternParameterConfiguration{
73+
ParameterConfigurations: []PatternParameterConfiguration{
7474
{
7575
Name: "treatUndefinedAsUnspecified",
7676
Value: "false",
@@ -94,7 +94,7 @@ func TestCreateEslintConfigUnnamedAndNamedParam(t *testing.T) {
9494
PatternsConfiguration: []PatternConfiguration{
9595
{
9696
PatternId: "consistent-return",
97-
ParamenterConfigurations: []PatternParameterConfiguration{
97+
ParameterConfigurations: []PatternParameterConfiguration{
9898
{
9999
Name: "treatUndefinedAsUnspecified",
100100
Value: "false",

0 commit comments

Comments
 (0)