From efa46019ef0400ee0fb1ab6e686398fc098bb862 Mon Sep 17 00:00:00 2001 From: Jeroen Engels Date: Fri, 22 Mar 2024 10:55:15 +0100 Subject: [PATCH] Report when a CSS is not parsable --- tests/NoUnknownCssClasses.elm | 25 ++++++++++++++------ tests/NoUnknownCssClassesTest.elm | 38 ++++++++++++++++++++++++++++++- 2 files changed, 55 insertions(+), 8 deletions(-) diff --git a/tests/NoUnknownCssClasses.elm b/tests/NoUnknownCssClasses.elm index b1f359a9..c7483655 100644 --- a/tests/NoUnknownCssClasses.elm +++ b/tests/NoUnknownCssClasses.elm @@ -86,9 +86,13 @@ defaults = } -cssFilesVisitor : List { file | content : String } -> ProjectContext -> ( List empty, ProjectContext ) +cssFilesVisitor : List { fileKey : Rule.ExtraFileKey, path : String, content : String } -> ProjectContext -> ( List (Rule.Error scope), ProjectContext ) cssFilesVisitor files context = - ( [], { knownClasses = List.foldl (.content >> parseCssFile) context.knownClasses files } ) + let + ( errors, knownClasses ) = + List.foldl parseCssFile ( [], context.knownClasses ) files + in + ( errors, { knownClasses = knownClasses } ) withHardcodedKnownClasses : List String -> Configuration -> Configuration @@ -303,15 +307,22 @@ unknownClasses knownClasses range str = --- -parseCssFile : String -> Set String -> Set String -parseCssFile file knownClasses = - case Parser.run cssParser file of +parseCssFile : { fileKey : Rule.ExtraFileKey, path : String, content : String } -> ( List (Rule.Error externalFile), Set String ) -> ( List (Rule.Error externalFile), Set String ) +parseCssFile file ( errors, knownClasses ) = + case Parser.run cssParser file.content of Ok cssClasses -> - Set.union cssClasses knownClasses + ( errors, Set.union cssClasses knownClasses ) Err _ -> -- Create an error? - knownClasses + ( Rule.errorForExtraFile file.fileKey + { message = "Unable to parse CSS file `some-file.css`" + , details = [ "Please check that this file is syntactically correct. It is possible that I'm mistaken as my CSS parser is still very naive. Contributions are welcome to solve the issue." ] + } + { start = { row = 1, column = 1 }, end = { row = 1, column = 100000 } } + :: errors + , knownClasses + ) cssParser : Parser (Set String) diff --git a/tests/NoUnknownCssClassesTest.elm b/tests/NoUnknownCssClassesTest.elm index 019c5c7a..79fca523 100644 --- a/tests/NoUnknownCssClassesTest.elm +++ b/tests/NoUnknownCssClassesTest.elm @@ -188,6 +188,25 @@ view model = , under = "model.a" } ] + , test "should report an error when being unable to parse a CSS file" <| + \() -> + """module A exposing (..) +import Class + +view model = + Class.fromString model.a +""" + |> Review.Test.runWithProjectData projectWithUnparsableCssClasses (defaults |> withCssFiles [ "*.css" ] |> rule) + |> Review.Test.expectErrorsForModules + [ ( "some-file.css" + , [ Review.Test.error + { message = "Unable to parse CSS file `some-file.css`" + , details = [ "Please check that this file is syntactically correct. It is possible that I'm mistaken as my CSS parser is still very naive. Contributions are welcome to solve the issue." ] + , under = "-- First line" + } + ] + ) + ] ] @@ -200,7 +219,7 @@ projectWithCssClasses : Project projectWithCssClasses = Project.addExtraFiles [ { path = "some-file.css" - , content = """ + , content = """-- First line .known { color: blue; } @@ -211,3 +230,20 @@ projectWithCssClasses = } ] Review.Test.Dependencies.projectWithElmCore + + +projectWithUnparsableCssClasses : Project +projectWithUnparsableCssClasses = + Project.addExtraFiles + [ { path = "some-file.css" + , content = """-- First line +.known { + color: blue; +} +.red { + color: red; +-- missing closing curly brace +""" + } + ] + Review.Test.Dependencies.projectWithElmCore