Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
79 changes: 79 additions & 0 deletions src/main/kotlin/app/extractors/CommonExtractor.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
// Copyright 2017 Sourcerer Inc. All Rights Reserved.
// Author: Anatoly Kislov (anatoly@sourcerer.io)

package app.extractors

import app.model.CommitStats
import app.model.DiffFile

class CommonExtractor : ExtractorInterface {
companion object {
val FILE_EXTS_MAP = lazy {
val reversedMap = mutableMapOf<String, List<String>>()
reversedMap.put("actionscript", listOf("as"))
reversedMap.put("arduino", listOf("ino"))
reversedMap.put("assembly", listOf("asm", "s", "S"))
reversedMap.put("clojure", listOf("clj", "cljs", "cljc", "edn"))
reversedMap.put("cobol", listOf("cbl", "cob", "cpy"))
reversedMap.put("coffeescript", listOf("coffee", "litcoffee"))
reversedMap.put("cuda", listOf("cu", "cuh"))
reversedMap.put("d", listOf("d"))
reversedMap.put("emacslisp", listOf("el", "elc"))
reversedMap.put("erlang", listOf("erl", "hrl"))
reversedMap.put("forth", listOf("forth", "4TH"))
reversedMap.put("fortran", listOf("f", "for", "f90", "f95", "f03",
"f08", "f15"))
reversedMap.put("gradle", listOf("gradle"))
reversedMap.put("groovy", listOf("groovy"))
reversedMap.put("haskell", listOf("hs", "lhs"))
reversedMap.put("html", listOf("html", "htm"))
reversedMap.put("j", listOf("ijs"))
reversedMap.put("julia", listOf("jl"))
reversedMap.put("kotlin", listOf("kt"))
reversedMap.put("lisp", listOf("lisp", "lsp", "l"))
reversedMap.put("lua", listOf("lua"))
reversedMap.put("makefile", listOf("makefile"))
reversedMap.put("matlab", listOf("m", "mlx"))
reversedMap.put("maven", listOf("pom"))
reversedMap.put("ocaml", listOf("ml", "mli"))
reversedMap.put("pascal", listOf("pas"))
reversedMap.put("perl", listOf("pl", "PL"))
reversedMap.put("powershell", listOf("ps1", "psm1", "psd1"))
reversedMap.put("processing", listOf("pde"))
reversedMap.put("prolog", listOf("pl", "pro", "P"))
reversedMap.put("puppet", listOf("pp"))
reversedMap.put("r", listOf("r", "R"))
reversedMap.put("rust", listOf("rs"))
reversedMap.put("sas", listOf("sas"))
reversedMap.put("scala", listOf("scala", "sc"))
reversedMap.put("scheme", listOf("scm", "ss"))
reversedMap.put("shell", listOf("sh"))
reversedMap.put("sql", listOf("sql"))
reversedMap.put("tcl", listOf("tcl"))
reversedMap.put("tex", listOf("tex"))
reversedMap.put("typescript", listOf("ts", "tsx"))
reversedMap.put("verilog", listOf("v"))
reversedMap.put("vhdl", listOf("vhdl"))
reversedMap.put("viml", listOf("vim"))
reversedMap.put("visualbasic", listOf("bas"))
reversedMap.put("vue", listOf("vue"))

val map = hashMapOf<String, String>()
reversedMap.forEach({ lang, exts ->
exts.forEach { ext -> map.put(ext, lang)}
})
map
}
}

override fun extract(files: List<DiffFile>): List<CommitStats> {
files.mapNotNull { file ->
val lang = FILE_EXTS_MAP.value[file.extension]
if (lang != null) {
file.language = lang
file
} else null
}
return super.extract(files)
}
}
18 changes: 0 additions & 18 deletions src/main/kotlin/app/extractors/EmptyExtractor.kt

This file was deleted.

3 changes: 1 addition & 2 deletions src/main/kotlin/app/extractors/Extractor.kt
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,7 @@ class Extractor : ExtractorInterface {
in GoExtractor.FILE_EXTS -> GoExtractor()
in ObjectiveCExtractor.FILE_EXTS -> ObjectiveCExtractor()
in SwiftExtractor.FILE_EXTS -> SwiftExtractor()
in KotlinExtractor.FILE_EXTS -> KotlinExtractor()
else -> EmptyExtractor()
else -> CommonExtractor()
}
}

Expand Down
42 changes: 24 additions & 18 deletions src/main/kotlin/app/extractors/ExtractorInterface.kt
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,17 @@ interface ExtractorInterface {
}

fun extract(files: List<DiffFile>): List<CommitStats> {
val langStats = files.filter { file -> file.language.isNotBlank() }
.groupBy { file -> file.language }
.map { (language, files) -> CommitStats(
numLinesAdded = files.fold(0) { total, file ->
total + file.getAllAdded().size },
numLinesDeleted = files.fold(0) { total, file ->
total + file.getAllDeleted().size },
type = Extractor.TYPE_LANGUAGE,
tech = language)
}

files.map { file ->
file.old.imports = extractImports(file.old.content)
file.new.imports = extractImports(file.new.content)
Expand All @@ -111,10 +122,14 @@ interface ExtractorInterface {
acc
}

// Skip library stats calculation if no imports found.
if (oldFilesImports.isEmpty() && newFilesImports.isEmpty()) {
return langStats
}

oldFilesImports.forEach { oldLibraryToCount[it] = 0}
newFilesImports.forEach { newLibraryToCount[it] = 0}


files.filter { file -> file.language.isNotBlank() }
.forEach { file ->
val oldFileLibraries = mutableListOf<String>()
Expand Down Expand Up @@ -143,23 +158,14 @@ interface ExtractorInterface {
val allImports = mutableSetOf<String>()
allImports.addAll(oldFilesImports + newFilesImports)

val libraryStats = allImports.map {
CommitStats(
numLinesAdded = newLibraryToCount.getOrDefault(it, 0),
numLinesDeleted = oldLibraryToCount.getOrDefault(it, 0),
type = Extractor.TYPE_LIBRARY,
tech = it)
}.filter {it.numLinesAdded > 0 || it.numLinesDeleted > 0}

return files.filter { file -> file.language.isNotBlank() }
.groupBy { file -> file.language }
.map { (language, files) -> CommitStats(
numLinesAdded = files.fold(0) { total, file ->
total + file.getAllAdded().size },
numLinesDeleted = files.fold(0) { total, file ->
total + file.getAllDeleted().size },
type = Extractor.TYPE_LANGUAGE,
tech = language)} + libraryStats
val libraryStats = allImports.map { CommitStats(
numLinesAdded = newLibraryToCount.getOrDefault(it, 0),
numLinesDeleted = oldLibraryToCount.getOrDefault(it, 0),
type = Extractor.TYPE_LIBRARY,
tech = it)
}.filter { it.numLinesAdded > 0 || it.numLinesDeleted > 0 }

return langStats + libraryStats
}

fun extractImports(fileContent: List<String>): List<String> {
Expand Down
16 changes: 0 additions & 16 deletions src/main/kotlin/app/extractors/KotlinExtractor.kt

This file was deleted.