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