diagnose-2.4.0: Beautiful error reporting done easily
Copyright(c) Mesabloo 2021-2022
LicenseBSD3
Stabilityexperimental
PortabilityPortable
Safe HaskellSafe-Inferred
LanguageHaskell2010

Error.Diagnose.Diagnostic

Contents

Description

 
Synopsis

Re-exports

def :: Default a => a #

The default value for this type.

data Diagnostic msg Source #

The data type for diagnostic containing messages of an abstract type.

The constructors are private, but users can use def from the Default typeclass to create a new empty diagnostic, and addFile and addReport to alter its internal state.

Instances

Instances details
ToJSON msg => ToJSON (Diagnostic msg) Source # 
Instance details

Defined in Error.Diagnose.Diagnostic.Internal

Semigroup (Diagnostic msg) Source # 
Instance details

Defined in Error.Diagnose.Diagnostic.Internal

Methods

(<>) :: Diagnostic msg -> Diagnostic msg -> Diagnostic msg #

sconcat :: NonEmpty (Diagnostic msg) -> Diagnostic msg #

stimes :: Integral b => b -> Diagnostic msg -> Diagnostic msg #

Default (Diagnostic msg) Source # 
Instance details

Defined in Error.Diagnose.Diagnostic.Internal

Methods

def :: Diagnostic msg #

hasReports :: Diagnostic msg -> Bool Source #

Checks whether the given diagnostic has any report or not (if it is effectively empty).

reportsOf :: Diagnostic msg -> [Report msg] Source #

Retrieves the reports for this diagnostic.

warningsToErrors :: Diagnostic msg -> Diagnostic msg Source #

Transforms every warning report in this diagnostic into an error report.

errorsToWarnings :: Diagnostic msg -> Diagnostic msg Source #

Transforms every error report in this diagnostic into a warning report.

prettyDiagnostic Source #

Arguments

:: Pretty msg 
=> Bool

Should we use unicode when printing paths?

-> Int

The number of spaces each TAB character will span.

-> Diagnostic msg

The diagnostic to print.

-> Doc Annotation 

Pretty prints a Diagnostic into a Document that can be output using hPutDoc.

Colors are put by default. If you do not want these, just unAnnotate the resulting document like so:

>>> let doc = unAnnotate (prettyDiagnostic withUnicode tabSize diagnostic)

Changing the style is also rather easy:

>>> let myCustomStyle :: Style = _
>>> let doc = myCustomStyle (prettyDiagnostic withUnicode tabSize diagnostic)

printDiagnostic Source #

Arguments

:: (MonadIO m, Pretty msg) 
=> Handle

The handle onto which to output the diagnostic.

-> Bool

Should we print with unicode characters?

-> Bool

False to disable colors.

-> Int

The number of spaces each TAB character will span.

-> Style

The style in which to output the diagnostic.

-> Diagnostic msg

The diagnostic to output.

-> m () 

Prints a Diagnostic onto a specific Handle.

addFile Source #

Arguments

:: Diagnostic msg 
-> FilePath

The path to the file.

-> String

The content of the file as a single string, where lines are ended by \n.

-> Diagnostic msg 

Inserts a new referenceable file within the diagnostic.

addReport Source #

Arguments

:: Diagnostic msg 
-> Report msg

The new report to add to the diagnostic.

-> Diagnostic msg 

Inserts a new report into a diagnostic.

diagnosticToJson :: ToJSON msg => Diagnostic msg -> ByteString Source #

Creates a JSON object from a diagnostic, containing those fields (only types are indicated):

{ files:
    { name: string
    , content: string[]
    }[]
, reports:
    { kind: 'error' | 'warning'
    , code: T?
    , message: T
    , markers:
        { kind: 'this' | 'where' | 'maybe'
        , position:
            { beginning: { line: int, column: int }
            , end: { line: int, column: int }
            , file: string
            }
        , message: T
        }[]
    , hints: ({ note: T } | { hint: T })[]
    }[]
}

where T is the type of the JSON representation for the msg type variable.