diff options
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."); } } |
