Skip to content
This repository has been archived by the owner on May 25, 2022. It is now read-only.

Commit

Permalink
fix: fix ext to languages not a list issues
Browse files Browse the repository at this point in the history
  • Loading branch information
phodal committed Mar 24, 2022
1 parent 4f666be commit 81bb0c2
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -11,24 +11,29 @@ import java.io.File
class LanguageService {
private val extensionCache: HashMap<String, String> = hashMapOf()
private val SHE_BANG: String = "#!"
private var extToLanguage: MutableMap<String, String> = mutableMapOf()
private var extToLanguages: MutableMap<String, List<String>> = mutableMapOf()
private var filenameToLanguage: MutableMap<String, String> = mutableMapOf()

init {
val fileContent = this.javaClass.classLoader.getResource("languages.json").readText()
val languages = Json.decodeFromString<Array<Language>>(fileContent)
languages.forEach { entry ->
entry.extensions.forEach {
extToLanguage[it] = entry.name
if (extToLanguages[it] == null) {
extToLanguages[it] = listOf()
}

extToLanguages[it] = extToLanguages[it]!!.plus(entry.name)
}
entry.fileNames?.forEach {
filenameToLanguage[it] = entry.name
}
}
}

fun detectLanguage(name: String): String {
var language = ""
fun detectLanguage(name: String): List<String> {
var language: List<String> = listOf()

val dotCount = name.count { it == '.' }

// such as `.gitignore` file
Expand All @@ -38,31 +43,31 @@ class LanguageService {
if (ifNeedToCheckFullName) {
val optFilenameLang = filenameToLanguage[name.lowercase()]
if (optFilenameLang != null) {
return optFilenameLang.toString()
return listOf(optFilenameLang)
}

// make others file a shebang
language = SHE_BANG
language = listOf(SHE_BANG)
}

// Lookup in case the full name matches
val fullNameExt = extToLanguage[name.lowercase()]
val fullNameExt = extToLanguages[name.lowercase()]
if (fullNameExt != null) {
return fullNameExt
}

val ext = this.getExtension(name)
val optLang = extToLanguage[ext.lowercase()]
val optLang = extToLanguages[ext.lowercase()]
if (optLang != null) {
return optLang.toString()
return optLang
}

// if multiple extension file is lost, fallback

val secondExt = this.getExtension(ext)
val fallbackLang = extToLanguage[secondExt.lowercase()]
val fallbackLang = extToLanguages[secondExt.lowercase()]
if (fallbackLang != null) {
return fallbackLang.toString()
return fallbackLang
}

return language
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ class ScannerService(private val gitAdapter: JGitAdapter, private val bean2Sql:

val countFile = File(filepath)
if (countFile.isFile) {
lang = languageService.detectLanguage(countFile.name)
lang = languageService.detectLanguage(countFile.name)[0]
if (lang.isNotEmpty()) {
lineCounts = LineCounter.byPath(filepath)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,25 +9,25 @@ internal class LanguageServiceTest {
@Test
fun should_return_LICENSE_when_is_a_license_file() {
val lang = LanguageService()
assertEquals("License", lang.detectLanguage("LICENSE"))
assertEquals("License", lang.detectLanguage("LICENSE")[0])
}

@Test
fun should_check_gitignore() {
val lang = LanguageService()
assertEquals("gitignore", lang.detectLanguage(".gitignore"))
assertEquals("gitignore", lang.detectLanguage(".gitignore")[0])
}

@Test
fun should_return_typescript_define_file() {
val lang = LanguageService()
assertEquals("TypeScript Typings", lang.detectLanguage("types.d.ts"))
assertEquals("TypeScript Typings", lang.detectLanguage("types.d.ts")[0])
}

@Test
fun should_test_get_extension_no_extension() {
val lang = LanguageService()
assertEquals("CloudFormation (YAML)", lang.detectLanguage(".travis.yml"))
assertEquals("YAML", lang.detectLanguage(".travis.yml")[0])
}

@Test
Expand Down

0 comments on commit 81bb0c2

Please sign in to comment.