diff options
| author | Amaury Levé | 2018-06-15 11:43:33 +0200 | 
|---|---|---|
| committer | GitHub | 2018-06-15 11:43:33 +0200 | 
| commit | 5fa2bf885df67839732ce45bca9b2d7dbdd1eb67 (patch) | |
| tree | 71e5c3c46ffdb216838bc22d44cd9fb69347029c /sonar-css-plugin/src/main/java | |
| parent | 6383829aa3b6b25975da1fe7c618e3f611d8c6e1 (diff) | |
| download | sonar-css-5fa2bf885df67839732ce45bca9b2d7dbdd1eb67.tar.bz2 | |
Add syntax highlighting (#46)
Diffstat (limited to 'sonar-css-plugin/src/main/java')
| -rw-r--r-- | sonar-css-plugin/src/main/java/org/sonar/css/plugin/MetricSensor.java | 62 | 
1 files changed, 42 insertions, 20 deletions
diff --git a/sonar-css-plugin/src/main/java/org/sonar/css/plugin/MetricSensor.java b/sonar-css-plugin/src/main/java/org/sonar/css/plugin/MetricSensor.java index fb9c522..abbbd50 100644 --- a/sonar-css-plugin/src/main/java/org/sonar/css/plugin/MetricSensor.java +++ b/sonar-css-plugin/src/main/java/org/sonar/css/plugin/MetricSensor.java @@ -19,6 +19,9 @@   */  package org.sonar.css.plugin; +import java.io.IOException; +import java.util.List; +import javax.script.ScriptException;  import org.sonar.api.batch.fs.FileSystem;  import org.sonar.api.batch.fs.InputFile;  import org.sonar.api.batch.sensor.Sensor; @@ -29,11 +32,6 @@ import org.sonar.api.batch.sensor.highlighting.TypeOfText;  import org.sonar.api.utils.log.Logger;  import org.sonar.api.utils.log.Loggers; -import javax.script.ScriptException; - -import java.io.IOException; -import java.util.Optional; -  public class MetricSensor implements Sensor {    private static final Logger LOG = Loggers.get(MetricSensor.class); @@ -59,9 +57,45 @@ public class MetricSensor implements Sensor {    private static void saveHighlights(SensorContext sensorContext, InputFile input, Tokenizer tokenizer) {      try {        NewHighlighting highlighting = sensorContext.newHighlighting().onFile(input); -      tokenizer.tokenize(input.contents()) -        .forEach(token -> getHighlightingType(token).ifPresent(type -> -          highlighting.highlight(token.startLine, token.startColumn, token.endLine, token.endColumn, type))); +      List<Token> tokenList = tokenizer.tokenize(input.contents()); + +      for (int i = 0; i < tokenList.size(); i++) { +        Token currentToken = tokenList.get(i); +        Token nextToken = i + 1 == tokenList.size() ? null : tokenList.get(i + 1); + +        TypeOfText highlightingType = null; +        switch (currentToken.type) { +          case COMMENT: +            highlightingType = TypeOfText.COMMENT; +            break; + +          case STRING: +            highlightingType = TypeOfText.STRING; +            break; + +          case WORD: +            if (Character.isDigit(currentToken.text.charAt(0)) || currentToken.text.matches("^#[0-9a-fA-F]+$")) { +              highlightingType = TypeOfText.CONSTANT; +            } else if (nextToken != null && nextToken.text.equals(":")) { +              highlightingType = TypeOfText.KEYWORD_LIGHT; +            } else if (currentToken.text.startsWith(".") || (nextToken != null && nextToken.text.startsWith("{"))) { +              highlightingType = TypeOfText.KEYWORD; +            } +            break; + +          case AT_WORD: +            highlightingType = TypeOfText.ANNOTATION; +            break; + +          default: +            highlightingType = null; +        } + +        if (highlightingType != null) { +          highlighting.highlight(currentToken.startLine, currentToken.startColumn - 1, currentToken.endLine, currentToken.endColumn, highlightingType); +        } +      } +        highlighting.save();      } catch (ScriptException e) { @@ -71,16 +105,4 @@ public class MetricSensor implements Sensor {      }    } -  private static Optional<TypeOfText> getHighlightingType(Token token) { -    switch (token.type) { -      case COMMENT: -        return Optional.of(TypeOfText.COMMENT); - -      case STRING: -        return Optional.of(TypeOfText.STRING); - -      default: -        return Optional.empty(); -    } -  }  }  | 
