From 8860acb9f314483a157bc7e3a8e2f473bd8a71c2 Mon Sep 17 00:00:00 2001 From: Nickolas Gupton Date: Wed, 4 Dec 2019 21:03:30 -0600 Subject: [PATCH] feat: Adds Byond detection support --- src/main/kotlin/app/extractors/DMExtractor.kt | 43 +++++++++++++++++++ src/main/kotlin/app/extractors/Heuristics.kt | 9 ++++ src/main/kotlin/app/extractors/Languages.kt | 1 + 3 files changed, 53 insertions(+) create mode 100644 src/main/kotlin/app/extractors/DMExtractor.kt diff --git a/src/main/kotlin/app/extractors/DMExtractor.kt b/src/main/kotlin/app/extractors/DMExtractor.kt new file mode 100644 index 00000000..bfed3672 --- /dev/null +++ b/src/main/kotlin/app/extractors/DMExtractor.kt @@ -0,0 +1,43 @@ +// Copyright 2019 Sourcerer Inc. All Rights Reserved. +// Author: Nickolas Gupton (nickolas@gupton.xyz) + +package app.extractors + +import app.model.CommitStats +import app.model.DiffFile + +class DMExtractor : ExtractorInterface { + companion object { + const val LANGUAGE_NAME = Lang.DM + } + + override fun extractLibStats(files: List): List { + val mapExtension = ".dmm" + val spriteExtension = ".dmi" + + val mapFiles = files.filter { it.path.endsWith(mapExtension) } + val spriteFiles = files.filter { it.path.endsWith(spriteExtension) } + + // Add stats from *.dmm files. + val mapStats = listOf(CommitStats( + numLinesAdded = mapFiles.map { it.getAllAdded().size }.sum(), + numLinesDeleted = mapFiles.map { it.getAllDeleted().size }.sum(), + type = ExtractorInterface.TYPE_LIBRARY, + tech = "dm.byond-mapping" + )).filter { it.numLinesAdded > 0 || it.numLinesDeleted > 0 } + + // Add stats from *.dmi files. + val spriteStats = listOf(CommitStats( + numLinesAdded = spriteFiles.map { it.getAllAdded().size }.sum(), + numLinesDeleted = spriteFiles.map { it.getAllDeleted().size }.sum(), + type = ExtractorInterface.TYPE_LIBRARY, + tech = "dm.byond-sprites" + )).filter { it.numLinesAdded > 0 || it.numLinesDeleted > 0 } + + return mapStats + spriteStats; + } + + override fun getLanguageName(): String? { + return LANGUAGE_NAME + } +} diff --git a/src/main/kotlin/app/extractors/Heuristics.kt b/src/main/kotlin/app/extractors/Heuristics.kt index 70ce3be4..c054c9d4 100644 --- a/src/main/kotlin/app/extractors/Heuristics.kt +++ b/src/main/kotlin/app/extractors/Heuristics.kt @@ -450,6 +450,15 @@ val HeuristicsMap = mapOf ExtractorInterface?>( "dlm" to { _, _ -> CommonExtractor(Lang.IDL) }, + "dm" to { _, _ -> + DMExtractor(Lang.DM) + }, + "dmm" to { _, _ -> + DMExtractor(Lang.DM) + }, + "dmi" to { _, _ -> + DMExtractor(Lang.DM) + }, "dpr" to { _, _ -> CommonExtractor(Lang.PASCAL) }, diff --git a/src/main/kotlin/app/extractors/Languages.kt b/src/main/kotlin/app/extractors/Languages.kt index 8781fc8f..a72c929c 100644 --- a/src/main/kotlin/app/extractors/Languages.kt +++ b/src/main/kotlin/app/extractors/Languages.kt @@ -21,6 +21,7 @@ object Lang { const val CUDA = "cuda" // Cuda const val D = "d" // D const val DART = "dart" // Dart + const val DM = "dm" // DM Language const val DOSBATCH = "dosbatch" // DOS Batch const val DTRACE = "dtrace" // DTrace const val ELIXIR = "elixir" // Elixir