Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 13 additions & 9 deletions cmd/analyze.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@ package cmd
import (
"codacy/cli-v2/config"
"codacy/cli-v2/tools"
"codacy/cli-v2/tools/eslint"
"codacy/cli-v2/tools/pmd"
"codacy/cli-v2/tools/trivy"
"encoding/json"
"fmt"
"io"
Expand Down Expand Up @@ -187,29 +190,30 @@ func getToolName(toolName string, version string) string {
}

func runEslintAnalysis(workDirectory string, pathsToCheck []string, autoFix bool, outputFile string, outputFormat string) {
eslint := config.Config.Tools()["eslint"]
eslintInstallationDirectory := eslint.InstallDir
tool := config.Config.Tools()["eslint"]
eslintInstallationDirectory := tool.InstallDir
nodeRuntime := config.Config.Runtimes()["node"]
nodeBinary := nodeRuntime.Binaries["node"]

tools.RunEslint(workDirectory, eslintInstallationDirectory, nodeBinary, pathsToCheck, autoFix, outputFile, outputFormat)
//todo pass config file
eslint.RunEslint(workDirectory, eslintInstallationDirectory, nodeBinary, pathsToCheck, autoFix, outputFile, outputFormat, "")
}

func runTrivyAnalysis(workDirectory string, pathsToCheck []string, outputFile string, outputFormat string) {
trivy := config.Config.Tools()["trivy"]
trivyBinary := trivy.Binaries["trivy"]
tool := config.Config.Tools()["trivy"]
trivyBinary := tool.Binaries["trivy"]

err := tools.RunTrivy(workDirectory, trivyBinary, pathsToCheck, outputFile, outputFormat)
err := trivy.RunTrivy(workDirectory, trivyBinary, pathsToCheck, outputFile, outputFormat)
if err != nil {
log.Fatalf("Error running Trivy: %v", err)
}
}

func runPmdAnalysis(workDirectory string, pathsToCheck []string, outputFile string, outputFormat string) {
pmd := config.Config.Tools()["pmd"]
pmdBinary := pmd.Binaries["pmd"]
tool := config.Config.Tools()["pmd"]
pmdBinary := tool.Binaries["pmd"]

err := tools.RunPmd(workDirectory, pmdBinary, pathsToCheck, outputFile, outputFormat, pmdRulesetFile)
err := pmd.RunPmd(workDirectory, pmdBinary, pathsToCheck, outputFile, outputFormat, pmdRulesetFile)
if err != nil {
log.Fatalf("Error running PMD: %v", err)
}
Expand Down
15 changes: 9 additions & 6 deletions cmd/init.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@ package cmd
import (
"codacy/cli-v2/config"
"codacy/cli-v2/tools"
"codacy/cli-v2/tools/eslint"
"codacy/cli-v2/tools/pmd"
"codacy/cli-v2/tools/trivy"
"encoding/json"
"errors"
"fmt"
Expand Down Expand Up @@ -171,7 +174,7 @@ func buildRepositoryConfigurationFiles(token string) error {
eslintApiConfiguration := extractESLintConfiguration(apiToolConfigurations)
if eslintApiConfiguration != nil {
eslintDomainConfiguration := convertAPIToolConfigurationToDomain(*eslintApiConfiguration)
eslintConfigurationString := tools.CreateEslintConfig(eslintDomainConfiguration)
eslintConfigurationString := eslint.CreateEslintConfig(eslintDomainConfiguration)

eslintConfigFile, err := os.Create("eslint.config.mjs")
if err != nil {
Expand Down Expand Up @@ -295,13 +298,13 @@ func extractPMDConfiguration(toolConfigurations []CodacyToolConfiguration) *Coda

func createPMDConfigFile(config CodacyToolConfiguration) error {
pmdDomainConfiguration := convertAPIToolConfigurationToDomain(config)
pmdConfigurationString := tools.CreatePmdConfig(pmdDomainConfiguration)
pmdConfigurationString := pmd.CreatePmdConfig(pmdDomainConfiguration)
return os.WriteFile("pmd-ruleset.xml", []byte(pmdConfigurationString), 0644)
}

func createDefaultPMDConfigFile() error {
emptyConfig := tools.ToolConfiguration{}
content := tools.CreatePmdConfig(emptyConfig)
content := pmd.CreatePmdConfig(emptyConfig)
return os.WriteFile("pmd-ruleset.xml", []byte(content), 0644)
}

Expand All @@ -327,7 +330,7 @@ func createTrivyConfigFile(config CodacyToolConfiguration) error {
trivyDomainConfiguration := convertAPIToolConfigurationForTrivy(config)

// Use the shared CreateTrivyConfig function to generate the config content
trivyConfigurationString := tools.CreateTrivyConfig(trivyDomainConfiguration)
trivyConfigurationString := trivy.CreateTrivyConfig(trivyDomainConfiguration)

// Write to file
return os.WriteFile("trivy.yaml", []byte(trivyConfigurationString), 0644)
Expand Down Expand Up @@ -377,7 +380,7 @@ func convertAPIToolConfigurationForTrivy(config CodacyToolConfiguration) tools.T
func createDefaultTrivyConfigFile() error {
// Use empty tool configuration to get default settings
emptyConfig := tools.ToolConfiguration{}
content := tools.CreateTrivyConfig(emptyConfig)
content := trivy.CreateTrivyConfig(emptyConfig)

// Write to file
return os.WriteFile("trivy.yaml", []byte(content), 0644)
Expand All @@ -387,7 +390,7 @@ func createDefaultTrivyConfigFile() error {
func createDefaultEslintConfigFile() error {
// Use empty tool configuration to get default settings
emptyConfig := tools.ToolConfiguration{}
content := tools.CreateEslintConfig(emptyConfig)
content := eslint.CreateEslintConfig(emptyConfig)

// Write to file
return os.WriteFile("eslint.config.mjs", []byte(content), 0644)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package tools
package eslint

import (
"encoding/json"
"fmt"
"strings"

"codacy/cli-v2/tools"
)

func quoteWhenIsNotJson(value string) string {
Expand All @@ -18,7 +20,7 @@
}
}

func CreateEslintConfig(configuration ToolConfiguration) string {
func CreateEslintConfig(configuration tools.ToolConfiguration) string {

Check warning on line 23 in tools/eslint/eslintConfigCreator.go

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

tools/eslint/eslintConfigCreator.go#L23

Method CreateEslintConfig has 51 lines of code (limit is 50)

Check failure on line 23 in tools/eslint/eslintConfigCreator.go

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

tools/eslint/eslintConfigCreator.go#L23

Method CreateEslintConfig has a cyclomatic complexity of 11 (limit is 10)

Check notice on line 23 in tools/eslint/eslintConfigCreator.go

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

tools/eslint/eslintConfigCreator.go#L23

exported function CreateEslintConfig should have comment or be unexported
result := `export default [
{
rules: {
Expand Down
12 changes: 9 additions & 3 deletions tools/eslintRunner.go → tools/eslint/eslintRunner.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package tools
package eslint

import (
"os"
Expand All @@ -9,7 +9,7 @@
// * Run from the root of the repo we want to analyse
// * NODE_PATH="<the installed eslint path>/node_modules"
// * The local installed ESLint should have the @microsoft/eslint-formatter-sarif installed
func RunEslint(repositoryToAnalyseDirectory string, eslintInstallationDirectory string, nodeBinary string, pathsToCheck []string, autoFix bool, outputFile string, outputFormat string) {
func RunEslint(repositoryToAnalyseDirectory string, eslintInstallationDirectory string, nodeBinary string, pathsToCheck []string, autoFix bool, outputFile string, outputFormat string, configFile string) {

Check warning on line 12 in tools/eslint/eslintRunner.go

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

tools/eslint/eslintRunner.go#L12

Method RunEslint has 8 parameters (limit is 5)
eslintInstallationNodeModules := filepath.Join(eslintInstallationDirectory, "node_modules")
eslintJsPath := filepath.Join(eslintInstallationNodeModules, ".bin", "eslint")

Expand All @@ -19,13 +19,19 @@
}
if outputFormat == "sarif" {
//When outputting in SARIF format
cmd.Args = append(cmd.Args, "-f", "@microsoft/eslint-formatter-sarif")
cmd.Args = append(cmd.Args, "-f", filepath.Join(eslintInstallationNodeModules, "@microsoft", "eslint-formatter-sarif", "sarif.js"))
}

if outputFile != "" {
//When writing to file, use the output file option
cmd.Args = append(cmd.Args, "-o", outputFile)
}

// Add config file flag if provided
if configFile != "" {
cmd.Args = append(cmd.Args, "--config", configFile)
}

if len(pathsToCheck) > 0 {
cmd.Args = append(cmd.Args, pathsToCheck...)
} else {
Expand Down
49 changes: 0 additions & 49 deletions tools/eslintRunner_test.go

This file was deleted.

7 changes: 4 additions & 3 deletions tools/pmdConfigCreator.go → tools/pmd/pmdConfigCreator.go
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
package tools
package pmd

import (
"codacy/cli-v2/tools"
_ "embed"
"encoding/xml"
"fmt"
"strings"
)

//go:embed pmd/default-ruleset.xml
//go:embed default-ruleset.xml
var defaultPMDRuleset string

// Parameter represents a rule parameter
Expand Down Expand Up @@ -171,7 +172,7 @@
}

// CreatePmdConfig creates a PMD configuration from the provided tool configuration
func CreatePmdConfig(configuration ToolConfiguration) string {
func CreatePmdConfig(configuration tools.ToolConfiguration) string {

Check warning on line 175 in tools/pmd/pmdConfigCreator.go

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

tools/pmd/pmdConfigCreator.go#L175

Method CreatePmdConfig has a cyclomatic complexity of 10 (limit is 7)
// If no patterns provided, return the default ruleset
if len(configuration.PatternsConfiguration) == 0 {
return defaultPMDRuleset
Expand Down
3 changes: 1 addition & 2 deletions tools/pmdRunner.go → tools/pmd/pmdRunner.go
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
package tools
package pmd

import (
"os"
"os/exec"
"strings"
)

// RunPmd executes PMD static code analyzer with the specified options
func RunPmd(repositoryToAnalyseDirectory string, pmdBinary string, pathsToCheck []string, outputFile string, outputFormat string, rulesetFile string) error {
cmdArgs := []string{"pmd"}

Expand Down
18 changes: 18 additions & 0 deletions tools/test/eslint/config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{
"env": {},
"globals": {},
"parser": null,
"parserOptions": {},
"plugins": [],
"rules": {
"prefer-const": [
"error"
],
"semi": [
"error",
"always"
]
},
"settings": {},
"ignorePatterns": []
}
5 changes: 5 additions & 0 deletions tools/test/eslint/eslint.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
module.exports = {
rules: {
semi: ["error", "always"]
}
};
Original file line number Diff line number Diff line change
@@ -1,19 +1,22 @@
package tools
package eslint

import (
"testing"

"codacy/cli-v2/tools"
"codacy/cli-v2/tools/eslint"

"github.com/stretchr/testify/assert"
)

func testConfig(t *testing.T, configuration ToolConfiguration, expected string) {
actual := CreateEslintConfig(configuration)
func testConfig(t *testing.T, configuration tools.ToolConfiguration, expected string) {
actual := eslint.CreateEslintConfig(configuration)
assert.Equal(t, expected, actual)
}

func TestCreateEslintConfigEmptyConfig(t *testing.T) {
testConfig(t,
ToolConfiguration{},
tools.ToolConfiguration{},
`export default [
{
rules: {
Expand All @@ -24,8 +27,8 @@ func TestCreateEslintConfigEmptyConfig(t *testing.T) {

func TestCreateEslintConfigConfig1(t *testing.T) {
testConfig(t,
ToolConfiguration{
PatternsConfiguration: []PatternConfiguration{
tools.ToolConfiguration{
PatternsConfiguration: []tools.PatternConfiguration{
{
PatternId: "ESLint8_semi",
},
Expand All @@ -42,11 +45,11 @@ func TestCreateEslintConfigConfig1(t *testing.T) {

func TestCreateEslintConfigUnnamedParam(t *testing.T) {
testConfig(t,
ToolConfiguration{
PatternsConfiguration: []PatternConfiguration{
tools.ToolConfiguration{
PatternsConfiguration: []tools.PatternConfiguration{
{
PatternId: "ESLint8_semi",
ParameterConfigurations: []PatternParameterConfiguration{
ParameterConfigurations: []tools.PatternParameterConfiguration{
{
Name: "unnamedParam",
Value: "never",
Expand All @@ -66,11 +69,11 @@ func TestCreateEslintConfigUnnamedParam(t *testing.T) {

func TestCreateEslintConfigNamedParam(t *testing.T) {
testConfig(t,
ToolConfiguration{
PatternsConfiguration: []PatternConfiguration{
tools.ToolConfiguration{
PatternsConfiguration: []tools.PatternConfiguration{
{
PatternId: "consistent-return",
ParameterConfigurations: []PatternParameterConfiguration{
ParameterConfigurations: []tools.PatternParameterConfiguration{
{
Name: "treatUndefinedAsUnspecified",
Value: "false",
Expand All @@ -90,11 +93,11 @@ func TestCreateEslintConfigNamedParam(t *testing.T) {

func TestCreateEslintConfigUnnamedAndNamedParam(t *testing.T) {
testConfig(t,
ToolConfiguration{
PatternsConfiguration: []PatternConfiguration{
tools.ToolConfiguration{
PatternsConfiguration: []tools.PatternConfiguration{
{
PatternId: "consistent-return",
ParameterConfigurations: []PatternParameterConfiguration{
ParameterConfigurations: []tools.PatternParameterConfiguration{
{
Name: "treatUndefinedAsUnspecified",
Value: "false",
Expand All @@ -118,8 +121,8 @@ func TestCreateEslintConfigUnnamedAndNamedParam(t *testing.T) {

func TestCreateEslintConfigSupportPlugins(t *testing.T) {
testConfig(t,
ToolConfiguration{
PatternsConfiguration: []PatternConfiguration{
tools.ToolConfiguration{
PatternsConfiguration: []tools.PatternConfiguration{
{
PatternId: "plugin/consistent-return",
},
Expand Down
Loading