mirror of
https://github.com/unisonweb/unison.git
synced 2024-10-05 06:07:21 +03:00
cleanup, and move Rendered to ColorText
This commit is contained in:
parent
a92dcb2c80
commit
ff951da9b8
@ -23,7 +23,6 @@ import System.FSNotify (Event (Added, Modified), watchTree,
|
||||
import qualified Unison.FileParsers as FileParsers
|
||||
import qualified Unison.Parser as Parser
|
||||
import qualified Unison.Parsers as Parsers
|
||||
-- import Unison.Util.AnnotatedText (renderTextUnstyled)
|
||||
import Control.Exception (finally)
|
||||
import System.Random (randomIO)
|
||||
import Unison.Codebase (Codebase)
|
||||
|
@ -13,58 +13,48 @@ module Unison.PrintError where
|
||||
|
||||
-- import Unison.Parser (showLineCol)
|
||||
-- import Unison.Util.Monoid (whenM)
|
||||
import Control.Monad (join)
|
||||
import Control.Lens ( (%~) )
|
||||
import Control.Lens.Tuple ( _1
|
||||
, _2
|
||||
, _3
|
||||
)
|
||||
import qualified Data.Char as Char
|
||||
import Control.Lens ((%~))
|
||||
import Control.Lens.Tuple (_1, _2, _3)
|
||||
import Control.Monad (join)
|
||||
import qualified Data.Char as Char
|
||||
import Data.Foldable
|
||||
import Data.List ( intersperse, sortOn )
|
||||
import qualified Data.List.NonEmpty as Nel
|
||||
import Data.Map ( Map )
|
||||
import qualified Data.Map as Map
|
||||
import Data.Maybe ( catMaybes
|
||||
, fromMaybe
|
||||
)
|
||||
import Data.Sequence ( Seq(..) )
|
||||
import qualified Data.Set as Set
|
||||
import Data.String ( IsString
|
||||
, fromString
|
||||
)
|
||||
import qualified Data.Text as Text
|
||||
import Data.Text ( Text )
|
||||
import Data.Void ( Void )
|
||||
import Data.List (intersperse, sortOn)
|
||||
import qualified Data.List.NonEmpty as Nel
|
||||
import Data.Map (Map)
|
||||
import qualified Data.Map as Map
|
||||
import Data.Maybe (catMaybes, fromMaybe)
|
||||
import Data.Sequence (Seq (..))
|
||||
import qualified Data.Set as Set
|
||||
import Data.String (IsString, fromString)
|
||||
import Data.Text (Text)
|
||||
import qualified Data.Text as Text
|
||||
import Data.Void (Void)
|
||||
import Debug.Trace
|
||||
import qualified Text.Megaparsec as P
|
||||
import qualified Unison.ABT as ABT
|
||||
import Unison.Kind ( Kind )
|
||||
import qualified Unison.Kind as Kind
|
||||
import qualified Unison.Lexer as L
|
||||
import Unison.Parser ( Ann(..)
|
||||
, Annotated
|
||||
, ann
|
||||
)
|
||||
import qualified Unison.Parser as Parser
|
||||
import qualified Unison.Reference as R
|
||||
import Unison.Result ( Note(..) )
|
||||
import qualified Unison.Settings as Settings
|
||||
import qualified Unison.Type as Type
|
||||
import qualified Unison.Term as Term
|
||||
import qualified Unison.TypeVar as TypeVar
|
||||
import qualified Unison.Typechecker.Context as C
|
||||
import qualified Text.Megaparsec as P
|
||||
import qualified Unison.ABT as ABT
|
||||
import qualified Unison.DataDeclaration as DD
|
||||
import Unison.Kind (Kind)
|
||||
import qualified Unison.Kind as Kind
|
||||
import qualified Unison.Lexer as L
|
||||
import Unison.Parser (Ann (..), Annotated, ann)
|
||||
import qualified Unison.Parser as Parser
|
||||
import qualified Unison.Reference as R
|
||||
import Unison.Result (Note (..))
|
||||
import qualified Unison.Settings as Settings
|
||||
import qualified Unison.Term as Term
|
||||
import qualified Unison.Type as Type
|
||||
import qualified Unison.Typechecker.Context as C
|
||||
import Unison.Typechecker.TypeError
|
||||
import qualified Unison.Util.AnnotatedText as AT
|
||||
import Unison.Util.AnnotatedText (AnnotatedText, Rendered)
|
||||
import Unison.Util.ColorText ( Color, ANSI )
|
||||
import qualified Unison.Util.ColorText as Color
|
||||
import Unison.Util.Monoid ( intercalateMap )
|
||||
import Unison.Util.Range ( Range(..) )
|
||||
import Unison.Var ( Var )
|
||||
import qualified Unison.Var as Var
|
||||
import qualified Unison.UnisonFile as UF
|
||||
import qualified Unison.DataDeclaration as DD
|
||||
import qualified Unison.TypeVar as TypeVar
|
||||
import qualified Unison.UnisonFile as UF
|
||||
import Unison.Util.AnnotatedText (AnnotatedText)
|
||||
import qualified Unison.Util.AnnotatedText as AT
|
||||
import Unison.Util.ColorText (ANSI, Color, Rendered)
|
||||
import qualified Unison.Util.ColorText as Color
|
||||
import Unison.Util.Monoid (intercalateMap)
|
||||
import Unison.Util.Range (Range (..))
|
||||
import Unison.Var (Var)
|
||||
import qualified Unison.Var as Var
|
||||
|
||||
data Env = Env { referenceNames :: Map R.Reference String
|
||||
, constructorNames :: Map (R.Reference, Int) String }
|
||||
@ -120,13 +110,13 @@ styleAnnotated :: Annotated a => sty -> a -> Maybe (Range, sty)
|
||||
styleAnnotated sty a = (, sty) <$> rangeForAnnotated a
|
||||
|
||||
style :: s -> String -> AnnotatedText s
|
||||
style sty str = AT.pairToText' (str, sty)
|
||||
style sty str = AT.annotate sty str
|
||||
|
||||
describeStyle :: Color -> AnnotatedText Color
|
||||
describeStyle ErrorSite = "in " <> style ErrorSite "red"
|
||||
describeStyle Type1 = "in " <> style Type1 "blue"
|
||||
describeStyle Type2 = "in " <> style Type2 "green"
|
||||
describeStyle _ = ""
|
||||
describeStyle Type1 = "in " <> style Type1 "blue"
|
||||
describeStyle Type2 = "in " <> style Type2 "green"
|
||||
describeStyle _ = ""
|
||||
|
||||
prettyTypecheckedFile'
|
||||
:: forall v loc
|
||||
|
@ -8,19 +8,19 @@
|
||||
|
||||
module Unison.Util.AnnotatedText where
|
||||
|
||||
import Data.Foldable (asum, foldl')
|
||||
import Data.Foldable (foldl')
|
||||
import Data.Map (Map)
|
||||
import qualified Data.Map as Map
|
||||
import Data.Sequence (Seq ((:|>)))
|
||||
import qualified Data.Sequence as Seq
|
||||
import Data.String (IsString (..))
|
||||
import Data.Void (Void)
|
||||
import Safe (headMay, lastMay)
|
||||
import Unison.Lexer (Line, Pos (..))
|
||||
import Unison.Util.Monoid (intercalateMap)
|
||||
import Unison.Util.Range (Range (..), inRange)
|
||||
|
||||
type AnnotatedText a = AnnotatedText' (Maybe a)
|
||||
|
||||
newtype AnnotatedText' a = AnnotatedText' (Seq (String, a))
|
||||
deriving (Functor, Foldable, Semigroup, Monoid)
|
||||
|
||||
@ -31,14 +31,20 @@ data AnnotatedExcerpt a = AnnotatedExcerpt
|
||||
, annotations :: Map Range a
|
||||
} deriving (Functor)
|
||||
|
||||
newtype Rendered a = Rendered { rawRender :: Seq String }
|
||||
deriving (Semigroup, Monoid)
|
||||
annotate :: a -> String -> AnnotatedText a
|
||||
annotate a str = AnnotatedText' . Seq.singleton $ (str, Just a)
|
||||
|
||||
pairToText :: (String, a) -> AnnotatedText' a
|
||||
pairToText (str, a) = AnnotatedText' . Seq.singleton $ (str, a)
|
||||
annotate' :: a -> String -> AnnotatedText' a
|
||||
annotate' a str = AnnotatedText' . Seq.singleton $ (str, a)
|
||||
|
||||
pairToText' :: (String, a) -> AnnotatedText a
|
||||
pairToText' (str, a) = pairToText (str, Just a)
|
||||
deannotate :: AnnotatedText a -> AnnotatedText b
|
||||
deannotate t = const Nothing <$> t
|
||||
|
||||
reannotate :: a -> AnnotatedText a -> AnnotatedText a
|
||||
reannotate a t = fmap (const a) <$> t
|
||||
|
||||
reannotate' :: a -> AnnotatedText' a -> AnnotatedText' a
|
||||
reannotate' a t = const a <$> t
|
||||
|
||||
trailingNewLine :: AnnotatedText a -> Bool
|
||||
trailingNewLine (AnnotatedText' (init :|> (s,_))) =
|
||||
@ -51,12 +57,13 @@ trailingNewLine _ = False
|
||||
markup :: AnnotatedExcerpt a -> Map Range a -> AnnotatedExcerpt a
|
||||
markup a r = a { annotations = r `Map.union` annotations a }
|
||||
|
||||
renderTextUnstyled :: AnnotatedText' a -> Rendered Void
|
||||
renderTextUnstyled (AnnotatedText' chunks) = foldl' go mempty chunks
|
||||
where go r (text, _) = r <> fromString text
|
||||
-- renderTextUnstyled :: AnnotatedText' a -> Rendered Void
|
||||
-- renderTextUnstyled (AnnotatedText' chunks) = foldl' go mempty chunks
|
||||
-- where go r (text, _) = r <> fromString text
|
||||
|
||||
textLength :: AnnotatedText' a -> Int
|
||||
textLength = length . show . renderTextUnstyled
|
||||
textLength (AnnotatedText' chunks) = foldl' go 0 chunks
|
||||
where go len (text, _a) = len + length text
|
||||
|
||||
textEmpty :: AnnotatedText' a -> Bool
|
||||
textEmpty = (==0) . textLength
|
||||
@ -95,7 +102,7 @@ excerptToText e =
|
||||
(additions, pos') =
|
||||
if c == '\n'
|
||||
then ("\n" <> renderLineNumber (line + 1), Pos (line + 1) 1)
|
||||
else (pairToText ([c], maybeColor), Pos line (col + 1))
|
||||
else (annotate' maybeColor [c], Pos line (col + 1))
|
||||
in track pos' stack' remainingAnnotations (rendered <> additions) rest
|
||||
|
||||
snipWithContext :: Int -> AnnotatedExcerpt a -> [AnnotatedExcerpt a]
|
||||
@ -142,9 +149,3 @@ instance IsString (AnnotatedText a) where
|
||||
|
||||
instance IsString (AnnotatedExcerpt a) where
|
||||
fromString s = AnnotatedExcerpt 1 s mempty
|
||||
|
||||
instance Show (Rendered a) where
|
||||
show (Rendered chunks) = asum chunks
|
||||
|
||||
instance IsString (Rendered a) where
|
||||
fromString s = Rendered (pure s)
|
||||
|
@ -1,16 +1,21 @@
|
||||
{-# LANGUAGE EmptyDataDecls #-}
|
||||
{-# LANGUAGE FlexibleInstances #-}
|
||||
{-# LANGUAGE OverloadedStrings #-}
|
||||
{-# LANGUAGE PatternSynonyms #-}
|
||||
{-# LANGUAGE EmptyDataDecls #-}
|
||||
{-# LANGUAGE FlexibleInstances #-}
|
||||
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
|
||||
{-# LANGUAGE OverloadedStrings #-}
|
||||
{-# LANGUAGE PatternSynonyms #-}
|
||||
|
||||
module Unison.Util.ColorText (ANSI, Color (..), style, renderText)
|
||||
module Unison.Util.ColorText (ANSI, Color (..), ColorText, Rendered, style, renderText)
|
||||
where
|
||||
|
||||
import Data.Foldable (foldl')
|
||||
import Data.Foldable (asum, foldl')
|
||||
import Data.Sequence (Seq)
|
||||
import Data.String (IsString (..))
|
||||
import qualified System.Console.ANSI as ANSI
|
||||
import Unison.Util.AnnotatedText (AnnotatedText, AnnotatedText' (..),
|
||||
Rendered (..))
|
||||
import Unison.Util.AnnotatedText (AnnotatedText,
|
||||
pattern AnnotatedText', reannotate)
|
||||
|
||||
|
||||
type ColorText = AnnotatedText Color
|
||||
|
||||
data ANSI
|
||||
|
||||
@ -20,13 +25,10 @@ data Color
|
||||
| Bold
|
||||
deriving (Eq, Ord, Bounded, Enum, Show, Read)
|
||||
|
||||
_unhighlighted :: AnnotatedText a -> AnnotatedText a
|
||||
_unhighlighted s = const Nothing <$> s
|
||||
style :: Color -> ColorText -> ColorText
|
||||
style = reannotate
|
||||
|
||||
style :: a -> AnnotatedText a -> AnnotatedText a
|
||||
style c s = const (Just c) <$> s
|
||||
|
||||
renderText :: AnnotatedText Color -> Rendered ANSI
|
||||
renderText :: ColorText -> Rendered ANSI
|
||||
renderText (AnnotatedText' chunks) =
|
||||
(snd $ foldl' go (Nothing, mempty) chunks) <> resetANSI
|
||||
where go :: (Maybe Color, Rendered ANSI) -> (String, Maybe Color) -> (Maybe Color, Rendered ANSI)
|
||||
@ -58,3 +60,12 @@ renderText (AnnotatedText' chunks) =
|
||||
HiCyan -> [ANSI.SetColor ANSI.Foreground ANSI.Vivid ANSI.Cyan]
|
||||
HiWhite -> [ANSI.SetColor ANSI.Foreground ANSI.Vivid ANSI.White]
|
||||
Bold -> [ANSI.SetConsoleIntensity ANSI.BoldIntensity]
|
||||
|
||||
newtype Rendered a = Rendered { _rawRender :: Seq String }
|
||||
deriving (Semigroup, Monoid)
|
||||
|
||||
instance Show (Rendered a) where
|
||||
show (Rendered chunks) = asum chunks
|
||||
|
||||
instance IsString (Rendered ANSI) where
|
||||
fromString s = Rendered (pure s)
|
||||
|
@ -14,13 +14,13 @@ import Data.String (IsString, fromString)
|
||||
import Data.Strings (strPadLeft)
|
||||
import Safe (atMay)
|
||||
import qualified Text.Read as Read
|
||||
import Unison.Util.AnnotatedText (AnnotatedText, textEmpty)
|
||||
import Unison.Util.ColorText (Color, renderText)
|
||||
import Unison.Util.AnnotatedText (textEmpty)
|
||||
import Unison.Util.ColorText (ColorText, renderText)
|
||||
import Unison.Util.Monoid (intercalateMap)
|
||||
-- utility - command line menus
|
||||
|
||||
type Caption = AnnotatedText Color
|
||||
type Stylized = AnnotatedText Color
|
||||
type Caption = ColorText
|
||||
type Stylized = ColorText
|
||||
type Keyword = String
|
||||
type Console = IO String
|
||||
|
||||
|
@ -7,9 +7,9 @@ import qualified Data.Map as Map
|
||||
import EasyTest
|
||||
import Text.RawString.QQ
|
||||
import Unison.Lexer (Pos (..))
|
||||
import Unison.Util.AnnotatedText (AnnotatedExcerpt (..), Rendered,
|
||||
import Unison.Util.AnnotatedText (AnnotatedExcerpt (..),
|
||||
condensedExcerptToText, markup)
|
||||
import Unison.Util.ColorText (ANSI, Color (..), renderText)
|
||||
import Unison.Util.ColorText (ANSI, Color (..), Rendered, renderText)
|
||||
import qualified Unison.Util.ColorText as ColorText
|
||||
import Unison.Util.Range (Range (..))
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user