Thank you Christian for your feedback !
My answer below...
Le 17/03/2016 19:18, Christian Damus a
écrit :
Hi, Céline,
Thanks very
much for this report. It is quite informative to our
discussion.
Please see
some comments in-line, below.
On 17 March, 2016 at 13:36:19, Céline
JANSSENS (celine.janssens@xxxxxxxxxxx)
wrote:
Hi all,
Here is the state of art of the current Checkstyle on
Papyrus RT project.
As shown on the printscreen the most frequent warnings
are:
1) In the Javadoc the first sentence should end with
a period (meaning ., ? or ! )
This could seem a detail, but it makes the
difference. Your Javacode must look as professionnal as
possible to allow further automated documentation and a
professionnal aspect.
But I agree , for the existing files it is a lot of
time consuming to modify if. So let's this warning for
the next times...
I concur with the thinking behind this. I much prefer not to
have any doc comment at all than trivially auto-generated
comments and malformed structures that don’t account for the
basic HTML formatting rules and are only readable (sometimes
barely) in the source editor! We see a lot of both in the
Papyrus repo.
Java Auto-Doc is not a good practice I agree with you, empty shell
comment is completely meaningless.
2) File does not end with a new line
This may changed depending on the "system". I guess
if I select "lf" for the new line check it should
decrease this warnings. But we could meet this warning
on the Linux file.
Does anyone have an idea of what is the proper
ends of file to update the the check accordingly ?
This isn’t about the platform line ending convention that has
recently been a git-oriented discussion point, but literally
just the last line of the file. Diff tools often complain or
show some kind of scary marker when the last line of a file
that contains text is not terminated by some kind of newline
(even if it’s not the platform’s conventional terminator).
Perhaps it suggests truncation of a file, that there’s stuff
missing at the end …
In my experience, most if not all source files generated by
EMF have the last line (the closing brace of the class
declaration) unterminated. So that should generate a lot of
warnings.
I put "lf" instead of system an it decrease the number of warning
from 300 to 60... The remaining warning seems to be linux file.
I don't know how to manage this !
3) Missing Javadoc
The Javadoc helps contributors to understand the
different API properly. A clear Javadoc is necessary
to help further contributors to understand your
code, otherwise, your code will never last and
someone else would prefer re-develop it.
Yes, but there are also trivial cases that don’t warrant
documentation. A well-named getter method often doesn’t
need anything, for example. Sometimes writing something
just for the sake of writing it doesn’t serve anyone’s
interest.
I do agree, however, this check highlight a missing javadoc which in
most case is really missing ! It would become difficult to define
the bounds of which method should be commented which not... And
could be an open door to not comment anything.
We should keep in mind that these are "warnings" and can be
overrided.
4) Naming Convention:
Due to several cases, i.e:
Does Checkstyle distinguish between actual constant
immutable value types and things that are mutable?
For example, a public static final field holding a
Map is anything but constant, and we have boatloads of
those in Papyrus.
I don't think so, on checkstyle website a constant is a Static
final field.
To be defined.... ;) In the naming Convention, the format is defined
by RegExp and for now on the max length of a variable is defined to
28 characters . It is also possible to define the legnt of a Method
Name, Type name, parameters name, Abstract Method Name, ...
Missing Abstract in front of Abstract
classes
This is an interesting one. What’s the rationale for
that? Repeating an arbitrary prefix like this makes names
all look indistinguishable (it’s one of the reasons why I
hate the “I” prefix for interfaces, but I just have to
accept it in the Eclipse context …)
I understand your concern, but this is to keep an homogeneous code.
And with the prefix "I" (for interface ) ," Abstract" or even
suffix "Exception" or "Handler", everyone knows the role of a class
at a glance. As a lot of naming convention rules it doesn't make a
better code, but only make it clearer for the others.
BTW, what do you think about using Interfaces for constants only....
this is a rule I disable for Papyrus RT, because I know it's a
common habit in the Papyrus developers, even if it is not the role
of an Interface...
Of course this check can be improved by
adding some filter for the exceptions.
Can those filters be shared in one place, or would they
have to be configured in each project? (Oomph can
perhaps help if the latter)
There is another xml file that lists all the exceptions by selecting
the checks and the files on which warning should be supressed.
I already used it to filter all the src-gen file from umlrt folder:
<suppress checks="[a-zA-Z0-9]*"
files="org\.eclipse\.papyrusrt\.umlrt.*[\/\\]src-gen[\/\\].*\.java"
/>
5) Multi Return
This is quite used in the developers
habits to have several return statement in the
same method. However a single return statement
by method improves the maintainability and the
extensibility of the code.
It also helps a lot for the debug as only
one breakpoint is required to examine the
returned value.
I happen to be an adherent of the single-return
convention, but I hesitate to impose it on others
because I know that some people just don’t like much
nesting of conditionals and loops. How do others on
the team feel about this?
Depending on the opinion, this rule can be put as "info" severity
instead of warnings if it is too constraining.
6) Mandatory Default Constructor
This point could be discussed. But in my
point of view it is clearer to have always a
constructor, even if it is the default one.
Agreed. It is an excellent place to put a
breakpoint, and it makes it clear that the
developer’s intent is to provide a no-argument
constructor. I even always explicitly chain to
super() even if that would be implied, for the same
reason.
7) Do not use trailing comment on
the same line as a java instruction.
It is a very good habit to comment
your code to make it clear and structured.
But it is even clearer if the comment is
at a separate line to not reach a too long
line.
That’s interesting. I sometimes use an empty
comment to force line breaks where otherwise the
formatter would string stuff out on a line. And
in case statements, if-else, and other such
tightly repeated structures a concise end-of-line
comment might look more readable to me. Again,
I’d be interested to hear the opinions of others
on this.
8) The String "X" appears "Y"
times.
If a string is required it should be
extracted as a Constant, especially if
this string is present more than once in
your file;
Sure, unless it’s something like the empty
string (“”) which is an absolute literal value
or something else which likewise clearly
signifies its own meaning. There’s a difference
between, say, bundles IDs that are fairly
abstract and things like “,” used in a
string-splitting operation.
Yes in anycase, it is a good practice to avoid redundant string if
it means the same.
9) "X" hides a field
This means that for example:
protected int numberOfLine;
public void setNumberOfLine(final
int numberOfLine ){
...}
The parameter hides the field
because it has the same name in a
closer scope. This can be confusing.
As we are not using prefixed
variables, it is required to make the
difference.
Ordinarily, I would agree, but in the case of
a setter, it’s pretty obvious and even helps
to reinforce the purpose of the local variable
when it has the same name as the field.
And when the field is a wrapper of some kind,
like a Reference<T>, it can be nice to
unwrap it as a local variable of the same name
because in some sense it is the “same” thing.
10) Redundant modifier
This is when you add a public
modifier in an Interface which is
unnecessary.
Yes! That so bugs me; I don’t know why.
🙂 And “abstract”, “final” (for fields),
“static” (for nested interfaces), …
Of course Format errors can
be easily fixed with a proper
formatter.
This would be a motivator for the
re-formatting sweep that I was arguing
against on another thread. Hmm.
If we fix those top 10
warnings, we would fix 85 % of
the checkstyle Warning.
Wow, that’s impressive. Sounds like it’s
worth investing the time in fixing these.
Especially as I would suggest (according
to my comments above) that some of those
warnings might be fixed by filters or
disabling the rule altogether. 😉
BTW, do we have a similar set-up for
Checkstyle on the Papyrus project? It
would be nice to see consistency there,
perhaps even back-porting what is decided
for Papyrus-RT to Papyrus.
I could try to add the same checkstyle for Papyrus Project, and see
:)
The goal of this checkstyle is also to help developers to improve
the way they code in terms of team work. But we should keep in mind
that if the set of rules is too difficult to be followed, nobody
will do so, and it will be a waste of time.
What is your opinion ?
Best regards
Céline
Le
16/03/2016 18:55, SCHNEKENBURGER
Remi 211865 a écrit :
Hi all,
Thanks to
everyone for this fruitful
discussion! I could see
here a lot of proposals
and volunteers ;)
I would propose
the following things:
- Papyrus-RT
should reuse the Papyrus
default formatter, as this
would reduce work when
‘upgrading’ some code from
Papyrus-RT to generic
Papyrus. It is also very
similar to default
formatter AFAIR.
- Papyrus-RT
should reuse a checkstyle
configuration close to a
generic configuration, as
for example the one in
Sonar. I would prefer not
to get too far from
existing configurations,
and a simple one to begin
with. There is already a
basic one within Eclipse.
Céline proposes one, is
there one on Collaborative
modeling, Philip?
- The save action
could format the code and
do the basic cleaning
(import cleaning, etc.)
I like very
much the idea of
pre-commit hooks, because
usually the only respected
rules are the one that are
enforced ;) but I don’t
know here how it does fit
well with Eclipse, Egit
& command line users,
etc. I would prefer to
avoid manual actions to be
performed by developers to
setup the environment :
Oomph was typically
invented to reduce the
amount of time needed to
start committing on a
project while removing
manual tasks.
To have a
concrete plan:
- @Céline, can
you provide a report on
current Papyrus-RT code
base with a basic
checkstyle configuration
or the one you usually
use?
- @Philip, can
you propose also a
checkstyle configuration
file from collaborative
modeling?
- @Céline, can
you give an update to all
committers on the status
of the Sonar analysis job
on Papyrus-RT? Is this
possible to run this
analysis on each gerrit
contributions?
- @All, what
actions should be done on
Save?
- @All, do you
agree to reuse Papyrus
formatter?
- @Christian,
which settings would you
propose from the Papyrus
project on the project
.settings - JDT settings
and others?
Thanks,
Rémi
-------------------------------------------------------
Rémi
SCHNEKENBURGER
+33 (0)1 69 08
48 48
CEA Saclay
Nano-INNOV
Institut
CARNOT CEA LIST
www.eclipse.org/papyrus
De : papyrus-rt-dev-bounces@xxxxxxxxxxx [mailto:papyrus-rt-dev-bounces@xxxxxxxxxxx] De la part de Ernesto
Posse
Envoyé : mercredi
16 mars 2016 18:14
À : papyrus-rt
developer discussions <papyrus-rt-dev@xxxxxxxxxxx>
Objet : Re:
[papyrus-rt-dev] Code
formatting and checkstyle
rules
So we
should set the "Save
Actions" individually and
commit those to the repo?
_______________________________________________
papyrus-rt-dev mailing list
papyrus-rt-dev@xxxxxxxxxxx
To change your delivery options, retrieve your password, or unsubscribe from this list, visit
https://dev.eclipse.org/mailman/listinfo/papyrus-rt-dev
--
|
Céline
JANSSENS
Software
Engineer
+33 (0)2 44 47
23 23
|
|
Mail
: cej@xxxxxxxxxxx
|
6
rue Léonard De
Vinci - BP 0119
- 53001 LAVAL
Cedex - FRANCE
www.all4tec.net |
|
_______________________________________________
papyrus-rt-dev mailing list
papyrus-rt-dev@xxxxxxxxxxx
To change your delivery options,
retrieve your password, or
unsubscribe from this list, visit
https://dev.eclipse.org/mailman/listinfo/papyrus-rt-dev
_______________________________________________
papyrus-rt-dev mailing list
papyrus-rt-dev@xxxxxxxxxxx
To change your delivery options, retrieve your password, or unsubscribe from this list, visit
https://dev.eclipse.org/mailman/listinfo/papyrus-rt-dev
--
|
Céline
JANSSENS
Software
Engineer
+33 (0)2 44 47 23 23
|
|
Mail : cej@xxxxxxxxxxx
|
6 rue Léonard De Vinci - BP 0119 - 53001 LAVAL
Cedex - FRANCE
www.all4tec.net
|
|
|