diffplug / diffplug/spotless

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

Open
#2,715 1 comment 0 reactions 0 assignees View on GitHub
enhancement
Dominant language
Java
Stars
5.6k
Forks
559
Avg merge
1d 13h
Merged PRs (30d)
34

Description

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:

```kts
// build.gradle.kts (or in convention plugin)
tasks.withType() {
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!

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.