feat(spotless/gradle-plugin): Allow `SpotlessApply` to notify when/what work was done

オープン
#2,715 コメント 1 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

評価

難易度
5/5
見積もり時間
1週間以上
初心者へのやさしさ
25/100
issue の種類
機能追加
明瞭さ
おおむね明確
活発さ
停滞
技術スタック
java, kotlin
領域
build-system

調査の方向性

まず Gradle タスク SpotlessApply とその didWork の動作を確認し、次に実行中にコピーされたファイルがどのように追跡されるかを調べます。作業が発生した場合にのみ、タスクが変更されたファイルを公開または報告し、その動作が関連するテストで検証されていれば完了です。

索引モデルが issue の本文から書いたものです。

説明

enhancement

Hello Spotless team! We're very thankful for your work on this tool. Seeking review on a proposed feature that we are happy to help incorporate into the project if it sounds like a desirable enhancement.

TL;DR:

We'd like to expose information on which files were auto-fixed by SpotlessApply to propagate that information to our developer experience

Problem Statement

Our current team's workflow is as such for running Spotless:

  • On CI, our invocation of gradle build runs spotlessCheck, as is configured by default. All failures are reported by CI and require manual updates
  • In local use cases, gradle build will instead run spotlessApply to automatically fix issues. This is biased toward improving the UX during local development

In this case, the developer experience is enhanced by the automatic fixing, however it is less clear when spotlessApply is run on the user's behalf.

It would be preferable to do something more targeted. In this case, we'd prefer to have SpotlessApply (or a finalizer task) only print information in the event that Spotless performed work.

[!NOTE]
In an ideal world, we'd also be able to show the violations that were fixed during the auto-fix phase, such that we could demonstrate to developers "there were X and Y issues, and we've auto-fixed them". This may be out of scope of this more immediate enhancement, but may be interesting to provide.

(Potential) Design

Enhance the SpotlessApply task to output a simple report containing a manifest of all files it copied in on the most recent execution. This output location can be exposed by the task for the specific gradle build, read, and used to provide a more detailed listing of the edited files.

Note: Theoretical Workaround

We've attempted what we thought would be a suitable workaround for the time being:

// build.gradle.kts (or in convention plugin)
tasks.withType<SpotlessApply>() {
    doLast {
      if(didWork) {
         logger.lifecycle("code auto-formatted by spotlessApply")
      }
    }
}

Unfortunately, even for cases where there are no changes to any of the source files, the SpotlessApply task is still labeled as didWork == true. If we should file this separately as a "bug", please let us know!

主要言語
Java
スター
5.7k
フォーク
560
平均マージ
1日 13時間
マージ済み PR(30日)
43

コントリビューションガイド

コントリビューションガイドを開く

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

diffplug/spotless のほかの issue

diffplug/spotless の issue をすべて見る

似ている issue

Java の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。