Report when a CSS is not parsable

This commit is contained in:
Jeroen Engels 2024-03-22 10:55:15 +01:00
parent eb0b55e0a1
commit efa46019ef
2 changed files with 55 additions and 8 deletions

View File

@ -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)

View File

@ -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