package pl.touk.sputnik.processor.eslint;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import pl.touk.sputnik.processor.eslint.json.FileViolations;
import pl.touk.sputnik.processor.eslint.json.Message;
import pl.touk.sputnik.processor.tools.externalprocess.ExternalProcessResultParser;
import pl.touk.sputnik.review.Severity;
import pl.touk.sputnik.review.Violation;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
class ESLintResultParser implements ExternalProcessResultParser {
private final ObjectMapper objectMapper = new ObjectMapper();
@Override
public List<Violation> parse(String output) {
List<Violation> result = new ArrayList<>();
try {
List<FileViolations> fileViolations =
objectMapper.readValue(output, new TypeReference<List<FileViolations>>() { });
for (FileViolations violation : fileViolations) {
for (Message message : violation.getMessages()) {
result.add(new Violation(violation.getFilePath(), message.getLine(), message.getMessage(),
mapSeverity(message.getSeverity())));
}
}
} catch (IOException e) {
throw new ESLintException("Error when converting from json format", e);
}
return result;
}
private Severity mapSeverity(int eslintValue) {
switch (eslintValue) {
case 1:
return Severity.WARNING;
case 2:
return Severity.ERROR;
default:
return Severity.INFO;
}
}
}