aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorElena Vilchik2018-06-28 10:15:14 +0200
committerAmaury Levé2018-06-28 10:15:14 +0200
commit3006ae9acfe75609cd843c7017735f5584ec236b (patch)
tree7246d9208502ec349fd70bdb2fb07e574ce4c60f
parentace698da0dd37aee4070fbabce052ec30fe89395 (diff)
downloadsonar-css-3006ae9acfe75609cd843c7017735f5584ec236b.tar.bz2
Improve logic of node executable detection (#95)
-rw-r--r--sonar-css-plugin/src/main/java/org/sonar/css/plugin/CssPlugin.java4
-rw-r--r--sonar-css-plugin/src/main/java/org/sonar/css/plugin/StylelintCommandProvider.java17
-rw-r--r--sonar-css-plugin/src/test/java/org/sonar/css/plugin/StylelintCommandProviderTest.java16
3 files changed, 29 insertions, 8 deletions
diff --git a/sonar-css-plugin/src/main/java/org/sonar/css/plugin/CssPlugin.java b/sonar-css-plugin/src/main/java/org/sonar/css/plugin/CssPlugin.java
index 5300947..323f628 100644
--- a/sonar-css-plugin/src/main/java/org/sonar/css/plugin/CssPlugin.java
+++ b/sonar-css-plugin/src/main/java/org/sonar/css/plugin/CssPlugin.java
@@ -34,7 +34,6 @@ public class CssPlugin implements Plugin {
public static final String STYLELINT_REPORT_PATHS_DEFAULT_VALUE = "";
public static final String NODE_EXECUTABLE = "sonar.css.node";
- public static final String NODE_EXECUTABLE_DEFAULT = "node";
private static final String CSS_CATEGORY = "CSS";
private static final String LINTER_SUBCATEGORY = "Popular Rule Engines";
@@ -66,9 +65,8 @@ public class CssPlugin implements Plugin {
.build(),
PropertyDefinition.builder(NODE_EXECUTABLE)
- .defaultValue(NODE_EXECUTABLE_DEFAULT)
.name("Node.js executable")
- .description("Node.js executable used to run the analysis of CSS files.")
+ .description("Path to the Node.js executable that will be used to run the analysis of CSS files. When not set, expects 'node' to be in the path.")
.subCategory(GENERAL_SUBCATEGORY)
.category(CSS_CATEGORY)
.hidden()
diff --git a/sonar-css-plugin/src/main/java/org/sonar/css/plugin/StylelintCommandProvider.java b/sonar-css-plugin/src/main/java/org/sonar/css/plugin/StylelintCommandProvider.java
index 52fa93f..56f1ccb 100644
--- a/sonar-css-plugin/src/main/java/org/sonar/css/plugin/StylelintCommandProvider.java
+++ b/sonar-css-plugin/src/main/java/org/sonar/css/plugin/StylelintCommandProvider.java
@@ -34,6 +34,9 @@ public class StylelintCommandProvider implements LinterCommandProvider {
private static final Logger LOG = Loggers.get(StylelintCommandProvider.class);
private static final String CONFIG_PATH = "css-bundle/stylelintconfig.json";
+ private static final String NODE_EXECUTABLE_DEFAULT = "node";
+
+ private String nodeExecutable = null;
@Override
public String[] commandParts(File deployDestination, SensorContext context) {
@@ -59,6 +62,14 @@ public class StylelintCommandProvider implements LinterCommandProvider {
@Override
public String nodeExecutable(Configuration configuration) {
+ if (nodeExecutable == null) {
+ nodeExecutable = retrieveNodeExecutableFromConfig(configuration);
+ }
+
+ return nodeExecutable;
+ }
+
+ private static String retrieveNodeExecutableFromConfig(Configuration configuration) {
Optional<String> nodeExecutableOptional = configuration.get(CssPlugin.NODE_EXECUTABLE);
if (nodeExecutableOptional.isPresent()) {
String nodeExecutable = nodeExecutableOptional.get();
@@ -66,8 +77,10 @@ public class StylelintCommandProvider implements LinterCommandProvider {
if (file.exists()) {
return nodeExecutable;
}
- LOG.warn("Provided node executable file does not exist: " + file);
+
+ LOG.warn("Provided node executable file does not exist: " + file + ". Fallback to using 'node' from path.");
}
- return CssPlugin.NODE_EXECUTABLE_DEFAULT;
+
+ return NODE_EXECUTABLE_DEFAULT;
}
}
diff --git a/sonar-css-plugin/src/test/java/org/sonar/css/plugin/StylelintCommandProviderTest.java b/sonar-css-plugin/src/test/java/org/sonar/css/plugin/StylelintCommandProviderTest.java
index 3ae3250..0a44e18 100644
--- a/sonar-css-plugin/src/test/java/org/sonar/css/plugin/StylelintCommandProviderTest.java
+++ b/sonar-css-plugin/src/test/java/org/sonar/css/plugin/StylelintCommandProviderTest.java
@@ -57,20 +57,30 @@ public class StylelintCommandProviderTest {
}
@Test
- public void test_node_executable() throws Exception {
+ public void test_node_executable_wo_settings() throws Exception {
StylelintCommandProvider stylelintCommandProvider = new StylelintCommandProvider();
-
MapSettings settings = new MapSettings();
assertThat(stylelintCommandProvider.nodeExecutable(settings.asConfig())).isEqualTo("node");
assertThat(logTester.logs(LoggerLevel.WARN)).isEmpty();
+ }
+ @Test
+ public void test_node_executable_custom() throws Exception {
+ StylelintCommandProvider stylelintCommandProvider = new StylelintCommandProvider();
+ MapSettings settings = new MapSettings();
File customNode = temporaryFolder.newFile("custom-node.exe");
settings.setProperty(CssPlugin.NODE_EXECUTABLE, customNode.getAbsolutePath());
assertThat(stylelintCommandProvider.nodeExecutable(settings.asConfig())).isEqualTo(customNode.getAbsolutePath());
assertThat(logTester.logs(LoggerLevel.WARN)).isEmpty();
+ }
+ @Test
+ public void test_node_executable_custom_invalid() throws Exception {
+ StylelintCommandProvider stylelintCommandProvider = new StylelintCommandProvider();
+
+ MapSettings settings = new MapSettings();
settings.setProperty(CssPlugin.NODE_EXECUTABLE, "mynode");
assertThat(stylelintCommandProvider.nodeExecutable(settings.asConfig())).isEqualTo("node");
- assertThat(logTester.logs(LoggerLevel.WARN)).contains("Provided node executable file does not exist: mynode");
+ assertThat(logTester.logs(LoggerLevel.WARN)).contains("Provided node executable file does not exist: mynode. Fallback to using 'node' from path.");
}
}