代码之家  ›  专栏  ›  技术社区  ›  Christopher

Detekt:自动更正功能不起作用

  •  0
  • Christopher  · 技术社区  · 5 年前

    我已经包括了detekt( https://github.com/arturbosch/detekt/ )在我的项目中:

    根构建.gradle

    buildscript {
        ext.kotlin_version = '1.3.50'
        ext.detekt_version = "1.0.1"
        repositories {
            google()
            jcenter()
        }
        dependencies {
            classpath 'com.android.tools.build:gradle:3.5.0'
            classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
            classpath "io.gitlab.arturbosch.detekt:detekt-gradle-plugin:$detekt_version"
        }
    }
    
    plugins {
        id("io.gitlab.arturbosch.detekt").version("1.0.1")
    }
    

    应用程序build.gradle

    apply plugin: 'com.android.application'
    apply plugin: 'kotlin-android'
    apply plugin: 'kotlin-android-extensions'
    apply plugin: 'kotlin-kapt'
    apply plugin: 'io.gitlab.arturbosch.detekt'
    

    安卓{ }

    dependencies {
        implementation fileTree(dir: 'libs', include: ['*.jar'])
        implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
        // ... other dependencies
    
        detekt "io.gitlab.arturbosch.detekt:detekt-formatting:$detekt_version"
        detekt("io.gitlab.arturbosch.detekt:detekt-cli:$detekt_version")
    
    }
    
    detekt {
        toolVersion = "$detekt_version"
        input = files("src/main/java")
        filters = ".*/resources/.*,.*/build/.*"
        config = files("../detekt/detekt-config.yml")
        reports {
            xml {
                enabled = true
            }
            html {
                enabled = true
            }
        }
    }
    

    规则文件 ../detekt/detekt-config.yml

    autoCorrect: true
    
    test-pattern: # Configure exclusions for test sources
      active: true
      patterns: # Test file regexes
      - '.*/test/.*'
      - '.*/androidTest/.*'
      - '.*Test.kt'
      - '.*Spec.kt'
      - '.*Spek.kt'
      exclude-rule-sets:
      - 'comments'
      exclude-rules:
      - 'NamingRules'
      - 'WildcardImport'
      - 'MagicNumber'
      - 'MaxLineLength'
      - 'LateinitUsage'
      - 'StringLiteralDuplication'
      - 'SpreadOperator'
      - 'TooManyFunctions'
      - 'ForEachOnRange'
      - 'FunctionMaxLength'
      - 'TooGenericExceptionCaught'
      - 'InstanceOfCheckForException'
    
    build:
      maxIssues: 100
      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
        ignoredLabels: ""
      LargeClass:
        active: true
        threshold: 600
      LongMethod:
        active: true
        threshold: 60
      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
        ignoreOverridden: 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
        ignoredExceptionTypes: 'InterruptedException,NumberFormatException,ParseException,MalformedURLException'
      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: false
      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: false
      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-Za-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
      EqualsOnSignatureLine:
        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: false
        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"
        excludeLabeled: false
        excludeReturnFromLambda: true
      SafeCast:
        active: true
      SerialVersionUIDInSerializableClass:
        active: false
      SpacingBetweenPackageAndImports:
        active: false
      ThrowsCount:
        active: true
        max: 2
      TrailingWhitespace:
        active: false
      UnderscoresInNumericLiterals:
        active: false
        acceptableDecimalLength: 5
      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.*'
    

    尽管我设置了一些带有属性的规则 autoCorrect: true 当我执行时,代码没有重新格式化

    ./gradlew detekt
    

    创建分析报告并显示问题,但未进行自动更正。

    1 回复  |  直到 5 年前
        1
  •  0
  •   Christopher    5 年前

    带1.0 RC15 autoCorrect 需要在渐变属性中启用:

    detekt {
        toolVersion = "$detekt_version"
        input = files("src/main/java")
        filters = ".*/resources/.*,.*/build/.*"
        config = files("../detekt/detekt-config.yml")
        autoCorrect = true
        reports {
            xml {
                enabled = true
            }
            html {
                enabled = true
            }
        }
    }
    

    https://arturbosch.github.io/detekt/changelog-rc.html#rc15

    Cli/Gradle插件:yaml配置中的自动更正已删除。请使用--auto correct cli标志或autoCorrect detekt扩展名 Gradle插件中的属性。

    推荐文章