config/codenarc/codenarc.groovy (362 lines of code) (raw):

/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ ruleset { description ''' OFBiz ruleset adapted from basic one from https://codenarc.org/StarterRuleSet-AllRulesByCategory.groovy.txt Each rule is commented and priority qualified. ''' // rulesets/basic.xml AssertWithinFinallyBlock AssignmentInConditional BigDecimalInstantiation BitwiseOperatorInConditional BooleanGetBoolean BrokenNullCheck BrokenOddnessCheck ClassForName ComparisonOfTwoConstants ComparisonWithSelf ConstantAssertExpression ConstantIfExpression ConstantTernaryExpression DeadCode DoubleNegative DuplicateCaseStatement DuplicateMapKey DuplicateSetValue EmptyCatchBlock EmptyClass EmptyElseBlock EmptyFinallyBlock EmptyForStatement EmptyIfStatement EmptyInstanceInitializer EmptyMethod EmptyStaticInitializer EmptySwitchStatement EmptySynchronizedStatement EmptyTryBlock EmptyWhileStatement EqualsAndHashCode EqualsOverloaded ExplicitGarbageCollection ForLoopShouldBeWhileLoop HardCodedWindowsFileSeparator HardCodedWindowsRootDirectory IntegerGetInteger MultipleUnaryOperators RandomDoubleCoercedToZero RemoveAllOnSelf ReturnFromFinallyBlock ThrowExceptionFromFinallyBlock // rulesets/braces.xml ElseBlockBraces ForStatementBraces IfStatementBraces WhileStatementBraces // rulesets/comments.xml JavadocConsecutiveEmptyLines JavadocEmptyAuthorTag JavadocEmptyExceptionTag JavadocEmptyFirstLine JavadocEmptyLastLine JavadocEmptyParamTag JavadocEmptyReturnTag JavadocEmptySeeTag JavadocEmptySinceTag JavadocEmptyThrowsTag JavadocEmptyVersionTag JavadocMissingExceptionDescription JavadocMissingParamDescription JavadocMissingThrowsDescription // rulesets/concurrency.xml BusyWait DoubleCheckedLocking InconsistentPropertyLocking InconsistentPropertySynchronization NestedSynchronization StaticCalendarField StaticConnection StaticDateFormatField StaticMatcherField StaticSimpleDateFormatField SynchronizedMethod SynchronizedOnBoxedPrimitive SynchronizedOnGetClass SynchronizedOnReentrantLock SynchronizedOnString SynchronizedOnThis SynchronizedReadObjectMethod SystemRunFinalizersOnExit ThisReferenceEscapesConstructor ThreadGroup ThreadLocalNotStaticFinal ThreadYield UseOfNotifyMethod VolatileArrayField VolatileLongOrDoubleField WaitOutsideOfWhileLoop // rulesets/convention.xml //CompileStatic ConfusingTernary CouldBeElvis CouldBeSwitchStatement FieldTypeRequired HashtableIsObsolete IfStatementCouldBeTernary // TODO : ImplicitClosureParameter InvertedCondition InvertedIfElse LongLiteralWithLowerCaseL MethodParameterTypeRequired MethodReturnTypeRequired NoDef NoDouble NoFloat NoJavaUtilDate NoTabCharacter // TODO ParameterReassignment : need discussion since var modification through reference is done in 40+ groovy location. PublicMethodsBeforeNonPublicMethods StaticFieldsBeforeInstanceFields StaticMethodsBeforeInstanceMethods TernaryCouldBeElvis VariableTypeRequired VectorIsObsolete // rulesets/design.xml AbstractClassWithPublicConstructor AbstractClassWithoutAbstractMethod AssignmentToStaticFieldFromInstanceMethod BooleanMethodReturnsNull BuilderMethodWithSideEffects CloneableWithoutClone CloseWithoutCloseable CompareToWithoutComparable ConstantsOnlyInterface EmptyMethodInAbstractClass FinalClassWithProtectedMember ImplementationAsType LocaleSetDefault NestedForLoop PrivateFieldCouldBeFinal PublicInstanceField ReturnsNullInsteadOfEmptyArray ReturnsNullInsteadOfEmptyCollection SimpleDateFormatMissingLocale StatelessSingleton ToStringReturnsNull // rulesets/exceptions.xml CatchArrayIndexOutOfBoundsException CatchError // TODO : need to discuss about execption CatchException for scripting (allow global Exception catching) CatchIllegalMonitorStateException CatchIndexOutOfBoundsException CatchNullPointerException CatchRuntimeException CatchThrowable ConfusingClassNamedException ExceptionExtendsError ExceptionExtendsThrowable ExceptionNotThrown MissingNewInThrowStatement ReturnNullFromCatchBlock SwallowThreadDeath ThrowError ThrowException ThrowNullPointerException ThrowRuntimeException ThrowThrowable // rulesets/formatting.xml BlankLineBeforePackage BlockEndsWithBlankLine BlockStartsWithBlankLine BracesForClass BracesForForLoop BracesForIfElse BracesForMethod BracesForTryCatchFinally ClassEndsWithBlankLine ClassStartsWithBlankLine ClosureStatementOnOpeningLineOfMultipleLineClosure ConsecutiveBlankLines FileEndsWithoutNewline Indentation LineLength(length: 150) MissingBlankLineAfterImports MissingBlankLineAfterPackage SpaceAfterCatch SpaceAfterClosingBrace SpaceAfterComma SpaceAfterFor SpaceAfterIf SpaceAfterOpeningBrace SpaceAfterSemicolon SpaceAfterSwitch SpaceAfterWhile SpaceAroundClosureArrow SpaceAroundMapEntryColon(characterAfterColonRegex: /\s/) SpaceAroundOperator SpaceBeforeClosingBrace SpaceBeforeOpeningBrace TrailingWhitespace // rulesets/generic.xml IllegalClassMember IllegalClassReference IllegalPackageReference IllegalRegex IllegalString IllegalSubclass RequiredRegex RequiredString StatelessClass // rulesets/grails.xml GrailsDomainHasEquals GrailsDomainHasToString GrailsDomainReservedSqlKeywordName GrailsDomainStringPropertyMaxSize GrailsDomainWithServiceReference GrailsDuplicateConstraint GrailsDuplicateMapping GrailsMassAssignment GrailsPublicControllerMethod GrailsServletContextReference GrailsStatelessService // rulesets/groovyism.xml AssignCollectionSort AssignCollectionUnique ClosureAsLastMethodParameter CollectAllIsDeprecated ConfusingMultipleReturns ExplicitArrayListInstantiation ExplicitCallToAndMethod ExplicitCallToCompareToMethod ExplicitCallToDivMethod ExplicitCallToEqualsMethod ExplicitCallToGetAtMethod ExplicitCallToLeftShiftMethod ExplicitCallToMinusMethod ExplicitCallToModMethod ExplicitCallToMultiplyMethod ExplicitCallToOrMethod ExplicitCallToPlusMethod ExplicitCallToPowerMethod ExplicitCallToPutAtMethod ExplicitCallToRightShiftMethod ExplicitCallToXorMethod ExplicitHashMapInstantiation ExplicitHashSetInstantiation ExplicitLinkedHashMapInstantiation ExplicitLinkedListInstantiation ExplicitStackInstantiation ExplicitTreeSetInstantiation GStringAsMapKey GStringExpressionWithinString GetterMethodCouldBeProperty GroovyLangImmutable UseCollectMany UseCollectNested // rulesets/imports.xml DuplicateImport ImportFromSamePackage ImportFromSunPackages MisorderedStaticImports NoWildcardImports UnnecessaryGroovyImport UnusedImport // rulesets/jdbc.xml DirectConnectionManagement JdbcConnectionReference JdbcStatementReference // rulesets/junit.xml ChainedTest CoupledTestCase JUnitAssertAlwaysFails JUnitAssertAlwaysSucceeds JUnitFailWithoutMessage JUnitLostTest JUnitPublicField JUnitPublicNonTestMethod JUnitPublicProperty JUnitSetUpCallsSuper JUnitStyleAssertions JUnitTearDownCallsSuper JUnitTestMethodWithoutAssert JUnitUnnecessarySetUp JUnitUnnecessaryTearDown JUnitUnnecessaryThrowsException SpockIgnoreRestUsed UnnecessaryFail UseAssertEqualsInsteadOfAssertTrue UseAssertFalseInsteadOfNegation UseAssertNullInsteadOfAssertEquals UseAssertSameInsteadOfAssertTrue UseAssertTrueInsteadOfAssertEquals UseAssertTrueInsteadOfNegation // rulesets/logging.xml LoggerForDifferentClass LoggerWithWrongModifiers LoggingSwallowsStacktrace MultipleLoggers PrintStackTrace Println SystemErrPrint SystemOutPrint // rulesets/naming.xml AbstractClassName ClassName ClassNameSameAsFilename ClassNameSameAsSuperclass ConfusingMethodName FieldName InterfaceName InterfaceNameSameAsSuperInterface MethodName ObjectOverrideMisspelledMethodName PackageName PackageNameMatchesFilePath ParameterName PropertyName VariableName // rulesets/security.xml FileCreateTempFile InsecureRandom NonFinalPublicField NonFinalSubclassOfSensitiveInterface ObjectFinalize PublicFinalizeMethod SystemExit UnsafeArrayDeclaration // rulesets/serialization.xml EnumCustomSerializationIgnored SerialPersistentFields SerialVersionUID SerializableClassMustDefineSerialVersionUID // rulesets/size.xml // TODO : need refactoring AbcMetric // Requires the GMetrics jar ClassSize CrapMetric // Requires the GMetrics jar and a Cobertura coverage file // TODO : need refactoring CyclomaticComplexity // Requires the GMetrics jar MethodCount // TODO : need refactoring MethodSize // TODO : need serious refactoring NestedBlockDepth // TODO : need refactoring ParameterCount // rulesets/unnecessary.xml AddEmptyString ConsecutiveLiteralAppends ConsecutiveStringConcatenation UnnecessaryBigDecimalInstantiation UnnecessaryBigIntegerInstantiation UnnecessaryBooleanExpression UnnecessaryBooleanInstantiation UnnecessaryCallForLastElement UnnecessaryCallToSubstring UnnecessaryCast UnnecessaryCatchBlock UnnecessaryCollectCall UnnecessaryCollectionCall UnnecessaryConstructor UnnecessaryDefInFieldDeclaration UnnecessaryDefInMethodDeclaration UnnecessaryDefInVariableDeclaration UnnecessaryDotClass UnnecessaryDoubleInstantiation UnnecessaryElseStatement UnnecessaryFinalOnPrivateMethod UnnecessaryFloatInstantiation UnnecessaryGString //UnnecessaryGetter UnnecessaryIfStatement UnnecessaryInstanceOfCheck UnnecessaryInstantiationToGetClass UnnecessaryIntegerInstantiation UnnecessaryLongInstantiation UnnecessaryModOne UnnecessaryNullCheck UnnecessaryNullCheckBeforeInstanceOf UnnecessaryObjectReferences(maxReferencesAllowed: 8) UnnecessaryOverridingMethod UnnecessaryPackageReference UnnecessaryParenthesesForMethodCallWithClosure UnnecessaryPublicModifier //UnnecessaryReturnKeyword UnnecessarySafeNavigationOperator UnnecessarySelfAssignment UnnecessarySemicolon //UnnecessarySetter UnnecessaryStringInstantiation UnnecessaryTernaryExpression UnnecessaryToString UnnecessaryTransientModifier // rulesets/unused.xml UnusedArray UnusedMethodParameter UnusedObject UnusedPrivateField UnusedPrivateMethod UnusedPrivateMethodParameter UnusedVariable }