Skip to content

Commit 1d71d09

Browse files
committed
Add version specific code
1 parent 3c518fd commit 1d71d09

File tree

9 files changed

+130
-53
lines changed

9 files changed

+130
-53
lines changed

.circleci/config.yml

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@ references:
3333
restore_build: &restore_build
3434
restore_cache:
3535
keys:
36-
- sbt-build-1.0.0-{{ .Branch }}-{{ .Revision }}
37-
- sbt-build-1.0.0
36+
- sbt-build-1.0.1-{{ .Branch }}-{{ .Revision }}
37+
- sbt-build-1.0.1
3838

3939
setup_dependencies_key: &setup_dependencies_key
4040
run:
@@ -69,6 +69,7 @@ jobs:
6969
paths:
7070
- ~/.ivy2
7171
- ~/.sbt
72+
- ~/.coursier/cache/v1
7273
key: sbt-ivy2-dependencies-1.0.0-{{ checksum "/tmp/dependencies.cache.tmp" }}
7374

7475
compile:
@@ -102,15 +103,15 @@ jobs:
102103
working_directory: ~/
103104
command: |
104105
mkdir -p ~/coverage-reports/scoverage
105-
cp -f ~/workdir/target/scala-2.11/coverage-report/cobertura.xml ~/coverage-reports/scoverage/results.xml
106+
cp -f ~/workdir/target/scala-2.12/coverage-report/cobertura.xml ~/coverage-reports/scoverage/results.xml
106107
- store_test_results:
107108
path: ~/coverage-reports
108109
- store_artifacts:
109-
path: ~/workdir/target/scala-2.11/coverage-report
110+
path: ~/workdir/target/scala-2.12/coverage-report
110111
- store_artifacts:
111-
path: ~/workdir/target/scala-2.11/scoverage-report
112+
path: ~/workdir/target/scala-2.12/scoverage-report
112113
- store_artifacts:
113-
path: ~/workdir/target/scala-2.11/scoverage-data
114+
path: ~/workdir/target/scala-2.12/scoverage-data
114115

115116
publish:
116117
<<: *default_java_job

.scalafmt.conf

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
version = "2.0.1"
12
style=IntelliJ
23
project.excludeFilters = [".*\\.scala.html$", "components/pluginsEngineComponent/src/test/resources/.*", "target/.*"]
34
maxColumn=120

build.sbt

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,17 @@ scalaVersion := scala212
99
crossScalaVersions := Seq(scala211, scala212, scala213)
1010

1111
libraryDependencies ++= Seq(
12-
"org.scala-lang.modules" %% "scala-collection-compat" % "2.1.2",
1312
"org.specs2" %% "specs2-core" % "4.6.0" % Test
1413
)
1514

