From 12db2b41f0639194912ef6f88d5823ee3de1ab84 Mon Sep 17 00:00:00 2001 From: Arin Modi Date: Thu, 1 Dec 2022 22:40:00 +0530 Subject: [PATCH] Issue #12409: Inconsistent allowedAbbreviations --- ...ices_should_be_free_of_cycles_suppressions | 120 +++++++++--------- .../naming/AbbreviationAsWordInNameCheck.java | 26 +++- .../naming/AbbreviationAsWordInNameCheck.xml | 1 + .../AbbreviationAsWordInNameCheckTest.java | 13 ++ .../InputAbbreviationAsWordInNameType7.java | 49 +++++++ src/xdocs/config_naming.xml | 19 +++ 6 files changed, 167 insertions(+), 61 deletions(-) create mode 100644 src/test/resources/com/puppycrawl/tools/checkstyle/checks/naming/abbreviationaswordinname/InputAbbreviationAsWordInNameType7.java diff --git a/config/archunit-store/slices_should_be_free_of_cycles_suppressions b/config/archunit-store/slices_should_be_free_of_cycles_suppressions index 13f4dd7d5b0..9a82c502ea6 100644 --- a/config/archunit-store/slices_should_be_free_of_cycles_suppressions +++ b/config/archunit-store/slices_should_be_free_of_cycles_suppressions @@ -115,22 +115,22 @@ Cycle detected: Slice api -> \ - Method calls method in (ParameterNameCheck.java:266)\ - Method calls method in (ParameterNameCheck.java:270)\ - Method calls method in (ParameterNameCheck.java:271)\ - - Constructor ()> calls constructor ()> in (AbbreviationAsWordInNameCheck.java:314)\ - - Method calls method in (AbbreviationAsWordInNameCheck.java:463)\ - - Method calls method in (AbbreviationAsWordInNameCheck.java:464)\ - - Method calls method in (AbbreviationAsWordInNameCheck.java:481)\ - - Method calls method in (AbbreviationAsWordInNameCheck.java:484)\ - - Method calls method in (AbbreviationAsWordInNameCheck.java:493)\ - - Method calls method in (AbbreviationAsWordInNameCheck.java:509)\ - - Method calls method in (AbbreviationAsWordInNameCheck.java:510)\ - - Method calls method in (AbbreviationAsWordInNameCheck.java:530)\ - - Method calls method in (AbbreviationAsWordInNameCheck.java:531)\ - - Method calls method in (AbbreviationAsWordInNameCheck.java:533)\ - - Method calls method in (AbbreviationAsWordInNameCheck.java:534)\ - - Method calls method in (AbbreviationAsWordInNameCheck.java:551)\ - - Method calls method in (AbbreviationAsWordInNameCheck.java:553)\ - - Method calls method in (AbbreviationAsWordInNameCheck.java:663)\ - - Method calls method in (AbbreviationAsWordInNameCheck.java:666) + - Constructor ()> calls constructor ()> in (AbbreviationAsWordInNameCheck.java:332)\ + - Method calls method in (AbbreviationAsWordInNameCheck.java:481)\ + - Method calls method in (AbbreviationAsWordInNameCheck.java:482)\ + - Method calls method in (AbbreviationAsWordInNameCheck.java:499)\ + - Method calls method in (AbbreviationAsWordInNameCheck.java:502)\ + - Method calls method in (AbbreviationAsWordInNameCheck.java:511)\ + - Method calls method in (AbbreviationAsWordInNameCheck.java:527)\ + - Method calls method in (AbbreviationAsWordInNameCheck.java:528)\ + - Method calls method in (AbbreviationAsWordInNameCheck.java:548)\ + - Method calls method in (AbbreviationAsWordInNameCheck.java:549)\ + - Method calls method in (AbbreviationAsWordInNameCheck.java:551)\ + - Method calls method in (AbbreviationAsWordInNameCheck.java:552)\ + - Method calls method in (AbbreviationAsWordInNameCheck.java:569)\ + - Method calls method in (AbbreviationAsWordInNameCheck.java:571)\ + - Method calls method in (AbbreviationAsWordInNameCheck.java:687)\ + - Method calls method in (AbbreviationAsWordInNameCheck.java:690) Cycle detected: Slice api -> \ Slice checks.naming -> \ Slice utils -> \ @@ -158,8 +158,8 @@ Cycle detected: Slice api -> \ - Method calls method in (MethodNameCheck.java:232)\ - Method calls method in (ParameterNameCheck.java:236)\ - Method calls method in (ParameterNameCheck.java:238)\ - - Method gets field in (AbbreviationAsWordInNameCheck.java:457)\ - - Method calls method in (AbbreviationAsWordInNameCheck.java:497)\ + - Method gets field in (AbbreviationAsWordInNameCheck.java:475)\ + - Method calls method in (AbbreviationAsWordInNameCheck.java:515)\ 3. Dependencies of Slice utils\ - Method has parameter of type in (AnnotationUtil.java:0)\ - Method has parameter of type in (AnnotationUtil.java:0)\ @@ -535,8 +535,8 @@ Cycle detected: Slice api -> \ - Method calls method in (MethodNameCheck.java:232)\ - Method calls method in (ParameterNameCheck.java:236)\ - Method calls method in (ParameterNameCheck.java:238)\ - - Method gets field in (AbbreviationAsWordInNameCheck.java:457)\ - - Method calls method in (AbbreviationAsWordInNameCheck.java:497)\ + - Method gets field in (AbbreviationAsWordInNameCheck.java:475)\ + - Method calls method in (AbbreviationAsWordInNameCheck.java:515)\ 3. Dependencies of Slice utils\ - Method has return type in (JavadocUtil.java:0)\ - Method calls method in (JavadocUtil.java:121)\ @@ -1077,8 +1077,8 @@ Cycle detected: Slice api -> \ - Method calls method in (MethodNameCheck.java:232)\ - Method calls method in (ParameterNameCheck.java:236)\ - Method calls method in (ParameterNameCheck.java:238)\ - - Method gets field in (AbbreviationAsWordInNameCheck.java:457)\ - - Method calls method in (AbbreviationAsWordInNameCheck.java:497)\ + - Method gets field in (AbbreviationAsWordInNameCheck.java:475)\ + - Method calls method in (AbbreviationAsWordInNameCheck.java:515)\ 3. Dependencies of Slice utils\ - Method calls method in (JavadocUtil.java:102)\ - Method calls method in (JavadocUtil.java:107)\ @@ -1123,8 +1123,8 @@ Cycle detected: Slice api -> \ - Method calls method in (MethodNameCheck.java:232)\ - Method calls method in (ParameterNameCheck.java:236)\ - Method calls method in (ParameterNameCheck.java:238)\ - - Method gets field in (AbbreviationAsWordInNameCheck.java:457)\ - - Method calls method in (AbbreviationAsWordInNameCheck.java:497)\ + - Method gets field in (AbbreviationAsWordInNameCheck.java:475)\ + - Method calls method in (AbbreviationAsWordInNameCheck.java:515)\ 3. Dependencies of Slice utils\ - Method has generic return type > with type argument depending on in (XpathUtil.java:0)\ - Method has parameter of type in (XpathUtil.java:0)\ @@ -2219,22 +2219,22 @@ Cycle detected: Slice api -> \ - Method calls method in (ParameterNameCheck.java:266)\ - Method calls method in (ParameterNameCheck.java:270)\ - Method calls method in (ParameterNameCheck.java:271)\ - - Constructor ()> calls constructor ()> in (AbbreviationAsWordInNameCheck.java:314)\ - - Method calls method in (AbbreviationAsWordInNameCheck.java:463)\ - - Method calls method in (AbbreviationAsWordInNameCheck.java:464)\ - - Method calls method in (AbbreviationAsWordInNameCheck.java:481)\ - - Method calls method in (AbbreviationAsWordInNameCheck.java:484)\ - - Method calls method in (AbbreviationAsWordInNameCheck.java:493)\ - - Method calls method in (AbbreviationAsWordInNameCheck.java:509)\ - - Method calls method in (AbbreviationAsWordInNameCheck.java:510)\ - - Method calls method in (AbbreviationAsWordInNameCheck.java:530)\ - - Method calls method in (AbbreviationAsWordInNameCheck.java:531)\ - - Method calls method in (AbbreviationAsWordInNameCheck.java:533)\ - - Method calls method in (AbbreviationAsWordInNameCheck.java:534)\ - - Method calls method in (AbbreviationAsWordInNameCheck.java:551)\ - - Method calls method in (AbbreviationAsWordInNameCheck.java:553)\ - - Method calls method in (AbbreviationAsWordInNameCheck.java:663)\ - - Method calls method in (AbbreviationAsWordInNameCheck.java:666) + - Constructor ()> calls constructor ()> in (AbbreviationAsWordInNameCheck.java:332)\ + - Method calls method in (AbbreviationAsWordInNameCheck.java:481)\ + - Method calls method in (AbbreviationAsWordInNameCheck.java:482)\ + - Method calls method in (AbbreviationAsWordInNameCheck.java:499)\ + - Method calls method in (AbbreviationAsWordInNameCheck.java:502)\ + - Method calls method in (AbbreviationAsWordInNameCheck.java:511)\ + - Method calls method in (AbbreviationAsWordInNameCheck.java:527)\ + - Method calls method in (AbbreviationAsWordInNameCheck.java:528)\ + - Method calls method in (AbbreviationAsWordInNameCheck.java:548)\ + - Method calls method in (AbbreviationAsWordInNameCheck.java:549)\ + - Method calls method in (AbbreviationAsWordInNameCheck.java:551)\ + - Method calls method in (AbbreviationAsWordInNameCheck.java:552)\ + - Method calls method in (AbbreviationAsWordInNameCheck.java:569)\ + - Method calls method in (AbbreviationAsWordInNameCheck.java:571)\ + - Method calls method in (AbbreviationAsWordInNameCheck.java:687)\ + - Method calls method in (AbbreviationAsWordInNameCheck.java:690) Cycle detected: Slice api -> \ Slice utils -> \ Slice checks.javadoc.utils -> \ @@ -2406,22 +2406,22 @@ Cycle detected: Slice api -> \ - Method calls method in (ParameterNameCheck.java:266)\ - Method calls method in (ParameterNameCheck.java:270)\ - Method calls method in (ParameterNameCheck.java:271)\ - - Constructor ()> calls constructor ()> in (AbbreviationAsWordInNameCheck.java:314)\ - - Method calls method in (AbbreviationAsWordInNameCheck.java:463)\ - - Method calls method in (AbbreviationAsWordInNameCheck.java:464)\ - - Method calls method in (AbbreviationAsWordInNameCheck.java:481)\ - - Method calls method in (AbbreviationAsWordInNameCheck.java:484)\ - - Method calls method in (AbbreviationAsWordInNameCheck.java:493)\ - - Method calls method in (AbbreviationAsWordInNameCheck.java:509)\ - - Method calls method in (AbbreviationAsWordInNameCheck.java:510)\ - - Method calls method in (AbbreviationAsWordInNameCheck.java:530)\ - - Method calls method in (AbbreviationAsWordInNameCheck.java:531)\ - - Method calls method in (AbbreviationAsWordInNameCheck.java:533)\ - - Method calls method in (AbbreviationAsWordInNameCheck.java:534)\ - - Method calls method in (AbbreviationAsWordInNameCheck.java:551)\ - - Method calls method in (AbbreviationAsWordInNameCheck.java:553)\ - - Method calls method in (AbbreviationAsWordInNameCheck.java:663)\ - - Method calls method in (AbbreviationAsWordInNameCheck.java:666) + - Constructor ()> calls constructor ()> in (AbbreviationAsWordInNameCheck.java:332)\ + - Method calls method in (AbbreviationAsWordInNameCheck.java:481)\ + - Method calls method in (AbbreviationAsWordInNameCheck.java:482)\ + - Method calls method in (AbbreviationAsWordInNameCheck.java:499)\ + - Method calls method in (AbbreviationAsWordInNameCheck.java:502)\ + - Method calls method in (AbbreviationAsWordInNameCheck.java:511)\ + - Method calls method in (AbbreviationAsWordInNameCheck.java:527)\ + - Method calls method in (AbbreviationAsWordInNameCheck.java:528)\ + - Method calls method in (AbbreviationAsWordInNameCheck.java:548)\ + - Method calls method in (AbbreviationAsWordInNameCheck.java:549)\ + - Method calls method in (AbbreviationAsWordInNameCheck.java:551)\ + - Method calls method in (AbbreviationAsWordInNameCheck.java:552)\ + - Method calls method in (AbbreviationAsWordInNameCheck.java:569)\ + - Method calls method in (AbbreviationAsWordInNameCheck.java:571)\ + - Method calls method in (AbbreviationAsWordInNameCheck.java:687)\ + - Method calls method in (AbbreviationAsWordInNameCheck.java:690) Cycle detected: Slice api -> \ Slice utils -> \ Slice xpath -> \ @@ -2530,8 +2530,8 @@ Cycle detected: Slice checks.javadoc -> \ - Method calls method in (MethodNameCheck.java:232)\ - Method calls method in (ParameterNameCheck.java:236)\ - Method calls method in (ParameterNameCheck.java:238)\ - - Method gets field in (AbbreviationAsWordInNameCheck.java:457)\ - - Method calls method in (AbbreviationAsWordInNameCheck.java:497)\ + - Method gets field in (AbbreviationAsWordInNameCheck.java:475)\ + - Method calls method in (AbbreviationAsWordInNameCheck.java:515)\ 3. Dependencies of Slice utils\ - Method has return type in (JavadocUtil.java:0)\ - Method calls method in (JavadocUtil.java:121)\ @@ -2700,8 +2700,8 @@ Cycle detected: Slice checks.naming -> \ - Method calls method in (MethodNameCheck.java:232)\ - Method calls method in (ParameterNameCheck.java:236)\ - Method calls method in (ParameterNameCheck.java:238)\ - - Method gets field in (AbbreviationAsWordInNameCheck.java:457)\ - - Method calls method in (AbbreviationAsWordInNameCheck.java:497)\ + - Method gets field in (AbbreviationAsWordInNameCheck.java:475)\ + - Method calls method in (AbbreviationAsWordInNameCheck.java:515)\ 2. Dependencies of Slice utils\ - Method has return type in (CheckUtil.java:0)\ - Method has return type in (CheckUtil.java:0)\ diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/naming/AbbreviationAsWordInNameCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/naming/AbbreviationAsWordInNameCheck.java index 3b8a3969a3b..336ce08e7fe 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/naming/AbbreviationAsWordInNameCheck.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/naming/AbbreviationAsWordInNameCheck.java @@ -40,6 +40,7 @@ * * Google Style Guide to get to know how to avoid long abbreviations in names. *

