From f164cecdf24ef6405553c9e67e6dcec3993cd0e2 Mon Sep 17 00:00:00 2001 From: Jeroen Engels Date: Mon, 17 Oct 2022 23:56:38 +0200 Subject: [PATCH] Fail the test if the rule provides fixes but doesn't say it is fixable --- src/Review/Test.elm | 8 ++++++-- src/Review/Test/FailureMessage.elm | 13 +++++++++++-- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/Review/Test.elm b/src/Review/Test.elm index 784ef346..b0d04008 100644 --- a/src/Review/Test.elm +++ b/src/Review/Test.elm @@ -1483,7 +1483,7 @@ checkDetailsAreCorrect error_ (ExpectedError expectedError) = checkFixesAreCorrect : RuleCanProvideFixes -> CodeInspector -> ReviewError -> ExpectedError -> Expectation -checkFixesAreCorrect ruleCanProvideFixes codeInspector ((Error.ReviewError err) as error_) ((ExpectedError expectedError_) as expectedError) = +checkFixesAreCorrect (RuleCanProvideFixes ruleCanProvideFixes) codeInspector ((Error.ReviewError err) as error_) ((ExpectedError expectedError_) as expectedError) = case ( expectedError_.fixedSource, err.fixes ) of ( Nothing, Nothing ) -> Expect.pass @@ -1500,7 +1500,11 @@ checkFixesAreCorrect ruleCanProvideFixes codeInspector ((Error.ReviewError err) case Fix.fix err.target fixes codeInspector.source of Fix.Successful fixedSource -> if fixedSource == expectedFixedSource then - Expect.pass + if ruleCanProvideFixes then + Expect.pass + + else + Expect.fail FailureMessage.ruleNotMarkedAsFixableError else if removeWhitespace fixedSource == removeWhitespace expectedFixedSource then Expect.fail <| FailureMessage.fixedCodeWhitespaceMismatch fixedSource expectedFixedSource error_ diff --git a/src/Review/Test/FailureMessage.elm b/src/Review/Test/FailureMessage.elm index bb28a3e5..00f77a95 100644 --- a/src/Review/Test/FailureMessage.elm +++ b/src/Review/Test/FailureMessage.elm @@ -3,7 +3,7 @@ module Review.Test.FailureMessage exposing , parsingFailure, globalErrorInTest, messageMismatch, emptyDetails, unexpectedDetails, wrongLocation, didNotExpectErrors , underMismatch, expectedMoreErrors, tooManyErrors, locationNotFound, underMayNotBeEmpty, locationIsAmbiguousInSourceCode , needToUsedExpectErrorsForModules, missingSources, duplicateModuleName, unknownModulesInExpectedErrors - , missingFixes, unexpectedFixes, fixedCodeMismatch, unchangedSourceAfterFix, invalidSourceAfterFix, hasCollisionsInFixRanges + , missingFixes, unexpectedFixes, fixedCodeMismatch, unchangedSourceAfterFix, invalidSourceAfterFix, hasCollisionsInFixRanges, ruleNotMarkedAsFixableError , didNotExpectGlobalErrors, expectedMoreGlobalErrors, fixedCodeWhitespaceMismatch, messageMismatchForConfigurationError , messageMismatchForGlobalError, missingConfigurationError, tooManyGlobalErrors , unexpectedConfigurationError, unexpectedConfigurationErrorDetails, unexpectedGlobalErrorDetails @@ -19,7 +19,7 @@ module Review.Test.FailureMessage exposing @docs parsingFailure, globalErrorInTest, messageMismatch, emptyDetails, unexpectedDetails, wrongLocation, didNotExpectErrors @docs underMismatch, expectedMoreErrors, tooManyErrors, locationNotFound, underMayNotBeEmpty, locationIsAmbiguousInSourceCode @docs needToUsedExpectErrorsForModules, missingSources, duplicateModuleName, unknownModulesInExpectedErrors -@docs missingFixes, unexpectedFixes, fixedCodeMismatch, unchangedSourceAfterFix, invalidSourceAfterFix, hasCollisionsInFixRanges +@docs missingFixes, unexpectedFixes, fixedCodeMismatch, unchangedSourceAfterFix, invalidSourceAfterFix, hasCollisionsInFixRanges, ruleNotMarkedAsFixableError @docs didNotExpectGlobalErrors, expectedMoreGlobalErrors, fixedCodeWhitespaceMismatch, messageMismatchForConfigurationError @docs messageMismatchForGlobalError, missingConfigurationError, tooManyGlobalErrors @docs unexpectedConfigurationError, unexpectedConfigurationErrorDetails, unexpectedGlobalErrorDetails @@ -619,6 +619,15 @@ Hint: Maybe you duplicated a fix, or you targeted the wrong node for one of your fixes.""") +ruleNotMarkedAsFixableError : String +ruleNotMarkedAsFixableError = + failureMessage "RULE WAS NOT MARKED AS FIXABLE" + """I expected that the rule would use either +`Rule.providesFixesForModuleRule` or `providesFixesForProjectRule` to +indicate that it may provide fixes. This is valuable for improving the +performance of running `elm-review` in fix mode.""" + + unexpectedConfigurationError : { message : String, details : List String } -> String unexpectedConfigurationError error = failureMessage "UNEXPECTED CONFIGURATION ERROR"