[hibernate-dev] Checkstyle and ORM
Steve Ebersole
steve at hibernate.org
Sat May 16 14:43:03 EDT 2015
Sanne, can you give me the low-down on this line?
<property name="cacheFile" value="${checkstyle.cache.file}" />
On Sat, May 16, 2015 at 1:26 PM, Steve Ebersole <steve at hibernate.org> wrote:
> Actually a few others I will add:
>
> 3) missing @Override
> 4) missing @Deprecated/@deprecated
> 5) missing braces
> 6) star imports
> 7) redundant imports
> 8) lower case 'l' for long literals (upper case is much more readable)
> 9) missing newline at end of file
>
>
> On Sat, May 16, 2015 at 1:18 PM, Steve Ebersole <steve at hibernate.org>
> wrote:
>
>> Yes, we use FindBugs too; I will start a discussion about it after this.
>> I wanted to do CheckStyle first because its easier to work with IMO. And
>> yes we use FindBugs because there are thins it can do that CheckStyle just
>> cannot (like checking for the use of non-localized
>> String#toUpperCase/toLowerCase that we consider a bug). Certainly the 2
>> work in tandem.
>>
>> Using filters is an interesting discussion as we do have this in ORM as
>> well. The thing we keep running into is generated sources, but I can
>> certainly see what you do for tests as well. BTW, your filter impl
>> mentions checking for "[not required for tests]", but I do not see that at
>> all in the CheckStyle config you linked[1]?
>>
>> Yes, we should simplify the header and start enforcing it. I think a
>> first pass for CheckStyle actually failing a build would be:
>> 1) Use of spaces rather than tabs
>> 2) No file header
>>
>> Again, I said *fail* the build. So these are the ones I would consider
>> an error initially. We'd still have others come up as a warning. Also in
>> Gradle these are not run depending on what task you run. If you simply run
>> test, "code quality" (checkstyle, findbugs, etc) are not run. CI runs the
>> check task as well.
>>
>> Anyone want to "bang the table" to add more to the failure list?
>>
>> [1]
>> https://github.com/hibernate/hibernate-search/blob/master/build-config/src/main/resources/checkstyle.xml#L172
>>
>> On Sat, May 16, 2015 at 9:11 AM, Sanne Grinovero <sanne at hibernate.org>
>> wrote:
>>
>>> One nice thing of checkstyle is that it's easily extended, for example
>>> in Search we added a couple of checks, like to ban double whitespaces:
>>> -
>>> https://github.com/hibernate/hibernate-search/blob/master/build-config/src/main/java/org/hibernate/checkstyle/checks/regexp/DoubleSpacesCheck.java
>>>
>>> Or to ban specific import statements:
>>> -
>>> https://github.com/hibernate/hibernate-search/blob/master/build-config/src/main/java/org/hibernate/checkstyle/checks/regexp/IllegalImport.java
>>>
>>> For example this is useful to iteratively move away from
>>> commons-annotations, like we ban its AssertionFailure to favor usage
>>> of a different AssertionFailure within Search:
>>> -
>>> https://github.com/hibernate/hibernate-search/blob/master/build-config/src/main/resources/checkstyle.xml#L172
>>>
>>> But checkstyle isn't enough, I for one would love to ban auto-boxing
>>> from our main code (it's ok in tests) as I'd rather the syntax call
>>> explicit attention to it.
>>> Sometimes it's dangerous for performance reasons, or because of other
>>> subtle API compability reasons like the JBoss Logger upgrade.. but
>>> checktyle can't do such things, you need to add additional tools to
>>> the mix, like FindBugs.
>>>
>>> Have a look at the above linked checkstyle.xml for more ideas, but
>>> sometimes I feel we've been too strict as it does fire back on quick
>>> prototyping: it's very annoying to have your build fail for a couple
>>> of style errors when you're deep in debugging some functionality..
>>> I'd rather stick to it though, as it can be disabled locally with
>>> appropriate flags and there finally are no more delays in pull request
>>> reviews because of whitespacing.
>>>
>>> To make it slightly less annoying I've made a CheckStyle filter which
>>> allows us to enforce some selected rules only on non-test code:
>>> -
>>> https://github.com/hibernate/hibernate-search/blob/master/build-config/src/main/java/org/hibernate/checkstyle/filters/ExcludeTestPackages.java
>>>
>>> We could similarly extend it to enforce a package-info.java for all
>>> non-test, non .impl packages?
>>>
>>> One which I would strongly enforce is about having the right copyright
>>> headers. For example I've seen various hibernate-infinispan classes
>>> using a non-Hibernate template. The traditional header includes the
>>> year, which was sometimes problematic (like you'd copy an header in a
>>> new class and mark it with a 6 years old copyright); so now we're
>>> using a simplified copyright template which is shorter and has no
>>> mention years:
>>> -
>>> https://github.com/hibernate/hibernate-search/blob/master/engine/src/main/java/org/hibernate/search/analyzer/Discriminator.java#L1-L6
>>> (according to legal that's good enough)
>>>
>>> -- Sanne
>>>
>>>
>>> On 16 May 2015 at 00:19, Steve Ebersole <steve at hibernate.org> wrote:
>>> > FYI : https://hibernate.atlassian.net/browse/HHH-9803
>>> >
>>> > Its not super high on my priority list, but I want to get to a point
>>> where
>>> > we can start to fail the build on "serious checkstyle regressions".
>>> Part
>>> > of that is being more realistic with what is considered serious, and
>>> part
>>> > of that is fixing up code.
>>> >
>>> > For example, we have quite a few warnings about spaces rather than
>>> tabs for
>>> > indentation. That's a serious one to me. There are quite a few
>>> "unused
>>> > import" warnings, again to me that's serious (it just looks sloppy).
>>> >
>>> > A few I have already disabled. Checking that there is a
>>> package-info.java
>>> > file for example. I'd love to make a requirement that all API and SPI
>>> > packages have one. But as far as I know that detailing is not
>>> available in
>>> > checkstyle, and I really dont overly care about package-info.java
>>> files for
>>> > internal packages.
>>> >
>>> > These are just a few examples. #909[1] (still running atm) is the
>>> first
>>> > build with my preliminary work here. Let me know if there are any
>>> checks
>>> > anyone feels strongly about in one bucket or another.
>>> >
>>> >
>>> > [1] http://ci.hibernate.org/job/hibernate-orm-master-h2/909/
>>> > _______________________________________________
>>> > hibernate-dev mailing list
>>> > hibernate-dev at lists.jboss.org
>>> > https://lists.jboss.org/mailman/listinfo/hibernate-dev
>>> _______________________________________________
>>> hibernate-dev mailing list
>>> hibernate-dev at lists.jboss.org
>>> https://lists.jboss.org/mailman/listinfo/hibernate-dev
>>>
>>
>>
>
More information about the hibernate-dev
mailing list