+1 for the coding style automation. Thanks for driving this!

Best,
Wei

> 在 2020年12月17日,10:10,Xingbo Huang <hxbks...@gmail.com> 写道:
> 
> +1 asap. Spotless can greatly help us save the time of fixing checkstyle
> errors.
> 
> Best,
> Xingbo
> 
> Kostas Kloudas <kklou...@gmail.com> 于2020年12月17日周四 上午4:14写道:
> 
>> +1 asap from my side as well.
>> 
>> On Wed, Dec 16, 2020 at 8:04 PM Arvid Heise <ar...@ververica.com> wrote:
>>> 
>>> +1 asap.
>>> 
>>> On Wed, Dec 16, 2020 at 7:44 PM Robert Metzger <rmetz...@apache.org>
>> wrote:
>>> 
>>>> +1
>>>> 
>>>> Thanks for driving this.
>>>> 
>>>> On Wed, Dec 16, 2020 at 7:33 PM Chesnay Schepler <ches...@apache.org>
>>>> wrote:
>>>> 
>>>>> +1 to set this up ASAP. Now's a good time to (finally) finalize this
>>>>> effort with a new release cycle having started and
>> christmas/vacations
>>>>> being around the corner.
>>>>> 
>>>>> On 12/16/2020 7:20 PM, Aljoscha Krettek wrote:
>>>>>> Let's try and conclude this discussion! I've prepared a PoC that
>> uses
>>>>>> Spotless with google-java-format to do the formatting:
>>>>>> https://github.com/aljoscha/flink/commits/flink-xxx-spotless
>>>>>> 
>>>>>> To summarize from earlier discussion, the main benefits are:
>>>>>> - no more worrying about code style, both as reviewer and
>> implementer
>>>>>> - everyone can configure their IDE to auto-format, there will
>> never
>>>>>> be unrelated formatting changes
>>>>>> 
>>>>>> Also, this uses git's blame.ignoreRevsFile to add a file that tells
>>>>>> git blame/IntelliJ to ignore the refactoring commit. However, you
>> need
>>>>>> to manually configure your git for that using:
>>>>>> 
>>>>>> $ git config blame.ignoreRevsFile .git-blame-ignore-revs
>>>>>> 
>>>>>> You can check out the PoC, look at the code in an IDE, play around
>>>>>> with blame/annotations.
>>>>>> 
>>>>>> By the way, the coding style is not configurable, it’s the Google
>> Java
>>>>>> Style, wich uses spaces for indentation. In an IDE or on github the
>>>>>> code looks barely different from the previous formatting at a first
>>>>>> glance.
>>>>>> 
>>>>>> For IDE setup, I will add a guide in the README but it boils down
>> to:
>>>>>> 
>>>>>> - install the google-java-format plugin, enable it
>>>>>> - install the Save Actions plugin, enable "Optimize Imports" and
>>>>>> "Reformat File"
>>>>>> 
>>>>>> With this, every time you save, formatting will be applied
>>>>>> automatically. You will never see formatting complaints from CI
>>>>>> (except for cases where you break semantical checkstyle rules,
>> such as
>>>>>> using certain imports that we don't allow.).
>>>>>> 
>>>>>> What do you think?
>>>>>> 
>>>>>> Best,
>>>>>> Aljoscha
>>>>>> 
>>>>>> On 19.10.20 12:36, Aljoscha Krettek wrote:
>>>>>>> I don't like checkstyle because it cannot be easily applied from
>> the
>>>>>>> commandline. I'm happy to learn otherwise, though. And I'd also be
>>>>>>> very happy about alternative suggestions that can do that.
>>>>>>> 
>>>>>>> Right now, I think Spotless is the most straightforward tool for
>>>>>>> that. Also I don't care so much about what style we choose in the
>>>>>>> end. (If we choose one). My main motivation is that we have a
>> common,
>>>>>>> strict style that can easily applied via tooling so that we no
>> longer
>>>>>>> need to comment on coding style in PRs.
>>>>>>> 
>>>>>>> Aljoscha
>>>>>>> 
>>>>>>> On 09.10.20 11:11, tison wrote:
>>>>>>>> +1 on locking on one codestyle and I think that is what current
>>>>>>>> checkstyle
>>>>>>>> rules serving.
>>>>>>>> 
>>>>>>>> For automatic applying part, we suggest developing by IDEA and
>> with
>>>>>>>> Checkstyle Plugin on IDEA applying checkstyle suggestion is also
>>>>>>>> automatic.
>>>>>>>> 
>>>>>>>> One short coming for spotless is that we can hardly adjust rules
>> if
>>>> the
>>>>>>>> project has its own issues to overcome. IIRC only several
>>>>>>>> pre-defined rules
>>>>>>>> and a clumsy general regex substitution rule can be used.
>>>>>>>> 
>>>>>>>> FYI my team started with spotless but ended up with checkstyle
>> with
>>>> few
>>>>>>>> rules and Checkstyle Plugin for automation.
>>>>>>>> 
>>>>>>>> Codestyle, in another perspective, is part of cognition of
>> developers
>>>>>>>> working in project, not something we just apply before pull
>> request.
>>>> No
>>>>>>>> matter how much automation introduced, most of developers will
>>>> converge
>>>>>>>> working with the configured codestyle.
>>>>>>>> 
>>>>>>>> Best,
>>>>>>>> tison.
>>>>>>>> 
>>>>>>>> 
>>>>>>>> Kostas Kloudas <kklou...@gmail.com> 于2020年10月7日周三 下午6:37写道:
>>>>>>>> 
>>>>>>>>> Hi all,
>>>>>>>>> 
>>>>>>>>> +1 for enforcing "a" codestyle using "a" tool.
>>>>>>>>> 
>>>>>>>>> As the project grows both in terms of LOCs and contributors,
>> this
>>>>>>>>> becomes more and more important as it eliminates some potential
>>>> points
>>>>>>>>> of friction without any additional effort.
>>>>>>>>> 
>>>>>>>>> From the discussion, I am leaning towards having a single
>> commit
>>>> with
>>>>>>>>> all the codestyle-related changes. This will avoid sprinkling
>>>>>>>>> refactoring commits all over the place for the next year or
>> more.
>>>> But
>>>>>>>>> if this is the price to pay for having consensus on a tool,
>> then I
>>>> am
>>>>>>>>> ok with gradual implementation. I believe that the value added
>> by
>>>>>>>>> having an automated process of enforcing a codestyle exceeds the
>>>> cost
>>>>>>>>> of the nuisance of gradual refactoring.
>>>>>>>>> 
>>>>>>>>> As for the actual format, I like the google-java-format but
>> again,
>>>> if
>>>>>>>>> the community agrees on a different one I would not oppose that
>> (as
>>>>>>>>> long as it does not use the same amount of indentation for
>> method
>>>> args
>>>>>>>>> and method body :P).
>>>>>>>>> 
>>>>>>>>> Cheers,
>>>>>>>>> Kostas
>>>>>>>>> 
>>>>>>>>> On Wed, Oct 7, 2020 at 10:26 AM Chesnay Schepler <
>>>> ches...@apache.org>
>>>>>>>>> wrote:
>>>>>>>>>> 
>>>>>>>>>> To me, ratchet seems to combine the worst aspects of both
>>>> approaches.
>>>>>>>>>> You get disruptive changes, but only in singular files,
>>>>>>>>>> for something mundane as a typo fix or import change, which
>> would
>>>> be
>>>>>>>>>> annoying to keep separate from the actual functional changes
>> in a
>>>> PR.
>>>>>>>>>> 
>>>>>>>>>> On 10/7/2020 10:04 AM, Matthias Pohl wrote:
>>>>>>>>>>> I find the ratchet feature you're suggesting interesting. But
>>>> Arvid
>>>>>>>>> has a
>>>>>>>>>>> point referring to the blog post about ignoring revisions in
>> git
>>>>>>>>>>> blame
>>>>>>>>> [1].
>>>>>>>>>>> Adding the configuration file for commits to ignore revs as
>>>> proposed
>>>>>>>>> in the
>>>>>>>>>>> blog post makes it even easier. One problem I see is that
>> this is
>>>>>>>>>>> not
>>>>>>>>>>> supported by Github (yet?) [2] as mentioned in [1].
>>>>>>>>>>> 
>>>>>>>>>>> Considering all that I prefer applying the code style in one
>> go. I
>>>>>>>>> have no
>>>>>>>>>>> strong opinion on what codestyle is the best.
>>>>>>>>>>> 
>>>>>>>>>>> PS: We used spotless in the project I previously worked on.
>> It was
>>>>>>>>>>> convenient to use.
>>>>>>>>>>> 
>>>>>>>>>>> [1]
>>>>>>>>>>> 
>>>>>>>>> 
>>>>> 
>>>> 
>> https://www.moxio.com/blog/43/ignoring-bulk-change-commits-with-git-blame
>>>>>>>>> 
>>>>>>>>>>> [2]
>>>>>>>>>>> 
>>>>>>>>> 
>>>>> 
>>>> 
>> https://github.community/t/support-ignore-revs-file-in-githubs-blame-view/3256
>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> On Tue, Oct 6, 2020 at 6:00 PM Aljoscha Krettek
>>>>>>>>>>> <aljos...@apache.org>
>>>>>>>>> wrote:
>>>>>>>>>>> 
>>>>>>>>>>>> Maybe I wasn't very clear on how the ratchet works. The
>> changes
>>>> are
>>>>>>>>>>>> gradual yes, but it doesn't leave you an option: if you
>> touch a
>>>>>>>>>>>> file
>>>>>>>>> you
>>>>>>>>>>>> will it will have to conform to the coding style afterwards.
>>>>>>>>>>>> It's not
>>>>>>>>>>>> like the previous gradual process we had before where it
>> would be
>>>>>>>>> based
>>>>>>>>>>>> on people actively working towards a style.
>>>>>>>>>>>> 
>>>>>>>>>>>> That being said, I also completely like the option of just
>> doing
>>>>>>>>>>>> one
>>>>>>>>> big
>>>>>>>>>>>> change commit.
>>>>>>>>>>>> 
>>>>>>>>>>>> Regarding actual coding styles: we're a bit limited by what
>> tools
>>>>>>>>> exist.
>>>>>>>>>>>> I like Spotless because it can be used to both check and
>> apply a
>>>>>>>>> style.
>>>>>>>>>>>> Then you need a formatter that works with Spotless and of
>> those
>>>> we
>>>>>>>>> only
>>>>>>>>>>>> have the Eclipse Formatter, google-java-format, and Prettier.
>>>>>>>>>>>> Prettier
>>>>>>>>>>>> is a Javascript tool that I would like to avoid. Eclipse is
>>>>>>>>>>>> doable but
>>>>>>>>>>>> you need to fiddle with configuration files. I like
>>>>>>>>>>>> google-java-format
>>>>>>>>>>>> because of it's take-it-or-leave-it approach. You either use
>> the
>>>>>>>>>>>> style
>>>>>>>>>>>> or you don't but it's very thorough. The downside is that it
>>>>>>>>>>>> won't do
>>>>>>>>>>>> tabs-only formatting.
>>>>>>>>>>>> 
>>>>>>>>>>>> Best,
>>>>>>>>>>>> Aljoscha
>>>>>>>>>>>> 
>>>>>>>>>>>> On 06.10.20 17:43, Arvid Heise wrote:
>>>>>>>>>>>>> After having written that I did a quick search, you can even
>>>>>>>>>>>>> use git
>>>>>>>>>>>> blame
>>>>>>>>>>>>> with one big massive change commit [1], which would further
>>>>>>>>>>>>> help the
>>>>>>>>> idea
>>>>>>>>>>>>> of "just get over with it".
>>>>>>>>>>>>> 
>>>>>>>>>>>>> With that option, I'd even change all whitespaces if the
>>>> community
>>>>>>>>> thinks
>>>>>>>>>>>>> that it's a better option (a separate discussion that I'll
>>>> gladly
>>>>>>>>> skip).
>>>>>>>>>>>>> 
>>>>>>>>>>>>> [1]
>>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>> 
>>>>> 
>>>> 
>> https://www.moxio.com/blog/43/ignoring-bulk-change-commits-with-git-blame
>>>>>>>>> 
>>>>>>>>>>>>> On Tue, Oct 6, 2020 at 5:38 PM Arvid Heise <
>> ar...@ververica.com
>>>>> 
>>>>>>>>> wrote:
>>>>>>>>>>>>> 
>>>>>>>>>>>>>> I'm also +1 for automatically enforceable code style.
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> I also would just go over it as Chesnay said. While it
>> makes
>>>> some
>>>>>>>>>>>> changes
>>>>>>>>>>>>>> a bit harder to track (inline git blame), it's easy to skip
>>>>>>>>>>>>>> over in
>>>>>>>>> any
>>>>>>>>>>>> git
>>>>>>>>>>>>>> history and if it's only one massive commit, then it's also
>>>> much
>>>>>>>>> easier
>>>>>>>>>>>> to
>>>>>>>>>>>>>> ignore than many gradual changes. Further, if we just do it
>>>> once,
>>>>>>>>> git
>>>>>>>>>>>> blame
>>>>>>>>>>>>>> will quickly become more reliable again.
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> Btw I completely don't care about the code style as long
>> as it
>>>>>>>>>>>>>> plays
>>>>>>>>>>>> well
>>>>>>>>>>>>>> with IntelliJ (it used to be different, but things change
>> :p).
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> On Tue, Oct 6, 2020 at 5:23 PM Chesnay Schepler
>>>>>>>>>>>>>> <ches...@apache.org
>>>>>>>>>> 
>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> We shouldn't switch to spaces _now_; cutting this bit from
>>>> your
>>>>>>>>>>>> proposal
>>>>>>>>>>>>>>> will massively simplify things and there's hardly any
>> value in
>>>>>>>>> changing
>>>>>>>>>>>>>>> it.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> Also I'm getting rather tired of this constant idea of
>>>> "gradual
>>>>>>>>>>>>>>> application". We've been doing this for 2-3 years now
>> since we
>>>>>>>>>>>>>>> introduced Checkstyle and basically got nowhere. We should
>>>> just
>>>>>>>>> bite
>>>>>>>>>>>> the
>>>>>>>>>>>>>>> bullet and get it over with; we could've solved this whole
>>>>>>>>>>>>>>> problem
>>>>>>>>>>>>>>> already.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> In conclusion, I'm +1 on finally locking down the
>> codestyle
>>>> and
>>>>>>>>>>>> applying
>>>>>>>>>>>>>>> it immediately, I'm -1 on any gradual application scheme
>>>> because
>>>>>>>>> they
>>>>>>>>>>>>>>> _just don't work_.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> On 10/6/2020 2:15 PM, Aljoscha Krettek wrote:
>>>>>>>>>>>>>>>> Hi All,
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> I know I know, but please keep reading because I recently
>>>>>>>>>>>>>>>> learned
>>>>>>>>>>>>>>>> about some new developments in the area of coding-style
>>>>>>>>> automation.
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> The tool I would propose we use is Spotless
>>>>>>>>>>>>>>>> (https://github.com/diffplug/spotless). This doesn't
>> come
>>>>>>>>>>>>>>>> with a
>>>>>>>>>>>>>>>> formatter but allows using other popular formatters such
>> as
>>>>>>>>>>>>>>>> google-java-format. The nice thing about Spotless is
>> that it
>>>>>>>>> serves as
>>>>>>>>>>>>>>>> a verifier for CI but can also apply the configured style
>>>>>>>>>>>>>>>> automatically. That is, for the programmer all she has
>> to do
>>>> is
>>>>>>>>> `mvn
>>>>>>>>>>>>>>>> spotless:apply` to fix any style violations.
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> An interesting feature, which was (somewhat) recently
>> added
>>>> is
>>>>>>>>>>>>>>>> "ratchet"
>>>>>>>>>>>>>>>> (
>>>>>>>>>>>> 
>>>>>>>>> 
>>>>> 
>>>> 
>> https://github.com/diffplug/spotless/blob/main/plugin-maven/README.md#ratchet
>>>>>>>>> 
>>>>>>>>>>>> ).
>>>>>>>>>>>>>>>> With this, you can set up Spotless to only apply it's
>> rules
>>>> to
>>>>>>>>> files
>>>>>>>>>>>>>>>> that were changed after a configured commit. This would
>>>> allow a
>>>>>>>>>>>>>>>> gradual application of the new coding style instead of
>> one
>>>> big
>>>>>>>>> change.
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> If we decide to use Spotless, we would of course also
>> have to
>>>>>>>>> decide
>>>>>>>>>>>>>>>> on a coding style. For this I would propose
>>>> google-java-format,
>>>>>>>>> which
>>>>>>>>>>>>>>>> the flink-statefun project uses. The main difference
>> from our
>>>>>>>>> current
>>>>>>>>>>>>>>>> "style" is that this uses spaces instead of tabs for
>>>>>>>>>>>>>>>> indentation.
>>>>>>>>> By
>>>>>>>>>>>>>>>> default it would be 2 spaces but it can be configured to
>> use
>>>> 4
>>>>>>>>> spaces
>>>>>>>>>>>>>>>> which would make code look more or less like our current
>>>> style.
>>>>>>>>> There
>>>>>>>>>>>>>>>> are no more configuration knobs, so using tabs is not an
>>>>>>>>>>>>>>>> option.
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> Finally, why should we do this? I think most engineers
>> agree
>>>>>>>>>>>>>>>> that
>>>>>>>>>>>>>>>> having a common enforced style is good to have so I only
>>>>>>>>>>>>>>>> want to
>>>>>>>>>>>>>>>> highlight a few thoughts here about things we could
>> improve:
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>    - No more nits about coding style in reviews, this
>> makes
>>>> it
>>>>>>>>> easier
>>>>>>>>>>>>>>>> for both the reviewer and developer
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>    - No manual fixing of Checkstyle errors because
>> Spotless
>>>>>>>>>>>>>>>> can
>>>>>>>>> do that
>>>>>>>>>>>>>>>> automatically
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>    - Because Flink is such a big project little islands
>> of
>>>>>>>>>>>>>>>> coding
>>>>>>>>> style
>>>>>>>>>>>>>>>> have formed between people that commonly work on
>> components.
>>>> It
>>>>>>>>> can be
>>>>>>>>>>>>>>>> a nuisance when you work on a different component and
>> then
>>>>>>>>> reviewers
>>>>>>>>>>>>>>>> don't like your typical coding style. And you first have
>> to
>>>> get
>>>>>>>>> used
>>>>>>>>>>>>>>>> to the slight differences in style when reading code.
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> There are also downsides I see in this:
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>    - We break the history, but both "git blame" and
>> modern
>>>>>>>>> IntelliJ can
>>>>>>>>>>>>>>>> ignore whitespace when attributing changes. So for files
>>>>>>>>>>>>>>>> that are
>>>>>>>>>>>>>>>> already "well" formatted not much would change.
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>    - In the short-term it will be harder to apply
>> changes
>>>>>>>>>>>>>>>> both to
>>>>>>>>>>>> master
>>>>>>>>>>>>>>>> and one of the release-x branches because formatting
>> will be
>>>>>>>>>>>>>>>> different. I think this is not too hard though because
>>>> Spotless
>>>>>>>>> can
>>>>>>>>>>>>>>>> automatically apply the style.
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> In summary, we would have some short-term pain with this
>> but
>>>> I
>>>>>>>>> think
>>>>>>>>>>>>>>>> it would be good in the long run. What are your thoughts?
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> Best,
>>>>>>>>>>>>>>>> Aljoscha
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> --
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> Arvid Heise | Senior Java Developer
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> <https://www.ververica.com/>
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> Follow us @VervericaData
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> --
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> Join Flink Forward <https://flink-forward.org/> - The
>> Apache
>>>>>>>>>>>>>> Flink
>>>>>>>>>>>>>> Conference
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> Stream Processing | Event Driven | Real Time
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> --
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> Ververica GmbH | Invalidenstrasse 115, 10115 Berlin,
>> Germany
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> --
>>>>>>>>>>>>>> Ververica GmbH
>>>>>>>>>>>>>> Registered at Amtsgericht Charlottenburg: HRB 158244 B
>>>>>>>>>>>>>> Managing Directors: Timothy Alexander Steinert, Yip Park
>> Tung
>>>>>>>>> Jason, Ji
>>>>>>>>>>>>>> (Toni) Cheng
>>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>> 
>>>>>>>> 
>>>>>>> 
>>>>>> 
>>>>>> 
>>>>> 
>>>>> 
>>>> 
>>> 
>>> 
>>> --
>>> 
>>> Arvid Heise | Senior Java Developer
>>> 
>>> <https://www.ververica.com/>
>>> 
>>> Follow us @VervericaData
>>> 
>>> --
>>> 
>>> Join Flink Forward <https://flink-forward.org/> - The Apache Flink
>>> Conference
>>> 
>>> Stream Processing | Event Driven | Real Time
>>> 
>>> --
>>> 
>>> Ververica GmbH | Invalidenstrasse 115, 10115 Berlin, Germany
>>> 
>>> --
>>> Ververica GmbH
>>> Registered at Amtsgericht Charlottenburg: HRB 158244 B
>>> Managing Directors: Timothy Alexander Steinert, Yip Park Tung Jason, Ji
>>> (Toni) Cheng
>> 

Reply via email to