Skip to content

Commit e22c697

Browse files
author
Aurélien Baudet
committed
Merge branch 'features/eslint' into sonar-4.5.x
2 parents 734dfc9 + 805ef4c commit e22c697

File tree

230 files changed

+18161
-10
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

230 files changed

+18161
-10
lines changed

sonar-web-frontend-js/src/main/java/fr/sii/sonar/web/frontend/js/JsPlugin.java

Lines changed: 39 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,14 @@
1616
import fr.sii.sonar.web.frontend.js.coverage.LcovUnitCoverageSensor;
1717
import fr.sii.sonar.web.frontend.js.duplication.JsDuplicationConstants;
1818
import fr.sii.sonar.web.frontend.js.duplication.JsDuplicationSensor;
19-
import fr.sii.sonar.web.frontend.js.quality.JsHintQualityConstants;
20-
import fr.sii.sonar.web.frontend.js.quality.JsHintQualitySensor;
21-
import fr.sii.sonar.web.frontend.js.quality.JshintProfileDefinition;
22-
import fr.sii.sonar.web.frontend.js.quality.JshintRulesDefinition;
19+
import fr.sii.sonar.web.frontend.js.quality.eslint.EslintProfileDefinition;
20+
import fr.sii.sonar.web.frontend.js.quality.eslint.EslintQualityConstants;
21+
import fr.sii.sonar.web.frontend.js.quality.eslint.EslintQualitySensor;
22+
import fr.sii.sonar.web.frontend.js.quality.eslint.EslintRulesDefinition;
23+
import fr.sii.sonar.web.frontend.js.quality.jshint.JsHintQualityConstants;
24+
import fr.sii.sonar.web.frontend.js.quality.jshint.JsHintQualitySensor;
25+
import fr.sii.sonar.web.frontend.js.quality.jshint.JshintProfileDefinition;
26+
import fr.sii.sonar.web.frontend.js.quality.jshint.JshintRulesDefinition;
2327
import fr.sii.sonar.web.frontend.js.test.JUnitConstants;
2428
import fr.sii.sonar.web.frontend.js.test.JUnitIntegrationConstants;
2529
import fr.sii.sonar.web.frontend.js.test.JUnitIntegrationReportSensor;
@@ -81,6 +85,37 @@ public List getExtensions() {
8185
JshintProfileDefinition.class,
8286
JsHintQualitySensor.class,
8387

88+
// Quality configuration for ESLint
89+
PropertyDefinition.builder(EslintQualityConstants.REPORT_PATH_KEY)
90+
.defaultValue(EslintQualityConstants.REPORT_PATH_DEFVALUE)
91+
.category(EslintQualityConstants.CATEGORY)
92+
.subCategory(EslintQualityConstants.SUB_CATEGORY)
93+
.name("JavaScript quality report path for ESLint")
94+
.description("The path to the JavaScript report file to load")
95+
.onQualifiers(Qualifiers.PROJECT)
96+
.build(),
97+
PropertyDefinition.builder(EslintQualityConstants.FAIL_MISSING_FILE_KEY)
98+
.defaultValue(EslintQualityConstants.FAIL_MISSING_FILE_DEFVALUE)
99+
.category(EslintQualityConstants.CATEGORY)
100+
.subCategory(EslintQualityConstants.SUB_CATEGORY)
101+
.name("Fail on missing source file")
102+
.description("True to stop analysis if a source file is not found")
103+
.onQualifiers(Qualifiers.PROJECT)
104+
.build(),
105+
PropertyDefinition.builder(EslintQualityConstants.SKIP_FILE_METRICS_KEY)
106+
.defaultValue(EslintQualityConstants.SKIP_FILE_METRICS_DEFVALUE)
107+
.category(EslintQualityConstants.CATEGORY)
108+
.subCategory(EslintQualityConstants.SUB_CATEGORY)
109+
.name("Skip save of file metrics")
110+
.description("If you have several plugins that are able to handle JavaScript, you may have an error (Can not add the same measure twice). Set it to true to let the other plugin save the metrics")
111+
.onQualifiers(Qualifiers.PROJECT)
112+
.build(),
113+
114+
EslintQualityConstants.class,
115+
EslintRulesDefinition.class,
116+
EslintProfileDefinition.class,
117+
EslintQualitySensor.class,
118+
84119
// Unit coverage configuration
85120
PropertyDefinition.builder(LcovUnitCoverageConstants.REPORT_PATH_KEY)
86121
.defaultValue(LcovUnitCoverageConstants.REPORT_PATH_DEFVALUE)
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package fr.sii.sonar.web.frontend.js.quality.eslint;
2+
3+
import org.sonar.api.rules.RuleFinder;
4+
5+
import fr.sii.sonar.report.core.quality.profile.JsonProfileParser;
6+
import fr.sii.sonar.report.core.quality.profile.ProfileFileDefinition;
7+
8+
/**
9+
* Just a specific implementation to help dependency injection
10+
*
11+
* @author Aurélien Baudet
12+
*
13+
*/
14+
public class EslintProfileDefinition extends ProfileFileDefinition {
15+
16+
public EslintProfileDefinition(RuleFinder ruleFinder, EslintQualityConstants constants) {
17+
super(constants.getProfileJsonPath(), new JsonProfileParser(), ruleFinder);
18+
}
19+
20+
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package fr.sii.sonar.web.frontend.js.quality.eslint;
2+
3+
import fr.sii.sonar.report.core.common.rules.RulesDefinitionConstants;
4+
import fr.sii.sonar.report.core.quality.ProfileDefinitionConstants;
5+
import fr.sii.sonar.report.core.quality.QualityConstants;
6+
import fr.sii.sonar.web.frontend.js.JsLanguageConstants;
7+
8+
public class EslintQualityConstants extends JsLanguageConstants implements QualityConstants, RulesDefinitionConstants, ProfileDefinitionConstants {
9+
public static final String REPORT_PATH_KEY = "sonar.sii.quality.js.eslint.report.path";
10+
public static final String FAIL_MISSING_FILE_KEY = "sonar.sii.quality.js.eslint.file.missing.fail";
11+
public static final String SKIP_FILE_METRICS_KEY = "sonar.sii.quality.js.eslint.file.metrics.skip";
12+
public static final String SKIP_FILE_METRICS_DEFVALUE = "false";
13+
public static final String REPORT_PATH_DEFVALUE = "/reports/sonar/eslint.json";
14+
public static final String FAIL_MISSING_FILE_DEFVALUE = "true";
15+
public static final String RULES_PATH = "/rules/eslint.json";
16+
public static final String REPOSITORY_NAME = "ESLint";
17+
public static final String REPOSITORY_KEY = "eslint";
18+
public static final String SUB_CATEGORY = "Quality";
19+
public static final String PROFILE_PATH = "/profiles/eslint.json";
20+
21+
public String getReportPathKey() {
22+
return REPORT_PATH_KEY;
23+
}
24+
25+
public String getRepositoryKey() {
26+
return REPOSITORY_KEY;
27+
}
28+
29+
public String getMissingFileFailKey() {
30+
return FAIL_MISSING_FILE_KEY;
31+
}
32+
33+
public String getRepositoryName() {
34+
return REPOSITORY_NAME;
35+
}
36+
37+
public String getRulesJsonPath() {
38+
return RULES_PATH;
39+
}
40+
41+
public String getProfileJsonPath() {
42+
return PROFILE_PATH;
43+
}
44+
45+
public String getSkipFileMetricsKey() {
46+
return SKIP_FILE_METRICS_KEY;
47+
}
48+
49+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package fr.sii.sonar.web.frontend.js.quality.eslint;
2+
3+
import fr.sii.sonar.report.core.common.PluginDependencies;
4+
import fr.sii.sonar.report.core.common.ReportSensor;
5+
import fr.sii.sonar.report.core.quality.domain.report.QualityReport;
6+
import fr.sii.sonar.report.core.quality.factory.JsonQualityReportProviderFactory;
7+
import fr.sii.sonar.report.core.quality.factory.QualitySaverFactory;
8+
9+
/**
10+
* Just a specific implementation to help dependency injection
11+
*
12+
* @author Aurélien Baudet
13+
*
14+
*/
15+
public class EslintQualitySensor extends ReportSensor<QualityReport> {
16+
17+
public EslintQualitySensor(EslintQualityConstants constants, PluginDependencies pluginDependencies) {
18+
super(constants, pluginDependencies, new JsonQualityReportProviderFactory(), new QualitySaverFactory());
19+
}
20+
21+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package fr.sii.sonar.web.frontend.js.quality.eslint;
2+
3+
import fr.sii.sonar.report.core.common.rules.ComposableRulesDefinition;
4+
5+
/**
6+
* Repository for ESLint rules
7+
*
8+
* @author Aurélien Baudet
9+
*
10+
*/
11+
public class EslintRulesDefinition extends ComposableRulesDefinition {
12+
13+
public EslintRulesDefinition(EslintQualityConstants constants) {
14+
super(constants);
15+
}
16+
17+
}

sonar-web-frontend-js/src/main/java/fr/sii/sonar/web/frontend/js/quality/JsHintQualityConstants.java renamed to sonar-web-frontend-js/src/main/java/fr/sii/sonar/web/frontend/js/quality/jshint/JsHintQualityConstants.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package fr.sii.sonar.web.frontend.js.quality;
1+
package fr.sii.sonar.web.frontend.js.quality.jshint;
22

33
import fr.sii.sonar.report.core.common.rules.RulesDefinitionConstants;
44
import fr.sii.sonar.report.core.quality.ProfileDefinitionConstants;

sonar-web-frontend-js/src/main/java/fr/sii/sonar/web/frontend/js/quality/JsHintQualitySensor.java renamed to sonar-web-frontend-js/src/main/java/fr/sii/sonar/web/frontend/js/quality/jshint/JsHintQualitySensor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package fr.sii.sonar.web.frontend.js.quality;
1+
package fr.sii.sonar.web.frontend.js.quality.jshint;
22

33
import fr.sii.sonar.report.core.common.PluginDependencies;
44
import fr.sii.sonar.report.core.common.ReportSensor;

sonar-web-frontend-js/src/main/java/fr/sii/sonar/web/frontend/js/quality/JshintProfileDefinition.java renamed to sonar-web-frontend-js/src/main/java/fr/sii/sonar/web/frontend/js/quality/jshint/JshintProfileDefinition.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package fr.sii.sonar.web.frontend.js.quality;
1+
package fr.sii.sonar.web.frontend.js.quality.jshint;
22

33
import org.sonar.api.rules.RuleFinder;
44

sonar-web-frontend-js/src/main/java/fr/sii/sonar/web/frontend/js/quality/JshintRulesDefinition.java renamed to sonar-web-frontend-js/src/main/java/fr/sii/sonar/web/frontend/js/quality/jshint/JshintRulesDefinition.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package fr.sii.sonar.web.frontend.js.quality;
1+
package fr.sii.sonar.web.frontend.js.quality.jshint;
22

33
import fr.sii.sonar.report.core.common.rules.ComposableRulesDefinition;
44

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"name": "eslint",
3+
"language": "js",
4+
"repositories": [{
5+
"key": "eslint",
6+
"rules": "/rules/eslint.json"
7+
}],
8+
"rules": [{
9+
"repositoryKey": "eslint",
10+
"key": "unknown-rule"
11+
}]
12+
}

0 commit comments

Comments
 (0)