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

Commit

Permalink
feat: add basic second ext for try
Browse files Browse the repository at this point in the history
  • Loading branch information
phodal committed Mar 24, 2022
1 parent 75d3a80 commit 54de4fc
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 9 deletions.
Original file line number Diff line number Diff line change
@@ -1,10 +1,16 @@
// based on [https://github.com/boyter/scc](https://github.com/boyter/scc) with MIT LICENSE.
// SPDX-License-Identifier: MIT OR Unlicense

package com.thoughtworks.archguard.git.scanner

import com.thoughtworks.archguard.git.scanner.model.Language
import kotlinx.serialization.decodeFromString
import kotlinx.serialization.json.Json
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 filenameToLanguage: MutableMap<String, String> = mutableMapOf()

Expand All @@ -22,7 +28,7 @@ class LanguageService {
}

fun detectLanguage(name: String): String {
val language = ""
var language = ""
val dotCount = name.count { it == '.' }

// such as `.gitignore` file
Expand All @@ -34,14 +40,39 @@ class LanguageService {
if (optFilenameLang != null) {
return optFilenameLang.toString()
}

// make others file a shebang
language = SHE_BANG
}

val dotSplit = name.split(".")
val firstExt = dotSplit.last()
val optLang = extToLanguage[firstExt.lowercase()]
val ext = this.getExtension(name)
val optLang = extToLanguage[ext.lowercase()]
if (optLang != null) {
return optLang.toString()
}
return language
}

fun getExtension(name: String): String {
val lowercase = name.lowercase()
var extension = extensionCache[lowercase]
if (extension != null) {
return extension
}

val ext = File(name).extension
if (ext == "" || name.last() == '.') {
extension = name
} else {
// Handling multiple dots or multiple extensions only needs to delete the last extension
// and then call filepath.Ext.
// If there are multiple extensions, it is the value of subExt,
// otherwise subExt is an empty string.
val subExt = File(name.removeSuffix(".$ext")).extension
extension = "$subExt.$ext"
}

extensionCache[name] = extension
return extension
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,9 @@ internal class LanguageServiceTest {
assertEquals("gitignore", lang.detectLanguage(".gitignore"))
}

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

0 comments on commit 54de4fc

Please sign in to comment.