Cs-contrib.unkrig.de: Difference between revisions
Line 137: | Line 137: | ||
* de.unkrig.ParenPad | * de.unkrig.ParenPad | ||
* de.unkrig.WhitespaceAround | * de.unkrig.WhitespaceAround | ||
=== Properties === | === Properties === |
Revision as of 08:12, 4 March 2014
Introduction
This project adds custom checks, filters and quickfixes for CheckStyle and Eclipse-CS.
Download
Install the ECLIPSE plug-in from this update site:
http://cs-contrib.unkrig.de/update
If you're only interested in the checks (and not the ECLIPSE plug-in), you can download the most recent 'de.unkrig.cs-contrib.core_*.jar' file from
http://cs-contrib.unkrig.de/update/plugins/
and put it on CheckStyle's classpath.
A change log is also available.
Checks
Check 'de.unkrig.Alignment'
Checks that Java elements are vertically aligned in immediately consecutive lines (and only there!).
public class Main { int x = 7; double xxx = 7.0; // Aligned field names int y = 7; double yyy = 7.0; // Aligned field initializers public static void meth1( String[] p1, int p2 // Aligned parameter names ) { int x = 7;\n\ double xxx = 7.0; // Aligned local variable names int y = 7;\n\ double yyy = 7.0; // Aligned local variable initializers y = 8; yyy = 8.0; // Aligned assignments switch (x) { case 1: break; default: x++; return; // Aligned case groups statements } } public static void meth2() {} public void meth33() {} // Aligned method names and bodies }
Properties:
- applyToFieldName
- Check alignment of field names in declarations.
- applyToFieldInitializer
- Check alignment of '=' in field declarations.
- applyToLocalVariableName
- Check alignment of local variable names in declarations.
- applyToLocalVariableInitializer
- Check alignment of '=' in local variable declarations.
- applyToParameterName
- Check alignment of constructor and method parameter names.
- applyToMethodName
- Check alignment of method (and constructor) names in declarations.
- applyToMethodBody
- Check alignment of '{' in method (and constructor) declarations.
- applyToCaseGroupStatements
- Check alignment of first statement in case groups.
- applyToAssignments
- Check alignment of '=' in assignments.
Check 'de.unkrig.CppCommentAlignment'
Verifies that C++ comments ('// ...') are correctly aligned.
C++ comments must appear on the same column iff
- They appear in immediately consecutive lines, and
- All of these lines are of the same 'kind' (see below)
Each line of code relates to one of the following 'kinds':
- A line which contains only a C++ comment
- A line which contains only a switch label ('case x:' or 'default:') and a C++ comment
- Any other line
Check 'de.unkrig.InnerAssignment'
Assignments in expressions must be parenthesized.
Quickfixes:
- Parenthesize assignment
- Parenthesize assignment to indicate that it is intentional
Check 'de.unkrig.NameSpelling'
Description:
Checks that the names of Java elements match resp. no not match given patterns.
This check makes name checking more powerful, compared with CheckStyle's standard "Naming Conventions" checks:
- Arbitrary sets of required/forbidden modifiers can be specified
- Name patterns can not only be enforced but also be forbidden (useful, e.g., to forbid certains styles of hungarian notation)
- Adds the possibility to check the names of annotations, annotation fields, enums and enum constants (which are missing from the standard checks)
This check supersedes all of the CheckStyle standard "Naming Conventions" checks:
- Abstract Class Name
- Class Type Parameter Name
- Constant Names
- Local Final Variable Names
- Local Variable Names
- Member Names
- Method Names
- Method Type Parameter Name
- Package Names
- Parameter Names
- Static Variable Names
- Type Names
Properties:
- elements
- Elements to apply this check to (annotation, annotation_field, catch_parameter, class, enum, enum_constant, for_variable, foreach_variable, field, formal_parameter, interface, local_variable, method, package and/or type_parameter)
- requiredModifiers
- Apply only to declarations which have these modifiers
- missingModifiers
- Apply only to declarations which do not have these modifiers
- option
- Whether to require or forbid that names match
- format
- Pattern to match the name against
Check 'de.unkrig.ParenPad'
Enhanced version of "ParenPad": NOSPACE now allows '( // ...'.
This check is superseded by 'de.unkrig.Whitespace'.
Properties:
- option
- Whether space is required or forbidding
- tokens
- Tokens to check
Check 'de.unkrig.Whitespace'
Checks that tokens are (or are not) preceded with (and/or followed by) whitespace.
This check supersedes all of CheckStyle's whitespace-related checks:
- Generic Whitespace
- Empty For Initializer Pad
- Empty For Iterator Pad
- No Whitespace After
- No Whitespace Before
- Method Parameter Pad
- Paren Pad
- Typecast Paren Pad
- Whitespace After
- Whitespace Around
, as well as
- de.unkrig.ParenPad
- de.unkrig.WhitespaceAround
Properties
- whitespaceBefore
- The Java elements which must be preceded with whitespace (or a line break)
- noWhitespaceBefore
- The Java elements which must not be preceded with whitespace (or are preceded with a line break)
- whitespaceAfter
- The Java elements which must be followed by whitespace (or a line break)
- noWhitespaceAfter
- The Java elements which must not be followed by whitespace (or are followed by a line break)
Java Elements
The properties described above represent the "Java elements" to which each property applies. "Java elements" correspond roughly with the Java tokens, but some Java tokens can appear in different contexts where they have different meanings. The latter case is represented by multiple Java elements which relate to the same Java token, but to different contexts (see example below).
The list of Java elements is long and mostly self-explanatory; for illustration, the first few Java elements are listed here:
- abstract
- abstract class MyClass { ... }
abstract myMethod(...) { ... } - and__expr
- a & b
- and__type_bound
- <T extends MyClass & MyInterface>
- and_assign
- a &= b
- assert
- assert x == 0;
assert x == 0 : "x not zero"; - ...
The tokens 'abstract', '&=' and 'assert' can appear in only one context each, while the token '&' has two different meanings. Thus there are two Java elements starting with 'and' and two underscores. (The double underscore separates the token name from the context name.)
Notice that 'and_assign' ('&=') and 'and' ('&') are different tokens which you can recognize by the single underscore in 'and_assign'.
Check 'de.unkrig.WhitespaceAround'
Checks that a token is surrounded by whitespace. Empty constructor bodies, method bodies, catch blocks and type bodies of the form
This check is superseded by 'de.unkrig.Whitespace'.
public MyClass() {} // empty constructor body public void func() {} // empty method body public void func() { new Object() { // ... }.hashCode(); // No space between '}' and '.' -- always allowed try { // ... } catch {} // empty catch block } interface MyInterface {} // emtpy type body
may optionally be exempted from the policy using the allowEmptyMethods
, allowEmptyConstructors
, allowEmptyCatches
and allowEmptyTypes
properties.
Properties:
- allowEmptyConstructors
- allow empty constructor bodies
- allowEmptyMethods
- allow empty method bodies
- allowEmptyCatches
- allow empty catch blocks
- allowEmptyTypes
- allow empty class and interface bodies
- tokens
- Tokens to check
Check 'de.unkrig.WrapAndIndent'
Statements must be uniformly wrapped and indented.
Properties:
- basicOffset
- How many spaces to use for new indentation level
Quickfixes:
- Wrap line
- Wrap this line at the correct position
- Join lines
- Append this line to the previous
- Correct indentation
- Correct the indentation of this line
Check 'de.unkrig.ZeroParameterSuperconstructorInvocation'
Checks that no constructor calls the zero-parameter superconstructor.
Quickfixes:
- Remove
- Remove redundant invocation of zero-parameter superconstructor
Filters
Filter 'de.unkrig.SuppressionLine'
Events (i.e. CheckStyle warnings) are switched off by a 'magic line' ('offCommentFormat') or back on by another 'magic line' ('onCommentFormat').
After the 'off' magic line, events do not show if at least one of the following conditions is true:
- The 'checkNameFormat' (if set) is found in the check name (e.g. 'de.unkrig.cscontrib.checks.Alignment')
- The 'messageFormat' (if set) is found in the event message
- The 'moduleIdFormat' (if set) is found in the ID of the module that generated the event
This filter can only work if a 'FileContentsHolder' module exists in the configuration.
Properties:
- offFormat
- Line pattern to trigger filter to begin suppression
- onFormat
- Line pattern to trigger filter to end suppression
- checkNameFormat
- Check name pattern to suppress
- messageFormat
- Message pattern to suppress
- moduleIdFormat
- Module ID pattern to suppress
License
CS-CONTRIB.UNKRIG.DE is published under the "New BSD License".
Source Code
The source code is available through SVN:
https://svn.code.sf.net/p/loggifier/code