+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 >>