From c1e66457127b430a7886ba2736625144fd34d204 Mon Sep 17 00:00:00 2001 From: "louvre2489@gmail.com" <louvre2489@gmail.com> Date: Thu, 15 Oct 2020 14:19:16 +0900 Subject: [PATCH 01/25] =?UTF-8?q?SonarCloud=E9=80=A3=E6=90=BA=E3=83=86?= =?UTF-8?q?=E3=82=B9=E3=83=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/build.yml | 20 ++++++++++++++++++++ sonar-project.properties | 12 ++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 .github/workflows/build.yml create mode 100644 sonar-project.properties diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..43d8350 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,20 @@ +name: Build +on: + push: + branches: + - master + pull_request: + types: [opened, synchronize, reopened] +jobs: + sonarcloud: + name: SonarCloud + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + with: + fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis + - name: SonarCloud Scan + uses: SonarSource/sonarcloud-github-action@master + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any + SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} \ No newline at end of file diff --git a/sonar-project.properties b/sonar-project.properties new file mode 100644 index 0000000..9e2d71c --- /dev/null +++ b/sonar-project.properties @@ -0,0 +1,12 @@ +sonar.projectKey=acala-quiz +sonar.organization=chatwork-sonar + +# This is the name and version displayed in the SonarCloud UI. +#sonar.projectName=acala-quiz +#sonar.projectVersion=1.0 + +# Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows. +#sonar.sources=. + +# Encoding of the source code. Default is default system encoding +#sonar.sourceEncoding=UTF-8 \ No newline at end of file From 6a40861eba54a49dae9f3031de8a20a0299a8a4a Mon Sep 17 00:00:00 2001 From: "louvre2489@gmail.com" <louvre2489@gmail.com> Date: Thu, 29 Oct 2020 09:32:44 +0900 Subject: [PATCH 02/25] =?UTF-8?q?=E3=83=86=E3=82=B9=E3=83=88=E3=81=8C?= =?UTF-8?q?=E9=80=9A=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../scala/com/chatwork/quiz/MyOption.scala | 60 +++++++++---------- .../com/chatwork/quiz/collection/MyList.scala | 57 ++++++++++++------ .../scala/com/chatwork/quiz/misc/BTree.scala | 42 ++++++++----- .../com/chatwork/quiz/misc/WordCounter.scala | 10 +++- .../com/chatwork/quiz/MyOptionSpec.scala | 37 +----------- .../chatwork/quiz/collection/MyListSpec.scala | 14 ++--- .../com/chatwork/quiz/misc/BTreeSpec.scala | 7 +-- .../chatwork/quiz/misc/WordCounterSpec.scala | 20 ++----- 8 files changed, 120 insertions(+), 127 deletions(-) diff --git a/src/main/scala/com/chatwork/quiz/MyOption.scala b/src/main/scala/com/chatwork/quiz/MyOption.scala index 13d0839..f0c0218 100644 --- a/src/main/scala/com/chatwork/quiz/MyOption.scala +++ b/src/main/scala/com/chatwork/quiz/MyOption.scala @@ -11,7 +11,7 @@ sealed trait MyOption[+A] { * 格納された値を返す。 * * @return 値 - * @throws NoSuchElementException 値が存在しない場合スローする + * @throws 値が存在しない場合 NoSuchElementException をスローする */ def get: A @@ -29,7 +29,10 @@ sealed trait MyOption[+A] { * @tparam B 新しい型 * @return 新しい [[MyOption]] */ - def map[B](f: A => B): MyOption[B] = ??? + def map[B](f: A => B): MyOption[B] = this match { + case MyNone => MyNone + case MySome(value) => MySome(f(value)) + } /** * 値が存在する場合に、値の変換を行う。 @@ -38,7 +41,10 @@ sealed trait MyOption[+A] { * @tparam B 新しい型 * @return 新しい [[MyOption]] */ - def flatMap[B](f: A => MyOption[B]): MyOption[B] = ??? + def flatMap[B](f: A => MyOption[B]): MyOption[B] = this match { + case MyNone => MyNone + case MySome(value) => f(value) + } /** * 値が存在する場合に、値をフィルタリングする。 @@ -46,16 +52,10 @@ sealed trait MyOption[+A] { * @param f フィルターのための述語関数 * @return 新しい [[MyOption]] */ - def filter(f: A => Boolean): MyOption[A] = ??? - - /** - * 値が存在する場合に、値をフィルタリングする。 - * 本来であれば中間状態を作成しないものだが今回はfilterで実装する - * - * @param f フィルターのための述語関数 - * @return 新しい [[MyOption]] - */ - def withFilter(f: A => Boolean): MyOption[A] = filter(f) + def filter(f: A => Boolean): MyOption[A] = this match { + case MyNone => MyNone + case MySome(value) => if (f(value)) this else MyNone + } /** * 格納された値を返す。値がない場合は指定された値を返す。 @@ -64,7 +64,10 @@ sealed trait MyOption[+A] { * @tparam B 新しい要素型 * @return 値 */ - def getOrElse[B >: A](elseValue: B): B = ??? + def getOrElse[B >: A](elseValue: B): B = this match { + case MyNone => elseValue + case MySome(value) => value + } /** * 値が存在しない場合に、指定した式を評価し返す。 @@ -73,7 +76,10 @@ sealed trait MyOption[+A] { * @tparam B 新しい要素型 * @return elseValueを評価した値 */ - def orElse[B >: A](elseValue: => MyOption[B]): MyOption[B] = ??? + def orElse[B >: A](elseValue: => MyOption[B]): MyOption[B] = this match { + case MyNone => elseValue + case MySome(_) => this + } } @@ -82,9 +88,9 @@ sealed trait MyOption[+A] { */ case object MyNone extends MyOption[Nothing] { - def get: Nothing = ??? + def get: Nothing = throw new NoSuchElementException - def isEmpty: Boolean = ??? + def isEmpty: Boolean = true } @@ -96,9 +102,9 @@ case object MyNone extends MyOption[Nothing] { */ case class MySome[+A](value: A) extends MyOption[A] { - def get: A = ??? + def get: A = value - def isEmpty: Boolean = ??? + def isEmpty: Boolean = false } @@ -114,18 +120,6 @@ object MyOption { * @tparam A 値の型 * @return [[MyOption]] */ - def apply[A](value: A): MyOption[A] = ??? - - /** - * for式 練習問題1 - * @return [[MyOption]] MySome(6) - */ - def translateToForComprehensions1: MyOption[Int] = ??? - - /** - * for式 練習問題2 - * @return [[MyOption]] MyNone - */ - def translateToForComprehensions2: MyOption[Int] = ??? + def apply[A](value: A): MyOption[A] = MySome(value) -} +} \ No newline at end of file diff --git a/src/main/scala/com/chatwork/quiz/collection/MyList.scala b/src/main/scala/com/chatwork/quiz/collection/MyList.scala index cb343e2..4f70224 100644 --- a/src/main/scala/com/chatwork/quiz/collection/MyList.scala +++ b/src/main/scala/com/chatwork/quiz/collection/MyList.scala @@ -1,52 +1,75 @@ package com.chatwork.quiz.collection -import com.chatwork.quiz.MyOption +import com.chatwork.quiz.{ MyNone, MyOption, MySome } sealed trait MyList[+A] { // Easy - def length: Int = ??? + def length: Int = this.foldRight(0)((_, z) => z + 1) // Normal - def foldLeft[B](z: B)(f: (B, A) => B): B = ??? + def foldLeft[B](z: B)(f: (B, A) => B): B = this match { + case MyNil => z + case MyCons(head, tail) => tail.foldLeft(f(z, head))(f) + } // 難易度選択制 // Normal: 条件 - 特にありません、気の向くままに実装してください。 // Hard: 条件 - foldLeftを使って実装してください。 - def foldRight[B](z: B)(f: (A, B) => B): B = ??? + def foldRight[B](z: B)(f: (A, B) => B): B = this match { + case MyNil => z + case MyCons(head, tail) => f(head, tail.foldRight(z)(f)) + } // Normal // scalastyle:off - def ::[B >: A](b: B): MyList[B] = ??? + def ::[B >: A](b: B): MyList[B] = this match { + case MyNil => MyList(b) + case MyCons(_, _) => MyCons(b, this) + } // scalastyle:on // Normal - def reverse: MyList[A] = ??? + def reverse: MyList[A] = this.foldLeft(MyNil: MyList[A])((z, item) => MyCons(item, z)) // Normal // scalastyle:off - def ++[B >: A](b: MyList[B]): MyList[B] = ??? + def ++[B >: A](b: MyList[B]): MyList[B] = this match { + case MyNil => this + case MyCons(_, _) => this.foldRight(b)((item, z) => MyCons(item, z)) + } // scalastyle:on // Normal - def map[B](f: A => B): MyList[B] = ??? + def map[B](f: A => B): MyList[B] = this.foldRight(MyNil: MyList[B])((item, z) => MyCons(f(item), z)) // Normal - def flatMap[B](f: A => MyList[B]): MyList[B] = ??? + def flatMap[B](f: A => MyList[B]): MyList[B] = this.foldRight(MyNil: MyList[B])((item, z) => f(item) ++ z) // Normal - def filter(f: A => Boolean): MyList[A] = ??? + def filter(f: A => Boolean): MyList[A] = + this.foldRight(MyNil: MyList[A])((item, z) => if (f(item)) MyCons(item, z) else z) // Normal: 条件 - filterと同様の実装でも構いません。 // Hard: 条件 - 中間リストを生成しないように実装してください。 - def withFilter(f: A => Boolean): MyList[A] = ??? + def withFilter(f: A => Boolean): MyList[A] = this.foldRight(MyNil: MyList[A])((b, z) => if (f(b)) MyCons(b, z) else z) // Normal - def find(f: A => Boolean): MyOption[A] = ??? + def find(f: A => Boolean): MyOption[A] = + this.foldRight(MyNone: MyOption[A])((b, z) => if (f(b)) MySome(b) else z) // Normal - def startsWith[B >: A](prefix: MyList[B]): Boolean = ??? - + def startsWith[B >: A](prefix: MyList[B]): Boolean = + if (this.length < prefix.length) false + else + prefix match { + case MyNil => true + case MyCons(pHead, pTail) => + this match { + case MyNil => false + case MyCons(head, tail) => if (pHead == head) tail.startsWith(pTail) else false + } + } } case object MyNil extends MyList[Nothing] @@ -56,9 +79,9 @@ case class MyCons[+A](head: A, tail: MyList[A]) extends MyList[A] object MyList { // Easy - def empty[A]: MyList[A] = ??? + def empty[A]: MyList[A] = MyNil // Normal - def apply[A](as: A*): MyList[A] = ??? + def apply[A](as: A*): MyList[A] = as.foldRight(MyNil: MyList[A])((b, z) => MyCons(b, z)) -} +} \ No newline at end of file diff --git a/src/main/scala/com/chatwork/quiz/misc/BTree.scala b/src/main/scala/com/chatwork/quiz/misc/BTree.scala index 85eb293..de9d5ff 100644 --- a/src/main/scala/com/chatwork/quiz/misc/BTree.scala +++ b/src/main/scala/com/chatwork/quiz/misc/BTree.scala @@ -54,17 +54,21 @@ sealed trait Node { */ case class Branch(left: Node, value: Int, right: Node) extends Node { - val size: Int = ??? + val size: Int = left.size + right.size + 1 - val sum: Int = ??? + val sum: Int = left.value + right.value + this.value - val avg: Double = ??? + val avg: Double = this.sum / this.size - val max: Int = ??? + private val list = List(left.value, right.value, this.value) - val min: Int = ??? + val max: Int = list.max - def find(value: Int): Option[Node] = ??? + val min: Int = list.min + + def find(value: Int): Option[Node] = + if (value == this.value) Some(this) + else left.find(value).orElse(right.find(value)).orElse(None) } @@ -75,17 +79,17 @@ case class Branch(left: Node, value: Int, right: Node) extends Node { */ case class Leaf(value: Int) extends Node { - val size: Int = ??? + val size: Int = 1 - val sum: Int = ??? + val sum: Int = value - val avg: Double = ??? + val avg: Double = value - val max: Int = ??? + val max: Int = value - val min: Int = ??? + val min: Int = value - def find(value: Int): Option[Node] = ??? + def find(value: Int): Option[Node] = if (value == this.value) Some(this) else None } @@ -121,6 +125,14 @@ object BTree { * @param values ノードに格納する値の集合 * @return [[BTree]] */ - def apply(values: List[Int]): BTree = ??? - -} + def apply(values: List[Int]): BTree = { + values match { + case value :: Nil => BTree(Leaf(value)) + case _ => { + val (left, mid :: right) = values.splitAt(values.size / 2) + BTree(Branch(apply(left).node, mid, apply(right).node)) + } + } + } + +} \ No newline at end of file diff --git a/src/main/scala/com/chatwork/quiz/misc/WordCounter.scala b/src/main/scala/com/chatwork/quiz/misc/WordCounter.scala index f72aecc..e89cc58 100644 --- a/src/main/scala/com/chatwork/quiz/misc/WordCounter.scala +++ b/src/main/scala/com/chatwork/quiz/misc/WordCounter.scala @@ -1,16 +1,22 @@ package com.chatwork.quiz.misc +import scala.collection.immutable.HashMap + /** * ワードをカウントするオブジェクト。 */ object WordCounter { + val SEPARATOR = " " + /** * 文字列から単語数をカウントする。 * * @param words 文字列 * @return 単語がキー、単語数がヴァリューのマップ */ - def countWords(words: List[String]): Map[String, Int] = ??? + def countWords(words: List[String]): Map[String, Int] = { + words.map(elm => elm.split(SEPARATOR)).flatten.groupMapReduce(t => t)(_ => 1)((x, y) => x + y) + } -} +} \ No newline at end of file diff --git a/src/test/scala/com/chatwork/quiz/MyOptionSpec.scala b/src/test/scala/com/chatwork/quiz/MyOptionSpec.scala index 3d662fe..cf7c1e3 100644 --- a/src/test/scala/com/chatwork/quiz/MyOptionSpec.scala +++ b/src/test/scala/com/chatwork/quiz/MyOptionSpec.scala @@ -1,9 +1,8 @@ package com.chatwork.quiz -import org.scalatest.funspec.AnyFunSpec -import org.scalatest.matchers.should.Matchers +import org.scalatest.{Matchers, FunSpec} -class MyOptionSpec extends AnyFunSpec with Matchers { +class MyOptionSpec extends FunSpec with Matchers { describe("MyOption#get") { it("should return a value if it's not empty") { @@ -70,34 +69,4 @@ class MyOptionSpec extends AnyFunSpec with Matchers { } } - describe("MyOption#translateToForComprehensions1") { - it("should return MySome(6)") { - val expected = - MyOption(1).flatMap { one => - MyOption(2).flatMap { two => - MyOption(3).map { three => - one + two + three - } - } - } - MyOption.translateToForComprehensions1 shouldBe expected - MyOption.translateToForComprehensions1 shouldBe MySome(6) - } - } - - describe("MyOption#translateToForComprehensions2") { - it("should return MyNone") { - val expected = - MyOption(1).flatMap { one => - MyOption(-2).withFilter(_ > 0).flatMap { two => - MyOption(3).map { three => - one + two + three - } - } - } - MyOption.translateToForComprehensions2 shouldBe expected - MyOption.translateToForComprehensions2 shouldBe MyNone - } - } - -} +} \ No newline at end of file diff --git a/src/test/scala/com/chatwork/quiz/collection/MyListSpec.scala b/src/test/scala/com/chatwork/quiz/collection/MyListSpec.scala index faf0507..5bb9398 100644 --- a/src/test/scala/com/chatwork/quiz/collection/MyListSpec.scala +++ b/src/test/scala/com/chatwork/quiz/collection/MyListSpec.scala @@ -1,10 +1,9 @@ package com.chatwork.quiz.collection -import com.chatwork.quiz.{ MyNone, MySome } -import org.scalatest.funspec.AnyFunSpec -import org.scalatest.matchers.should.Matchers +import com.chatwork.quiz.{MySome, MyNone} +import org.scalatest.{FunSpec, Matchers} -class MyListSpec extends AnyFunSpec with Matchers { +class MyListSpec extends FunSpec with Matchers { describe("MyList#apply") { it("should return a new MyList instance") { @@ -51,8 +50,7 @@ class MyListSpec extends AnyFunSpec with Matchers { describe("MyList#flatMap") { it("should apply an operator to each element in the list and flatten") { - MyList(MyList(1, 2), MyList(3, 4), MyList(5, 6), MyList(7, 8)) - .flatMap(_.map(_ * 2)) shouldEqual MyList(2, 4, 6, 8, 10, 12, 14, 16) + MyList(MyList(1, 2), MyList(3, 4), MyList(5, 6), MyList(7, 8)).flatMap(_.map(_ * 2)) shouldEqual MyList(2, 4, 6, 8, 10, 12, 14, 16) } } @@ -72,7 +70,7 @@ class MyListSpec extends AnyFunSpec with Matchers { describe("for comprehension") { it("should provide for comprehension") { (for { - suit <- MyList("Diamond", "Heart", "Spade", "Club") + suit <- MyList("Diamond", "Heart", "Spade", "Club") number <- MyList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13) if suit == "Diamond" } yield { @@ -81,4 +79,4 @@ class MyListSpec extends AnyFunSpec with Matchers { } } -} +} \ No newline at end of file diff --git a/src/test/scala/com/chatwork/quiz/misc/BTreeSpec.scala b/src/test/scala/com/chatwork/quiz/misc/BTreeSpec.scala index 4673df8..8e01850 100644 --- a/src/test/scala/com/chatwork/quiz/misc/BTreeSpec.scala +++ b/src/test/scala/com/chatwork/quiz/misc/BTreeSpec.scala @@ -1,11 +1,10 @@ package com.chatwork.quiz.misc -import org.scalatest.funspec.AnyFunSpec -import org.scalatest.matchers.should.Matchers +import org.scalatest.{Matchers, FunSpec} import scala.math.Ordering.IntOrdering -class BTreeSpec extends AnyFunSpec with Matchers { +class BTreeSpec extends FunSpec with Matchers { describe("BTree#size") { it("should return the number of elements in the BTree") { @@ -50,4 +49,4 @@ class BTreeSpec extends AnyFunSpec with Matchers { } } -} +} \ No newline at end of file diff --git a/src/test/scala/com/chatwork/quiz/misc/WordCounterSpec.scala b/src/test/scala/com/chatwork/quiz/misc/WordCounterSpec.scala index dfb65e3..be9d7a4 100644 --- a/src/test/scala/com/chatwork/quiz/misc/WordCounterSpec.scala +++ b/src/test/scala/com/chatwork/quiz/misc/WordCounterSpec.scala @@ -1,23 +1,15 @@ package com.chatwork.quiz.misc -import org.scalatest.funspec.AnyFunSpec -import org.scalatest.matchers.should.Matchers +import org.scalatest.{FunSpec, Matchers} -class WordCounterSpec extends AnyFunSpec with Matchers { + +class WordCounterSpec extends FunSpec with Matchers { describe("WordCounter#countWord") { it("should count words") { - val words = List("apple banana", "orange apple mango", "kiwi papaya orange", "mango orange muscat apple") - WordCounter.countWords(words) shouldBe Map( - "banana" -> 1, - "muscat" -> 1, - "orange" -> 3, - "mango" -> 2, - "apple" -> 3, - "kiwi" -> 1, - "papaya" -> 1 - ) + val words = List("apple banana", "orange apple mango", "kiwi papaya orange","mango orange muscat apple") + WordCounter.countWords(words) shouldBe Map("banana" -> 1, "muscat" -> 1, "orange" -> 3, "mango" -> 2, "apple" -> 3, "kiwi" -> 1, "papaya" -> 1) } } -} +} \ No newline at end of file From c6d055b93b35f72a803cf46b8e8da75caf252a3b Mon Sep 17 00:00:00 2001 From: "louvre2489@gmail.com" <louvre2489@gmail.com> Date: Thu, 29 Oct 2020 09:46:52 +0900 Subject: [PATCH 03/25] =?UTF-8?q?=E3=82=AB=E3=83=90=E3=83=AC=E3=83=83?= =?UTF-8?q?=E3=82=B8=E3=82=92=E5=8F=96=E3=82=8C=E3=82=8B=E3=82=88=E3=81=86?= =?UTF-8?q?=E3=81=AB=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- project/plugins.sbt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/project/plugins.sbt b/project/plugins.sbt index a37251a..00b2159 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -1 +1,2 @@ -addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.3.4") +addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.3.4") +addSbtPlugin("org.scoverage" % "sbt-scoverage" % "1.6.1") From 036f0fa5b740141be013c9dbceb35fe3f759e481 Mon Sep 17 00:00:00 2001 From: "louvre2489@gmail.com" <louvre2489@gmail.com> Date: Thu, 29 Oct 2020 09:47:28 +0900 Subject: [PATCH 04/25] =?UTF-8?q?=E3=82=84=E3=82=84=E3=81=93=E3=81=97?= =?UTF-8?q?=E3=81=84=E3=82=B4=E3=83=9F=E3=82=92=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/build.yml | 20 -------------------- sonar-project.properties | 12 ------------ 2 files changed, 32 deletions(-) delete mode 100644 .github/workflows/build.yml delete mode 100644 sonar-project.properties diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml deleted file mode 100644 index 43d8350..0000000 --- a/.github/workflows/build.yml +++ /dev/null @@ -1,20 +0,0 @@ -name: Build -on: - push: - branches: - - master - pull_request: - types: [opened, synchronize, reopened] -jobs: - sonarcloud: - name: SonarCloud - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - with: - fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis - - name: SonarCloud Scan - uses: SonarSource/sonarcloud-github-action@master - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any - SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} \ No newline at end of file diff --git a/sonar-project.properties b/sonar-project.properties deleted file mode 100644 index 9e2d71c..0000000 --- a/sonar-project.properties +++ /dev/null @@ -1,12 +0,0 @@ -sonar.projectKey=acala-quiz -sonar.organization=chatwork-sonar - -# This is the name and version displayed in the SonarCloud UI. -#sonar.projectName=acala-quiz -#sonar.projectVersion=1.0 - -# Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows. -#sonar.sources=. - -# Encoding of the source code. Default is default system encoding -#sonar.sourceEncoding=UTF-8 \ No newline at end of file From 5dbaf3707c16f62d93202c89d8e64233124ab3a7 Mon Sep 17 00:00:00 2001 From: "louvre2489@gmail.com" <louvre2489@gmail.com> Date: Thu, 29 Oct 2020 09:52:54 +0900 Subject: [PATCH 05/25] =?UTF-8?q?SonarCloud=E5=8B=95=E3=81=91=EF=BC=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/scala/com/chatwork/quiz/MyOption.scala | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/scala/com/chatwork/quiz/MyOption.scala b/src/main/scala/com/chatwork/quiz/MyOption.scala index f0c0218..f61eff9 100644 --- a/src/main/scala/com/chatwork/quiz/MyOption.scala +++ b/src/main/scala/com/chatwork/quiz/MyOption.scala @@ -110,6 +110,7 @@ case class MySome[+A](value: A) extends MyOption[A] { /** * [[MyOption]]のコンパニオンオブジェクト。 + * */ object MyOption { @@ -122,4 +123,4 @@ object MyOption { */ def apply[A](value: A): MyOption[A] = MySome(value) -} \ No newline at end of file +} From e99e8a33962159e654a9f296d33908d583d0f32b Mon Sep 17 00:00:00 2001 From: "louvre2489@gmail.com" <louvre2489@gmail.com> Date: Thu, 29 Oct 2020 09:56:35 +0900 Subject: [PATCH 06/25] =?UTF-8?q?SonarCloud=E5=8B=95=E3=81=91=EF=BC=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/scala/com/chatwork/quiz/MyOption.scala | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/scala/com/chatwork/quiz/MyOption.scala b/src/main/scala/com/chatwork/quiz/MyOption.scala index f61eff9..8429ee2 100644 --- a/src/main/scala/com/chatwork/quiz/MyOption.scala +++ b/src/main/scala/com/chatwork/quiz/MyOption.scala @@ -110,7 +110,6 @@ case class MySome[+A](value: A) extends MyOption[A] { /** * [[MyOption]]のコンパニオンオブジェクト。 - * */ object MyOption { From acaf480682ecd2a753ce168f701910a021958c1f Mon Sep 17 00:00:00 2001 From: "louvre2489@gmail.com" <louvre2489@gmail.com> Date: Thu, 29 Oct 2020 09:59:40 +0900 Subject: [PATCH 07/25] =?UTF-8?q?SonarCloud=E5=8B=95=E3=81=91=EF=BC=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/scala/com/chatwork/quiz/MyOption.scala | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/scala/com/chatwork/quiz/MyOption.scala b/src/main/scala/com/chatwork/quiz/MyOption.scala index 8429ee2..f61eff9 100644 --- a/src/main/scala/com/chatwork/quiz/MyOption.scala +++ b/src/main/scala/com/chatwork/quiz/MyOption.scala @@ -110,6 +110,7 @@ case class MySome[+A](value: A) extends MyOption[A] { /** * [[MyOption]]のコンパニオンオブジェクト。 + * */ object MyOption { From 8649f17692be57ef1a7ab745d01ab7d2133d9e83 Mon Sep 17 00:00:00 2001 From: "louvre2489@gmail.com" <louvre2489@gmail.com> Date: Thu, 29 Oct 2020 14:30:52 +0900 Subject: [PATCH 08/25] =?UTF-8?q?SonarCloud=E7=94=A8=E3=81=AE=E3=83=97?= =?UTF-8?q?=E3=83=AD=E3=83=91=E3=83=86=E3=82=A3=E3=83=95=E3=82=A1=E3=82=A4?= =?UTF-8?q?=E3=83=AB=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .sonarcloud.properties | 16 ++++++++++++++++ build.sbt | 5 +++-- 2 files changed, 19 insertions(+), 2 deletions(-) create mode 100644 .sonarcloud.properties diff --git a/.sonarcloud.properties b/.sonarcloud.properties new file mode 100644 index 0000000..59909cf --- /dev/null +++ b/.sonarcloud.properties @@ -0,0 +1,16 @@ +sonar.projectName=pegasus +sonar.host.url=https://sonarcloud.io +sonar.language=scala +sonar.projectKey=chatwork_pegasus + +sonar.sources=src/main + +# Path to tests +sonar.tests=src/test + +# Source encoding +sonar.sourceEncoding=UTF-8 + +sonar.scala.coverage.reportPaths=\ + target/scala-2.13/scoverage-report, \ + target/scala-2.13/scoverage-report/scoverage.xml \ No newline at end of file diff --git a/build.sbt b/build.sbt index f2bb7f0..9608158 100644 --- a/build.sbt +++ b/build.sbt @@ -13,5 +13,6 @@ lazy val root: Project = (project in file(".")) ), libraryDependencies ++= Seq( "org.scalatest" %% "scalatest" % "3.1.1" % Test - ) - ) + ), + coverageEnabled := true + ) \ No newline at end of file From dbf0d317d2ad6637bade7bede5f385e71fbefd0d Mon Sep 17 00:00:00 2001 From: "louvre2489@gmail.com" <louvre2489@gmail.com> Date: Thu, 29 Oct 2020 14:52:50 +0900 Subject: [PATCH 09/25] =?UTF-8?q?SonarCloud=E7=94=A8=E3=81=AE=E3=83=97?= =?UTF-8?q?=E3=83=AD=E3=83=91=E3=83=86=E3=82=A3=E3=83=95=E3=82=A1=E3=82=A4?= =?UTF-8?q?=E3=83=AB=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .sonarcloud.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.sonarcloud.properties b/.sonarcloud.properties index 59909cf..a475c53 100644 --- a/.sonarcloud.properties +++ b/.sonarcloud.properties @@ -1,7 +1,7 @@ -sonar.projectName=pegasus +sonar.projectName=scala-quiz sonar.host.url=https://sonarcloud.io sonar.language=scala -sonar.projectKey=chatwork_pegasus +sonar.projectKey=chatwork_scala-quiz sonar.sources=src/main From d8ab2f94502050536f21cb99e1526317f63d228b Mon Sep 17 00:00:00 2001 From: "louvre2489@gmail.com" <louvre2489@gmail.com> Date: Thu, 29 Oct 2020 16:26:18 +0900 Subject: [PATCH 10/25] =?UTF-8?q?sbt-sonar=E7=94=A8=E3=81=AE=E8=A8=AD?= =?UTF-8?q?=E5=AE=9A=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .sonarcloud.properties | 1 + build.sbt | 6 +++++- project/plugins.sbt | 2 ++ sonar-project.properties | 25 +++++++++++++++++++++++++ 4 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 sonar-project.properties diff --git a/.sonarcloud.properties b/.sonarcloud.properties index a475c53..0916678 100644 --- a/.sonarcloud.properties +++ b/.sonarcloud.properties @@ -1,3 +1,4 @@ +sonar.organization=chatwork-sonar sonar.projectName=scala-quiz sonar.host.url=https://sonarcloud.io sonar.language=scala diff --git a/build.sbt b/build.sbt index 9608158..9a13d65 100644 --- a/build.sbt +++ b/build.sbt @@ -1,3 +1,5 @@ +import sbtsonar.SonarPlugin.autoImport._ + lazy val root: Project = (project in file(".")) .settings( organization := "com.chatwork", @@ -14,5 +16,7 @@ lazy val root: Project = (project in file(".")) libraryDependencies ++= Seq( "org.scalatest" %% "scalatest" % "3.1.1" % Test ), - coverageEnabled := true + coverageEnabled := true, + sonarUseExternalConfig := true, + aggregate in sonarScan := false ) \ No newline at end of file diff --git a/project/plugins.sbt b/project/plugins.sbt index 00b2159..8ddbaa6 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -1,2 +1,4 @@ addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.3.4") addSbtPlugin("org.scoverage" % "sbt-scoverage" % "1.6.1") + +addSbtPlugin("com.github.mwz" % "sbt-sonar" % "2.1.0") diff --git a/sonar-project.properties b/sonar-project.properties new file mode 100644 index 0000000..b3e233f --- /dev/null +++ b/sonar-project.properties @@ -0,0 +1,25 @@ +sonar.organization=chatwork-sonar +sonar.projectName=scala-quiz +sonar.host.url=https://sonarcloud.io +sonar.language=scala +sonar.projectKey=chatwork_scala-quiz + +sonar.sources=src/main + +# Path to tests +sonar.tests=src/test + +# Source encoding +sonar.sourceEncoding=UTF-8 + +sonar.scala.scoverage.reportPath=\ + target/scala-2.13/scoverage-report, \ + target/scala-2.13/scoverage-report/scoverage.xml + +sonar.scala.pullrequest.provider=github +sonar.scala.pullrequest.github.repository=chatwork/scala-quiz +sonar.scala.pullrequest.number=7 + +# 以下はコミット注意!!!! +sonar.scala.pullrequest.github.oauth=#GitHubで生成したトークン +sonar.login=#SonarCloudで生成したトークン From d82497ec7bcd7cc3fb94919adb6843236d649629 Mon Sep 17 00:00:00 2001 From: "louvre2489@gmail.com" <louvre2489@gmail.com> Date: Thu, 29 Oct 2020 17:00:06 +0900 Subject: [PATCH 11/25] =?UTF-8?q?=E3=81=93=E3=81=93=E3=81=8B=E3=82=89?= =?UTF-8?q?=E5=85=88=E3=81=AF=E3=80=81sonar-scala=E3=81=AF=E7=84=A1?= =?UTF-8?q?=E5=8A=B9=E3=81=AB=E3=81=97=E3=81=A6SonarCloud=E3=81=A0?= =?UTF-8?q?=E3=81=91=E3=81=A7=E3=82=AB=E3=83=90=E3=83=AC=E3=83=83=E3=82=B8?= =?UTF-8?q?=E5=8F=96=E5=BE=97=E3=82=92=E8=A9=A6=E3=81=BF=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .sonarcloud.properties | 4 ++++ build.sbt | 8 ++++---- project/plugins.sbt | 2 +- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/.sonarcloud.properties b/.sonarcloud.properties index 0916678..1791d12 100644 --- a/.sonarcloud.properties +++ b/.sonarcloud.properties @@ -12,6 +12,10 @@ sonar.tests=src/test # Source encoding sonar.sourceEncoding=UTF-8 +sonar.scala.scoverage.reportPaths=\ + target/scala-2.13/scoverage-report, \ + target/scala-2.13/scoverage-report/scoverage.xml + sonar.scala.coverage.reportPaths=\ target/scala-2.13/scoverage-report, \ target/scala-2.13/scoverage-report/scoverage.xml \ No newline at end of file diff --git a/build.sbt b/build.sbt index 9a13d65..1a28879 100644 --- a/build.sbt +++ b/build.sbt @@ -1,4 +1,4 @@ -import sbtsonar.SonarPlugin.autoImport._ +//import sbtsonar.SonarPlugin.autoImport._ lazy val root: Project = (project in file(".")) .settings( @@ -16,7 +16,7 @@ lazy val root: Project = (project in file(".")) libraryDependencies ++= Seq( "org.scalatest" %% "scalatest" % "3.1.1" % Test ), - coverageEnabled := true, - sonarUseExternalConfig := true, - aggregate in sonarScan := false + coverageEnabled := true +// sonarUseExternalConfig := true, +// aggregate in sonarScan := false ) \ No newline at end of file diff --git a/project/plugins.sbt b/project/plugins.sbt index 8ddbaa6..99e1fed 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -1,4 +1,4 @@ addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.3.4") addSbtPlugin("org.scoverage" % "sbt-scoverage" % "1.6.1") -addSbtPlugin("com.github.mwz" % "sbt-sonar" % "2.1.0") +//addSbtPlugin("com.github.mwz" % "sbt-sonar" % "2.1.0") From 0f603ad459edcfb3227e07fcdfd5a1d9b3ea8360 Mon Sep 17 00:00:00 2001 From: "louvre2489@gmail.com" <louvre2489@gmail.com> Date: Thu, 29 Oct 2020 17:28:47 +0900 Subject: [PATCH 12/25] =?UTF-8?q?SonarCloud=E5=8B=95=E3=81=91=EF=BC=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/scala/com/chatwork/quiz/MyOption.scala | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/scala/com/chatwork/quiz/MyOption.scala b/src/main/scala/com/chatwork/quiz/MyOption.scala index f61eff9..db739e5 100644 --- a/src/main/scala/com/chatwork/quiz/MyOption.scala +++ b/src/main/scala/com/chatwork/quiz/MyOption.scala @@ -111,6 +111,7 @@ case class MySome[+A](value: A) extends MyOption[A] { /** * [[MyOption]]のコンパニオンオブジェクト。 * + * */ object MyOption { From cd453d247a82febf6c86fe0d1d6e55394adf7540 Mon Sep 17 00:00:00 2001 From: "louvre2489@gmail.com" <louvre2489@gmail.com> Date: Thu, 29 Oct 2020 17:29:55 +0900 Subject: [PATCH 13/25] =?UTF-8?q?SonarCloud=E5=8B=95=E3=81=91=EF=BC=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/scala/com/chatwork/quiz/MyOption.scala | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/scala/com/chatwork/quiz/MyOption.scala b/src/main/scala/com/chatwork/quiz/MyOption.scala index db739e5..e493733 100644 --- a/src/main/scala/com/chatwork/quiz/MyOption.scala +++ b/src/main/scala/com/chatwork/quiz/MyOption.scala @@ -112,6 +112,7 @@ case class MySome[+A](value: A) extends MyOption[A] { * [[MyOption]]のコンパニオンオブジェクト。 * * + * */ object MyOption { From 4bb80ae633998925b5d2233f26aa56fd9b3ebdb5 Mon Sep 17 00:00:00 2001 From: "louvre2489@gmail.com" <louvre2489@gmail.com> Date: Fri, 30 Oct 2020 21:01:59 +0900 Subject: [PATCH 14/25] =?UTF-8?q?CircleCI=E5=8B=95=E3=81=91=EF=BC=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .circleci/config.yml | 21 +++++++++++++++++++++ .sonarcloud.properties | 4 ---- sonar-project.properties | 8 -------- 3 files changed, 21 insertions(+), 12 deletions(-) create mode 100644 .circleci/config.yml diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 0000000..e3a85c7 --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,21 @@ +version: 2.1 + +jobs: + build: + docker: + - image: chatwork/sbt-ci-openjdk8:jdk8u252-b09-1.3.10 + steps: + - checkout + - run: + name: "unit tests" + command: sbt -mem 2048 test coverage coverageReport + - sonarcloud/scan + +orbs: + sonarcloud: sonarsource/sonarcloud@1.0.1 + +workflows: + main: + jobs: + - build: + context: SonarCloud \ No newline at end of file diff --git a/.sonarcloud.properties b/.sonarcloud.properties index 1791d12..0916678 100644 --- a/.sonarcloud.properties +++ b/.sonarcloud.properties @@ -12,10 +12,6 @@ sonar.tests=src/test # Source encoding sonar.sourceEncoding=UTF-8 -sonar.scala.scoverage.reportPaths=\ - target/scala-2.13/scoverage-report, \ - target/scala-2.13/scoverage-report/scoverage.xml - sonar.scala.coverage.reportPaths=\ target/scala-2.13/scoverage-report, \ target/scala-2.13/scoverage-report/scoverage.xml \ No newline at end of file diff --git a/sonar-project.properties b/sonar-project.properties index b3e233f..e6c6e45 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -15,11 +15,3 @@ sonar.sourceEncoding=UTF-8 sonar.scala.scoverage.reportPath=\ target/scala-2.13/scoverage-report, \ target/scala-2.13/scoverage-report/scoverage.xml - -sonar.scala.pullrequest.provider=github -sonar.scala.pullrequest.github.repository=chatwork/scala-quiz -sonar.scala.pullrequest.number=7 - -# 以下はコミット注意!!!! -sonar.scala.pullrequest.github.oauth=#GitHubで生成したトークン -sonar.login=#SonarCloudで生成したトークン From 4fe172c22b3d2e67bbe4287f3d142e01a3c0ea75 Mon Sep 17 00:00:00 2001 From: "louvre2489@gmail.com" <louvre2489@gmail.com> Date: Fri, 30 Oct 2020 21:05:27 +0900 Subject: [PATCH 15/25] =?UTF-8?q?CircleCI=E5=8B=95=E3=81=91=EF=BC=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/scala/com/chatwork/quiz/MyOption.scala | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/scala/com/chatwork/quiz/MyOption.scala b/src/main/scala/com/chatwork/quiz/MyOption.scala index e493733..93dcb75 100644 --- a/src/main/scala/com/chatwork/quiz/MyOption.scala +++ b/src/main/scala/com/chatwork/quiz/MyOption.scala @@ -113,6 +113,7 @@ case class MySome[+A](value: A) extends MyOption[A] { * * * + * */ object MyOption { From fbed298338bf10d75af2d262fbecb0e22fe43364 Mon Sep 17 00:00:00 2001 From: "louvre2489@gmail.com" <louvre2489@gmail.com> Date: Fri, 30 Oct 2020 21:09:20 +0900 Subject: [PATCH 16/25] =?UTF-8?q?CircleCI=E5=8B=95=E3=81=91=EF=BC=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/scala/com/chatwork/quiz/MyOption.scala | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/scala/com/chatwork/quiz/MyOption.scala b/src/main/scala/com/chatwork/quiz/MyOption.scala index 93dcb75..2187e34 100644 --- a/src/main/scala/com/chatwork/quiz/MyOption.scala +++ b/src/main/scala/com/chatwork/quiz/MyOption.scala @@ -114,6 +114,7 @@ case class MySome[+A](value: A) extends MyOption[A] { * * * + * */ object MyOption { From 696f49d8c7c8ef5e2b79a7c8a21fb13fe2d796f6 Mon Sep 17 00:00:00 2001 From: "louvre2489@gmail.com" <louvre2489@gmail.com> Date: Fri, 30 Oct 2020 21:13:47 +0900 Subject: [PATCH 17/25] =?UTF-8?q?CircleCI=E5=8B=95=E3=81=91=EF=BC=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index e3a85c7..7d79c79 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -7,7 +7,7 @@ jobs: steps: - checkout - run: - name: "unit tests" + name: "coverage" command: sbt -mem 2048 test coverage coverageReport - sonarcloud/scan From 8f3e96ee5048052fc17b0ace09468a06d4aed00b Mon Sep 17 00:00:00 2001 From: "louvre2489@gmail.com" <louvre2489@gmail.com> Date: Fri, 30 Oct 2020 21:18:03 +0900 Subject: [PATCH 18/25] =?UTF-8?q?=E3=82=B4=E3=83=9F=E3=82=92=E6=95=B4?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .sonarcloud.properties | 17 ----------------- sonar-project.properties | 13 +++++-------- 2 files changed, 5 insertions(+), 25 deletions(-) delete mode 100644 .sonarcloud.properties diff --git a/.sonarcloud.properties b/.sonarcloud.properties deleted file mode 100644 index 0916678..0000000 --- a/.sonarcloud.properties +++ /dev/null @@ -1,17 +0,0 @@ -sonar.organization=chatwork-sonar -sonar.projectName=scala-quiz -sonar.host.url=https://sonarcloud.io -sonar.language=scala -sonar.projectKey=chatwork_scala-quiz - -sonar.sources=src/main - -# Path to tests -sonar.tests=src/test - -# Source encoding -sonar.sourceEncoding=UTF-8 - -sonar.scala.coverage.reportPaths=\ - target/scala-2.13/scoverage-report, \ - target/scala-2.13/scoverage-report/scoverage.xml \ No newline at end of file diff --git a/sonar-project.properties b/sonar-project.properties index e6c6e45..71bac1d 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -1,17 +1,14 @@ +sonar.host.url=https://sonarcloud.io sonar.organization=chatwork-sonar sonar.projectName=scala-quiz -sonar.host.url=https://sonarcloud.io -sonar.language=scala sonar.projectKey=chatwork_scala-quiz -sonar.sources=src/main +sonar.sourceEncoding=UTF-8 -# Path to tests +sonar.sources=src/main sonar.tests=src/test -# Source encoding -sonar.sourceEncoding=UTF-8 +sonar.language=scala sonar.scala.scoverage.reportPath=\ - target/scala-2.13/scoverage-report, \ - target/scala-2.13/scoverage-report/scoverage.xml + target/scala-2.13/scoverage-report From c0274b11386bd88e8502ed6f162ab34826cb4f9b Mon Sep 17 00:00:00 2001 From: "louvre2489@gmail.com" <louvre2489@gmail.com> Date: Fri, 30 Oct 2020 23:53:28 +0900 Subject: [PATCH 19/25] =?UTF-8?q?build.sbt=E3=81=AE=E3=82=AA=E3=83=97?= =?UTF-8?q?=E3=82=B7=E3=83=A7=E3=83=B3=E3=82=92=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.sbt | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/build.sbt b/build.sbt index 1a28879..c78967a 100644 --- a/build.sbt +++ b/build.sbt @@ -15,8 +15,5 @@ lazy val root: Project = (project in file(".")) ), libraryDependencies ++= Seq( "org.scalatest" %% "scalatest" % "3.1.1" % Test - ), - coverageEnabled := true -// sonarUseExternalConfig := true, -// aggregate in sonarScan := false + ) ) \ No newline at end of file From 0f84f7b7ba7793afbcab83a0d9ef12b2ca0435f0 Mon Sep 17 00:00:00 2001 From: "louvre2489@gmail.com" <louvre2489@gmail.com> Date: Fri, 30 Oct 2020 23:55:53 +0900 Subject: [PATCH 20/25] =?UTF-8?q?build.sbt=E3=81=AE=E3=82=AA=E3=83=97?= =?UTF-8?q?=E3=82=B7=E3=83=A7=E3=83=B3=E3=82=92=E5=BE=A9=E6=B4=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.sbt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/build.sbt b/build.sbt index c78967a..1a28879 100644 --- a/build.sbt +++ b/build.sbt @@ -15,5 +15,8 @@ lazy val root: Project = (project in file(".")) ), libraryDependencies ++= Seq( "org.scalatest" %% "scalatest" % "3.1.1" % Test - ) + ), + coverageEnabled := true +// sonarUseExternalConfig := true, +// aggregate in sonarScan := false ) \ No newline at end of file From d94e8afd2f8457c5f5533310b5d436824d5e978c Mon Sep 17 00:00:00 2001 From: "louvre2489@gmail.com" <louvre2489@gmail.com> Date: Sat, 31 Oct 2020 00:00:00 +0900 Subject: [PATCH 21/25] =?UTF-8?q?master=E3=81=A8=E3=81=AE=E5=B7=AE?= =?UTF-8?q?=E5=88=86=E3=81=8C=E3=82=8F=E3=81=8B=E3=82=8B=E3=82=88=E3=81=86?= =?UTF-8?q?=E3=81=AB=E5=A4=89=E6=9B=B4=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB?= =?UTF-8?q?=E3=82=92=E6=95=B4=E7=90=86=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.sbt | 4 -- project/plugins.sbt | 2 - .../scala/com/chatwork/quiz/MyOption.scala | 63 ++++++++++--------- .../com/chatwork/quiz/collection/MyList.scala | 57 +++++------------ .../scala/com/chatwork/quiz/misc/BTree.scala | 42 +++++-------- .../com/chatwork/quiz/misc/WordCounter.scala | 10 +-- .../com/chatwork/quiz/MyOptionSpec.scala | 43 ++++++++++++- .../chatwork/quiz/collection/MyListSpec.scala | 14 +++-- .../com/chatwork/quiz/misc/BTreeSpec.scala | 7 ++- .../chatwork/quiz/misc/WordCounterSpec.scala | 20 ++++-- 10 files changed, 132 insertions(+), 130 deletions(-) diff --git a/build.sbt b/build.sbt index 1a28879..9608158 100644 --- a/build.sbt +++ b/build.sbt @@ -1,5 +1,3 @@ -//import sbtsonar.SonarPlugin.autoImport._ - lazy val root: Project = (project in file(".")) .settings( organization := "com.chatwork", @@ -17,6 +15,4 @@ lazy val root: Project = (project in file(".")) "org.scalatest" %% "scalatest" % "3.1.1" % Test ), coverageEnabled := true -// sonarUseExternalConfig := true, -// aggregate in sonarScan := false ) \ No newline at end of file diff --git a/project/plugins.sbt b/project/plugins.sbt index 99e1fed..00b2159 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -1,4 +1,2 @@ addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.3.4") addSbtPlugin("org.scoverage" % "sbt-scoverage" % "1.6.1") - -//addSbtPlugin("com.github.mwz" % "sbt-sonar" % "2.1.0") diff --git a/src/main/scala/com/chatwork/quiz/MyOption.scala b/src/main/scala/com/chatwork/quiz/MyOption.scala index 2187e34..13d0839 100644 --- a/src/main/scala/com/chatwork/quiz/MyOption.scala +++ b/src/main/scala/com/chatwork/quiz/MyOption.scala @@ -11,7 +11,7 @@ sealed trait MyOption[+A] { * 格納された値を返す。 * * @return 値 - * @throws 値が存在しない場合 NoSuchElementException をスローする + * @throws NoSuchElementException 値が存在しない場合スローする */ def get: A @@ -29,10 +29,7 @@ sealed trait MyOption[+A] { * @tparam B 新しい型 * @return 新しい [[MyOption]] */ - def map[B](f: A => B): MyOption[B] = this match { - case MyNone => MyNone - case MySome(value) => MySome(f(value)) - } + def map[B](f: A => B): MyOption[B] = ??? /** * 値が存在する場合に、値の変換を行う。 @@ -41,10 +38,7 @@ sealed trait MyOption[+A] { * @tparam B 新しい型 * @return 新しい [[MyOption]] */ - def flatMap[B](f: A => MyOption[B]): MyOption[B] = this match { - case MyNone => MyNone - case MySome(value) => f(value) - } + def flatMap[B](f: A => MyOption[B]): MyOption[B] = ??? /** * 値が存在する場合に、値をフィルタリングする。 @@ -52,10 +46,16 @@ sealed trait MyOption[+A] { * @param f フィルターのための述語関数 * @return 新しい [[MyOption]] */ - def filter(f: A => Boolean): MyOption[A] = this match { - case MyNone => MyNone - case MySome(value) => if (f(value)) this else MyNone - } + def filter(f: A => Boolean): MyOption[A] = ??? + + /** + * 値が存在する場合に、値をフィルタリングする。 + * 本来であれば中間状態を作成しないものだが今回はfilterで実装する + * + * @param f フィルターのための述語関数 + * @return 新しい [[MyOption]] + */ + def withFilter(f: A => Boolean): MyOption[A] = filter(f) /** * 格納された値を返す。値がない場合は指定された値を返す。 @@ -64,10 +64,7 @@ sealed trait MyOption[+A] { * @tparam B 新しい要素型 * @return 値 */ - def getOrElse[B >: A](elseValue: B): B = this match { - case MyNone => elseValue - case MySome(value) => value - } + def getOrElse[B >: A](elseValue: B): B = ??? /** * 値が存在しない場合に、指定した式を評価し返す。 @@ -76,10 +73,7 @@ sealed trait MyOption[+A] { * @tparam B 新しい要素型 * @return elseValueを評価した値 */ - def orElse[B >: A](elseValue: => MyOption[B]): MyOption[B] = this match { - case MyNone => elseValue - case MySome(_) => this - } + def orElse[B >: A](elseValue: => MyOption[B]): MyOption[B] = ??? } @@ -88,9 +82,9 @@ sealed trait MyOption[+A] { */ case object MyNone extends MyOption[Nothing] { - def get: Nothing = throw new NoSuchElementException + def get: Nothing = ??? - def isEmpty: Boolean = true + def isEmpty: Boolean = ??? } @@ -102,19 +96,14 @@ case object MyNone extends MyOption[Nothing] { */ case class MySome[+A](value: A) extends MyOption[A] { - def get: A = value + def get: A = ??? - def isEmpty: Boolean = false + def isEmpty: Boolean = ??? } /** * [[MyOption]]のコンパニオンオブジェクト。 - * - * - * - * - * */ object MyOption { @@ -125,6 +114,18 @@ object MyOption { * @tparam A 値の型 * @return [[MyOption]] */ - def apply[A](value: A): MyOption[A] = MySome(value) + def apply[A](value: A): MyOption[A] = ??? + + /** + * for式 練習問題1 + * @return [[MyOption]] MySome(6) + */ + def translateToForComprehensions1: MyOption[Int] = ??? + + /** + * for式 練習問題2 + * @return [[MyOption]] MyNone + */ + def translateToForComprehensions2: MyOption[Int] = ??? } diff --git a/src/main/scala/com/chatwork/quiz/collection/MyList.scala b/src/main/scala/com/chatwork/quiz/collection/MyList.scala index 4f70224..cb343e2 100644 --- a/src/main/scala/com/chatwork/quiz/collection/MyList.scala +++ b/src/main/scala/com/chatwork/quiz/collection/MyList.scala @@ -1,75 +1,52 @@ package com.chatwork.quiz.collection -import com.chatwork.quiz.{ MyNone, MyOption, MySome } +import com.chatwork.quiz.MyOption sealed trait MyList[+A] { // Easy - def length: Int = this.foldRight(0)((_, z) => z + 1) + def length: Int = ??? // Normal - def foldLeft[B](z: B)(f: (B, A) => B): B = this match { - case MyNil => z - case MyCons(head, tail) => tail.foldLeft(f(z, head))(f) - } + def foldLeft[B](z: B)(f: (B, A) => B): B = ??? // 難易度選択制 // Normal: 条件 - 特にありません、気の向くままに実装してください。 // Hard: 条件 - foldLeftを使って実装してください。 - def foldRight[B](z: B)(f: (A, B) => B): B = this match { - case MyNil => z - case MyCons(head, tail) => f(head, tail.foldRight(z)(f)) - } + def foldRight[B](z: B)(f: (A, B) => B): B = ??? // Normal // scalastyle:off - def ::[B >: A](b: B): MyList[B] = this match { - case MyNil => MyList(b) - case MyCons(_, _) => MyCons(b, this) - } + def ::[B >: A](b: B): MyList[B] = ??? // scalastyle:on // Normal - def reverse: MyList[A] = this.foldLeft(MyNil: MyList[A])((z, item) => MyCons(item, z)) + def reverse: MyList[A] = ??? // Normal // scalastyle:off - def ++[B >: A](b: MyList[B]): MyList[B] = this match { - case MyNil => this - case MyCons(_, _) => this.foldRight(b)((item, z) => MyCons(item, z)) - } + def ++[B >: A](b: MyList[B]): MyList[B] = ??? // scalastyle:on // Normal - def map[B](f: A => B): MyList[B] = this.foldRight(MyNil: MyList[B])((item, z) => MyCons(f(item), z)) + def map[B](f: A => B): MyList[B] = ??? // Normal - def flatMap[B](f: A => MyList[B]): MyList[B] = this.foldRight(MyNil: MyList[B])((item, z) => f(item) ++ z) + def flatMap[B](f: A => MyList[B]): MyList[B] = ??? // Normal - def filter(f: A => Boolean): MyList[A] = - this.foldRight(MyNil: MyList[A])((item, z) => if (f(item)) MyCons(item, z) else z) + def filter(f: A => Boolean): MyList[A] = ??? // Normal: 条件 - filterと同様の実装でも構いません。 // Hard: 条件 - 中間リストを生成しないように実装してください。 - def withFilter(f: A => Boolean): MyList[A] = this.foldRight(MyNil: MyList[A])((b, z) => if (f(b)) MyCons(b, z) else z) + def withFilter(f: A => Boolean): MyList[A] = ??? // Normal - def find(f: A => Boolean): MyOption[A] = - this.foldRight(MyNone: MyOption[A])((b, z) => if (f(b)) MySome(b) else z) + def find(f: A => Boolean): MyOption[A] = ??? // Normal - def startsWith[B >: A](prefix: MyList[B]): Boolean = - if (this.length < prefix.length) false - else - prefix match { - case MyNil => true - case MyCons(pHead, pTail) => - this match { - case MyNil => false - case MyCons(head, tail) => if (pHead == head) tail.startsWith(pTail) else false - } - } + def startsWith[B >: A](prefix: MyList[B]): Boolean = ??? + } case object MyNil extends MyList[Nothing] @@ -79,9 +56,9 @@ case class MyCons[+A](head: A, tail: MyList[A]) extends MyList[A] object MyList { // Easy - def empty[A]: MyList[A] = MyNil + def empty[A]: MyList[A] = ??? // Normal - def apply[A](as: A*): MyList[A] = as.foldRight(MyNil: MyList[A])((b, z) => MyCons(b, z)) + def apply[A](as: A*): MyList[A] = ??? -} \ No newline at end of file +} diff --git a/src/main/scala/com/chatwork/quiz/misc/BTree.scala b/src/main/scala/com/chatwork/quiz/misc/BTree.scala index de9d5ff..85eb293 100644 --- a/src/main/scala/com/chatwork/quiz/misc/BTree.scala +++ b/src/main/scala/com/chatwork/quiz/misc/BTree.scala @@ -54,21 +54,17 @@ sealed trait Node { */ case class Branch(left: Node, value: Int, right: Node) extends Node { - val size: Int = left.size + right.size + 1 + val size: Int = ??? - val sum: Int = left.value + right.value + this.value + val sum: Int = ??? - val avg: Double = this.sum / this.size + val avg: Double = ??? - private val list = List(left.value, right.value, this.value) + val max: Int = ??? - val max: Int = list.max + val min: Int = ??? - val min: Int = list.min - - def find(value: Int): Option[Node] = - if (value == this.value) Some(this) - else left.find(value).orElse(right.find(value)).orElse(None) + def find(value: Int): Option[Node] = ??? } @@ -79,17 +75,17 @@ case class Branch(left: Node, value: Int, right: Node) extends Node { */ case class Leaf(value: Int) extends Node { - val size: Int = 1 + val size: Int = ??? - val sum: Int = value + val sum: Int = ??? - val avg: Double = value + val avg: Double = ??? - val max: Int = value + val max: Int = ??? - val min: Int = value + val min: Int = ??? - def find(value: Int): Option[Node] = if (value == this.value) Some(this) else None + def find(value: Int): Option[Node] = ??? } @@ -125,14 +121,6 @@ object BTree { * @param values ノードに格納する値の集合 * @return [[BTree]] */ - def apply(values: List[Int]): BTree = { - values match { - case value :: Nil => BTree(Leaf(value)) - case _ => { - val (left, mid :: right) = values.splitAt(values.size / 2) - BTree(Branch(apply(left).node, mid, apply(right).node)) - } - } - } - -} \ No newline at end of file + def apply(values: List[Int]): BTree = ??? + +} diff --git a/src/main/scala/com/chatwork/quiz/misc/WordCounter.scala b/src/main/scala/com/chatwork/quiz/misc/WordCounter.scala index e89cc58..f72aecc 100644 --- a/src/main/scala/com/chatwork/quiz/misc/WordCounter.scala +++ b/src/main/scala/com/chatwork/quiz/misc/WordCounter.scala @@ -1,22 +1,16 @@ package com.chatwork.quiz.misc -import scala.collection.immutable.HashMap - /** * ワードをカウントするオブジェクト。 */ object WordCounter { - val SEPARATOR = " " - /** * 文字列から単語数をカウントする。 * * @param words 文字列 * @return 単語がキー、単語数がヴァリューのマップ */ - def countWords(words: List[String]): Map[String, Int] = { - words.map(elm => elm.split(SEPARATOR)).flatten.groupMapReduce(t => t)(_ => 1)((x, y) => x + y) - } + def countWords(words: List[String]): Map[String, Int] = ??? -} \ No newline at end of file +} diff --git a/src/test/scala/com/chatwork/quiz/MyOptionSpec.scala b/src/test/scala/com/chatwork/quiz/MyOptionSpec.scala index cf7c1e3..ebda2a4 100644 --- a/src/test/scala/com/chatwork/quiz/MyOptionSpec.scala +++ b/src/test/scala/com/chatwork/quiz/MyOptionSpec.scala @@ -1,8 +1,15 @@ package com.chatwork.quiz -import org.scalatest.{Matchers, FunSpec} +import org.scalatest.funspec.AnyFunSpec +import org.scalatest.matchers.should.Matchers -class MyOptionSpec extends FunSpec with Matchers { +class MyOptionSpec extends AnyFunSpec with Matchers { + + describe("MyOption#apply") { + it("should return MyNone if it's null") { + MyOption(null) shouldBe MyNone + } + } describe("MyOption#get") { it("should return a value if it's not empty") { @@ -69,4 +76,34 @@ class MyOptionSpec extends FunSpec with Matchers { } } -} \ No newline at end of file + describe("MyOption#translateToForComprehensions1") { + it("should return MySome(6)") { + val expected = + MyOption(1).flatMap { one => + MyOption(2).flatMap { two => + MyOption(3).map { three => + one + two + three + } + } + } + MyOption.translateToForComprehensions1 shouldBe expected + MyOption.translateToForComprehensions1 shouldBe MySome(6) + } + } + + describe("MyOption#translateToForComprehensions2") { + it("should return MyNone") { + val expected = + MyOption(1).flatMap { one => + MyOption(-2).withFilter(_ > 0).flatMap { two => + MyOption(3).map { three => + one + two + three + } + } + } + MyOption.translateToForComprehensions2 shouldBe expected + MyOption.translateToForComprehensions2 shouldBe MyNone + } + } + +} diff --git a/src/test/scala/com/chatwork/quiz/collection/MyListSpec.scala b/src/test/scala/com/chatwork/quiz/collection/MyListSpec.scala index 5bb9398..faf0507 100644 --- a/src/test/scala/com/chatwork/quiz/collection/MyListSpec.scala +++ b/src/test/scala/com/chatwork/quiz/collection/MyListSpec.scala @@ -1,9 +1,10 @@ package com.chatwork.quiz.collection -import com.chatwork.quiz.{MySome, MyNone} -import org.scalatest.{FunSpec, Matchers} +import com.chatwork.quiz.{ MyNone, MySome } +import org.scalatest.funspec.AnyFunSpec +import org.scalatest.matchers.should.Matchers -class MyListSpec extends FunSpec with Matchers { +class MyListSpec extends AnyFunSpec with Matchers { describe("MyList#apply") { it("should return a new MyList instance") { @@ -50,7 +51,8 @@ class MyListSpec extends FunSpec with Matchers { describe("MyList#flatMap") { it("should apply an operator to each element in the list and flatten") { - MyList(MyList(1, 2), MyList(3, 4), MyList(5, 6), MyList(7, 8)).flatMap(_.map(_ * 2)) shouldEqual MyList(2, 4, 6, 8, 10, 12, 14, 16) + MyList(MyList(1, 2), MyList(3, 4), MyList(5, 6), MyList(7, 8)) + .flatMap(_.map(_ * 2)) shouldEqual MyList(2, 4, 6, 8, 10, 12, 14, 16) } } @@ -70,7 +72,7 @@ class MyListSpec extends FunSpec with Matchers { describe("for comprehension") { it("should provide for comprehension") { (for { - suit <- MyList("Diamond", "Heart", "Spade", "Club") + suit <- MyList("Diamond", "Heart", "Spade", "Club") number <- MyList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13) if suit == "Diamond" } yield { @@ -79,4 +81,4 @@ class MyListSpec extends FunSpec with Matchers { } } -} \ No newline at end of file +} diff --git a/src/test/scala/com/chatwork/quiz/misc/BTreeSpec.scala b/src/test/scala/com/chatwork/quiz/misc/BTreeSpec.scala index 8e01850..4673df8 100644 --- a/src/test/scala/com/chatwork/quiz/misc/BTreeSpec.scala +++ b/src/test/scala/com/chatwork/quiz/misc/BTreeSpec.scala @@ -1,10 +1,11 @@ package com.chatwork.quiz.misc -import org.scalatest.{Matchers, FunSpec} +import org.scalatest.funspec.AnyFunSpec +import org.scalatest.matchers.should.Matchers import scala.math.Ordering.IntOrdering -class BTreeSpec extends FunSpec with Matchers { +class BTreeSpec extends AnyFunSpec with Matchers { describe("BTree#size") { it("should return the number of elements in the BTree") { @@ -49,4 +50,4 @@ class BTreeSpec extends FunSpec with Matchers { } } -} \ No newline at end of file +} diff --git a/src/test/scala/com/chatwork/quiz/misc/WordCounterSpec.scala b/src/test/scala/com/chatwork/quiz/misc/WordCounterSpec.scala index be9d7a4..dfb65e3 100644 --- a/src/test/scala/com/chatwork/quiz/misc/WordCounterSpec.scala +++ b/src/test/scala/com/chatwork/quiz/misc/WordCounterSpec.scala @@ -1,15 +1,23 @@ package com.chatwork.quiz.misc -import org.scalatest.{FunSpec, Matchers} +import org.scalatest.funspec.AnyFunSpec +import org.scalatest.matchers.should.Matchers - -class WordCounterSpec extends FunSpec with Matchers { +class WordCounterSpec extends AnyFunSpec with Matchers { describe("WordCounter#countWord") { it("should count words") { - val words = List("apple banana", "orange apple mango", "kiwi papaya orange","mango orange muscat apple") - WordCounter.countWords(words) shouldBe Map("banana" -> 1, "muscat" -> 1, "orange" -> 3, "mango" -> 2, "apple" -> 3, "kiwi" -> 1, "papaya" -> 1) + val words = List("apple banana", "orange apple mango", "kiwi papaya orange", "mango orange muscat apple") + WordCounter.countWords(words) shouldBe Map( + "banana" -> 1, + "muscat" -> 1, + "orange" -> 3, + "mango" -> 2, + "apple" -> 3, + "kiwi" -> 1, + "papaya" -> 1 + ) } } -} \ No newline at end of file +} From a0a95dbf856cf49ca0ab1fc7292e3fa27d0c24fa Mon Sep 17 00:00:00 2001 From: "louvre2489@gmail.com" <louvre2489@gmail.com> Date: Sat, 31 Oct 2020 00:07:00 +0900 Subject: [PATCH 22/25] =?UTF-8?q?master=E3=81=A8=E3=81=AE=E5=B7=AE?= =?UTF-8?q?=E5=88=86=E3=81=8C=E3=82=8F=E3=81=8B=E3=82=8B=E3=82=88=E3=81=86?= =?UTF-8?q?=E3=81=AB=E5=A4=89=E6=9B=B4=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB?= =?UTF-8?q?=E3=82=92=E6=95=B4=E7=90=86=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/scala/com/chatwork/quiz/MyOptionSpec.scala | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/test/scala/com/chatwork/quiz/MyOptionSpec.scala b/src/test/scala/com/chatwork/quiz/MyOptionSpec.scala index ebda2a4..3d662fe 100644 --- a/src/test/scala/com/chatwork/quiz/MyOptionSpec.scala +++ b/src/test/scala/com/chatwork/quiz/MyOptionSpec.scala @@ -5,12 +5,6 @@ import org.scalatest.matchers.should.Matchers class MyOptionSpec extends AnyFunSpec with Matchers { - describe("MyOption#apply") { - it("should return MyNone if it's null") { - MyOption(null) shouldBe MyNone - } - } - describe("MyOption#get") { it("should return a value if it's not empty") { MySome(100).get shouldBe 100 From 9a6f245236f686b93a7ec36beb439735d0ea6a65 Mon Sep 17 00:00:00 2001 From: "louvre2489@gmail.com" <louvre2489@gmail.com> Date: Sat, 31 Oct 2020 00:09:08 +0900 Subject: [PATCH 23/25] =?UTF-8?q?master=E3=81=A8=E3=81=AE=E5=B7=AE?= =?UTF-8?q?=E5=88=86=E3=81=8C=E3=82=8F=E3=81=8B=E3=82=8B=E3=82=88=E3=81=86?= =?UTF-8?q?=E3=81=AB=E5=A4=89=E6=9B=B4=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB?= =?UTF-8?q?=E3=82=92=E6=95=B4=E7=90=86=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/scala/com/chatwork/quiz/MyOptionSpec.scala | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/test/scala/com/chatwork/quiz/MyOptionSpec.scala b/src/test/scala/com/chatwork/quiz/MyOptionSpec.scala index 3d662fe..ebda2a4 100644 --- a/src/test/scala/com/chatwork/quiz/MyOptionSpec.scala +++ b/src/test/scala/com/chatwork/quiz/MyOptionSpec.scala @@ -5,6 +5,12 @@ import org.scalatest.matchers.should.Matchers class MyOptionSpec extends AnyFunSpec with Matchers { + describe("MyOption#apply") { + it("should return MyNone if it's null") { + MyOption(null) shouldBe MyNone + } + } + describe("MyOption#get") { it("should return a value if it's not empty") { MySome(100).get shouldBe 100 From 6b4912f541b93c06ca7d2832b3b51060033d26c9 Mon Sep 17 00:00:00 2001 From: "louvre2489@gmail.com" <louvre2489@gmail.com> Date: Mon, 2 Nov 2020 18:26:54 +0900 Subject: [PATCH 24/25] =?UTF-8?q?CircleCI=E5=8B=95=E3=81=91=EF=BC=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sonar-project.properties | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sonar-project.properties b/sonar-project.properties index 71bac1d..29ff935 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -12,3 +12,5 @@ sonar.language=scala sonar.scala.scoverage.reportPath=\ target/scala-2.13/scoverage-report + +# \ No newline at end of file From 5573e1556c185c7a5c10bb93a8f64d458a30bce1 Mon Sep 17 00:00:00 2001 From: "louvre2489@gmail.com" <louvre2489@gmail.com> Date: Mon, 2 Nov 2020 18:28:06 +0900 Subject: [PATCH 25/25] =?UTF-8?q?CircleCI=E5=8B=95=E3=81=91=EF=BC=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sonar-project.properties | 2 -- 1 file changed, 2 deletions(-) diff --git a/sonar-project.properties b/sonar-project.properties index 29ff935..71bac1d 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -12,5 +12,3 @@ sonar.language=scala sonar.scala.scoverage.reportPath=\ target/scala-2.13/scoverage-report - -# \ No newline at end of file