diff --git a/build.gradle b/build.gradle index b6f17db5a..47097ccf5 100644 --- a/build.gradle +++ b/build.gradle @@ -16,7 +16,7 @@ plugins { id 'org.jetbrains.kotlin.plugin.allopen' version '1.3.72' id "org.jlleitschuh.gradle.ktlint" version "9.4.0" id "org.jlleitschuh.gradle.ktlint-idea" version "9.4.0" - id "io.gitlab.arturbosch.detekt" version "1.0.0" + id "io.gitlab.arturbosch.detekt" version "1.13.1" } apply plugin: 'io.codearte.nexus-staging' @@ -131,9 +131,10 @@ subprojects { } detekt { - toolVersion = "1.0.0" + toolVersion = "1.13.1" input = files("src/main/kotlin", "src/test/kotlin") - config = files("$rootDir/config/detekt/default-detekt-config.yml", "$rootDir/config/detekt/detekt-config.yml") + config = files("$rootDir/config/detekt/detekt.yml") + buildUponDefaultConfig = true } } diff --git a/config/detekt/default-detekt-config.yml b/config/detekt/default-detekt-config.yml deleted file mode 100644 index 761ffb861..000000000 --- a/config/detekt/default-detekt-config.yml +++ /dev/null @@ -1,518 +0,0 @@ -autoCorrect: true -failFast: false - -test-pattern: # Configure exclusions for test sources - active: true - patterns: # Test file regexes - - '.*/test/.*' - - '.*Test.kt' - - '.*TestBase.kt' - - '.*TestConfiguration.kt' - - '.*Spec.kt' - - '.*Container.kt' - - '.*Assertions.kt' - - '.*Extension.kt' - - '.*Operations.kt' - exclude-rule-sets: - - 'comments' - exclude-rules: - - 'NamingRules' - - 'WildcardImport' - - 'MagicNumber' - - 'MaxLineLength' - - 'LateinitUsage' - - 'StringLiteralDuplication' - - 'SpreadOperator' - - 'TooManyFunctions' - - 'ForEachOnRange' - - 'FunctionMaxLength' - - 'TooGenericExceptionCaught' - -build: - maxIssues: 10 - weights: - # complexity: 2 - # LongParameterList: 1 - # style: 1 - # comments: 1 - -processors: - active: true - exclude: - # - 'FunctionCountProcessor' - # - 'PropertyCountProcessor' - # - 'ClassCountProcessor' - # - 'PackageCountProcessor' - # - 'KtFileCountProcessor' - -console-reports: - active: true - exclude: - # - 'ProjectStatisticsReport' - # - 'ComplexityReport' - # - 'NotificationReport' - # - 'FindingsReport' - # - 'BuildFailureReport' - -comments: - active: true - CommentOverPrivateFunction: - active: false - CommentOverPrivateProperty: - active: false - EndOfSentenceFormat: - active: false - endOfSentenceFormat: ([.?!][ \t\n\r\f<])|([.?!]$) - UndocumentedPublicClass: - active: false - searchInNestedClass: true - searchInInnerClass: true - searchInInnerObject: true - searchInInnerInterface: true - UndocumentedPublicFunction: - active: false - -complexity: - active: true - ComplexCondition: - active: true - threshold: 4 - ComplexInterface: - active: false - threshold: 10 - includeStaticDeclarations: false - ComplexMethod: - active: true - threshold: 10 - ignoreSingleWhenExpression: false - ignoreSimpleWhenEntries: false - LabeledExpression: - active: false - LargeClass: - active: true - threshold: 150 - LongMethod: - active: true - threshold: 20 - LongParameterList: - active: true - threshold: 6 - ignoreDefaultParameters: false - MethodOverloading: - active: false - threshold: 6 - NestedBlockDepth: - active: true - threshold: 4 - StringLiteralDuplication: - active: false - threshold: 3 - ignoreAnnotation: true - excludeStringsWithLessThan5Characters: true - ignoreStringsRegex: '$^' - TooManyFunctions: - active: true - thresholdInFiles: 11 - thresholdInClasses: 11 - thresholdInInterfaces: 11 - thresholdInObjects: 11 - thresholdInEnums: 11 - ignoreDeprecated: false - ignorePrivate: false - -empty-blocks: - active: true - EmptyCatchBlock: - active: true - allowedExceptionNameRegex: "^(_|(ignore|expected).*)" - EmptyClassBlock: - active: true - EmptyDefaultConstructor: - active: true - EmptyDoWhileBlock: - active: true - EmptyElseBlock: - active: true - EmptyFinallyBlock: - active: true - EmptyForBlock: - active: true - EmptyFunctionBlock: - active: true - ignoreOverriddenFunctions: false - EmptyIfBlock: - active: true - EmptyInitBlock: - active: true - EmptyKtFile: - active: true - EmptySecondaryConstructor: - active: true - EmptyWhenBlock: - active: true - EmptyWhileBlock: - active: true - -exceptions: - active: true - ExceptionRaisedInUnexpectedLocation: - active: false - methodNames: 'toString,hashCode,equals,finalize' - InstanceOfCheckForException: - active: false - NotImplementedDeclaration: - active: false - PrintStackTrace: - active: false - RethrowCaughtException: - active: false - ReturnFromFinally: - active: false - SwallowedException: - active: false - ThrowingExceptionFromFinally: - active: false - ThrowingExceptionInMain: - active: false - ThrowingExceptionsWithoutMessageOrCause: - active: false - exceptions: 'IllegalArgumentException,IllegalStateException,IOException' - ThrowingNewInstanceOfSameException: - active: false - TooGenericExceptionCaught: - active: true - exceptionNames: - - ArrayIndexOutOfBoundsException - - Error - - Exception - - IllegalMonitorStateException - - NullPointerException - - IndexOutOfBoundsException - - RuntimeException - - Throwable - allowedExceptionNameRegex: "^(_|(ignore|expected).*)" - TooGenericExceptionThrown: - active: true - exceptionNames: - - Error - - Exception - - Throwable - - RuntimeException - -formatting: - active: true - android: false - autoCorrect: true - ChainWrapping: - active: true - autoCorrect: true - CommentSpacing: - active: true - autoCorrect: true - Filename: - active: true - FinalNewline: - active: true - autoCorrect: true - ImportOrdering: - active: true - autoCorrect: true - Indentation: - active: true - autoCorrect: true - indentSize: 4 - continuationIndentSize: 4 - MaximumLineLength: - active: true - maxLineLength: 120 - ModifierOrdering: - active: true - autoCorrect: true - NoBlankLineBeforeRbrace: - active: true - autoCorrect: true - NoConsecutiveBlankLines: - active: true - autoCorrect: true - NoEmptyClassBody: - active: true - autoCorrect: true - NoItParamInMultilineLambda: - active: true - NoLineBreakAfterElse: - active: true - autoCorrect: true - NoLineBreakBeforeAssignment: - active: true - autoCorrect: true - NoMultipleSpaces: - active: true - autoCorrect: true - NoSemicolons: - active: true - autoCorrect: true - NoTrailingSpaces: - active: true - autoCorrect: true - NoUnitReturn: - active: true - autoCorrect: true - NoUnusedImports: - active: true - autoCorrect: true - NoWildcardImports: - active: true - autoCorrect: true - PackageName: - active: true - autoCorrect: true - ParameterListWrapping: - active: true - autoCorrect: true - indentSize: 4 - SpacingAroundColon: - active: true - autoCorrect: true - SpacingAroundComma: - active: true - autoCorrect: true - SpacingAroundCurly: - active: true - autoCorrect: true - SpacingAroundKeyword: - active: true - autoCorrect: true - SpacingAroundOperators: - active: true - autoCorrect: true - SpacingAroundParens: - active: true - autoCorrect: true - SpacingAroundRangeOperator: - active: true - autoCorrect: true - StringTemplate: - active: true - autoCorrect: true - -naming: - active: true - ClassNaming: - active: true - classPattern: '[A-Z$][a-zA-Z0-9$]*' - ConstructorParameterNaming: - active: true - parameterPattern: '[a-z][A-Za-z0-9]*' - privateParameterPattern: '[a-z][A-Za-z0-9]*' - excludeClassPattern: '$^' - EnumNaming: - active: true - enumEntryPattern: '^[A-Z][_a-zA-Z0-9]*' - ForbiddenClassName: - active: false - forbiddenName: '' - FunctionMaxLength: - active: false - maximumFunctionNameLength: 30 - FunctionMinLength: - active: false - minimumFunctionNameLength: 3 - FunctionNaming: - active: true - functionPattern: '^([a-z$][a-zA-Z$0-9]*)|(`.*`)$' - excludeClassPattern: '$^' - ignoreOverridden: true - FunctionParameterNaming: - active: true - parameterPattern: '[a-z][A-Za-z0-9]*' - excludeClassPattern: '$^' - ignoreOverriddenFunctions: true - MatchingDeclarationName: - active: true - MemberNameEqualsClassName: - active: false - ignoreOverriddenFunction: true - ObjectPropertyNaming: - active: true - constantPattern: '[A-Za-z][_A-Za-z0-9]*' - propertyPattern: '[A-Za-z][_A-Za-z0-9]*' - privatePropertyPattern: '(_)?[A-Za-z][_A-Za-z0-9]*' - PackageNaming: - active: true - packagePattern: '^[a-z]+(\.[a-z][a-z0-9]*)*$' - TopLevelPropertyNaming: - active: true - constantPattern: '[A-Z][_A-Z0-9]*' - propertyPattern: '[A-Za-z][_A-Za-z0-9]*' - privatePropertyPattern: '(_)?[A-Za-z][A-Za-z0-9]*' - VariableMaxLength: - active: false - maximumVariableNameLength: 64 - VariableMinLength: - active: false - minimumVariableNameLength: 1 - VariableNaming: - active: true - variablePattern: '[a-z][A-Za-z0-9]*' - privateVariablePattern: '(_)?[a-z][A-Za-z0-9]*' - excludeClassPattern: '$^' - ignoreOverridden: true - -performance: - active: true - ArrayPrimitive: - active: false - ForEachOnRange: - active: true - SpreadOperator: - active: true - UnnecessaryTemporaryInstantiation: - active: true - -potential-bugs: - active: true - DuplicateCaseInWhenExpression: - active: true - EqualsAlwaysReturnsTrueOrFalse: - active: false - EqualsWithHashCodeExist: - active: true - ExplicitGarbageCollectionCall: - active: true - InvalidRange: - active: false - IteratorHasNextCallsNextMethod: - active: false - IteratorNotThrowingNoSuchElementException: - active: false - LateinitUsage: - active: false - excludeAnnotatedProperties: "" - ignoreOnClassesPattern: "" - UnconditionalJumpStatementInLoop: - active: false - UnreachableCode: - active: true - UnsafeCallOnNullableType: - active: false - UnsafeCast: - active: false - UselessPostfixExpression: - active: false - WrongEqualsTypeParameter: - active: false - -style: - active: true - CollapsibleIfStatements: - active: false - DataClassContainsFunctions: - active: false - conversionFunctionPrefix: 'to' - EqualsNullCall: - active: false - ExplicitItLambdaParameter: - active: false - ExpressionBodySyntax: - active: false - includeLineWrapping: false - ForbiddenComment: - active: true - values: 'TODO:,FIXME:,STOPSHIP:' - ForbiddenImport: - active: false - imports: '' - ForbiddenVoid: - active: false - FunctionOnlyReturningConstant: - active: true - ignoreOverridableFunction: true - excludedFunctions: 'describeContents' - LoopWithTooManyJumpStatements: - active: false - maxJumpCount: 1 - MagicNumber: - active: true - ignoreNumbers: '-1,0,1,2' - ignoreHashCodeFunction: true - ignorePropertyDeclaration: false - ignoreConstantDeclaration: true - ignoreCompanionObjectPropertyDeclaration: true - ignoreAnnotation: false - ignoreNamedArgument: true - ignoreEnums: false - MandatoryBracesIfStatements: - active: false - MaxLineLength: - active: true - maxLineLength: 120 - excludePackageStatements: true - excludeImportStatements: true - excludeCommentStatements: false - MayBeConst: - active: false - ModifierOrder: - active: true - NestedClassesVisibility: - active: false - NewLineAtEndOfFile: - active: true - NoTabs: - active: false - OptionalAbstractKeyword: - active: true - OptionalUnit: - active: false - OptionalWhenBraces: - active: false - PreferToOverPairSyntax: - active: false - ProtectedMemberInFinalClass: - active: false - RedundantVisibilityModifierRule: - active: false - ReturnCount: - active: true - max: 2 - excludedFunctions: "equals" - SafeCast: - active: true - SerialVersionUIDInSerializableClass: - active: false - SpacingBetweenPackageAndImports: - active: false - ThrowsCount: - active: true - max: 2 - TrailingWhitespace: - active: false - UnnecessaryAbstractClass: - active: false - excludeAnnotatedClasses: "dagger.Module" - UnnecessaryApply: - active: false - UnnecessaryInheritance: - active: false - UnnecessaryLet: - active: false - UnnecessaryParentheses: - active: false - UntilInsteadOfRangeTo: - active: false - UnusedImports: - active: false - UnusedPrivateClass: - active: false - UnusedPrivateMember: - active: false - allowedNames: "(_|ignored|expected|serialVersionUID)" - UseDataClass: - active: false - excludeAnnotatedClasses: "" - UtilityClassWithPublicConstructor: - active: false - VarCouldBeVal: - active: false - WildcardImport: - active: true - excludeImports: 'java.util.*,kotlinx.android.synthetic.*' diff --git a/config/detekt/detekt-config.yml b/config/detekt/detekt.yml similarity index 54% rename from config/detekt/detekt-config.yml rename to config/detekt/detekt.yml index 444e3fd7d..128f7858c 100644 --- a/config/detekt/detekt-config.yml +++ b/config/detekt/detekt.yml @@ -6,6 +6,9 @@ complexity: active: false LongParameterList: ignoreDefaultParameters: true + constructorThreshold: 9 + LongMethod: + threshold: 120 exceptions: active: true @@ -47,23 +50,12 @@ potential-bugs: active: true style: - excludes: - - "**/resources/**" - - "**/build/**" - - '**/test/**' - - '**Test.kt' - - '**TestBase.kt' - - '**TestConfiguration.kt' - - '**Spec.kt' - - '**Container.kt' - - '**Assertions.kt' - - '**Extension.kt' - - '**Operations.kt' ForbiddenComment: active: false # we want to be able to write todo comments MagicNumber: ignoreAnnotation: true ignoreNumbers: '-1,0,1,2,3' + excludes: [ "**/resources/**","**/build/**", '**/test/**', '**/**Test.kt', '**TestBase.kt', '**TestConfiguration.kt','**/**Spec.kt','**Container.kt', '**Assertions.kt', '**Extension.kt', '**Operations.kt' ] FunctionOnlyReturningConstant: active: true PreferToOverPairSyntax: @@ -88,3 +80,16 @@ style: active: true MandatoryBracesIfStatements: active: true + excludes: [ "**/resources/**","**/build/**", '**/test/**', '**/**Test.kt', '**TestBase.kt', '**TestConfiguration.kt','**/**Spec.kt','**Container.kt', '**Assertions.kt', '**Extension.kt', '**Operations.kt' ] + MaxLineLength: + excludes: [ "**/resources/**","**/build/**", '**/test/**', '**/**Test.kt', '**TestBase.kt', '**TestConfiguration.kt','**/**Spec.kt','**Container.kt', '**Assertions.kt', '**Extension.kt', '**Operations.kt' ] + UtilityClassWithPublicConstructor: + excludes: [ "**/resources/**","**/build/**", '**/test/**', '**/**Test.kt', '**TestBase.kt', '**TestConfiguration.kt','**/**Spec.kt','**Container.kt', '**Assertions.kt', '**Extension.kt', '**Operations.kt' ] + +empty-blocks: + EmptyFunctionBlock: + excludes: [ "**/resources/**","**/build/**", '**/test/**', '**/**Test.kt', '**TestBase.kt', '**TestConfiguration.kt','**/**Spec.kt','**Container.kt', '**Assertions.kt', '**Extension.kt', '**Operations.kt', "**/NodeMetadataValidator.kt" ] + +naming: + VariableNaming: + excludes: [ "**/envoy-control-tests/**" ] diff --git a/envoy-control-core/src/main/kotlin/pl/allegro/tech/servicemesh/envoycontrol/groups/NodeMetadata.kt b/envoy-control-core/src/main/kotlin/pl/allegro/tech/servicemesh/envoycontrol/groups/NodeMetadata.kt index 1cc1ec179..2baa7243f 100644 --- a/envoy-control-core/src/main/kotlin/pl/allegro/tech/servicemesh/envoycontrol/groups/NodeMetadata.kt +++ b/envoy-control-core/src/main/kotlin/pl/allegro/tech/servicemesh/envoycontrol/groups/NodeMetadata.kt @@ -154,11 +154,13 @@ private fun Value?.toSettings(defaultSettings: DependencySettings): DependencySe return if (handleInternalRedirect == null && rewriteHostHeader == null && timeoutPolicy == null) { defaultSettings - } else DependencySettings( - handleInternalRedirect ?: defaultSettings.handleInternalRedirect, - timeoutPolicy ?: defaultSettings.timeoutPolicy, - rewriteHostHeader ?: defaultSettings.rewriteHostHeader - ) + } else { + DependencySettings( + handleInternalRedirect ?: defaultSettings.handleInternalRedirect, + timeoutPolicy ?: defaultSettings.timeoutPolicy, + rewriteHostHeader ?: defaultSettings.rewriteHostHeader + ) + } } fun Value?.toIncoming(): Incoming { diff --git a/envoy-control-core/src/main/kotlin/pl/allegro/tech/servicemesh/envoycontrol/protocol/TlsUtils.kt b/envoy-control-core/src/main/kotlin/pl/allegro/tech/servicemesh/envoycontrol/protocol/TlsUtils.kt index 9dd4686d8..601cdd8bd 100644 --- a/envoy-control-core/src/main/kotlin/pl/allegro/tech/servicemesh/envoycontrol/protocol/TlsUtils.kt +++ b/envoy-control-core/src/main/kotlin/pl/allegro/tech/servicemesh/envoycontrol/protocol/TlsUtils.kt @@ -1,6 +1,6 @@ package pl.allegro.tech.servicemesh.envoycontrol.protocol -class TlsUtils { +class TlsUtils private constructor() { companion object { fun resolveSanUri(serviceName: String, format: String): String { return format.replace("{service-name}", serviceName) diff --git a/envoy-control-core/src/main/kotlin/pl/allegro/tech/servicemesh/envoycontrol/snapshot/resource/listeners/filters/ServiceTagFilter.kt b/envoy-control-core/src/main/kotlin/pl/allegro/tech/servicemesh/envoycontrol/snapshot/resource/listeners/filters/ServiceTagFilter.kt index d337db9eb..892f6e57d 100644 --- a/envoy-control-core/src/main/kotlin/pl/allegro/tech/servicemesh/envoycontrol/snapshot/resource/listeners/filters/ServiceTagFilter.kt +++ b/envoy-control-core/src/main/kotlin/pl/allegro/tech/servicemesh/envoycontrol/snapshot/resource/listeners/filters/ServiceTagFilter.kt @@ -2,7 +2,7 @@ package pl.allegro.tech.servicemesh.envoycontrol.snapshot.resource.listeners.fil import io.envoyproxy.envoy.config.filter.http.header_to_metadata.v2.Config -class ServiceTagFilter { +class ServiceTagFilter private constructor() { companion object { fun serviceTagFilterRules( header: String, diff --git a/envoy-control-tests/src/main/kotlin/pl/allegro/tech/servicemesh/envoycontrol/reliability/Toxiproxy.kt b/envoy-control-tests/src/main/kotlin/pl/allegro/tech/servicemesh/envoycontrol/reliability/Toxiproxy.kt index 578f872b5..8b2b317c6 100644 --- a/envoy-control-tests/src/main/kotlin/pl/allegro/tech/servicemesh/envoycontrol/reliability/Toxiproxy.kt +++ b/envoy-control-tests/src/main/kotlin/pl/allegro/tech/servicemesh/envoycontrol/reliability/Toxiproxy.kt @@ -10,7 +10,7 @@ import pl.allegro.tech.servicemesh.envoycontrol.config.containers.ToxiproxyConta import pl.allegro.tech.servicemesh.envoycontrol.config.testcontainers.GenericContainer.Companion.allInterfaces @Testcontainers -internal class Toxiproxy { +internal class Toxiproxy private constructor() { companion object { val toxiproxyGrpcPort = Ports.nextAvailable() val toxiproxyGrpcPort2 = Ports.nextAvailable()