Skip to content
Permalink
Browse files

Initial commit

  • Loading branch information...
dmitriy.kubitskiy
dmitriy.kubitskiy committed May 15, 2019
0 parents commit 6c03931ac6baa55c5709d4ea9ce3c08fb1d088dc
Showing with 299 additions and 0 deletions.
  1. +70 −0 .gitignore
  2. +143 −0 .scalafmt.conf
  3. +15 −0 README.md
  4. +23 −0 build.sbt
  5. +1 −0 project/build.properties
  6. +10 −0 project/common.sbt
  7. +16 −0 project/plugins.sbt
  8. +21 −0 scalafix.conf
@@ -0,0 +1,70 @@
# Created by .ignore support plugin (hsz.mobi)
### Scala template
*.class
*.log
### SBT template
# Simple Build Tool
# http://www.scala-sbt.org/release/docs/Getting-Started/Directories.html#configuring-version-control

dist/*
target/
lib_managed/
src_managed/
project/boot/
project/plugins/project/
.history
.cache
.lib/
### JetBrains template
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839

# User-specific stuff
.idea/**/workspace.xml
.idea/**/tasks.xml
.idea/**/dictionaries
.idea/**/shelf

# Sensitive or high-churn files
.idea/**/dataSources/
.idea/**/dataSources.ids
.idea/**/dataSources.local.xml
.idea/**/sqlDataSources.xml
.idea/**/dynamic.xml
.idea/**/uiDesigner.xml
.idea/**/dbnavigator.xml

# Gradle
.idea/**/gradle.xml
.idea/**/libraries

# CMake
cmake-build-debug/
cmake-build-release/

# Mongo Explorer plugin
.idea/**/mongoSettings.xml

# File-based project format
*.iws

# IntelliJ
out/

# mpeltonen/sbt-idea plugin
.idea_modules/

# JIRA plugin
atlassian-ide-plugin.xml

# Cursive Clojure plugin
.idea/replstate.xml

# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties

# Editor-based Rest Client
.idea/httpRequests
@@ -0,0 +1,143 @@
// для автоматического оформления кода, используя плагин ScalaFMT в интеллиЖ
version = "2.0.0-RC7"
style = IntelliJ
maxColumn = 120
docstrings = ScalaDoc
encoding = "UTF-8"
project.git = true
align = most // For pretty alignment.
optIn.breaksInsideChains = false
optIn.breakChainOnFirstMethodDot = true
optIn.selfAnnotationNewline = true
optIn.annotationNewlines = true
optIn.blankLineBeforeDocstring = false
binPack.unsafeCallSite = false
binPack.unsafeDefnSite = false
binPack.parentConstructors = false
binPack.literalArgumentLists = true
binPack.literalsMinArgCount = 6
binPack.literalsInclude = [".*"]
binPack.literalsExclude = [
String
"Term.Name"
]
continuationIndent.callSite = 2
continuationIndent.defnSite = 4
continuationIndent.extendSite = 4
align.openParenCallSite = true
align.openParenDefnSite = true
align.tokens = [{code = "->"}, {code = "<-"}, {code = "=>", owner = "Case"}, "%", "%%", "%%%", "=", "&&", "||"]
danglingParentheses = true
optIn.configStyleArguments = false # has to be false to make danglingParentheses work
indentOperator.exclude = "^(::|&&|\\|\\|)$"


