Thanks for the auto formatting initiative, I think its really a time
saver.

I also agree about the line length, it would be better to keep it at 120
and a bummer it has to be reduced to 100 now.

Looking at palantir-format, I actually like some of their format choices
like line-length and also not splitting lambda argument (which is usually a
few characters) and block into multiple line like the google-format like we
had before, its too bad they can't customize the indent.  Not sure if
there's an easy way forward with that, and someone with interest/time to do
it.

Thanks
Szehon

On Fri, Jul 29, 2022 at 12:27 PM Anton Okolnychyi
<aokolnyc...@apple.com.invalid> wrote:

> I am afraid it is not easily possible. I looked into it a bit and even if
> we create a custom formatting step in Spotless (easy), there is no way to
> simply change the line limit. We would have to fork the Google format lib.
> I don’t think it is worth. Let’s just stick to 100 then.
>
> - Anton
>
> On Jul 29, 2022, at 10:03 AM, Ryan Blue <b...@tabular.io> wrote:
>
> Is line length something that we can fix? That seems like a reasonable
> change to Google style that we may be able to do something about.
>
> On Fri, Jul 29, 2022 at 9:52 AM Anton Okolnychyi <
> aokolnyc...@apple.com.invalid> wrote:
>
>> Austin, I don’t think anyone questions the value of consistent code or
>> the value of automatic formatting. It is quite the opposite, actually. I
>> think everyone on this thread actually cares about those things :)
>>
>> Was automatic formatting helpful? For sure! Did changing the line limit
>> from 120 to 100 on a 4+ year project brought a lot of value, for example? I
>> am not sure.
>>
>> - Anton
>>
>> On Jul 29, 2022, at 9:44 AM, Yufei Gu <flyrain...@gmail.com> wrote:
>>
>> It is the right direction to remove the trivial part of the coding. Just
>> wondering why we change the max line length from 120 to 100.
>>
>> Best,
>>
>> Yufei
>>
>> `This is not a contribution`
>>
>>
>> On Fri, Jul 29, 2022 at 9:21 AM Austin Bennett <
>> whatwouldausti...@gmail.com> wrote:
>>
>>> Probably worthwhile to really think about the long-term desired
>>> outcomes.  Even a large, one-time, disruption of the codebase for the sake
>>> of future consistency could be quite valuable.  Remember you'll also lose
>>> fidelity with history/blame.  At some point a 'breaking' ( in a different
>>> sense ) change might be useful rather than anchoring on what exists.
>>>
>>>
>>>
>>> On Fri, Jul 29, 2022 at 8:59 AM Anton Okolnychyi <
>>> aokolnyc...@apple.com.invalid> wrote:
>>>
>>>> On a side note, having automatic formatting was really nice. I think it
>>>> is the right direction. If we only had a way to tweak a few rules like the
>>>> max line length, one-line Javadoc and maybe consider using the Google
>>>> format for 1.8 cause we are using the 1.7 format at the moment, which was
>>>> not designed for lambdas. That way we may have all the benefits of
>>>> automatic formatting with less disruption to the code.
>>>>
>>>> - Anton
>>>>
>>>> On Jul 28, 2022, at 7:35 PM, Anton Okolnychyi <
>>>> aokolnyc...@apple.com.INVALID> wrote:
>>>>
>>>> I had a chance to rebase one of my PRs. It is really hard to justify
>>>> the new max line length of 100 chars. I think the most unreadable code is
>>>> usually around places when single statements are split into multiple lines.
>>>> Since Java has explicit types and we prefer full and elaborate class/var
>>>> names, the new line limit alone triggered so many changes and requires
>>>> splitting a lot of statements that would previously fit on a single line.
>>>>
>>>> The max line length is one of the reasons why Palantir folks forked the
>>>> Google format.
>>>>
>>>> https://github.com/palantir/palantir-java-format
>>>>
>>>> - Anton
>>>>
>>>>
>>>> On Jul 28, 2022, at 7:42 AM, Eduard Tudenhoefner <edu...@tabular.io>
>>>> wrote:
>>>>
>>>> Thanks for your honest feedback Anton, which I really appreciate. I
>>>> agree with the points you brought up.
>>>>
>>>> I don't prefer the Google Java Format either, but it is at least
>>>> something that produces consistent results across tools.
>>>> If you ask me, I would love to customize the code format and have it as
>>>> close as possible to what the Iceberg project had. But one of the reasons
>>>> why the format isn't customizable is because it is difficult to support
>>>> such customizations across tools.
>>>>
>>>> The problem with code format is that there is no single format that can
>>>> satisfy the preferences of everybody. However, from my experience, once
>>>> people start to use *any* code format that produces consistent results
>>>> across *Eclipse/IntelliJ/cmd line*, people stop worrying about code
>>>> format details.
>>>>
>>>> This is also one of the reasons why the creators of Go decided to have
>>>> a code formatter built-in (https://go.dev/doc/effective_go#formatting).
>>>>
>>>> In the long run I think the decision to use Spotless + code formatting
>>>> helps, especially for new people that want to contribute and don't want to
>>>> feel frustrated due to review feedback around code style.
>>>>
>>>> Eduard
>>>>
>>>> On Thu, Jul 28, 2022 at 6:15 AM Anton Okolnychyi <aokolnyc...@apple.com>
>>>> wrote:
>>>>
>>>>> I am late to the discussion, but I would like to express my opinion.
>>>>>
>>>>> As someone who deeply cares about the code consistency and leaves a
>>>>> lot of style-related nits, I am definitely happy to see efforts to 
>>>>> simplify
>>>>> the life of the reviewers and automate the formatting process. Explaining
>>>>> the code style to new contributors consumes a lot of time and results in
>>>>> more iterations on PRs. Automating this would be great!
>>>>>
>>>>> However, I am concerned regarding the changes merged in PR #5312.
>>>>>
>>>>> - Many changes that went in that PR were against the original code
>>>>> style of the project that we, committers and contributors, tried to
>>>>> maintain for all these years. I think we had a lot of well-structured and
>>>>> consistent places, which attracted devs to Iceberg.
>>>>> - I feel the code quality dropped as some places were written in the
>>>>> old style and now look really weird. If we followed the new style
>>>>> originally, maybe, it would look much better as we would structure the 
>>>>> code
>>>>> differently.
>>>>> - As a someone whose team maintains an internal fork that is very
>>>>> close to master (I know we are not the only ones), I feel such a massive
>>>>> change will be a challenge to cherry-pick. I am not convinced introducing
>>>>> automatic formatting had to be so radical.
>>>>>
>>>>> The first two points concern me the most. Since I am late to the
>>>>> discussion, it would not be fair for me to request changes. However, I
>>>>> strongly suggest the community to reconsider the approach we took while we
>>>>> haven’t merged many changes on top of PR #5312.
>>>>>
>>>>> To sum up, I definitely support automating the formatting to simplify
>>>>> reviews and help new contributors but I would try to come with a way to
>>>>> make it less radical and follow whatever we had all these years. We did
>>>>> discuss some of the formatting guidelines a few years ago and it is all
>>>>> different now.
>>>>>
>>>>> - Anton
>>>>>
>>>>> On Jul 27, 2022, at 11:40 AM, Steven Wu <stevenz...@gmail.com> wrote:
>>>>>
>>>>> Eduard, thank you for driving this effort! Great work!
>>>>>
>>>>> On Wed, Jul 27, 2022 at 11:11 AM Eduard Tudenhoefner <
>>>>> edu...@tabular.io> wrote:
>>>>>
>>>>>> Hey everyone,
>>>>>>
>>>>>> Google Java Format + Spotless integration have been merged as part of
>>>>>> https://github.com/apache/iceberg/pull/5266.
>>>>>>
>>>>>> The big bang reformatting (aka *spotlessApply*) will happen as part
>>>>>> of https://github.com/apache/iceberg/pull/5312 and once this PR is
>>>>>> merged, please perform the following steps if you have open PRs:
>>>>>>
>>>>>> 1. Rebase your PR branch against the commit before the „Big Bang“
>>>>>> 2. Run `*./gradlew spotlessApply*`
>>>>>> 3. Squash all commits
>>>>>> 4. Rebase against the latest *HEAD* of the master branch
>>>>>> 5. Force-push your branch
>>>>>>
>>>>>> This should hopefully produce a minimum of conflicts on PRs.
>>>>>>
>>>>>> Additionally, make sure to install the *google-java-format* plugin
>>>>>> for your IDE as outlined in
>>>>>> https://github.com/apache/iceberg-docs/pull/125 so that you can
>>>>>> format code inside the IDE as well.
>>>>>>
>>>>>> Eduard
>>>>>>
>>>>>> On Fri, Jul 15, 2022 at 12:45 PM Eduard Tudenhoefner <
>>>>>> edu...@tabular.io> wrote:
>>>>>>
>>>>>>> That's correct Ryan. The Google style is what can be applied across
>>>>>>> tools and Spotless is the tool that we use to check and *apply*
>>>>>>> that style (and also auto-apply the license header). The *apply*
>>>>>>> part is the important piece that Checkstyle for example is missing (as 
>>>>>>> it's
>>>>>>> tedious to manually apply what *checkstyle:check* complains about).
>>>>>>>
>>>>>>> Additionally, Spotless
>>>>>>> <https://github.com/diffplug/spotless/tree/main/plugin-gradle> supports
>>>>>>> a bunch of other languages, so it would even be possible to use it for
>>>>>>> auto-formatting Gradle files (or Scala files using scalafmt) if we 
>>>>>>> wanted
>>>>>>> to, but for now I would probably focus on the Java codebase.
>>>>>>>
>>>>>>> Eduard
>>>>>>>
>>>>>>> On Thu, Jul 14, 2022 at 6:58 PM Ryan Blue <b...@tabular.io> wrote:
>>>>>>>
>>>>>>>> Okay, I understand. So it isn't that spotless is supported across
>>>>>>>> tools, it is that google style is supported and we can use Spotless to 
>>>>>>>> both
>>>>>>>> check and apply that style. Is that correct?
>>>>>>>>
>>>>>>>> On Thu, Jul 14, 2022 at 9:56 AM Eduard Tudenhoefner <
>>>>>>>> edu...@tabular.io> wrote:
>>>>>>>>
>>>>>>>>> Yeah it's how Dmitri said, the Google style is most likely on
>>>>>>>>> purpose not configurable, because otherwise it's getting more 
>>>>>>>>> difficult to
>>>>>>>>> achieve the same formatting results across IDEs & CMD line.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On Wed, Jul 13, 2022 at 7:39 PM Dmitri Bourlatchkov <
>>>>>>>>> dmitri.bourlatch...@dremio.com> wrote:
>>>>>>>>>
>>>>>>>>>> Yeah, the Google style has very specific wrapping limits and
>>>>>>>>>> javadoc format. It is not configurable, if we go with it.
>>>>>>>>>>
>>>>>>>>>> From my POV, using another style would be fine. However, with a
>>>>>>>>>> custom style it can be hard and tricky to ensure that all IDEs 
>>>>>>>>>> enforce it
>>>>>>>>>> the same way as spotless.
>>>>>>>>>>
>>>>>>>>>> The Google style has a plugin at least for IntelliJ (and likely
>>>>>>>>>> for Eclipse too) so it will behave the same way in IDE and cmd. line 
>>>>>>>>>> build.
>>>>>>>>>>
>>>>>>>>>> On Wed, Jul 13, 2022 at 1:28 PM Ryan Blue <b...@tabular.io>
>>>>>>>>>> wrote:
>>>>>>>>>>
>>>>>>>>>>> Is there any value in trying to get Spotless to match the
>>>>>>>>>>> current format as closely as possible? It would be great to have 
>>>>>>>>>>> fewer
>>>>>>>>>>> changes.
>>>>>>>>>>>
>>>>>>>>>>> For example, when I tested the apply, I see this:
>>>>>>>>>>>
>>>>>>>>>>> -  /**
>>>>>>>>>>> -   * Returns an initialized {@link AliyunProperties}
>>>>>>>>>>> -   */
>>>>>>>>>>> +  /** Returns an initialized {@link AliyunProperties} */
>>>>>>>>>>>
>>>>>>>>>>> Changes like that don’t seem very valuable to me. Similarly, it
>>>>>>>>>>> looks like a lot of text is wrapped at a different line length. If 
>>>>>>>>>>> we can
>>>>>>>>>>> alter that, we could easily avoid a lot of changes.
>>>>>>>>>>>
>>>>>>>>>>> Ryan
>>>>>>>>>>>
>>>>>>>>>>> On Wed, Jul 13, 2022 at 7:41 AM Eduard Tudenhoefner <
>>>>>>>>>>> edu...@tabular.io> wrote:
>>>>>>>>>>>
>>>>>>>>>>>> As a first step, I created
>>>>>>>>>>>> https://github.com/apache/iceberg/pull/5266 which configures
>>>>>>>>>>>> Spotless to use the Google Java Format and also apply the correct 
>>>>>>>>>>>> copyright
>>>>>>>>>>>> header for Java files.
>>>>>>>>>>>>
>>>>>>>>>>>> Once this PR is merged, the next steps would be:
>>>>>>>>>>>>
>>>>>>>>>>>>    - removing conflicting Checkstyle rules that are not in
>>>>>>>>>>>>    line with the Google format
>>>>>>>>>>>>    - formatting the entire code base via `*./gradlew
>>>>>>>>>>>>    spotlessApply*`
>>>>>>>>>>>>    - setting `*enforceCheck*` to `*true*` in
>>>>>>>>>>>>    
>>>>>>>>>>>> https://github.com/apache/iceberg/blob/80318d8cfbeb0d96d0afc27c84bc3dbddde35344/baseline.gradle#L48
>>>>>>>>>>>>    so that validation fails if code isn't properly formatted
>>>>>>>>>>>>    - updating docs around the current Formatter usage and how
>>>>>>>>>>>>    to configure Eclipse/IntelliJ
>>>>>>>>>>>>
>>>>>>>>>>>> The first 3 steps should be done together as part of the big
>>>>>>>>>>>> bang.
>>>>>>>>>>>>
>>>>>>>>>>>> Eduard
>>>>>>>>>>>>
>>>>>>>>>>>> On Mon, Jul 11, 2022 at 10:54 PM Ryan Blue <b...@apache.org>
>>>>>>>>>>>> wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>> Okay, it sounds like there's mostly agreement for going with
>>>>>>>>>>>>> spotless. Let's try that out. We'll work on some changes to add 
>>>>>>>>>>>>> spotless so
>>>>>>>>>>>>> that `spotlessApply` works. Then we can do the big bang migration 
>>>>>>>>>>>>> (which I
>>>>>>>>>>>>> also agree is the best option) just before the 1.0.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Thanks, everyone!
>>>>>>>>>>>>>
>>>>>>>>>>>>> On Mon, Jul 11, 2022 at 11:50 AM Dmitri Bourlatchkov <
>>>>>>>>>>>>> dmitri.bourlatch...@dremio.com> wrote:
>>>>>>>>>>>>>
>>>>>>>>>>>>>> My experience with the Google Code Style + Spotless was
>>>>>>>>>>>>>> positive too.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> I'd be fine with another code style as long as it is
>>>>>>>>>>>>>> "deterministic" (e.g. does not make changes on repeated 
>>>>>>>>>>>>>> execution) and
>>>>>>>>>>>>>> works in IntelliJ IDEA / Eclipse / etc.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Regarding cherry-picking into older branches, I think
>>>>>>>>>>>>>> Robert's suggestion can be tweaked slightly to be helpful there 
>>>>>>>>>>>>>> too:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> 1. Checkout old branch
>>>>>>>>>>>>>> 2. Apply the new style (run gradle ...)
>>>>>>>>>>>>>> 3. Cherry-pick without committing
>>>>>>>>>>>>>> 4. Manually revert to old style
>>>>>>>>>>>>>> 5. Commit
>>>>>>>>>>>>>> 6. Reset to original branch HEAD
>>>>>>>>>>>>>> 7. Cherry pick commit 5 again
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> It's a bit lengthy and may be a tedious process, but it
>>>>>>>>>>>>>> should allow applying the git-level changes mostly automatically.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Cheers,
>>>>>>>>>>>>>> Dmitri.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> On Fri, Jul 8, 2022 at 2:53 AM Robert Stupp <sn...@snazy.de>
>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> From my experience, it’s a big win to have automatic code
>>>>>>>>>>>>>>> formatting.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> In projectnessie we use automatic code formatting for all
>>>>>>>>>>>>>>> languages and haven’t serious issues with Spotless. It is just 
>>>>>>>>>>>>>>> nice to not
>>>>>>>>>>>>>>> have to bike shed about whitespaces, line breaks, brackets, 
>>>>>>>>>>>>>>> etc. It was a
>>>>>>>>>>>>>>> bit of discussion, because people had bad memories from past 
>>>>>>>>>>>>>>> experiences
>>>>>>>>>>>>>>> with automatic code formatting breaking code and introducing 
>>>>>>>>>>>>>>> subtle bugs.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> I think that using code styles that „do not allow bike
>>>>>>>>>>>>>>> shedding“ (Google Code Style) are a very good option.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> So far none of us has seen issues with any of the Spotless
>>>>>>>>>>>>>>> code formatters that we use: XML, Kotlin/Gradle, Kotlin, 
>>>>>>>>>>>>>>> Antlr4, Java,
>>>>>>>>>>>>>>> Scala - relying on the „standard“ settings w/o any 
>>>>>>>>>>>>>>> customizations. We use
>>>>>>>>>>>>>>> this piece of code, externalized into an internal Gradle plugin:
>>>>>>>>>>>>>>> https://github.com/projectnessie/gradle-build-plugins/blob/main/spotless/src/main/kotlin/org/projectnessie/buildtools/spotless/SpotlessHelperPlugin.kt
>>>>>>>>>>>>>>>  For
>>>>>>>>>>>>>>> Iceberg, it would probably be nice to have some Groovy code 
>>>>>>>>>>>>>>> formatting for
>>>>>>>>>>>>>>> the build scripts as well.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Sure, the migration will add some pain. IMHO the best option
>>>>>>>>>>>>>>> is a „big bang“ across the whole code base, because it happens 
>>>>>>>>>>>>>>> only once.
>>>>>>>>>>>>>>> Migrating one module after another is a „repeated series of 
>>>>>>>>>>>>>>> pains“.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Since the result of a `./gradlew spotlessApply` is
>>>>>>>>>>>>>>> deterministic, people that have open PRs could:
>>>>>>>>>>>>>>> 1. Rebase their PR branch against the commit before the
>>>>>>>>>>>>>>> „Big Bang“
>>>>>>>>>>>>>>> 2. Include a commit with the necessary Gradle build change
>>>>>>>>>>>>>>> (one the only contains the changes to add Spotless)
>>>>>>>>>>>>>>> 3. Do the `./gradlew spotlessApply`
>>>>>>>>>>>>>>> 4. Squash all commits in the PR-branch
>>>>>>>>>>>>>>> 5. Rebase again - against the HEAD of the master branch
>>>>>>>>>>>>>>> 6. Force-push PR-branch
>>>>>>>>>>>>>>> Because git is „clever enough“ to eliminate the
>>>>>>>>>>>>>>> „duplicated/unrelated changes“, the final result of the above 
>>>>>>>>>>>>>>> steps is just
>>>>>>>>>>>>>>> the diff with the changes for the open PR.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Am 08.07.2022 um 00:59 schrieb Ryan Blue <b...@tabular.io>:
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> We were just talking about this proposal internally. I think
>>>>>>>>>>>>>>> it would be great to have automatic code formatting, especially 
>>>>>>>>>>>>>>> since we
>>>>>>>>>>>>>>> have to point out a lot of changes manually. The main question 
>>>>>>>>>>>>>>> is how to
>>>>>>>>>>>>>>> get there without too much disruption. This came up in our 
>>>>>>>>>>>>>>> discussions
>>>>>>>>>>>>>>> around the upcoming 1.0 release, since that may be a good 
>>>>>>>>>>>>>>> opportunity to
>>>>>>>>>>>>>>> make all of the code changes.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> For background, the main concern about adding something like
>>>>>>>>>>>>>>> this is applying all of the changes needed to get the existing 
>>>>>>>>>>>>>>> code to
>>>>>>>>>>>>>>> conform to the new style. That is really disruptive because it 
>>>>>>>>>>>>>>> will cause
>>>>>>>>>>>>>>> all of the PRs to need to be rebased and makes it really 
>>>>>>>>>>>>>>> difficult to
>>>>>>>>>>>>>>> cherry-pick changes from after the code formatting happens to 
>>>>>>>>>>>>>>> branches that
>>>>>>>>>>>>>>> were created before code formatting. The 1.0 release makes a 
>>>>>>>>>>>>>>> good
>>>>>>>>>>>>>>> opportunity because we are making other changes (removing 
>>>>>>>>>>>>>>> deprecations) and
>>>>>>>>>>>>>>> will hopefully have people upgrading their branches to the new 
>>>>>>>>>>>>>>> major
>>>>>>>>>>>>>>> version, rather than cherry picking.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> This is as good a time as any to add automatic code
>>>>>>>>>>>>>>> formatting, but it's up to the community: so should we refromat 
>>>>>>>>>>>>>>> the project
>>>>>>>>>>>>>>> and apply spotless code formatting everywhere? I'm interested 
>>>>>>>>>>>>>>> to hear
>>>>>>>>>>>>>>> opinions!
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Ryan
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> On Thu, Mar 10, 2022 at 3:00 AM Eduard Tudenhoefner <
>>>>>>>>>>>>>>> edu...@dremio.com> wrote:
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Hello everyone,
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> I would like to get the discussion started around automatic
>>>>>>>>>>>>>>>> code formatting + enforcing and how we get there.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Currently we use Checkstyle *check* to enforce formatting.
>>>>>>>>>>>>>>>> However, the problem with that is that you still have to 
>>>>>>>>>>>>>>>> manually do the
>>>>>>>>>>>>>>>> actual formatting.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> What I would like to propose is the usage of *Spotless* (
>>>>>>>>>>>>>>>> https://github.com/diffplug/spotless) for *checking* and
>>>>>>>>>>>>>>>> *enforcing* Java code style (it can also enforce code
>>>>>>>>>>>>>>>> style for Scala, Markdown, ... btw). Spotless is being used by 
>>>>>>>>>>>>>>>> many
>>>>>>>>>>>>>>>> projects (
>>>>>>>>>>>>>>>> https://github.com/search?l=gradle&q=spotless&type=Code)
>>>>>>>>>>>>>>>> and comes essentially with two tasks:
>>>>>>>>>>>>>>>> * *spotlessCheck*: Checks that sourcecode satisfies
>>>>>>>>>>>>>>>> formatting steps
>>>>>>>>>>>>>>>> * *spotlessApply*: Applies code formatting steps to
>>>>>>>>>>>>>>>> sourcecode in-place
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> *Code format*
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> The problem with code format is that there is no single
>>>>>>>>>>>>>>>> format that can satisfy the preferences of everybody. However, 
>>>>>>>>>>>>>>>> from my
>>>>>>>>>>>>>>>> experience, once people start to use *any* code format
>>>>>>>>>>>>>>>> that produces consistent results across *Eclipse**/IntelliJ/cmd
>>>>>>>>>>>>>>>> line*, people stop worrying about code format details.
>>>>>>>>>>>>>>>> This is also one of the reasons why the creators of Go
>>>>>>>>>>>>>>>> decided to have a code formatter built-in (
>>>>>>>>>>>>>>>> https://go.dev/doc/effective_go#formatting):
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> *Formatting issues are the most contentious but the least
>>>>>>>>>>>>>>>>> consequential. People can adapt to different formatting 
>>>>>>>>>>>>>>>>> styles but it's
>>>>>>>>>>>>>>>>> better if they don't have to, and less time is devoted to the 
>>>>>>>>>>>>>>>>> topic if
>>>>>>>>>>>>>>>>> everyone adheres to the same style. The problem is how to 
>>>>>>>>>>>>>>>>> approach this
>>>>>>>>>>>>>>>>> Utopia without a long prescriptive style guide.*
>>>>>>>>>>>>>>>>> *With Go we take an unusual approach and let the machine
>>>>>>>>>>>>>>>>> take care of most formatting issues. The gofmt program (also 
>>>>>>>>>>>>>>>>> available as
>>>>>>>>>>>>>>>>> go fmt, which operates at the package level rather than 
>>>>>>>>>>>>>>>>> source file level)
>>>>>>>>>>>>>>>>> reads a Go program and emits the source in a standard style 
>>>>>>>>>>>>>>>>> of indentation
>>>>>>>>>>>>>>>>> and vertical alignment, retaining and if necessary 
>>>>>>>>>>>>>>>>> reformatting comments.*
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> I would like to propose using the Google Java Format with
>>>>>>>>>>>>>>>> Spotless. The reason for this format is essentially that this 
>>>>>>>>>>>>>>>> is a
>>>>>>>>>>>>>>>> widely-adopted code format that is designed specifically for 
>>>>>>>>>>>>>>>> code reviews
>>>>>>>>>>>>>>>> (since we're spending more time reviewing code than writing 
>>>>>>>>>>>>>>>> it).
>>>>>>>>>>>>>>>> Additionally, it produces consistent formatting results
>>>>>>>>>>>>>>>> across *Eclipse**/IntelliJ/cmd line*, which I think is
>>>>>>>>>>>>>>>> another very important factor.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Thus, our initial Gradle spotless configuration could look
>>>>>>>>>>>>>>>> similar to the above below:
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> *pluginManager.withPlugin('com.diffplug.spotless') {
>>>>>>>>>>>>>>>> spotless {      // don't run spotlessCheck during gradle check 
>>>>>>>>>>>>>>>> task during
>>>>>>>>>>>>>>>> the transition phase      enforceCheck = false      java {     
>>>>>>>>>>>>>>>>    target
>>>>>>>>>>>>>>>> 'src/main/java/**/*.java', 'src/test/java/**/*.java',
>>>>>>>>>>>>>>>> 'src/jmh/java/**/*.java'        googleJavaFormat()      }    
>>>>>>>>>>>>>>>> }}*
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> We don't have to use Google Java Format. Spotless also
>>>>>>>>>>>>>>>> supports formatting the code with other formats, but from 
>>>>>>>>>>>>>>>> previous
>>>>>>>>>>>>>>>> experience the Google Java Format seemed to be really the only 
>>>>>>>>>>>>>>>> one to
>>>>>>>>>>>>>>>> produce consistent results across *Eclipse**/IntelliJ/cmd
>>>>>>>>>>>>>>>> line*.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> *How do we get to a point where the entire codebase is
>>>>>>>>>>>>>>>> properly formatted (and enforceCheck = false can be removed)?*
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Now this is a difficult question. Obviously we don't want
>>>>>>>>>>>>>>>> to have a single *format-everything* commit, as that would
>>>>>>>>>>>>>>>> affect lots of in-flight PRs.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> There would have to be some form of gradual formatting, for
>>>>>>>>>>>>>>>> example module by module. Spotless offers something called 
>>>>>>>>>>>>>>>> Ratched (
>>>>>>>>>>>>>>>> https://github.com/diffplug/spotless/tree/main/plugin-gradle#ratchet)
>>>>>>>>>>>>>>>> that allows to enforce code format gradually (but I'm not sure 
>>>>>>>>>>>>>>>> this would
>>>>>>>>>>>>>>>> be a good thing either).
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> How exactly we'd like to approach this transitioning phase
>>>>>>>>>>>>>>>> this is a completely separate discussion, but I feel like at 
>>>>>>>>>>>>>>>> least we could
>>>>>>>>>>>>>>>> get the ball rolling so that we make it also easier for 
>>>>>>>>>>>>>>>> newcomers to
>>>>>>>>>>>>>>>> contribute to the project, since it would be straightforward 
>>>>>>>>>>>>>>>> for them to
>>>>>>>>>>>>>>>> make their PRs adhere to the code format and also save time 
>>>>>>>>>>>>>>>> during PR
>>>>>>>>>>>>>>>> reviews.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Eduard
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>> Ryan Blue
>>>>>>>>>>>>>>> Tabular
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> --
>>>>>>>>>>>>> Ryan Blue
>>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> --
>>>>>>>>>>> Ryan Blue
>>>>>>>>>>> Tabular
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> Ryan Blue
>>>>>>>> Tabular
>>>>>>>>
>>>>>>>
>>>>>
>>>>
>>>>
>>
>
> --
> Ryan Blue
> Tabular
>
>
>

Reply via email to