Nano Hash - криптовалюты, майнинг, программирование

Условный scalacSettings/settingKey

Я хочу, чтобы мой scalacSettings был более строгим (больше линтинга), когда я выдаю свою собственную команду validate.

Каков наилучший способ добиться этого?

Новая область видимости (strict) работала, но она требует двухкратной компиляции проекта при выпуске test. Так что это не вариант.

sbt
22.01.2019

  • Вы пробовали что-то подобное scalacSettings in validate ++= Seq(...)? 23.01.2019
  • Помогает ли эта информация stackoverflow.com/questions/26940253/? 23.01.2019
  • validate — это не область, а псевдоним команды: private def cmdAlias(name: String, commands: List[String]) = addCommandAlias(name, s;${commands.mkString(;)}) cmdAlias(validateCoverage, scalafmtCheckAlias ​​++ покрытиеПсевдоним) 23.01.2019
  • Не уверен насчет псевдонимов в том, как вы их используете. Можешь преобразовать validate в task и попробовать? 23.01.2019
  • validate используется, когда мы запускаем сборку в CI, и его следует строго анализировать. При разработке настройки компиляции менее ограничительны и, следовательно, не навязчивы. Я не хочу, чтобы меня беспокоили неиспользуемые ошибки компиляции импорта при разработке новой функции :-) 23.01.2019
  • Вы можете определить значения в области задач. Посмотрите ссылку, которую я разместил 23.01.2019
  • Очень круто. Однако это, похоже, не делает то, на что я надеялся (strictCompile - это TaskKey[Unit]): strictCompile := (компилировать в Compile).value, scalacOptions.in(Compile, compile) := baseScalacSettings, scalacOptions.in(Compile, strictCompile) := baseScalacSettings++ строгиеScalacSettings 24.01.2019
  • Он компилируется, но только с baseScalacSettings 25.01.2019

Ответы:


1

Пользовательская команда позволяет временно изменять состояние сборки, которое можно отменить. после завершения команды:

def validate: Command = Command.command("validate") { state =>
  import Project._
  val stateWithStrictScalacSettings =
    extract(state).appendWithSession(
      Seq(Compile / scalacOptions ++= Seq(
        "-Ywarn-unused:imports",
        "-Xfatal-warnings",
        "...",
      ))
      ,state
    )

  val (s, _) = extract(stateWithStrictScalacSettings).runTask(Test / test, stateWithStrictScalacSettings)
  s
}

commands ++= Seq(validate)

или более кратко, используя :: удобный метод для State преобразований:

commands += Command.command("validate") { state =>
  """set scalacOptions in Compile := Seq("-Ywarn-unused:imports", "-Xfatal-warnings", "...")""" :: 
  "test" :: state
} 

Таким образом, мы можем использовать sbt test во время разработки, в то время как наш CI подключается к sbt validate, который использует stateWithStrictScalacSettings.

01.02.2019
  • Мне нужен строгий вариант компиляции. Я дошел до этого момента: def strictCompile: Command = Command.command(strictCompile) { state => val Extracted = Project.extract(state) val ref = Extracted.get(thisProjectRef) val s = Extracted. appendWithoutSession(Seq(Compile/scalacOptions := baseScalacSettings ++ strictScalacSettings),state) Project.extract(s).runAggregated(Compile/compile in ref, s) s } Это реализация, которая использует runAggregated (для нескольких подмодулей). Он компилируется, но не применяет строгие настройки компиляции. 04.02.2019
  • Установите ось проекта на ThisBuild вот так: extracted.appendWithoutSession(Seq(ThisBuild / Compile / scalacOptions := baseScalacSettings ++ strictScalacSettings),state) 05.02.2019
  • Я вижу, умный. Это не работает, когда вы используете его внутри projectSettings внутри AutoPlugin (SBT 1.x) 05.02.2019
  • Есть ли способ отладить то, что происходит? sbt inspect strictCompile показывает, что это команда, но не показывает, что делает. Я также использую sbt clean debug strictCompile, и он применяет baseScalacOptions (как определено в projectSettings), но strictScalacOptions по-прежнему не учитывается. 05.02.2019
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..