align.arrowEnumeratorGenerator = false
align.ifWhileOpenParen = true
align.treeCategory."Defn.Trait" = "class/object/trait"
align.treeCategory."Enumerator.Val" = for
align.treeCategory."Defn.Class" = "class/object/trait"
align.treeCategory."Defn.Object" = "class/object/trait"
align.treeCategory."Defn.Val" = "val/var/def"
align.treeCategory."Defn.Def" = "val/var/def"
align.treeCategory."Defn.Var" = "val/var/def"
align.treeCategory."Enumerator.Generator" = for
spaces.beforeContextBoundColon = Never
spaces.afterTripleEquals = false
spaces.inParentheses = false
spaces.neverAroundInfixTypes = []
spaces.afterKeywordBeforeParen = true
spaces.inByNameTypes = true
lineEndings = unix
rewrite.redundantBraces.methodBodies = true
rewrite.redundantBraces.includeUnitMethods = true
rewrite.redundantBraces.maxLines = 100
rewrite.redundantBraces.stringInterpolation = false
rewrite.redundantBraces.generalExpressions = false
rewrite.sortModifiers.order = [
"`implicit`"
"`final`"
"`sealed`"
"`abstract`"
"`override`"
"`private`"
"`protected`"
"`lazy`"
]
rewrite.neverInfix.includeFilters = ["[\\w\\d_]+"]
rewrite.neverInfix.excludeFilters = [
until
to
by
eq
ne
"should.*"
"contain.*"
"must.*"
in
ignore
be
taggedAs
thrownBy
synchronized
have
when
size
only
noneOf
oneElementOf
noElementsOf
atLeastOneElementOf
atMostOneElementOf
allElementsOf
inOrderElementsOf
theSameElementsAs
]
indentOperator.include = ".*"
indentOperator.exclude = "^(&&|\\|\\|)$"
newlines.neverInResultType = false
newlines.neverBeforeJsNative = false
newlines.sometimesBeforeColonInMethodReturnType = true
newlines.penalizeSingleSelectMultiArgList = true
newlines.alwaysBeforeCurlyBraceLambdaParams = false
newlines.alwaysBeforeTopLevelStatements = false
newlines.afterCurlyLambda = never
newlines.afterImplicitKWInVerticalMultiline = false
newlines.beforeImplicitKWInVerticalMultiline = false
newlines.alwaysBeforeElseAfterCurlyIf = false
newlines.alwaysBeforeMultilineDef = true
runner.debug = false
runner.eventCallback = "<FormatEvent => Unit>"
runner.optimizer.dequeueOnNewStatements = true
runner.optimizer.escapeInPathologicalCases = true
runner.optimizer.maxVisitsPerToken = 513
runner.optimizer.maxEscapes = 16
runner.optimizer.maxDepth = 100
runner.optimizer.acceptOptimalAtHints = true
runner.optimizer.disableOptimizationsInsideSensitiveAreas = true
runner.optimizer.pruneSlowStates = true
runner.optimizer.recurseOnBlocks = true
runner.optimizer.forceConfigStyleOnOffset = 150
runner.optimizer.forceConfigStyleMinArgCount = 2
runner.maxStateVisits = 1000000
runner.ignoreWarnings = false
runner.fatalWarnings = false
indentYieldKeyword = true
importSelectors = noBinPack
includeCurlyBraceInSelectChains = false
assumeStandardLibraryStripMargin = false
danglingParentheses = true
poorMansTrailingCommasInConfigStyle = false
verticalMultilineAtDefinitionSite = false
verticalMultilineAtDefinitionSiteArityThreshold = 100
project.files = []
project.includeFilters = [".*\\.scala$",
".*\\.sc$"
]
project.excludeFilters = [".*\\.sbt"]

onTestFailure = "To fix this, run ./scalafmt from the project root directory"

rewrite.rules = [SortImports, RedundantBraces, RedundantParens, AvoidInfix, SortModifiers, PreferCurlyFors]
spaces.inImportCurlyBraces = true
unindentTopLevelOperators = true
@@ -0,0 +1,15 @@
# SBT-COMMON-SETTINGS

набор используемых планигов для SBT.

##СОСТАВ
две части -
1. `project/common.sbt` - его лучше всего использовать в качестве глобальных настроек для всех проектов sbt без явного указания
для этого вам скопировать фаил `common.sbt` в `~/.sbt/0.13/plugins/plugins.sbt` для sbt 0.13 или в `~/.sbt/1.0/plugins/plugins.sbt` для sbt 1.0

2. `project/plugins.sbt` - плагины, которые лучше добавлять к самому проекту, т.к. необоходимо чтоб они, например, работали на сервере при компиляции.


###ENGLISH
`project/common.sbt` - install it as a global plugin so that you can use it in any SBT project without the need to explicitly add it to each one. To do this, add the plugin dependency to `~/.sbt/0.13/plugins/plugins.sbt` for sbt 0.13 or `~/.sbt/1.0/plugins/plugins.sbt` for sbt 1.0:
`project/plugins.sbt` - use it just for regular project plugins
@@ -0,0 +1,23 @@
name := "sbt-common-settings"

version := "0.1"

scalaVersion := "2.12.8"

triggeredMessage := Watched.clearWhenTriggered // очищать консоль при перезапуске находясь внутри (повторяющегося процесса, типа непрерывного теста ~ )

libraryDependencies ++=
Seq("org.scalatest" %% "scalatest" % "3.0.7" % "test", // http://www.scalatest.org/
"org.pegdown" % "pegdown" % "1.6.0" % "test" // https://github.com/sirthias/pegdown/ требуется для генерации отчетов теста
)

