From a67ff9f6b8db87af3f7ef7086d03826e7a9de608 Mon Sep 17 00:00:00 2001 From: Jeroen Engels Date: Wed, 3 Jul 2019 14:45:05 +0200 Subject: [PATCH] Allow the configuration of the rules in the example --- example/Main.elm | 174 ++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 148 insertions(+), 26 deletions(-) diff --git a/example/Main.elm b/example/Main.elm index 1d6ba250..5bb30aac 100644 --- a/example/Main.elm +++ b/example/Main.elm @@ -2,11 +2,11 @@ module Main exposing (main) import Browser import Html exposing (..) -import Html.Attributes exposing (class, id, style) -import Html.Events exposing (onInput) +import Html.Attributes as Attr +import Html.Events as Events import Lint exposing (LintError, Severity(..), lintSource) import Lint.Rule exposing (Rule) -import Lint.Rule.DefaultPatternPosition as DefaultPatternPosition +import Lint.Rule.DefaultPatternPosition as DefaultPatternPosition exposing (PatternPosition) import Lint.Rule.NoDebug import Lint.Rule.NoExtraBooleanComparison import Lint.Rule.NoImportingEverything @@ -17,13 +17,13 @@ import Lint.Rule.NoUnusedVariables -- LINT CONFIGURATION -config : List ( Severity, Rule ) -config = - [ ( Critical, Lint.Rule.NoDebug.rule ) - , ( Critical, Lint.Rule.NoUnusedVariables.rule ) - , ( Critical, Lint.Rule.NoImportingEverything.rule { exceptions = [ "Html" ] } ) - , ( Critical, DefaultPatternPosition.rule DefaultPatternPosition.ShouldBeLast ) - , ( Critical, Lint.Rule.NoExtraBooleanComparison.rule ) +config : Model -> List ( Severity, Rule ) +config model = + [ ( model.noDebugEnabled, ( Critical, Lint.Rule.NoDebug.rule ) ) + , ( model.noUnusedVariablesEnabled, ( Critical, Lint.Rule.NoUnusedVariables.rule ) ) + , ( model.noImportingEverythingEnabled, ( Critical, Lint.Rule.NoImportingEverything.rule { exceptions = [ "Html" ] } ) ) + , ( model.defaultPatternPositionEnabled, ( Critical, DefaultPatternPosition.rule model.defaultPatternPositionPattern ) ) + , ( model.noExtraBooleanComparisonEnabled, ( Critical, Lint.Rule.NoExtraBooleanComparison.rule ) ) -- , ( Critical, Lint.Rule.NoConstantCondition.rule ) -- , ( Critical, Lint.Rule.NoDuplicateImports.rule ) @@ -37,6 +37,14 @@ config = -- , ( Critical, Lint.Rule.SimplifyPropertyAccess.rule ) -- , ( Critical, Lint.Rule.ElmTest.NoDuplicateTestBodies.rule ) ] + |> List.filterMap + (\( bool, ruleAndConfig ) -> + if bool then + Just ruleAndConfig + + else + Nothing + ) @@ -46,6 +54,12 @@ config = type alias Model = { sourceCode : String , lintResult : Result (List String) (List ( Severity, LintError )) + , noDebugEnabled : Bool + , noUnusedVariablesEnabled : Bool + , noImportingEverythingEnabled : Bool + , defaultPatternPositionEnabled : Bool + , defaultPatternPositionPattern : PatternPosition + , noExtraBooleanComparisonEnabled : Bool } @@ -66,10 +80,20 @@ f x = x Debug.log 1 g n = n + 1 """ + + tmpModel : Model + tmpModel = + { sourceCode = sourceCode + , lintResult = Result.Ok [] + , noDebugEnabled = True + , noUnusedVariablesEnabled = True + , noImportingEverythingEnabled = True + , defaultPatternPositionEnabled = True + , defaultPatternPositionPattern = DefaultPatternPosition.ShouldBeLast + , noExtraBooleanComparisonEnabled = True + } in - { sourceCode = sourceCode - , lintResult = lintSource config sourceCode - } + { tmpModel | lintResult = lintSource (config tmpModel) sourceCode } @@ -78,6 +102,12 @@ g n = n + 1 type Msg = UserEditedSourceCode String + | UserToggledNoDebugRule + | UserToggledNoUnusedVariablesRule + | UserToggledNoImportingEverythingRule + | UserToggledDefaultPatternPositionRule + | UserToggledNoExtraBooleanComparisonRule + | UserChangedDefaultPatternSetting PatternPosition update : Msg -> Model -> Model @@ -86,9 +116,38 @@ update action model = UserEditedSourceCode sourceCode -> { model | sourceCode = sourceCode - , lintResult = lintSource config sourceCode + , lintResult = lintSource (config model) sourceCode } + UserToggledNoDebugRule -> + { model | noDebugEnabled = not model.noDebugEnabled } + |> rerunLinting + + UserToggledNoUnusedVariablesRule -> + { model | noUnusedVariablesEnabled = not model.noUnusedVariablesEnabled } + |> rerunLinting + + UserToggledNoImportingEverythingRule -> + { model | noImportingEverythingEnabled = not model.noImportingEverythingEnabled } + |> rerunLinting + + UserToggledDefaultPatternPositionRule -> + { model | defaultPatternPositionEnabled = not model.defaultPatternPositionEnabled } + |> rerunLinting + + UserChangedDefaultPatternSetting patternPosition -> + { model | defaultPatternPositionPattern = patternPosition } + |> rerunLinting + + UserToggledNoExtraBooleanComparisonRule -> + { model | noExtraBooleanComparisonEnabled = not model.noExtraBooleanComparisonEnabled } + |> rerunLinting + + +rerunLinting : Model -> Model +rerunLinting model = + { model | lintResult = lintSource (config model) model.sourceCode } + -- VIEW @@ -96,23 +155,24 @@ update action model = view : Model -> Html Msg view model = - div [ id "wrapper" ] - [ div [ id "left" ] - [ p [ class "title" ] [ text "Source code" ] + div [ Attr.id "wrapper" ] + [ div [ Attr.id "left" ] + [ p [ Attr.class "title" ] [ text "Source code" ] , div - [ style "display" "flex" - , style "flex-direction" "row" + [ Attr.style "display" "flex" + , Attr.style "flex-direction" "row" ] [ textarea - [ id "input" - , onInput UserEditedSourceCode - , style "height" "500px" - , style "width" "60%" + [ Attr.id "input" + , Events.onInput UserEditedSourceCode + , Attr.style "height" "500px" + , Attr.style "width" "60%" ] [ text model.sourceCode ] - , div [ style "margin-left" "2rem" ] - [ p [ class "title" ] [ text "Linting errors" ] - , ul [ id "lint" ] + , div [ Attr.style "margin-left" "2rem" ] + [ viewConfigurationPanel model + , p [ Attr.class "title" ] [ text "Linting errors" ] + , ul [ Attr.id "lint" ] (lintErrors model) ] ] @@ -120,6 +180,68 @@ view model = ] +viewConfigurationPanel : Model -> Html Msg +viewConfigurationPanel model = + div [] + [ p [ Attr.class "title" ] [ text "Configuration" ] + , div + [ Attr.style "display" "flex" + , Attr.style "flex-direction" "column" + ] + [ viewCheckbox UserToggledNoDebugRule "NoDebug" model.noDebugEnabled + , viewCheckbox UserToggledNoUnusedVariablesRule "NoUnusedVariables" model.noUnusedVariablesEnabled + , viewCheckbox UserToggledNoImportingEverythingRule "NoImportingEverything" model.noImportingEverythingEnabled + , form [ Attr.action "" ] + [ viewCheckbox UserToggledDefaultPatternPositionRule "DefaultPatternPosition" model.defaultPatternPositionEnabled + , viewRadioButton + UserChangedDefaultPatternSetting + DefaultPatternPosition.ShouldBeLast + "Should be last" + model.defaultPatternPositionEnabled + model.defaultPatternPositionPattern + , viewRadioButton + UserChangedDefaultPatternSetting + DefaultPatternPosition.ShouldBeFirst + "Should be first" + model.defaultPatternPositionEnabled + model.defaultPatternPositionPattern + ] + , viewCheckbox UserToggledNoExtraBooleanComparisonRule "NoExtraBooleanComparison" model.noExtraBooleanComparisonEnabled + ] + ] + + +viewCheckbox : Msg -> String -> Bool -> Html Msg +viewCheckbox onClick name checked = + label + [] + [ input + [ Attr.type_ "checkbox" + , Attr.checked checked + , Events.onClick onClick + ] + [] + , text name + ] + + +viewRadioButton : (PatternPosition -> Msg) -> PatternPosition -> String -> Bool -> PatternPosition -> Html Msg +viewRadioButton onClick patternPosition name enabled selectedPatternPosition = + label + [] + [ input + [ Attr.type_ "radio" + , Attr.checked (patternPosition == selectedPatternPosition) + , Events.onClick (onClick patternPosition) + , Attr.disabled <| not enabled + , Attr.name name + , Attr.value name + ] + [] + , text name + ] + + lintErrors : Model -> List (Html Msg) lintErrors model = let