mirror of
https://github.com/Mesabloo/diagnose.git
synced 2024-11-25 14:32:38 +03:00
Collect reports in a difference list
Using a difference list we get O(1) appending vs. O(n) with the built-in list type. Overall for n reports this results in O(n) operations instead of O(n^2) operations.
This commit is contained in:
parent
d1e552c09a
commit
f4863dd3e8
@ -1,6 +1,6 @@
|
|||||||
cabal-version: 1.12
|
cabal-version: 1.12
|
||||||
|
|
||||||
-- This file has been generated from package.yaml by hpack version 0.34.6.
|
-- This file has been generated from package.yaml by hpack version 0.34.4.
|
||||||
--
|
--
|
||||||
-- see: https://github.com/sol/hpack
|
-- see: https://github.com/sol/hpack
|
||||||
|
|
||||||
@ -67,6 +67,7 @@ library
|
|||||||
build-depends:
|
build-depends:
|
||||||
base >=4.7 && <5
|
base >=4.7 && <5
|
||||||
, data-default >=0.7 && <1
|
, data-default >=0.7 && <1
|
||||||
|
, dlist ==1.0.*
|
||||||
, hashable >=1.3 && <2
|
, hashable >=1.3 && <2
|
||||||
, prettyprinter >=1.7.0 && <2
|
, prettyprinter >=1.7.0 && <2
|
||||||
, prettyprinter-ansi-terminal >=1.1.0 && <2
|
, prettyprinter-ansi-terminal >=1.1.0 && <2
|
||||||
@ -111,6 +112,7 @@ test-suite diagnose-megaparsec-tests
|
|||||||
base >=4.7 && <5
|
base >=4.7 && <5
|
||||||
, data-default >=0.7 && <1
|
, data-default >=0.7 && <1
|
||||||
, diagnose
|
, diagnose
|
||||||
|
, dlist ==1.0.*
|
||||||
, hashable >=1.3 && <2
|
, hashable >=1.3 && <2
|
||||||
, prettyprinter >=1.7.0 && <2
|
, prettyprinter >=1.7.0 && <2
|
||||||
, prettyprinter-ansi-terminal >=1.1.0 && <2
|
, prettyprinter-ansi-terminal >=1.1.0 && <2
|
||||||
@ -150,6 +152,7 @@ test-suite diagnose-parsec-tests
|
|||||||
base >=4.7 && <5
|
base >=4.7 && <5
|
||||||
, data-default >=0.7 && <1
|
, data-default >=0.7 && <1
|
||||||
, diagnose
|
, diagnose
|
||||||
|
, dlist ==1.0.*
|
||||||
, hashable >=1.3 && <2
|
, hashable >=1.3 && <2
|
||||||
, prettyprinter >=1.7.0 && <2
|
, prettyprinter >=1.7.0 && <2
|
||||||
, prettyprinter-ansi-terminal >=1.1.0 && <2
|
, prettyprinter-ansi-terminal >=1.1.0 && <2
|
||||||
@ -188,6 +191,7 @@ test-suite diagnose-rendering-tests
|
|||||||
base >=4.7 && <5
|
base >=4.7 && <5
|
||||||
, data-default >=0.7 && <1
|
, data-default >=0.7 && <1
|
||||||
, diagnose
|
, diagnose
|
||||||
|
, dlist ==1.0.*
|
||||||
, hashable >=1.3 && <2
|
, hashable >=1.3 && <2
|
||||||
, prettyprinter >=1.7.0 && <2
|
, prettyprinter >=1.7.0 && <2
|
||||||
, prettyprinter-ansi-terminal >=1.1.0 && <2
|
, prettyprinter-ansi-terminal >=1.1.0 && <2
|
||||||
|
@ -8,11 +8,12 @@ category: "Error Reporting"
|
|||||||
|
|
||||||
dependencies:
|
dependencies:
|
||||||
- base >= 4.7 && < 5
|
- base >= 4.7 && < 5
|
||||||
|
- data-default >= 0.7 && < 1
|
||||||
|
- dlist >= 1.0 && < 1.1
|
||||||
|
- hashable >= 1.3 && < 2
|
||||||
- prettyprinter >= 1.7.0 && < 2
|
- prettyprinter >= 1.7.0 && < 2
|
||||||
- prettyprinter-ansi-terminal >= 1.1.0 && < 2
|
- prettyprinter-ansi-terminal >= 1.1.0 && < 2
|
||||||
- unordered-containers >= 0.2 && < 0.3
|
- unordered-containers >= 0.2 && < 0.3
|
||||||
- hashable >= 1.3 && < 2
|
|
||||||
- data-default >= 0.7 && < 1
|
|
||||||
- wcwidth >= 0.0.1 && <1
|
- wcwidth >= 0.0.1 && <1
|
||||||
- text >= 1.0.0.0 && <= 2.0
|
- text >= 1.0.0.0 && <= 2.0
|
||||||
# ^^^ This is unfortunately required, but as 'prettyprinter' already depends on it, it will already have been fetched
|
# ^^^ This is unfortunately required, but as 'prettyprinter' already depends on it, it will already have been fetched
|
||||||
|
@ -20,8 +20,11 @@ import Control.Monad.IO.Class (MonadIO, liftIO)
|
|||||||
import Data.Aeson (ToJSON(..), encode, object, (.=))
|
import Data.Aeson (ToJSON(..), encode, object, (.=))
|
||||||
import Data.ByteString.Lazy (ByteString)
|
import Data.ByteString.Lazy (ByteString)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
import Data.DList (DList)
|
||||||
|
import qualified Data.DList as DL
|
||||||
import Data.Default (Default, def)
|
import Data.Default (Default, def)
|
||||||
import Data.Foldable (fold)
|
import Data.Foldable (fold, toList)
|
||||||
import Data.HashMap.Lazy (HashMap)
|
import Data.HashMap.Lazy (HashMap)
|
||||||
import qualified Data.HashMap.Lazy as HashMap
|
import qualified Data.HashMap.Lazy as HashMap
|
||||||
import Data.List (intersperse)
|
import Data.List (intersperse)
|
||||||
@ -38,7 +41,7 @@ import System.IO (Handle)
|
|||||||
-- to create a new empty diagnostic, and 'addFile' and 'addReport' to alter its internal state.
|
-- to create a new empty diagnostic, and 'addFile' and 'addReport' to alter its internal state.
|
||||||
data Diagnostic msg
|
data Diagnostic msg
|
||||||
= Diagnostic
|
= Diagnostic
|
||||||
[Report msg]
|
(DList (Report msg))
|
||||||
-- ^ All the reports contained in a diagnostic.
|
-- ^ All the reports contained in a diagnostic.
|
||||||
--
|
--
|
||||||
-- Reports are output one by one, without connections in between.
|
-- Reports are output one by one, without connections in between.
|
||||||
@ -85,7 +88,7 @@ prettyDiagnostic ::
|
|||||||
Diagnostic msg ->
|
Diagnostic msg ->
|
||||||
Doc Annotation
|
Doc Annotation
|
||||||
prettyDiagnostic withUnicode tabSize (Diagnostic reports file) =
|
prettyDiagnostic withUnicode tabSize (Diagnostic reports file) =
|
||||||
fold . intersperse hardline $ prettyReport file withUnicode tabSize <$> reports
|
fold . intersperse hardline $ prettyReport file withUnicode tabSize <$> toList reports
|
||||||
{-# INLINE prettyDiagnostic #-}
|
{-# INLINE prettyDiagnostic #-}
|
||||||
|
|
||||||
-- | Prints a 'Diagnostic' onto a specific 'Handle'.
|
-- | Prints a 'Diagnostic' onto a specific 'Handle'.
|
||||||
@ -127,7 +130,7 @@ addReport ::
|
|||||||
Report msg ->
|
Report msg ->
|
||||||
Diagnostic msg
|
Diagnostic msg
|
||||||
addReport (Diagnostic reports files) report =
|
addReport (Diagnostic reports files) report =
|
||||||
Diagnostic (reports <> [report]) files
|
Diagnostic (reports `DL.snoc` report) files
|
||||||
{-# INLINE addReport #-}
|
{-# INLINE addReport #-}
|
||||||
|
|
||||||
#ifdef USE_AESON
|
#ifdef USE_AESON
|
||||||
|
Loading…
Reference in New Issue
Block a user