testOptions in Test ++=
Seq(Tests.Argument(TestFrameworks.ScalaTest, "-oSD"), // вывод к каждому тесту времени исполнения теста
Tests.Argument(TestFrameworks.ScalaTest, "-h", "target/test-reports") // создание репорта после теста
)

scapegoatVersion in ThisBuild := "1.3.8"
scalaBinaryVersion in ThisBuild := "2.12"

addCommandAlias("testc", ";clean;coverage;test;coverageReport") // для удобного запуска оценки покрытия тестами
coverageExcludedPackages := "Main" // убираем маин из оценки покрытия, тк там как правило одни вызовы, а это мы не тестируем)
@@ -0,0 +1 @@
sbt.version = 1.2.8
@@ -0,0 +1,10 @@
//addSbtPlugin("net.virtual-void" % "sbt-optimizer" % "0.1.2") // анализирует время проведенное при компиляции задач для включения необходимо в билд сбт добавить: enablePlugins(net.virtualvoid.optimizer.SbtOptimizerPlugin) поэтому нельзя использовать в коммон.сбт (будет ошибка на проекте у кого нет этого плагина) работает автоматически при компиляции
addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % "0.9.4") // автоматический рефакторинг ()
addSbtPlugin("com.timushev.sbt" % "sbt-updates" % "0.4.0") // анализирует зависимости для этого используем dependencyUpdates для использования в sbt dependencyUpdates
addSbtPlugin("com.typesafe.sbt" % "sbt-git" % "1.0.0") // позволяет выполнять команды гита внутри сбт
addSbtPlugin("net.virtual-void" % "sbt-dependency-graph" % "0.9.2") // визуализация зависимостей для использования пишем
addSbtPlugin("io.spray" % "sbt-revolver" % "0.9.1") // позволяет быстро перезапускать код для использования пишем в сбт: ~reStart или ~reTest
addSbtPlugin("org.duhemm" % "sbt-errors-summary" % "0.6.3") // симпатичный формат вывода сообщений об ошибках, снижение мусора, более конкретное указание где ошибка, использование автоматическое при компилировании
addSbtPlugin("com.orrsella" % "sbt-stats" % "1.0.7") // общая статистика по коду (размер комментариев, кода, общая информация) для использования пишем: stats
addSbtPlugin("com.github.sbt" % "sbt-duplicates-finder" % "1.0.0") // поиск конфликтующих зависимостей (для использования : checkDuplicates)
addSbtPlugin("com.softwaremill.clippy" % "plugin-sbt" % "0.6.1") // богатая информация об ошибках (стаковерфлоу прямо в консоле)
@@ -0,0 +1,16 @@
addSbtPlugin("com.github.gseitz" % "sbt-release" % "1.0.11") // пайплайн выкатывания продукта в прод используя sbt
addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.3.15") // основная схема по упаковке кода в продукт под различные платформы в том числе в контейнер
addSbtPlugin("com.sksamuel.scapegoat" %% "sbt-scapegoat" % "1.0.9") // статический анализатор (варт ремувер черезчур категоричный вплоть до запрета любых мутабельных переменных)
//также необходимо указать в билдСБТ:
//scapegoatVersion in ThisBuild := "1.3.8"
//scalaBinaryVersion in ThisBuild := "2.12"
//для использования пишем: scapegoat

addSbtPlugin("org.scoverage" % "sbt-scoverage" % "1.5.1") // оценивает покрытие тестами https://github.com/scoverage/sbt-scoverage
//использование:
//sbt clean coverage test
//sbt coverageReport
//лучше вариант:
//добавить в билдСБТ следующее:
//addCommandAlias("testc", ";clean;coverage;test;coverageReport") // для удобного запуска оценки покрытия тестами
//coverageExcludedPackages := "Main" // убираем маин из оценки покрытия, тк там как правило одни вызовы, а это мы не тестируем)
@@ -0,0 +1,21 @@
rules = [
ExplicitResultTypes
LeakingImplicitClassVal
MissingFinal
NoAutoTupling
NoInfer
NoValInForComprehension
ProcedureSyntax
]

MissingFinal {
noLeakingSealed = true
noLeakingCaseClass = true
}

NoInfer.symbols = [
"java.io.Serializable",
"scala.Any",
"scala.AnyVal",
"scala.Product"
]

0 comments on commit 6c03931

Please sign in to comment.
You can’t perform that action at this time.