use aceMode or codemirrorMode to determine programming language

This commit is contained in:
Sebastian Sdorra
2020-01-23 16:26:13 +01:00
parent fe8e4db10b
commit 09bde1e3bb
6 changed files with 59 additions and 8 deletions

View File

@@ -278,13 +278,13 @@
<dependency> <dependency>
<groupId>com.github.sdorra</groupId> <groupId>com.github.sdorra</groupId>
<artifactId>spotter-core</artifactId> <artifactId>spotter-core</artifactId>
<version>2.0.0</version> <version>2.1.1</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.apache.tika</groupId> <groupId>org.apache.tika</groupId>
<artifactId>tika-core</artifactId> <artifactId>tika-core</artifactId>
<version>1.22</version> <version>1.23</version>
</dependency> </dependency>
<!-- class loader leak prevention --> <!-- class loader leak prevention -->

View File

@@ -122,7 +122,9 @@ public class ContentResource {
private void appendContentHeader(String path, byte[] head, Response.ResponseBuilder responseBuilder) { private void appendContentHeader(String path, byte[] head, Response.ResponseBuilder responseBuilder) {
ContentType contentType = ContentTypes.detect(path, head); ContentType contentType = ContentTypes.detect(path, head);
responseBuilder.header("Content-Type", contentType.getRaw()); responseBuilder.header("Content-Type", contentType.getRaw());
contentType.getLanguage().ifPresent(language -> responseBuilder.header("X-Programming-Language", language)); contentType.getLanguage().ifPresent(
language -> responseBuilder.header(ProgrammingLanguages.HEADER, ProgrammingLanguages.getValue(language))
);
} }
private byte[] getHead(String revision, String path, RepositoryService repositoryService) throws IOException { private byte[] getHead(String revision, String path, RepositoryService repositoryService) throws IOException {

View File

@@ -65,7 +65,7 @@ final class DiffResultToDiffResultDtoMapper {
Optional<Language> language = ContentTypes.detect(path).getLanguage(); Optional<Language> language = ContentTypes.detect(path).getLanguage();
language.ifPresent(value -> dto.setLanguage(value.getName())); language.ifPresent(value -> dto.setLanguage(ProgrammingLanguages.getValue(value)));
List<DiffResultDto.HunkDto> hunks = new ArrayList<>(); List<DiffResultDto.HunkDto> hunks = new ArrayList<>();
for (Hunk hunk : file) { for (Hunk hunk : file) {

View File

@@ -0,0 +1,24 @@
package sonia.scm.api.v2.resources;
import com.github.sdorra.spotter.Language;
import java.util.Optional;
final class ProgrammingLanguages {
static final String HEADER = "X-Programming-Language";
private static final String DEFAULT = "text";
private ProgrammingLanguages() {
}
static String getValue(Language language) {
Optional<String> aceMode = language.getAceMode();
if (!aceMode.isPresent()) {
Optional<String> codemirrorMode = language.getCodemirrorMode();
return codemirrorMode.orElse(DEFAULT);
}
return aceMode.get();
}
}

View File

@@ -23,7 +23,7 @@ class DiffResultToDiffResultDtoMapperTest {
void shouldMapDiffResult() { void shouldMapDiffResult() {
DiffResult result = result( DiffResult result = result(
addedFile("A.java", "abc"), addedFile("A.java", "abc"),
modifiedFile("B.tsx", "def", "abc", modifiedFile("B.ts", "def", "abc",
hunk("@@ -3,4 1,2 @@", 1, 2, 3, 4, hunk("@@ -3,4 1,2 @@", 1, 2, 3, 4,
insertedLine("a", 1), insertedLine("a", 1),
modifiedLine("b", 2), modifiedLine("b", 2),
@@ -36,9 +36,9 @@ class DiffResultToDiffResultDtoMapperTest {
DiffResultDto dto = DiffResultToDiffResultDtoMapper.INSTANCE.map(result); DiffResultDto dto = DiffResultToDiffResultDtoMapper.INSTANCE.map(result);
List<DiffResultDto.FileDto> files = dto.getFiles(); List<DiffResultDto.FileDto> files = dto.getFiles();
assertAddedFile(files.get(0), "A.java", "abc", "Java"); assertAddedFile(files.get(0), "A.java", "abc", "java");
assertModifiedFile(files.get(1), "B.tsx", "abc", "def", "TypeScript"); assertModifiedFile(files.get(1), "B.ts", "abc", "def", "typescript");
assertDeletedFile(files.get(2), "C.go", "ghi", "Go"); assertDeletedFile(files.get(2), "C.go", "ghi", "golang");
DiffResultDto.HunkDto hunk = files.get(1).getHunks().get(0); DiffResultDto.HunkDto hunk = files.get(1).getHunks().get(0);
assertHunk(hunk, "@@ -3,4 1,2 @@", 1, 2, 3, 4); assertHunk(hunk, "@@ -3,4 1,2 @@", 1, 2, 3, 4);

View File

@@ -0,0 +1,25 @@
package sonia.scm.api.v2.resources;
import com.github.sdorra.spotter.Language;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
class ProgrammingLanguagesTest {
@Test
void shouldReturnAceModeIfPresent() {
assertThat(ProgrammingLanguages.getValue(Language.GO)).isEqualTo("golang");
assertThat(ProgrammingLanguages.getValue(Language.JAVA)).isEqualTo("java");
}
@Test
void shouldReturnCodemirrorIfAceModeIsMissing() {
assertThat(ProgrammingLanguages.getValue(Language.HTML_ECR)).isEqualTo("htmlmixed");
}
@Test
void shouldReturnTextIfNoModeIsPresent() {
assertThat(ProgrammingLanguages.getValue(Language.HXML)).isEqualTo("text");
}
}