blob: 7507e11c4dd17cbefbcd0b0fb6691b194a179d7d [file] [log] [blame]
/*
* 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 {
ruleset('rulesets/naming.xml') {
exclude 'PackageName' {
regex = '^[a-z]([a-zA-Z\\.0-9])*\\b'
}
'ClassName' {
regex = '^[A-Z]([a-zA-Z0-9$_])*\\b'
doNotApplyToClassNames='$Temp,fileNameFinderTest,rayMain'
}
'FieldName' {
regex = '^[a-z]([a-zA-Z0-9$])*\\b'
finalRegex = '^[a-z]([a-zA-Z0-9$])*\\b'
staticFinalRegex = '^[A-Z]([A-Z0-9$_])*\\b|^serialVersionUID\\b'
staticRegex = '^[A-Z]([A-Z0-9$_])*\\b'
doNotApplyToClassNames='Entity,AstNodeToScriptVisitor,LookAndFeelHelper,SwingBuilder,Console,' +
'JavadocAssertionTestBuilder,JavadocAssertionTestSuite,Main,Groovysh,Parser,' +
'AliasTargetProxyCommand,WorkerThread,Cheddar,CategoryTestPropertyCategory,' +
'GroovyClosureMethodsTest,SingletonBugPrivate,SingletonBugProtected,' +
'GroovyInnerEnumBug$MyEnum,GroovyInnerEnumBug,' +
'CategoryTestHelperPropertyReplacer,PrimitiveTypeFieldTest,I3830,Cheese,' +
'SingletonBugTest,ClosureWithStaticVariablesBug,Groovy1018_Bug,Groovy3830Bug,Groovy4386_Bug,' +
'GroovyInnerEnumBug,GroovySwingTestCase,GpathSyntaxTestSupport,MixedMarkupTestSupport,' +
'TraversalTestSupport,CallClosureFieldAsMethodTest'
}
'PropertyName' {
regex = '^[a-z]([a-zA-Z0-9$])*\\b'
finalRegex = '^[a-z]([a-zA-Z0-9$])*\\b'
staticFinalRegex = '^[A-Z]([A-Z0-9$_])*\\b|^serialVersionUID\\b'
staticRegex = '^[A-Z]([A-Z0-9$_])*\\b'
doNotApplyToClassNames='groovy.inspect.swingui.AstNodeToScriptVisitor,groovy.inspect.swingui.ScriptToTreeNodeAdapter,' +
'groovy.swing.factory.TitledBorderFactory,groovy.ui.Console,groovy.ui.OutputTransforms,' +
'org.codehaus.groovy.tools.shell.commands.HistoryCommand,org.codehaus.groovy.tools.shell.commands.PurgeCommand,' +
'org.codehaus.groovy.tools.shell.commands.RecordCommand,org.codehaus.groovy.tools.shell.commands.ShadowCommand,' +
'org.codehaus.groovy.tools.shell.commands.ShowCommand,org.codehaus.groovy.tools.shell.ComplexCommandSupport,' +
'groovy.bugs.StaticPropertyFoo,groovy.bugs.Groovy3135Bug,groovy.util.XmlParserTest,' +
'org.codehaus.groovy.runtime.PerInstanceMetaClassTest,groovy.StaticImportChild,' +
'gls.scope.VariablePrecedenceTest,groovy.bugs.Groovy3069Bug,groovy.StaticImportTarget,' +
'gls.scope.VariablePrecedenceTest,groovy.bugs.Groovy3069Bug,groovy.mock.interceptor.Baz,' +
'groovy.bugs.Groovy2706Bug,groovy.sql.TestHelper,org.codehaus.groovy.runtime.WriterAppendTest,' +
'groovy.bugs.Groovy3135Bug,groovy.mock.interceptor.Baz,groovy.ReadLineTest,' +
'groovy.bugs.TedsClosureBug,groovy.tree.ClosureClassLoaderBug,groovy.tree.NestedClosureBugTest,' +
'groovy.tree.SmallTreeTest,groovy.ReadLineTest,groovy.bugs.Groovy3135Bug,' +
'org.codehaus.groovy.runtime.DateGDKTest,groovy.sql.PersonDTO,groovy.bugs.One,' +
'groovy.bugs.Two,org.codehaus.groovy.runtime.FileAppendTest,org.codehaus.groovy.runtime.WriterAppendTest,' +
'org.codehaus.groovy.runtime.FileAppendTest,org.codehaus.groovy.runtime.WriterAppendTest,groovy.sql.PersonDTO,' +
'groovy.bugs.Groovy3135Bug,Sphere,groovy.sql.PersonDTO,groovy.bugs.Groovy3135Bug,' +
'gls.enums.GrooyColors3693,groovy.sql.PersonDTO,groovy.bugs.HasStaticFieldSomeClass,groovy.PrintTest,' +
'groovy.bugs.StaticClosurePropertyBug,groovy.bugs.Groovy3311Bug,groovy.StaticImportParent,' +
'org.codehaus.groovy.transform.TestTransform,org.codehaus.groovy.classgen.asm.InstructionSequenceHelperClassTest,' +
'groovy.bugs.Groovy3511Bug,groovy.bugs.Groovy3135Bug,groovy.bugs.Groovy2556Bug,' +
'groovy.mock.interceptor.Baz,org.codehaus.groovy.ast.builder.AstBuilderFromCodeTest,' +
'groovy.bugs.UseStaticInClosureBug,groovy.bugs.Groovy2556Bug,' +
'groovy.ReadLineTest,org.codehaus.groovy.runtime.FileAppendTest,org.codehaus.groovy.runtime.WriterAppendTest,' +
'org.codehaus.groovy.transform.TestTransform,groovy.bugs.ClosureWithStaticVariablesBug'
}
'VariableName' {
regex = '^[a-z]([a-zA-Z0-9$])*\\b'
finalRegex = '^[a-z]([a-zA-Z0-9$])*\\b'
doNotApplyToClassNames='groovy.GroovyClosureMethodsTest,groovy.RegularExpressionsTest,groovy.NumberMathTest,' +
'groovy.NumberMathTest,groovy.NumberMathTest,groovy.NumberMathTest,groovy.NumberMathTest,' +
'groovy.NumberMathTest,groovy.NumberMathTest,groovy.NumberMathTest,groovy.NumberMathTest,' +
'groovy.NumberMathTest,groovy.RegularExpressionsTest,' +
'groovy.NumberMathTest,groovy.NumberMathTest,groovy.NumberMathTest,groovy.NumberMathTest,' +
'groovy.RegularExpressionsTest,groovy.NumberMathTest,groovy.NumberMathTest,' +
'groovy.NumberMathTest,groovy.ValidNameTest,groovy.ValidNameTest,' +
'org.codehaus.groovy.runtime.PerInstanceMetaClassTest,' +
'groovy.NumberMathTest,groovy.NumberMathTest,groovy.NumberMathTest,groovy.NumberMathTest,' +
'groovy.NumberMathTest,groovy.NumberMathTest,groovy.NumberMathTest,groovy.NumberMathTest,' +
'gls.scope.NameResolvingTest,groovy.util.AntTest,groovy.sql.SqlCacheTest,' +
'groovy.operator.NegateListsTest,org.codehaus.groovy.reflection.WeakMapTest,' +
'groovy.RegularExpressionsTest,gls.scope.NameResolvingTest'
}
'MethodName' {
doNotApplyToClassNames='groovy.swing.SwingBuilder,groovy.$Temp,groovy.bugs.Groovy4119Bug,' +
'groovy.lang.MetaClassRegistryTest,groovy.lang.MixinTest,' +
'groovy.swing.TitledBorderFactoryJustificationTest'
doNotApplyToFilesMatching='.*spectralnorm\\.groovy'
}
'ParameterName' {
doNotApplyToClassNames='groovy.bugs.MyDelegatingMetaClass'
doNotApplyToFilesMatching='.*spectralnorm\\.groovy'
}
'ConfusingMethodName' {
doNotApplyToClassNames='Groovy1059Foo'
}
exclude 'FactoryMethodName' // many violations
}
ruleset('rulesets/unused.xml') {
'UnusedVariable' {
doNotApplyToClassNames = 'SourceBaseTestCase,SAXTest,groovy.ForLoopTest,groovy.bugs.Groovy3894Bug,' +
'ExpandoMetaClassTest,ExceptionTest,JSR223Test,' +
'groovy.test.GroovyShellTestCase,org.codehaus.groovy.tools.shell.ShellRunner,' +
'groovy.bugs.Bytecode7Bug,groovy.mock.interceptor.HalfMockTest,' +
'groovy.mock.interceptor.MockSingleCallTest,groovy.mock.interceptor.StubSingleCallTest,' +
'groovy.operator.TernaryOperatorsTest,groovy.swing.SwingBuilderTableTest,' +
'groovy.swing.SwingBuilderTest,groovy.util.BuilderSupportTest,' +
'groovy.util.GroovyScriptEngineTest,groovy.util.ObservableMapTest,' +
'groovy.xml.NamespaceNodeGPathTest,groovy.bugs.ClassGeneratorFixesTest,' +
'groovy.bugs.ClosureWithBitwiseDefaultParamTest,groovy.bugs.ConstructorThisCallBug,' +
'groovy.bugs.InconsistentStackHeightBug,groovy.bugs.InterfaceImplBug,' +
'groovy.bugs.TedsClosureBug,org.codehaus.groovy.ast.builder.AstBuilderFromCodeTest,' +
'SubscriptTest,UnsafeNavigationTest,' +
'GStringTest,GeneratorTest,GroovyClosureMethodsTest,' +
'GroovyMethodsTest,ImmutableModificationTest,LittleClosureTest,' +
'NumberMathTest,OptionalReturnTest,OverridePropertyGetterTest,' +
'PrivateVariableAccessFromAnotherInstanceTest,PropertyTest,' +
'gls.annotations.closures.CallOnOwner,gls.annotations.closures.JavaCompatibility,' +
'gls.annotations.closures.CallOnThisObject,gls.annotations.closures.JavaCompatibilityParameterized,' +
'gls.annotations.closures.UnqualifiedCall,groovy.CompileOrderTest,' +
'gls.annotations.closures.ClosureWithParameters,EscapedUnicodeTest,' +
'groovy.bugs.Groovy2365Base,groovy.bugs.Groovy249_Bug,' +
'groovy.bugs.Groovy3139Bug,groovy.bugs.Get2,groovy.bugs.Groovy3511Bug,' +
'org.codehaus.groovy.tools.LoaderConfigurationTest'
}
'UnusedPrivateField' {
doNotApplyToClassNames='gls.annotations.closures.CallOnOwner,gls.annotations.closures.CallOnThisObject,' +
'gls.annotations.closures.UnqualifiedCall,gls.annotations.closures.ClosureWithParameters,' +
'gls.annotations.closures.JavaCompatibility,gls.annotations.closures.JavaCompatibilityParameterized,' +
'groovy.Foo,groovy.Singlet'
}
'UnusedPrivateMethod' {
doNotApplyToClassNames='org.codehaus.groovy.ast.builder.AstBuilder,org.codehaus.groovy.ast.builder.AstSpecificationCompiler,' +
'StringMethodName,Foo'
}
'UnusedPrivateMethodParameter' {
doNotApplyToClassNames='CurryFoo4170,AssertionRenderingTest'
}
'UnusedObject' {
doNotApplyToClassNames='groovy.ui.OutputTransforms,org.codehaus.groovy.ast.builder.AstSpecificationCompiler,groovy.lang.GroovyCodeSourceTest'
}
}
ruleset('rulesets/imports.xml') {
'UnnecessaryGroovyImport' {
doNotApplyToFileNames='JListProperties.groovy,GridBagFactory.groovy,Groovy558_616_Bug.groovy'
}
'DuplicateImport' {
doNotApplyToFileNames='StaticImportTest.groovy,'
}
exclude 'ImportFromSamePackage' // too many to worry about, review later
exclude 'UnusedImport' // currently failing
exclude 'MisorderedStaticImports' // too many to worry about, opposite to IDEA default
}
ruleset('rulesets/logging.xml') {
exclude 'SystemOutPrint' // too many to worry about, review later
exclude 'SystemErrPrint' // too many to worry about, review later
'Println' {
doNotApplyToFileNames='genArrayAccess.groovy,genArrayUtil.groovy,genDgmMath.groovy,genMathModification.groovy,'
}
}
ruleset('rulesets/braces.xml') {
exclude 'ForStatementBraces' // for statements without braces seems acceptable in our coding standards
exclude 'IfStatementBraces' // if statements without braces seems acceptable in our coding standards
exclude 'WhileStatementBraces' // while statements without braces seems acceptable in our coding standards
exclude 'ElseBlockBraces' // else statements without braces seems acceptable in our coding standards
}
ruleset('rulesets/basic.xml') {
'DeadCode' {
doNotApplyToClassNames='ThrowTest'
}
}
ruleset('rulesets/size.xml') {
exclude 'CyclomaticComplexity' // too many to worry about, review later
exclude 'AbcMetric' // too many to worry about, review later
exclude 'MethodSize' // too many to worry about, review later
exclude 'MethodCount' // too many to worry about, review later
exclude 'ClassSize' // too many to worry about, review later
exclude 'MethodSizeCount' // too many to worry about, review later
exclude 'NestedBlockDepth' // too many to worry about, review later
}
ruleset('rulesets/junit.xml') {
exclude 'JUnitStyleAssertions' // too many to worry about, review later
exclude 'JUnitTestMethodWithoutAssert' // too many to worry about, review later
exclude 'JUnitLostTest' //we do not use the @Test annotation, so it is o.k. to use JUnit 4 classes and have test* Methods without this annotation
}
ruleset('rulesets/concurrency.xml') {
exclude 'SynchronizedMethod' // OK within Groovy
exclude 'WaitOutsideOfWhileLoop' // too many to worry about, review later
exclude 'SynchronizedOnThis' // too many to worry about, review later
}
ruleset('rulesets/unnecessary.xml') {
'UnnecessaryInstantiationToGetClass' {
doNotApplyToClassNames='SpreadDotTest'
}
'ConsecutiveStringConcatenation' {
doNotApplyToClassNames='groovy.DynamicMemberTest,groovy.StaticImportTest,groovy.bugs.Groovy675_Bug,groovy.bugs.MorgansBug,' +
'groovy.bugs.WriteOnlyPropertyBug,groovy.operator.StringOperatorsTest,groovy.swing.SwingBuilderTest,' +
'org.codehaus.groovy.runtime.powerassert.EvaluationTest,groovy.json.JsonLexerTest'
}
'ConsecutiveLiteralAppends' {
doNotApplyToClassNames='groovy.bugs.ByteIndexBug'
}
exclude 'UnnecessaryPackageReference' // failing for all scripts
}
ruleset('rulesets/dry.xml') {
exclude 'DuplicateNumberLiteral' // too many to worry about, review later
exclude 'DuplicateStringLiteral' // too many to worry about, review later
}
ruleset('rulesets/design.xml') {
'CloseWithoutCloseable' {
doNotApplyToClassNames='Log4jInterceptingAppender'
}
exclude 'EmptyMethodInAbstractClass' // too many to worry about, review later
exclude 'ImplementationAsType' // too many to worry about, review later
exclude 'AbstractClassWithoutAbstractMethod' // too many to worry about, review later
exclude 'ConstantsOnlyInterface' // too many to worry about, review later
exclude 'FinalClassWithProtectedMember' // too many to worry about, review later
}
ruleset('rulesets/exceptions.xml') {
exclude 'ThrowRuntimeException' // too many to worry about, review later
exclude 'ThrowException' // too many to worry about, review later
exclude 'CatchThrowable' // too many to worry about, review later
exclude 'CatchException' // too many to worry about, review later
exclude 'CatchRuntimeException' // too many to worry about, review later
exclude 'CatchNullPointerException' // too many to worry about, review later
exclude 'ReturnNullFromCatchBlock' // too many to worry about, review later
exclude 'ThrowNullPointerException' // too many to worry about, review later
exclude 'CatchIllegalMonitorStateException' // too many to worry about, review later
exclude 'CatchError' // too many to worry about, review later
exclude 'ExceptionExtendsError' // too many to worry about, review later
exclude 'ThrowError' // too many to worry about, review later
}
}