aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-css-plugin/src
diff options
context:
space:
mode:
authorElena Vilchik2019-12-27 13:37:21 +0100
committerElena Vilchik2019-12-27 13:37:21 +0100
commita776768506979110e5de5a9531042d3c8716ceb3 (patch)
tree54cda05dec3123c18145fb28f9effabaee0a7f81 /sonar-css-plugin/src
parent0c7fadc03cca985bfc5fbae3a29f29cc71866bac (diff)
downloadsonar-css-a776768506979110e5de5a9531042d3c8716ceb3.tar.bz2
Analyze CSS in Vue Single File Components
Diffstat (limited to 'sonar-css-plugin/src')
-rw-r--r--sonar-css-plugin/src/main/java/org/sonar/css/plugin/CssRuleSensor.java14
-rw-r--r--sonar-css-plugin/src/test/java/org/sonar/css/plugin/CssRuleSensorTest.java9
-rw-r--r--sonar-css-plugin/src/test/resources/mock-start-server/startServer.js1
3 files changed, 18 insertions, 6 deletions
diff --git a/sonar-css-plugin/src/main/java/org/sonar/css/plugin/CssRuleSensor.java b/sonar-css-plugin/src/main/java/org/sonar/css/plugin/CssRuleSensor.java
index db961df..9b2241c 100644
--- a/sonar-css-plugin/src/main/java/org/sonar/css/plugin/CssRuleSensor.java
+++ b/sonar-css-plugin/src/main/java/org/sonar/css/plugin/CssRuleSensor.java
@@ -142,8 +142,8 @@ public class CssRuleSensor implements Sensor {
LOG.info(e.toString());
} catch (Exception e) {
- // we can end up here in the following cases: file analysis request sending, or response parsing, server is not answering
- // or some unpredicted state
+ // we can end up here in the following cases: fail to send file analysis request, fail to parse the response, server is not answering
+ // or some other unpredicted state
String msg = "Failure during CSS analysis, " + cssAnalyzerBridgeServer.getCommandInfo();
logErrorOrWarn(context, msg, e);
throwFailFast(context, e);
@@ -245,10 +245,18 @@ public class CssRuleSensor implements Sensor {
private static List<InputFile> getInputFiles(SensorContext context) {
FileSystem fileSystem = context.fileSystem();
+
FilePredicate mainFilePredicate = fileSystem.predicates().and(
fileSystem.predicates().hasType(InputFile.Type.MAIN),
fileSystem.predicates().hasLanguages(CssLanguage.KEY, "php", "web"));
- return StreamSupport.stream(fileSystem.inputFiles(mainFilePredicate).spliterator(), false)
+
+ FilePredicate vueFilePredicate = fileSystem.predicates().and(
+ fileSystem.predicates().hasType(InputFile.Type.MAIN),
+ fileSystem.predicates().hasExtension("vue"),
+ // by default 'vue' extension is defined for JS language, but 'vue' files can contain TS code and thus language can be changed
+ fileSystem.predicates().hasLanguages("js", "ts"));
+
+ return StreamSupport.stream(fileSystem.inputFiles(fileSystem.predicates().or(mainFilePredicate, vueFilePredicate)).spliterator(), false)
.collect(Collectors.toList());
}
diff --git a/sonar-css-plugin/src/test/java/org/sonar/css/plugin/CssRuleSensorTest.java b/sonar-css-plugin/src/test/java/org/sonar/css/plugin/CssRuleSensorTest.java
index 429722d..5490194 100644
--- a/sonar-css-plugin/src/test/java/org/sonar/css/plugin/CssRuleSensorTest.java
+++ b/sonar-css-plugin/src/test/java/org/sonar/css/plugin/CssRuleSensorTest.java
@@ -129,14 +129,15 @@ public class CssRuleSensorTest {
DefaultInputFile fileCss = addInputFile("file.css");
DefaultInputFile fileHtml = addInputFile("file.web");
DefaultInputFile filePhp = addInputFile("file.php");
+ DefaultInputFile fileVue = addInputFile("file.vue");
addInputFile("file.js");
sensor.execute(context);
- assertThat(context.allIssues()).hasSize(3);
+ assertThat(context.allIssues()).hasSize(4);
assertThat(context.allIssues())
.extracting("primaryLocation.component")
- .containsOnly(fileCss, fileHtml, filePhp);
+ .containsOnly(fileCss, fileHtml, filePhp, fileVue);
}
@Test
@@ -322,8 +323,10 @@ public class CssRuleSensorTest {
}
private DefaultInputFile addInputFile(String relativePath) {
+ String extension = relativePath.split("\\.")[1];
+ String language = extension.equals("vue") ? "js" : extension;
DefaultInputFile inputFile = new TestInputFileBuilder("moduleKey", relativePath)
- .setLanguage(relativePath.split("\\.")[1])
+ .setLanguage(language)
.setCharset(StandardCharsets.UTF_8)
.setContents("some css content\n on 2 lines")
.build();
diff --git a/sonar-css-plugin/src/test/resources/mock-start-server/startServer.js b/sonar-css-plugin/src/test/resources/mock-start-server/startServer.js
index 87298a9..b224e48 100644
--- a/sonar-css-plugin/src/test/resources/mock-start-server/startServer.js
+++ b/sonar-css-plugin/src/test/resources/mock-start-server/startServer.js
@@ -24,6 +24,7 @@ const requestHandler = (request, response) => {
case "file.css":
case "file.web":
case "file.php":
+ case "file.vue":
case "file.js": // to test that we will not save this issue even if it's provided by response
response.end(JSON.stringify([
{line: 2, rule: "block-no-empty", text: "Unexpected empty block"}