Size: a a a

Scala User Group

2021 February 19

YY

Yuriy Yarosh in Scala User Group
Ну это лучше чем всякое прочее не от мира сего...

еб...ый sbt
источник

λ

λoλdog in Scala User Group
Ты хочешь именно в dependencies scala хранить их?
источник
2021 February 20

YY

Yuriy Yarosh in Scala User Group
λoλdog
Ты хочешь именно в dependencies scala хранить их?
ага
источник

YY

Yuriy Yarosh in Scala User Group
Просто проект кроссплатформенный и тяжко всё менеджить...
источник

E

Elijah in Scala User Group
Yuriy Yarosh
Пришлось делать только так
 libraryDependencies ++=
     // shared with jvm
     (tests.value ++ units.value ++ cats.value ++ fs2.value ++ refined.value) ++
       // everything else
       slinky.value


и от части копи-пастить
я похожее видел вот здесь, может пригодится
источник

YY

Yuriy Yarosh in Scala User Group
Супер, спасибо.
источник

AS

Artem Sokolov in Scala User Group
Нужен совет по стилям кода которые себя зарекомендовали хорошо и поводу его енфорса (автоматического).

Проблематика - скала очень гибкая и позволяет писать в куче разных стилей и подходов и оформлять код очень по разному.

Сравнивая её с Питоном и Го приводят аргумент что там есть 1 общепризнанный стиль (например, pep8) и 1 наиболее распространенный форматтер, который енфорсит данные стайлгайды. Что позволяет легко переходить с проекта на проект, кодовые базы более менее унифицированы.

Понятно что в скале есть разные подходы/парадигмы которые в принципе всё меняют в том как пишется код и одного чего-то не будет никогда на всю скалу.

Но тем не менее, вероятно сообщество сможет подсказать хорошие примеры проработанных и вымученных опытом стайлгайдов, а также подсказок как их проще енфорсить (scalafmt, scalafix, плагины/флаги компилятора).

Интересуют направления Scala as Scala, Scala as Akka (typed), Scala as FP. Т.е. as Java или as Spark не интересует.

Идеально если что-то по этой теме есть в статьях или ссылках где-то и вы можете это порекомендовать.
В ином случае буду крайне благодарен вашему личному опыту и мнению и ссылками хотябы на кодобазы (если нет файла с отдельно описанием кодстайла)
источник

ΛВ

Λнтон Войцишевский... in Scala User Group
Artem Sokolov
Нужен совет по стилям кода которые себя зарекомендовали хорошо и поводу его енфорса (автоматического).

Проблематика - скала очень гибкая и позволяет писать в куче разных стилей и подходов и оформлять код очень по разному.

Сравнивая её с Питоном и Го приводят аргумент что там есть 1 общепризнанный стиль (например, pep8) и 1 наиболее распространенный форматтер, который енфорсит данные стайлгайды. Что позволяет легко переходить с проекта на проект, кодовые базы более менее унифицированы.

Понятно что в скале есть разные подходы/парадигмы которые в принципе всё меняют в том как пишется код и одного чего-то не будет никогда на всю скалу.

Но тем не менее, вероятно сообщество сможет подсказать хорошие примеры проработанных и вымученных опытом стайлгайдов, а также подсказок как их проще енфорсить (scalafmt, scalafix, плагины/флаги компилятора).

Интересуют направления Scala as Scala, Scala as Akka (typed), Scala as FP. Т.е. as Java или as Spark не интересует.

Идеально если что-то по этой теме есть в статьях или ссылках где-то и вы можете это порекомендовать.
В ином случае буду крайне благодарен вашему личному опыту и мнению и ссылками хотябы на кодобазы (если нет файла с отдельно описанием кодстайла)
scalafmt — форматтер, он за стиль кода из перечисленных никак не отвечает, просто пробелы-табы ставит.
Для SaFP есть https://github.com/vovapolu/scaluzzi, но он старенький и его надо допиливать под себя. Ну и не сказать что он полный, да, зафорсить RT он не сможет например.
источник

ΛВ

Λнтон Войцишевский... in Scala User Group
Есть линетры вроде scapegoat & wartremover, которые ругаются на распространенные проблемы, типа нон файнал кейс классов, но это тоже не про стиль
источник

AS

Artem Sokolov in Scala User Group
Λнтон Войцишевский
Есть линетры вроде scapegoat & wartremover, которые ругаются на распространенные проблемы, типа нон файнал кейс классов, но это тоже не про стиль
не про стиль тоже крайне приветствуется
источник

AS

Artem Sokolov in Scala User Group
может есть какая-то годная статья или презентация, которую можешь посоветовать?
источник

ΛВ

Λнтон Войцишевский... in Scala User Group
Artem Sokolov
не про стиль тоже крайне приветствуется
источник

AS

Artem Sokolov in Scala User Group
благодарю
источник

ΛВ

Λнтон Войцишевский... in Scala User Group
Если рассказывать по опыту юзания всего этого:

— scalafix — комбайн, который умеет и ругаться на ошибки, и переписывать код — единственный инструмент собственно, который умеет это делать. Еще кажется самым живым из тех, что есть, туда довольно легко законтрибутить кастомные правила (их можно в скаладексе поискать по тегу). Scaluzzi — одно из выделяющихся, так как позволяет форсить фп-подходы. Organize-imports тоже оказался очень приятным, сгруппированные разделенные импорты без блочных гораздо проще воспринимать оказалось.

