diff --git a/minijuvix-mode/flycheck-minijuvix.el b/minijuvix-mode/flycheck-minijuvix.el index 3e2dc3cae..07488b368 100644 --- a/minijuvix-mode/flycheck-minijuvix.el +++ b/minijuvix-mode/flycheck-minijuvix.el @@ -12,6 +12,9 @@ :error-patterns ( (error line-start (file-name) ":" line ":" column ": error:" (message (one-or-more (not "ת")))) + (error line-start (file-name) ":" line ":" column "-" end-column ": error:" (message (one-or-more (not "ת")))) + (error line-start (file-name) ":" line "-" end-line ":" column ": error:" (message (one-or-more (not "ת")))) + (error line-start (file-name) ":" line "-" end-line ":" column "-" end-column ": error:" (message (one-or-more (not "ת")))) ) :modes minijuvix-mode ) diff --git a/src/MiniJuvix/Prelude/Error/GenericError.hs b/src/MiniJuvix/Prelude/Error/GenericError.hs index d65e15a49..79666b876 100644 --- a/src/MiniJuvix/Prelude/Error/GenericError.hs +++ b/src/MiniJuvix/Prelude/Error/GenericError.hs @@ -11,8 +11,7 @@ import Prettyprinter.Render.Text import System.Console.ANSI qualified as Ansi data GenericError = GenericError - { _genericErrorLoc :: Loc, - _genericErrorFile :: FilePath, + { _genericErrorLoc :: Interval, _genericErrorMessage :: AnsiText, _genericErrorIntervals :: [Interval] } @@ -21,18 +20,17 @@ makeLenses ''GenericError instance Pretty GenericError where pretty :: GenericError -> Doc a - pretty g = - let lineNum = g ^. genericErrorLoc . locFileLoc . locLine - colNum = g ^. genericErrorLoc . locFileLoc . locCol - in pretty (g ^. genericErrorFile) - <> colon - <> pretty lineNum - <> colon - <> pretty colNum - <> colon <+> "error" - <> colon - <> line - <> pretty (g ^. genericErrorMessage) + pretty g = genericErrorHeader g <> pretty (g ^. genericErrorMessage) + +instance HasLoc GenericError where + getLoc = (^. genericErrorLoc) + +genericErrorHeader :: GenericError -> Doc a +genericErrorHeader g = + pretty (g ^. genericErrorLoc) + <> colon <+> "error" + <> colon + <> line class ToGenericError a where genericError :: a -> GenericError @@ -49,19 +47,8 @@ render ansi err helper f x = (f . layoutPretty defaultLayoutOptions) (header <> x <> endChar) g :: GenericError g = genericError err - header :: Doc a - header = - let lineNum = g ^. genericErrorLoc . locFileLoc . locLine - colNum = g ^. genericErrorLoc . locFileLoc . locCol - in pretty (g ^. genericErrorFile) - <> colon - <> pretty lineNum - <> colon - <> pretty colNum - <> colon <+> "error" - <> colon - <> line + header = genericErrorHeader g endChar :: Doc a endChar = "ת" diff --git a/src/MiniJuvix/Syntax/Concrete/Parser/Error.hs b/src/MiniJuvix/Syntax/Concrete/Parser/Error.hs index f2e8d0eee..a5e6e8b5d 100644 --- a/src/MiniJuvix/Syntax/Concrete/Parser/Error.hs +++ b/src/MiniJuvix/Syntax/Concrete/Parser/Error.hs @@ -13,8 +13,7 @@ newtype ParserError = ParserError instance ToGenericError ParserError where genericError e = GenericError - { _genericErrorLoc = intervalStartLoc i, - _genericErrorFile = i ^. intervalFile, + { _genericErrorLoc = i, _genericErrorMessage = AnsiText $ pretty @_ @AnsiStyle e, _genericErrorIntervals = [i] } diff --git a/src/MiniJuvix/Syntax/Concrete/Scoped/Error/Types.hs b/src/MiniJuvix/Syntax/Concrete/Scoped/Error/Types.hs index 98681ed75..63127b410 100644 --- a/src/MiniJuvix/Syntax/Concrete/Scoped/Error/Types.hs +++ b/src/MiniJuvix/Syntax/Concrete/Scoped/Error/Types.hs @@ -28,8 +28,7 @@ data MultipleDeclarations = MultipleDeclarations instance ToGenericError MultipleDeclarations where genericError MultipleDeclarations {..} = GenericError - { _genericErrorFile = _multipleDeclSecond ^. intervalFile, - _genericErrorLoc = intervalStartLoc i1, + { _genericErrorLoc = i1, _genericErrorMessage = prettyError msg, _genericErrorIntervals = [i1, _multipleDeclSecond] } @@ -50,8 +49,7 @@ newtype InfixError = InfixError instance ToGenericError InfixError where genericError InfixError {..} = GenericError - { _genericErrorFile = i ^. intervalFile, - _genericErrorLoc = intervalStartLoc i, + { _genericErrorLoc = i, _genericErrorMessage = prettyError msg, _genericErrorIntervals = [i] } @@ -72,8 +70,7 @@ newtype InfixErrorP = InfixErrorP instance ToGenericError InfixErrorP where genericError InfixErrorP {..} = GenericError - { _genericErrorFile = i ^. intervalFile, - _genericErrorLoc = intervalStartLoc i, + { _genericErrorLoc = i, _genericErrorMessage = prettyError msg, _genericErrorIntervals = [i] } @@ -94,8 +91,7 @@ newtype LacksTypeSig = LacksTypeSig instance ToGenericError LacksTypeSig where genericError LacksTypeSig {..} = GenericError - { _genericErrorFile = i ^. intervalFile, - _genericErrorLoc = intervalStartLoc i, + { _genericErrorLoc = i, _genericErrorMessage = prettyError msg, _genericErrorIntervals = [i] } @@ -115,8 +111,7 @@ newtype LacksFunctionClause = LacksFunctionClause instance ToGenericError LacksFunctionClause where genericError LacksFunctionClause {..} = GenericError - { _genericErrorFile = i ^. intervalFile, - _genericErrorLoc = intervalStartLoc i, + { _genericErrorLoc = i, _genericErrorMessage = prettyError msg, _genericErrorIntervals = [i] } @@ -136,8 +131,7 @@ newtype ImportCycle = ImportCycle instance ToGenericError ImportCycle where genericError ImportCycle {..} = GenericError - { _genericErrorFile = i ^. intervalFile, - _genericErrorLoc = intervalStartLoc i, + { _genericErrorLoc = i, _genericErrorMessage = prettyError msg, _genericErrorIntervals = [i] } @@ -162,8 +156,7 @@ newtype QualSymNotInScope = QualSymNotInScope instance ToGenericError QualSymNotInScope where genericError QualSymNotInScope {..} = GenericError - { _genericErrorFile = i ^. intervalFile, - _genericErrorLoc = intervalStartLoc i, + { _genericErrorLoc = i, _genericErrorMessage = prettyError msg, _genericErrorIntervals = [i] } @@ -180,8 +173,7 @@ data BindGroupConflict = BindGroupConflict instance ToGenericError BindGroupConflict where genericError BindGroupConflict {..} = GenericError - { _genericErrorFile = i2 ^. intervalFile, - _genericErrorLoc = intervalStartLoc i2, + { _genericErrorLoc = i2, _genericErrorMessage = prettyError msg, _genericErrorIntervals = [i1, i2] } @@ -204,8 +196,7 @@ data DuplicateFixity = DuplicateFixity instance ToGenericError DuplicateFixity where genericError DuplicateFixity {..} = GenericError - { _genericErrorFile = i2 ^. intervalFile, - _genericErrorLoc = intervalStartLoc i2, + { _genericErrorLoc = i2, _genericErrorMessage = prettyError msg, _genericErrorIntervals = [i1, i2] } @@ -233,8 +224,7 @@ data MultipleExportConflict = MultipleExportConflict instance ToGenericError MultipleExportConflict where genericError MultipleExportConflict {..} = GenericError - { _genericErrorFile = i ^. intervalFile, - _genericErrorLoc = intervalStartLoc i, + { _genericErrorLoc = i, _genericErrorMessage = prettyError msg, _genericErrorIntervals = [i] } @@ -257,8 +247,7 @@ makeLenses ''NotInScope instance ToGenericError NotInScope where genericError e@NotInScope {..} = GenericError - { _genericErrorFile = e ^. notInScopeSymbol . symbolLoc . intervalFile, - _genericErrorLoc = intervalStartLoc (e ^. notInScopeSymbol . symbolLoc), + { _genericErrorLoc = (e ^. notInScopeSymbol . symbolLoc), _genericErrorMessage = prettyError msg, _genericErrorIntervals = [e ^. notInScopeSymbol . symbolLoc] } @@ -298,8 +287,7 @@ makeLenses ''ModuleNotInScope instance ToGenericError ModuleNotInScope where genericError e@ModuleNotInScope {..} = GenericError - { _genericErrorFile = i ^. intervalFile, - _genericErrorLoc = intervalStartLoc i, + { _genericErrorLoc = i, _genericErrorMessage = prettyError msg, _genericErrorIntervals = [i] } @@ -323,8 +311,7 @@ newtype UnusedOperatorDef = UnusedOperatorDef instance ToGenericError UnusedOperatorDef where genericError UnusedOperatorDef {..} = GenericError - { _genericErrorFile = i ^. intervalFile, - _genericErrorLoc = intervalStartLoc i, + { _genericErrorLoc = i, _genericErrorMessage = prettyError msg, _genericErrorIntervals = [i] } @@ -344,8 +331,7 @@ data WrongTopModuleName = WrongTopModuleName instance ToGenericError WrongTopModuleName where genericError WrongTopModuleName {..} = GenericError - { _genericErrorFile = i ^. intervalFile, - _genericErrorLoc = intervalStartLoc i, + { _genericErrorLoc = i, _genericErrorMessage = prettyError msg, _genericErrorIntervals = [i] } @@ -370,8 +356,7 @@ data AmbiguousSym = AmbiguousSym instance ToGenericError AmbiguousSym where genericError AmbiguousSym {..} = GenericError - { _genericErrorFile = i ^. intervalFile, - _genericErrorLoc = intervalStartLoc i, + { _genericErrorLoc = i, _genericErrorMessage = prettyError msg, _genericErrorIntervals = i : is } @@ -389,8 +374,7 @@ data AmbiguousModuleSym = AmbiguousModuleSym instance ToGenericError AmbiguousModuleSym where genericError AmbiguousModuleSym {..} = GenericError - { _genericErrorFile = i ^. intervalFile, - _genericErrorLoc = intervalStartLoc i, + { _genericErrorLoc = i, _genericErrorMessage = prettyError msg, _genericErrorIntervals = i : is } @@ -408,8 +392,7 @@ data WrongLocationCompileBlock = WrongLocationCompileBlock instance ToGenericError WrongLocationCompileBlock where genericError WrongLocationCompileBlock {..} = GenericError - { _genericErrorFile = i ^. intervalFile, - _genericErrorLoc = intervalStartLoc i, + { _genericErrorLoc = i, _genericErrorMessage = prettyError msg, _genericErrorIntervals = [i] } @@ -431,8 +414,7 @@ data MultipleCompileBlockSameName = MultipleCompileBlockSameName instance ToGenericError MultipleCompileBlockSameName where genericError MultipleCompileBlockSameName {..} = GenericError - { _genericErrorFile = i2 ^. intervalFile, - _genericErrorLoc = intervalStartLoc i2, + { _genericErrorLoc = i2, _genericErrorMessage = prettyError msg, _genericErrorIntervals = [i1, i2] } @@ -452,8 +434,7 @@ data MultipleCompileRuleSameBackend = MultipleCompileRuleSameBackend instance ToGenericError MultipleCompileRuleSameBackend where genericError MultipleCompileRuleSameBackend {..} = GenericError - { _genericErrorFile = i ^. intervalFile, - _genericErrorLoc = intervalStartLoc i, + { _genericErrorLoc = i, _genericErrorMessage = prettyError msg, _genericErrorIntervals = [i] } @@ -477,8 +458,7 @@ data WrongKindExpressionCompileBlock = WrongKindExpressionCompileBlock instance ToGenericError WrongKindExpressionCompileBlock where genericError WrongKindExpressionCompileBlock {..} = GenericError - { _genericErrorFile = i ^. intervalFile, - _genericErrorLoc = intervalStartLoc i, + { _genericErrorLoc = i, _genericErrorMessage = prettyError msg, _genericErrorIntervals = [i] } diff --git a/src/MiniJuvix/Syntax/MicroJuvix/Error/Types.hs b/src/MiniJuvix/Syntax/MicroJuvix/Error/Types.hs index 96e596f84..dc3c40d22 100644 --- a/src/MiniJuvix/Syntax/MicroJuvix/Error/Types.hs +++ b/src/MiniJuvix/Syntax/MicroJuvix/Error/Types.hs @@ -20,8 +20,7 @@ makeLenses ''WrongConstructorType instance ToGenericError WrongConstructorType where genericError e = GenericError - { _genericErrorFile = i ^. intervalFile, - _genericErrorLoc = intervalStartLoc i, + { _genericErrorLoc = i, _genericErrorMessage = prettyError msg, _genericErrorIntervals = [i] } @@ -50,8 +49,7 @@ makeLenses ''WrongConstructorAppArgs instance ToGenericError WrongConstructorAppArgs where genericError e = GenericError - { _genericErrorFile = i ^. intervalFile, - _genericErrorLoc = intervalStartLoc i, + { _genericErrorLoc = i, _genericErrorMessage = prettyError msg, _genericErrorIntervals = [i] } @@ -89,8 +87,7 @@ makeLenses ''WrongType instance ToGenericError WrongType where genericError e = GenericError - { _genericErrorFile = i ^. intervalFile, - _genericErrorLoc = intervalStartLoc i, + { _genericErrorLoc = i, _genericErrorMessage = prettyError msg, _genericErrorIntervals = [i] } @@ -124,8 +121,7 @@ makeLenses ''ExpectedFunctionType instance ToGenericError ExpectedFunctionType where genericError e = GenericError - { _genericErrorFile = i ^. intervalFile, - _genericErrorLoc = intervalStartLoc i, + { _genericErrorLoc = i, _genericErrorMessage = prettyError msg, _genericErrorIntervals = [i] } @@ -156,8 +152,7 @@ makeLenses ''TooManyPatterns instance ToGenericError TooManyPatterns where genericError e = GenericError - { _genericErrorFile = i ^. intervalFile, - _genericErrorLoc = intervalStartLoc i, + { _genericErrorLoc = i, _genericErrorMessage = prettyError msg, _genericErrorIntervals = [i] } diff --git a/src/MiniJuvix/Termination/Error/Types.hs b/src/MiniJuvix/Termination/Error/Types.hs index 7a2ad8a42..aa38f3841 100644 --- a/src/MiniJuvix/Termination/Error/Types.hs +++ b/src/MiniJuvix/Termination/Error/Types.hs @@ -16,8 +16,7 @@ makeLenses 'NoLexOrder instance ToGenericError NoLexOrder where genericError NoLexOrder {..} = GenericError - { _genericErrorFile = i ^. intervalFile, - _genericErrorLoc = intervalStartLoc i, + { _genericErrorLoc = i, _genericErrorMessage = prettyError msg, _genericErrorIntervals = [i] }