+ *

'_' is considered as word separator in identifier name.

*

* {@code allowedAbbreviationLength} specifies how many consecutive capital letters are * allowed in the identifier. @@ -297,6 +298,23 @@ * } * *

+ * To configure to check variables, enforce + * no abbreviations (essentially camel case) except for + * words like 'ORDER', 'TEST'. + *

+ *

Configuration:

+ *
+ * <module name="AbbreviationAsWordInName">
+ *     <property name="allowedAbbreviations" value="ORDER, TEST"/>
+ * </module>
+ * 
+ *

Example:

+ *
+ * public class Test {
+ *    void getORDER_TEST() {} // OK, both abbreviations are allowed
+ * }
+ * 
+ *

* Parent is {@code com.puppycrawl.tools.checkstyle.TreeWalker} *

*

@@ -583,7 +601,13 @@ private String getDisallowedAbbreviation(String str) { else if (abbrStarted) { abbrStarted = false; - final int endIndex = index - 1; + final int endIndex; + if (Character.isLetterOrDigit(symbol)) { + endIndex = index - 1; + } + else { + endIndex = index; + } result = getAbbreviationIfIllegal(str, beginIndex, endIndex); if (result != null) { break; diff --git a/src/main/resources/com/puppycrawl/tools/checkstyle/meta/checks/naming/AbbreviationAsWordInNameCheck.xml b/src/main/resources/com/puppycrawl/tools/checkstyle/meta/checks/naming/AbbreviationAsWordInNameCheck.xml index b4fd8976d7e..b3172f37e5f 100644 --- a/src/main/resources/com/puppycrawl/tools/checkstyle/meta/checks/naming/AbbreviationAsWordInNameCheck.xml +++ b/src/main/resources/com/puppycrawl/tools/checkstyle/meta/checks/naming/AbbreviationAsWordInNameCheck.xml @@ -10,6 +10,7 @@ <a href="https://checkstyle.org/styleguides/google-java-style-20180523/javaguide.html#s5.3-camel-case"> Google Style Guide</a> to get to know how to avoid long abbreviations in names. </p> + <p>'_' is considered as word separator in identifier name.</p> <p> {@code allowedAbbreviationLength} specifies how many consecutive capital letters are allowed in the identifier. diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/checks/naming/AbbreviationAsWordInNameCheckTest.java b/src/test/java/com/puppycrawl/tools/checkstyle/checks/naming/AbbreviationAsWordInNameCheckTest.java index c300bbb5ae1..5b1f8cf1cce 100644 --- a/src/test/java/com/puppycrawl/tools/checkstyle/checks/naming/AbbreviationAsWordInNameCheckTest.java +++ b/src/test/java/com/puppycrawl/tools/checkstyle/checks/naming/AbbreviationAsWordInNameCheckTest.java @@ -467,4 +467,17 @@ public void testReceiver() throws Exception { expected); } + @Test + public void testInputAbbreviationAsWordInNameTypeWithUnderScore() throws Exception { + final String[] expected = { + "13:17: " + getWarningMessage("HBCK_LOCK_PATH", 4), + "16:15: " + getWarningMessage("BOOL_VALS", 4), + "24:10: " + getWarningMessage("getNONE_Test", 4), + "42:13: " + getWarningMessage("LINE_SEP", 4), + }; + + verifyWithInlineConfigParser( + getPath("InputAbbreviationAsWordInNameType7.java"), expected); + } + } diff --git a/src/test/resources/com/puppycrawl/tools/checkstyle/checks/naming/abbreviationaswordinname/InputAbbreviationAsWordInNameType7.java b/src/test/resources/com/puppycrawl/tools/checkstyle/checks/naming/abbreviationaswordinname/InputAbbreviationAsWordInNameType7.java new file mode 100644 index 00000000000..48843de4b0d --- /dev/null +++ b/src/test/resources/com/puppycrawl/tools/checkstyle/checks/naming/abbreviationaswordinname/InputAbbreviationAsWordInNameType7.java @@ -0,0 +1,49 @@ +/* +AbbreviationAsWordInName +allowedAbbreviations = ORDER, OBSERVATION, UNDERSCORE, TEST + + +*/ + + +package com.puppycrawl.tools.checkstyle.checks.naming.abbreviationaswordinname; + +public class InputAbbreviationAsWordInNameType7 { + // violation below 'Abb.* in name 'HBCK_LOCK_PATH' must contain no .* than '4' .*cap.* let.*.' + private int HBCK_LOCK_PATH; + + // violation below 'Abb.* in name 'BOOL_VALS' must contain no more than '4' .*cap.* let.*.' + Boolean[] BOOL_VALS = { false, true }; + + void getTEST() { + } // ok + + void getORDER_OBSERVATION() {} // ok + + // violation below 'Abb.* in name 'getNONE_Test' must contain no more than '4' .*cap.* let.*.' + void getNONE_Test() {} + + void getCLR_Test() {} // ok + + void getUNDERSCORE() {} // ok + + void getTEST_OBSERVATION() {} // ok + + void getTEST_UNDERSCORE() {} // ok + + void getORDER() {} // ok + + void getOBSERVATION() {} // ok + + void getORDER_UNDERSCORE() {} // ok + + int getCLRTest() { // ok + // violation below 'Abb.* in name 'LINE_SEP' must contain no more than '4' .*cap.* let.*.' + int LINE_SEP = 1; + return LINE_SEP; + } + + void getNON_ETest() {} // OK + + +} diff --git a/src/xdocs/config_naming.xml b/src/xdocs/config_naming.xml index 505781eacff..e135e427178 100644 --- a/src/xdocs/config_naming.xml +++ b/src/xdocs/config_naming.xml @@ -37,6 +37,8 @@ to get to know how to avoid long abbreviations in names.

+

'_' is considered as word separator in identifier name.

+

allowedAbbreviationLength specifies how many consecutive capital letters are allowed in the identifier. @@ -344,6 +346,23 @@ public class MyClass { public final int customerID = 2; // violation public static int nextID = 3; // OK, ignored public static final int MAX_ALLOWED = 4; // violation +} + +

+ To configure to check variables, enforce + no abbreviations (essentially camel case) except for + words like 'ORDER', 'TEST'. +

+

Configuration:

+ +<module name="AbbreviationAsWordInName"> + <property name="allowedAbbreviations" value="ORDER, TEST"/> +</module> + +

Example:

+ +public class Test { + void getORDER_TEST() {} // OK, both abbreviations are allowed }