— scapegoat — умеет только ругаться, но зато на большой набор линтов из коробки, плюс есть статья с объяснением что-почему. Кастомных линтов не видел к нему, но кажется они существуют. Хорошо встраивается в CI — умеет работать в сонаре и делать html-репорты с проблемами (что, увы, бесполезно при `-Xfatal-warnings`), но плохо в локальный воркфлоу, так как работает примерно как test-coverage тулзы — компилирует код заново в специальные папочки, абсолютно игнорируя прошлые результаты компиляции. То бишь 200 секунд на каждый запуск его. Единственный линтер, который умеет ругать неиспользуемые context-bounds. (Будет встроено в компилятор с 2.13.5)

— wart-remover — тоже только ругающийся линтер с большим набором правил встроенных и кастомных. К сожалению, довольно часто фолспозитивит, но легко настраивается.

— scalac — на удивление в самом компиляторе оч много опций, которые кидают полезные ворнинги на всякие проблемы, их проще всего включить с помощью плагина sbt-tpolecat. Настраивается оч гибко через scalac -Wconf:help. Я бы сказал, что включить на проекте -Werror или -Xfatal-warnings (чтобы любой ворнинг воспринмался как ошибка компиляции) бустит чистоту кода и соблюдение хороших практик на том же уровне, что подключение всяких линтеров.

— IntelliJ IDEA — тоже умеет много всего — ругаться и переписывать, но если в проекте есть макросы, шейплесс или cats.Resource (или ваще что угодно, это чета рандомное), то начинает делать буквально неправильные вещи — не комплировать, убирать нужные импорты, плохо форматировать 🙁

Итог — оставил на маленьких проектах только скалафикс с правилами и скалак, на паре больших все вышеперечисленные.
источник

ΛВ

Λнтон Войцишевский... in Scala User Group
Artem Sokolov
не про стиль тоже крайне приветствуется
^^^^
источник

ΛВ

Λнтон Войцишевский... in Scala User Group
Λнтон Войцишевский
Если рассказывать по опыту юзания всего этого:

— scalafix — комбайн, который умеет и ругаться на ошибки, и переписывать код — единственный инструмент собственно, который умеет это делать. Еще кажется самым живым из тех, что есть, туда довольно легко законтрибутить кастомные правила (их можно в скаладексе поискать по тегу). Scaluzzi — одно из выделяющихся, так как позволяет форсить фп-подходы. Organize-imports тоже оказался очень приятным, сгруппированные разделенные импорты без блочных гораздо проще воспринимать оказалось.

— scapegoat — умеет только ругаться, но зато на большой набор линтов из коробки, плюс есть статья с объяснением что-почему. Кастомных линтов не видел к нему, но кажется они существуют. Хорошо встраивается в CI — умеет работать в сонаре и делать html-репорты с проблемами (что, увы, бесполезно при `-Xfatal-warnings`), но плохо в локальный воркфлоу, так как работает примерно как test-coverage тулзы — компилирует код заново в специальные папочки, абсолютно игнорируя прошлые результаты компиляции. То бишь 200 секунд на каждый запуск его. Единственный линтер, который умеет ругать неиспользуемые context-bounds. (Будет встроено в компилятор с 2.13.5)

— wart-remover — тоже только ругающийся линтер с большим набором правил встроенных и кастомных. К сожалению, довольно часто фолспозитивит, но легко настраивается.

— scalac — на удивление в самом компиляторе оч много опций, которые кидают полезные ворнинги на всякие проблемы, их проще всего включить с помощью плагина sbt-tpolecat. Настраивается оч гибко через scalac -Wconf:help. Я бы сказал, что включить на проекте -Werror или -Xfatal-warnings (чтобы любой ворнинг воспринмался как ошибка компиляции) бустит чистоту кода и соблюдение хороших практик на том же уровне, что подключение всяких линтеров.

— IntelliJ IDEA — тоже умеет много всего — ругаться и переписывать, но если в проекте есть макросы, шейплесс или cats.Resource (или ваще что угодно, это чета рандомное), то начинает делать буквально неправильные вещи — не комплировать, убирать нужные импорты, плохо форматировать 🙁

Итог — оставил на маленьких проектах только скалафикс с правилами и скалак, на паре больших все вышеперечисленные.
это все если что крайне опионейтед и на scala as fp проектах.
источник

AS

Artem Sokolov in Scala User Group
Λнтон Войцишевский
это все если что крайне опионейтед и на scala as fp проектах.
понятно, большое спасибо, записал себе
источник

AS

Artem Sokolov in Scala User Group
Λнтон Войцишевский
это все если что крайне опионейтед и на scala as fp проектах.
а scalafmt никак не использовал? вроде он щас довольно популярный. или я что-то путаю и он входит во что-то из вышеперечисленного?
источник

ΛВ

Λнтон Войцишевский... in Scala User Group
Ну я его не упомянул, так как очень простой
источник

S

Sergey in Scala User Group
Λнтон Войцишевский
scalafmt — форматтер, он за стиль кода из перечисленных никак не отвечает, просто пробелы-табы ставит.
Для SaFP есть https://github.com/vovapolu/scaluzzi, но он старенький и его надо допиливать под себя. Ну и не сказать что он полный, да, зафорсить RT он не сможет например.
Зис
источник