15+
unmanagedSourceDirectories in Compile += {
16+
val sourceDir = (sourceDirectory in Compile).value
17+
CrossVersion.partialVersion(scalaVersion.value) match {
18+
case Some((2, n)) if n >= 13 => sourceDir / "scala-2.13+"
19+
case _ => sourceDir / "scala-2.13-"
20+
}
21+
}
22+
1623
// Sonatype repository settings
1724
ThisBuild / credentials += Credentials(
1825
"Sonatype Nexus Repository Manager",

project/build.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
sbt.version=1.2.8
1+
sbt.version=1.3.0

project/plugins.sbt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import sbt._
2-
31
// Sonatype publishing
42
addSbtPlugin("org.xerial.sbt" % "sbt-sonatype" % "2.3")
53
addSbtPlugin("com.jsuereth" % "sbt-pgp" % "1.1.2-1")

scripts/test.sh

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,12 @@ if [ -n "$1" ]; then
66
export CODACY_PROJECT_TOKEN="$1"
77
fi
88

9-
sbt +coverage +test
10-
sbt +coverageReport
11-
sbt +coverageAggregate
9+
sbt coverage +test
10+
sbt coverageReport
11+
sbt coverageAggregate
1212

1313
if [ -z "$CODACY_PROJECT_TOKEN" ]; then
1414
echo "CODACY_PROJECT_TOKEN not found. Skipping send coverage to Codacy."
1515
else
16-
sbt +codacyCoverage
16+
sbt codacyCoverage
1717
fi
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package com.codacy.plugins.api.languages
2+
3+
import Languages._
4+
5+
private[languages] object LanguagesImpl {
6+
def extensionsByLanguageImpl: Map[Language, Set[String]] =
7+
all.view.map { lang =>
8+
(lang, lang.extensions)
9+
}.to(Map)
10+
11+
def filenamesByLanguageImpl: Map[Language, Set[String]] =
12+
all.view.map { lang =>
13+
(lang, lang.files)
14+
}.to(Map)
15+
16+
def languageByExtensionImpl: Map[String, Language] =
17+
all.view.flatMap { lang =>
18+
lang.extensions.map(extension => (extension.toLowerCase(), lang))
19+
}.to(Map)
20+
21+
def languageByFilenameImpl: Map[String, Language] =
22+
all.view.flatMap { lang =>
23+
lang.files.map(file => (file.toLowerCase(), lang))
24+
}.to(Map)
25+
26+
def forPathImpl(
27+
filePath: String,
28+
customExtensions: List[(Language, Seq[String])] = List.empty[(Language, Seq[String])]): Option[Language] = {
29+
lazy val languageByCustomExtension: List[(String, Language)] = {
30+
val customExtensionsMap: Map[Language, Set[String]] = customExtensions.view.map {
31+
case (lang, exts) =>
32+
(lang, exts.view.to(Set) ++ extensionsByLanguage.getOrElse(lang, Set.empty))
33+
}.to(Map)
34+
35+
customExtensionsMap.view.flatMap {
36+
case (lang, extensions) => extensions.map(extension => (extension.toLowerCase, lang))
37+
}.to(List).sortBy {
38+
case (ext, lang) => (lang.toString, ext)
39+
}
40+
}
41+
42+
filePath.split('/').lastOption.flatMap { filename =>
43+
languageByCustomExtension.collectFirst { case (ext, lang) if filename.endsWith(ext) => lang }.orElse {
44+
(for {
45+
extension <- filename.split('.').lastOption
46+
dottedExtension = s".$extension"
47+
} yield languageByExtension.get(dottedExtension.toLowerCase)).flatten
48+
}.orElse(languageByFilename.get(filename.toLowerCase))
49+
}
50+
}
51+
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package com.codacy.plugins.api.languages
2+
3+
import Languages._
4+
5+
private[languages] object LanguagesImpl {
6+
def extensionsByLanguageImpl: Map[Language, Set[String]] =
7+
all.map { lang =>
8+
(lang, lang.extensions)
9+
}(collection.breakOut)
10+
11+
def filenamesByLanguageImpl: Map[Language, Set[String]] =
12+
all.map { lang =>
13+
(lang, lang.files)
14+
}(collection.breakOut)
15+
16+
def languageByExtensionImpl: Map[String, Language] =
17+
all.flatMap { lang =>
18+
lang.extensions.map(extension => (extension.toLowerCase(), lang))
19+
}(collection.breakOut)
20+
21+
def languageByFilenameImpl: Map[String, Language] =
22+
all.flatMap { lang =>
23+
lang.files.map(file => (file.toLowerCase(), lang))
24+
}(collection.breakOut)
25+
26+
def forPathImpl(
27+
filePath: String,
28+
customExtensions: List[(Language, Seq[String])] = List.empty[(Language, Seq[String])]): Option[Language] = {
29+
lazy val languageByCustomExtension: List[(String, Language)] = {
30+
val customExtensionsMap: Map[Language, Set[String]] = customExtensions.map {
31+
case (lang, exts) =>
32+
(lang, exts.to[Set] ++ extensionsByLanguage.getOrElse(lang, Set.empty))
33+
}(collection.breakOut)
34+
35+
customExtensionsMap.flatMap {
36+
case (lang, extensions) => extensions.map(extension => (extension.toLowerCase, lang))
37+
}.toList.sortBy {
38+
case (ext, lang) => (lang.toString, ext)
39+
}
40+
}
41+
42+
filePath.split('/').lastOption.flatMap { filename =>
43+
languageByCustomExtension.collectFirst { case (ext, lang) if filename.endsWith(ext) => lang }.orElse {
44+
(for {
45+
extension <- filename.split('.').lastOption
46+
dottedExtension = s".$extension"
47+
} yield languageByExtension.get(dottedExtension.toLowerCase)).flatten
48+
}.orElse(languageByFilename.get(filename.toLowerCase))
49+
}
50+
}
51+
}

src/main/scala/com/codacy/plugins/api/languages/Language.scala

Lines changed: 7 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package com.codacy.plugins.api.languages
22

3-
import scala.collection.compat._
4-
53
sealed abstract class Language(val extensions: Set[String],
64
val overriddenName: Option[String] = Option.empty[String],
75
val files: Set[String] = Set.empty[String]) {
@@ -13,53 +11,23 @@ sealed abstract class Language(val extensions: Set[String],
1311

1412
object Languages {
1513

16-
lazy val extensionsByLanguage: Map[Language, Set[String]] = all.iterator.map { lang =>
17-
(lang, lang.extensions)
18-
}.toMap
14+
lazy val extensionsByLanguage: Map[Language, Set[String]] = LanguagesImpl.extensionsByLanguageImpl
1915

20-
lazy val filenamesByLanguage: Map[Language, Set[String]] = all.iterator.map { lang =>
21-
(lang, lang.files)
22-
}.toMap
16+
lazy val filenamesByLanguage: Map[Language, Set[String]] = LanguagesImpl.filenamesByLanguageImpl
2317

24-
lazy val languageByExtension: Map[String, Language] = all.iterator.flatMap { lang =>
25-
lang.extensions.map(extension => (extension.toLowerCase(), lang))
26-
}.toMap
18+
lazy val languageByExtension: Map[String, Language] = LanguagesImpl.languageByExtensionImpl
2719

28-
lazy val languageByFilename: Map[String, Language] = all.iterator.flatMap { lang =>
29-
lang.files.map(file => (file.toLowerCase(), lang))
30-
}.toMap
20+
lazy val languageByFilename: Map[String, Language] = LanguagesImpl.languageByFilenameImpl
3121

3222
def extensions(language: Language): Option[Set[String]] = extensionsByLanguage.get(language)
3323

3424
def filenames(language: Language): Option[Set[String]] = filenamesByLanguage.get(language)
3525

3626
def fromName(name: String): Option[Language] = all.find(lang => name.equalsIgnoreCase(lang.name))
3727

38-
def forPath(
39-
filePath: String,
40-
customExtensions: List[(Language, Seq[String])] = List.empty[(Language, Seq[String])]): Option[Language] = {
41-
lazy val languageByCustomExtension: List[(String, Language)] = {
42-
val customExtensionsMap: Map[Language, Set[String]] = customExtensions.iterator.map {
43-
case (lang, exts) =>
44-
(lang, exts.to(Set) ++ extensionsByLanguage.getOrElse(lang, Set.empty))
45-
}.toMap
46-
47-
customExtensionsMap.flatMap {
48-
case (lang, extensions) => extensions.map(extension => (extension.toLowerCase, lang))
49-
}.toList.sortBy {
50-
case (ext, lang) => (lang.toString, ext)
51-
}
52-
}
53-
54-
filePath.split('/').lastOption.flatMap { filename =>
55-
languageByCustomExtension.collectFirst { case (ext, lang) if filename.endsWith(ext) => lang }.orElse {
56-
(for {
57-
extension <- filename.split('.').lastOption
58-
dottedExtension = s".$extension"
59-
} yield languageByExtension.get(dottedExtension.toLowerCase)).flatten
60-
}.orElse(languageByFilename.get(filename.toLowerCase))
61-
}
62-
}
28+
def forPath(filePath: String,
29+
customExtensions: List[(Language, Seq[String])] = List.empty[(Language, Seq[String])]): Option[Language] =
30+
LanguagesImpl.forPathImpl(filePath, customExtensions)
6331

6432
def filter(files: Set[String],
6533
languages: Set[Language],

0 commit comments

Comments
 (0)