ghcide-1.7.0.0: The core of an IDE
Safe HaskellNone
LanguageHaskell2010

Development.IDE

Synopsis

Documentation

(<>) :: Semigroup a => a -> a -> a infixr 6 #

An associative operation.

>>> [1,2,3] <> [4,5,6]
[1,2,3,4,5,6]

data ParseResult a #

The result of running a parser.

Constructors

POk

The parser has consumed a (possibly empty) prefix of the input and produced a result. Use getMessages to check for accumulated warnings and non-fatal errors.

Fields

  • PState

    The resulting parsing state. Can be used to resume parsing.

  • a

    The resulting value.

PFailed

The parser has consumed a (possibly empty) prefix of the input and failed.

Fields

action :: Action a -> Rules () #

type family RuleResult key #

The type mapping between the key or a rule and the resulting value.

Instances

Instances details
type RuleResult NonLocalCompletions Source # 
Instance details

Defined in Development.IDE.Plugin.Completions.Types

type RuleResult LocalCompletions Source #

Produce completions info for a file

Instance details

Defined in Development.IDE.Plugin.Completions.Types

type RuleResult GhcSessionIO Source # 
Instance details

Defined in Development.IDE.Core.RuleTypes

type RuleResult AddWatchedFile Source # 
Instance details

Defined in Development.IDE.Core.RuleTypes

type RuleResult GetClientSettings Source # 
Instance details

Defined in Development.IDE.Core.RuleTypes

type RuleResult GetModSummary Source #

Generate a ModSummary that has enough information to be used to get .hi and .hie files. without needing to parse the entire source

Instance details

Defined in Development.IDE.Core.RuleTypes

type RuleResult GetModSummaryWithoutTimestamps Source #

Generate a ModSummary with the timestamps and preprocessed content elided, for more successful early cutoff

Instance details

Defined in Development.IDE.Core.RuleTypes

type RuleResult IsFileOfInterest Source # 
Instance details

Defined in Development.IDE.Core.RuleTypes

type RuleResult GetModIface Source #

Get a module interface details, either from an interface file or a typechecked module

Instance details

Defined in Development.IDE.Core.RuleTypes

type RuleResult GetModIfaceFromDiskAndIndex Source #

GetModIfaceFromDisk and index the `.hie` file into the database. This is an internal rule, use GetModIface instead.

Instance details

Defined in Development.IDE.Core.RuleTypes

type RuleResult GetModIfaceFromDisk Source #

Read the module interface file from disk. Throws an error for VFS files. This is an internal rule, use GetModIface instead.

Instance details

Defined in Development.IDE.Core.RuleTypes

type RuleResult GhcSessionDeps Source #

A GHC session preloaded with all the dependencies This rule is also responsible for calling ReportImportCycles for the direct dependencies

Instance details

Defined in Development.IDE.Core.RuleTypes

type RuleResult GhcSession Source #

A GHC session that we reuse.

Instance details

Defined in Development.IDE.Core.RuleTypes

type RuleResult GetBindings Source #

A IntervalMap telling us what is in scope at each point

Instance details

Defined in Development.IDE.Core.RuleTypes

type RuleResult GetHieAst Source #

The uncompressed HieAST

Instance details

Defined in Development.IDE.Core.RuleTypes

type RuleResult GetDocMap Source # 
Instance details

Defined in Development.IDE.Core.RuleTypes

type RuleResult TypeCheck Source #

The type checked version of this file, requires TypeCheck+

Instance details

Defined in Development.IDE.Core.RuleTypes

type RuleResult ReportImportCycles Source #

This rule is used to report import cycles. It depends on GetDependencyInformation. We cannot report the cycles directly from GetDependencyInformation since we can only report diagnostics for the current file.

Instance details

Defined in Development.IDE.Core.RuleTypes

type RuleResult GetModuleGraph Source # 
Instance details

Defined in Development.IDE.Core.RuleTypes

type RuleResult GetDependencyInformation Source #

The dependency information produced by following the imports recursively. This rule will succeed even if there is an error, e.g., a module could not be located, a module could not be parsed or an import cycle.

Instance details

Defined in Development.IDE.Core.RuleTypes

type RuleResult NeedsCompilation Source #

Does this module need to be compiled?

Instance details

Defined in Development.IDE.Core.RuleTypes

type RuleResult GetLocatedImports Source #

Resolve the imports in a module to the file path of a module in the same package

Instance details

Defined in Development.IDE.Core.RuleTypes

type RuleResult GetParsedModuleWithComments Source #

The parse tree for the file using GetFileContents, all comments included using Opt_KeepRawTokenStream

Instance details

Defined in Development.IDE.Core.RuleTypes

type RuleResult GetParsedModule Source #

The parse tree for the file using GetFileContents

Instance details

Defined in Development.IDE.Core.RuleTypes

type RuleResult GetFileExists Source # 
Instance details

Defined in Development.IDE.Core.RuleTypes

type RuleResult GetFileContents Source #

Get the contents of a file, either dirty (if the buffer is modified) or Nothing to mean use from disk.

Instance details

Defined in Development.IDE.Core.RuleTypes

type RuleResult GetModificationTime Source #

Get the modification time of a file.

Instance details

Defined in Development.IDE.Core.RuleTypes

type RuleResult GetImportMap Source # 
Instance details

Defined in Development.IDE.Core.RuleTypes

type RuleResult GenerateCore Source #

Convert to Core, requires TypeCheck*

Instance details

Defined in Development.IDE.Core.RuleTypes

type RuleResult GetKnownTargets Source # 
Instance details

Defined in Development.IDE.Core.RuleTypes

type RuleResult GetAnnotatedParsedSource Source # 
Instance details

Defined in Development.IDE.GHC.ExactPrint

type RuleResult GetGlobalBindingTypeSigs Source # 
Instance details

Defined in Development.IDE.Plugin.TypeLenses

type RuleResult (Q k) Source # 
Instance details

Defined in Development.IDE.Types.Shake

type RuleResult (Q k) = A (RuleResult k)

data Rules a #

Instances

Instances details
Monad Rules 
Instance details

Defined in Development.IDE.Graph.Internal.Types

Methods

(>>=) :: Rules a -> (a -> Rules b) -> Rules b #

(>>) :: Rules a -> Rules b -> Rules b #

return :: a -> Rules a #

Functor Rules 
Instance details

Defined in Development.IDE.Graph.Internal.Types

Methods

fmap :: (a -> b) -> Rules a -> Rules b #

(<$) :: a -> Rules b -> Rules a #

MonadFail Rules 
Instance details

Defined in Development.IDE.Graph.Internal.Types

Methods

fail :: String -> Rules a #

Applicative Rules 
Instance details

Defined in Development.IDE.Graph.Internal.Types

Methods

pure :: a -> Rules a #

(<*>) :: Rules (a -> b) -> Rules a -> Rules b #

liftA2 :: (a -> b -> c) -> Rules a -> Rules b -> Rules c #

(*>) :: Rules a -> Rules b -> Rules b #

(<*) :: Rules a -> Rules b -> Rules a #

MonadIO Rules 
Instance details

Defined in Development.IDE.Graph.Internal.Types

Methods

liftIO :: IO a -> Rules a #

Semigroup a => Semigroup (Rules a) 
Instance details

Defined in Development.IDE.Graph.Internal.Types

Methods

(<>) :: Rules a -> Rules a -> Rules a #

sconcat :: NonEmpty (Rules a) -> Rules a #

stimes :: Integral b => b -> Rules a -> Rules a #

Monoid a => Monoid (Rules a) 
Instance details

Defined in Development.IDE.Graph.Internal.Types

Methods

mempty :: Rules a #

mappend :: Rules a -> Rules a -> Rules a #

mconcat :: [Rules a] -> Rules a #

data Action a #

Instances

Instances details
Monad Action 
Instance details

Defined in Development.IDE.Graph.Internal.Types

Methods

(>>=) :: Action a -> (a -> Action b) -> Action b #

(>>) :: Action a -> Action b -> Action b #

return :: a -> Action a #

Functor Action 
Instance details

Defined in Development.IDE.Graph.Internal.Types

Methods

fmap :: (a -> b) -> Action a -> Action b #

(<$) :: a -> Action b -> Action a #

MonadFail Action 
Instance details

Defined in Development.IDE.Graph.Internal.Types

Methods

fail :: String -> Action a #

Applicative Action 
Instance details

Defined in Development.IDE.Graph.Internal.Types

Methods

pure :: a -> Action a #

(<*>) :: Action (a -> b) -> Action a -> Action b #

liftA2 :: (a -> b -> c) -> Action a -> Action b -> Action c #

(*>) :: Action a -> Action b -> Action b #

(<*) :: Action a -> Action b -> Action a #

MonadIO Action 
Instance details

Defined in Development.IDE.Graph.Internal.Types

Methods

liftIO :: IO a -> Action a #

MonadThrow Action 
Instance details

Defined in Development.IDE.Graph.Internal.Types

Methods

throwM :: Exception e => e -> Action a #

MonadCatch Action 
Instance details

Defined in Development.IDE.Graph.Internal.Types

Methods

catch :: Exception e => Action a -> (e -> Action a) -> Action a #

MonadMask Action 
Instance details

Defined in Development.IDE.Graph.Internal.Types

Methods

mask :: ((forall a. Action a -> Action a) -> Action b) -> Action b #

uninterruptibleMask :: ((forall a. Action a -> Action a) -> Action b) -> Action b #

generalBracket :: Action a -> (a -> ExitCase b -> Action c) -> (a -> Action b) -> Action (b, c) #

getClientConfig :: MonadLsp Config m => m Config #

Returns the current client configuration. It is not wise to permanently cache the returned value of this function, as clients can at runitime change their configuration.

data NormalizedUri #

Instances

Instances details
Eq NormalizedUri 
Instance details

Defined in Language.LSP.Types.Uri

Ord NormalizedUri 
Instance details

Defined in Language.LSP.Types.Uri

Read NormalizedUri 
Instance details

Defined in Language.LSP.Types.Uri

Show NormalizedUri 
Instance details

Defined in Language.LSP.Types.Uri

Generic NormalizedUri 
Instance details

Defined in Language.LSP.Types.Uri

Associated Types

type Rep NormalizedUri :: Type -> Type #

Hashable NormalizedUri 
Instance details

Defined in Language.LSP.Types.Uri

NFData NormalizedUri 
Instance details

Defined in Language.LSP.Types.Uri

Methods

rnf :: NormalizedUri -> () #

type Rep NormalizedUri 
Instance details

Defined in Language.LSP.Types.Uri

type Rep NormalizedUri = D1 ('MetaData "NormalizedUri" "Language.LSP.Types.Uri" "lsp-types-1.4.0.1-KkYKenBF7kF5FxcHFj59QO" 'False) (C1 ('MetaCons "NormalizedUri" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Int) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Text)))

data Diagnostic #

Instances

Instances details
Eq Diagnostic 
Instance details

Defined in Language.LSP.Types.Diagnostic

Ord Diagnostic 
Instance details

Defined in Language.LSP.Types.Diagnostic

Read Diagnostic 
Instance details

Defined in Language.LSP.Types.Diagnostic

Show Diagnostic 
Instance details

Defined in Language.LSP.Types.Diagnostic

Generic Diagnostic 
Instance details

Defined in Language.LSP.Types.Diagnostic

Associated Types

type Rep Diagnostic :: Type -> Type #

ToJSON Diagnostic 
Instance details

Defined in Language.LSP.Types.Diagnostic

FromJSON Diagnostic 
Instance details

Defined in Language.LSP.Types.Diagnostic

NFData Diagnostic 
Instance details

Defined in Language.LSP.Types.Diagnostic

Methods

rnf :: Diagnostic -> () #

HasMessage Diagnostic Text 
Instance details

Defined in Language.LSP.Types.Lens

HasRange Diagnostic Range 
Instance details

Defined in Language.LSP.Types.Lens

HasRelatedInformation Diagnostic (Maybe (List DiagnosticRelatedInformation)) 
Instance details

Defined in Language.LSP.Types.Lens

HasSeverity Diagnostic (Maybe DiagnosticSeverity) 
Instance details

Defined in Language.LSP.Types.Lens

HasSource Diagnostic (Maybe DiagnosticSource) 
Instance details

Defined in Language.LSP.Types.Lens

HasCode Diagnostic (Maybe (Int32 |? Text)) 
Instance details

Defined in Language.LSP.Types.Lens

HasDiagnostics CodeAction (Maybe (List Diagnostic)) 
Instance details

Defined in Language.LSP.Types.Lens

HasDiagnostics CodeActionContext (List Diagnostic) 
Instance details

Defined in Language.LSP.Types.Lens

HasDiagnostics PublishDiagnosticsParams (List Diagnostic) 
Instance details

Defined in Language.LSP.Types.Lens

HasTags Diagnostic (Maybe (List DiagnosticTag)) 
Instance details

Defined in Language.LSP.Types.Lens

type Rep Diagnostic 
Instance details

Defined in Language.LSP.Types.Diagnostic

data DiagnosticSeverity #

Constructors

DsError

Error = 1,

DsWarning

Warning = 2,

DsInfo

Info = 3,

DsHint

Hint = 4

Instances

Instances details
Eq DiagnosticSeverity 
Instance details

Defined in Language.LSP.Types.Diagnostic

Ord DiagnosticSeverity 
Instance details

Defined in Language.LSP.Types.Diagnostic

Read DiagnosticSeverity 
Instance details

Defined in Language.LSP.Types.Diagnostic

Show DiagnosticSeverity 
Instance details

Defined in Language.LSP.Types.Diagnostic

Generic DiagnosticSeverity 
Instance details

Defined in Language.LSP.Types.Diagnostic

Associated Types

type Rep DiagnosticSeverity :: Type -> Type #

ToJSON DiagnosticSeverity 
Instance details

Defined in Language.LSP.Types.Diagnostic

FromJSON DiagnosticSeverity 
Instance details

Defined in Language.LSP.Types.Diagnostic

NFData DiagnosticSeverity 
Instance details

Defined in Language.LSP.Types.Diagnostic

Methods

rnf :: DiagnosticSeverity -> () #

HasSeverity Diagnostic (Maybe DiagnosticSeverity) 
Instance details

Defined in Language.LSP.Types.Lens

type Rep DiagnosticSeverity 
Instance details

Defined in Language.LSP.Types.Diagnostic

type Rep DiagnosticSeverity = D1 ('MetaData "DiagnosticSeverity" "Language.LSP.Types.Diagnostic" "lsp-types-1.4.0.1-KkYKenBF7kF5FxcHFj59QO" 'False) ((C1 ('MetaCons "DsError" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "DsWarning" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "DsInfo" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "DsHint" 'PrefixI 'False) (U1 :: Type -> Type)))

data Location #

Constructors

Location 

Fields

Instances

Instances details
Eq Location 
Instance details

Defined in Language.LSP.Types.Location

Ord Location 
Instance details

Defined in Language.LSP.Types.Location

Read Location 
Instance details

Defined in Language.LSP.Types.Location

Show Location 
Instance details

Defined in Language.LSP.Types.Location

Generic Location 
Instance details

Defined in Language.LSP.Types.Location

Associated Types

type Rep Location :: Type -> Type #

Methods

from :: Location -> Rep Location x #

to :: Rep Location x -> Location #

ToJSON Location 
Instance details

Defined in Language.LSP.Types.Location

FromJSON Location 
Instance details

Defined in Language.LSP.Types.Location

NFData Location 
Instance details

Defined in Language.LSP.Types.Location

Methods

rnf :: Location -> () #

HasLocation DiagnosticRelatedInformation Location 
Instance details

Defined in Language.LSP.Types.Lens

HasLocation SymbolInformation Location 
Instance details

Defined in Language.LSP.Types.Lens

HasRange Location Range 
Instance details

Defined in Language.LSP.Types.Lens

HasUri Location Uri 
Instance details

Defined in Language.LSP.Types.Lens

Methods

uri :: Lens' Location Uri #

type Rep Location 
Instance details

Defined in Language.LSP.Types.Location

type Rep Location = D1 ('MetaData "Location" "Language.LSP.Types.Location" "lsp-types-1.4.0.1-KkYKenBF7kF5FxcHFj59QO" 'False) (C1 ('MetaCons "Location" 'PrefixI 'True) (S1 ('MetaSel ('Just "_uri") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 Uri) :*: S1 ('MetaSel ('Just "_range") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 Range)))

data Range #

Constructors

Range 

Fields

Instances

Instances details
Eq Range 
Instance details

Defined in Language.LSP.Types.Location

Methods

(==) :: Range -> Range -> Bool #

(/=) :: Range -> Range -> Bool #

Ord Range 
Instance details

Defined in Language.LSP.Types.Location

Methods

compare :: Range -> Range -> Ordering #

(<) :: Range -> Range -> Bool #

(<=) :: Range -> Range -> Bool #

(>) :: Range -> Range -> Bool #

(>=) :: Range -> Range -> Bool #

max :: Range -> Range -> Range #

min :: Range -> Range -> Range #

Read Range 
Instance details

Defined in Language.LSP.Types.Location

Show Range 
Instance details

Defined in Language.LSP.Types.Location

Methods

showsPrec :: Int -> Range -> ShowS #

show :: Range -> String #

showList :: [Range] -> ShowS #

Generic Range 
Instance details

Defined in Language.LSP.Types.Location

Associated Types

type Rep Range :: Type -> Type #

Methods

from :: Range -> Rep Range x #

to :: Rep Range x -> Range #

ToJSON Range 
Instance details

Defined in Language.LSP.Types.Location

FromJSON Range 
Instance details

Defined in Language.LSP.Types.Location

NFData Range 
Instance details

Defined in Language.LSP.Types.Location

Methods

rnf :: Range -> () #

MapAge Range Source # 
Instance details

Defined in Development.IDE.Core.UseStale

Methods

mapAgeFrom :: forall (from :: Age) (to :: Age). PositionMap from to -> Tracked to Range -> Maybe (Tracked from Range) Source #

mapAgeTo :: forall (from :: Age) (to :: Age). PositionMap from to -> Tracked from Range -> Maybe (Tracked to Range) Source #

HasSelectionRange CallHierarchyItem Range 
Instance details

Defined in Language.LSP.Types.Lens

HasSelectionRange DocumentSymbol Range 
Instance details

Defined in Language.LSP.Types.Lens

HasInsert InsertReplaceEdit Range 
Instance details

Defined in Language.LSP.Types.Lens

HasRepalce InsertReplaceEdit Range 
Instance details

Defined in Language.LSP.Types.Lens

HasTargetRange LocationLink Range 
Instance details

Defined in Language.LSP.Types.Lens

HasTargetSelectionRange LocationLink Range 
Instance details

Defined in Language.LSP.Types.Lens

HasRange CodeActionParams Range 
Instance details

Defined in Language.LSP.Types.Lens

HasRange ColorPresentationParams Range 
Instance details

Defined in Language.LSP.Types.Lens

HasRange ColorInformation Range 
Instance details

Defined in Language.LSP.Types.Lens

HasRange AnnotatedTextEdit Range 
Instance details

Defined in Language.LSP.Types.Lens

HasRange TextEdit Range 
Instance details

Defined in Language.LSP.Types.Lens

HasRange CallHierarchyItem Range 
Instance details

Defined in Language.LSP.Types.Lens

HasRange CodeLens Range 
Instance details

Defined in Language.LSP.Types.Lens

HasRange Diagnostic Range 
Instance details

Defined in Language.LSP.Types.Lens

HasRange DocumentHighlight Range 
Instance details

Defined in Language.LSP.Types.Lens

HasRange DocumentLink Range 
Instance details

Defined in Language.LSP.Types.Lens

HasRange DocumentSymbol Range 
Instance details

Defined in Language.LSP.Types.Lens

HasRange DocumentRangeFormattingParams Range 
Instance details

Defined in Language.LSP.Types.Lens

HasRange RangeWithPlaceholder Range 
Instance details

Defined in Language.LSP.Types.Lens

HasRange SelectionRange Range 
Instance details

Defined in Language.LSP.Types.Lens

HasRange SemanticTokensRangeParams Range 
Instance details

Defined in Language.LSP.Types.Lens

HasRange Location Range 
Instance details

Defined in Language.LSP.Types.Lens

HasEnd Range Position 
Instance details

Defined in Language.LSP.Types.Lens

HasStart Range Position 
Instance details

Defined in Language.LSP.Types.Lens

HasFromRanges CallHierarchyOutgoingCall (List Range) 
Instance details

Defined in Language.LSP.Types.Lens

HasFromRanges CallHierarchyIncomingCall (List Range) 
Instance details

Defined in Language.LSP.Types.Lens

HasSelection ShowDocumentParams (Maybe Range) 
Instance details

Defined in Language.LSP.Types.Lens

HasOriginSelectionRange LocationLink (Maybe Range) 
Instance details

Defined in Language.LSP.Types.Lens

HasRange Hover (Maybe Range) 
Instance details

Defined in Language.LSP.Types.Lens

HasRange TextDocumentContentChangeEvent (Maybe Range) 
Instance details

Defined in Language.LSP.Types.Lens

type Rep Range 
Instance details

Defined in Language.LSP.Types.Location

type Rep Range = D1 ('MetaData "Range" "Language.LSP.Types.Location" "lsp-types-1.4.0.1-KkYKenBF7kF5FxcHFj59QO" 'False) (C1 ('MetaCons "Range" 'PrefixI 'True) (S1 ('MetaSel ('Just "_start") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 Position) :*: S1 ('MetaSel ('Just "_end") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 Position)))

data Position #

Constructors

Position 

Fields

  • _line :: UInt

    Line position in a document (zero-based).

  • _character :: UInt

    Character offset on a line in a document (zero-based). Assuming that the line is represented as a string, the character value represents the gap between the character and character + 1.

Instances

Instances details
Eq Position 
Instance details

Defined in Language.LSP.Types.Location

Ord Position 
Instance details

Defined in Language.LSP.Types.Location

Read Position 
Instance details

Defined in Language.LSP.Types.Location

Show Position 
Instance details

Defined in Language.LSP.Types.Location

Generic Position 
Instance details

Defined in Language.LSP.Types.Location

Associated Types

type Rep Position :: Type -> Type #

Methods

from :: Position -> Rep Position x #

to :: Rep Position x -> Position #

ToJSON Position 
Instance details

Defined in Language.LSP.Types.Location

FromJSON Position 
Instance details

Defined in Language.LSP.Types.Location

NFData Position 
Instance details

Defined in Language.LSP.Types.Location

Methods

rnf :: Position -> () #

HasPosition CompletionParams Position 
Instance details

Defined in Language.LSP.Types.Lens

HasPosition CallHierarchyPrepareParams Position 
Instance details

Defined in Language.LSP.Types.Lens

HasPosition DeclarationParams Position 
Instance details

Defined in Language.LSP.Types.Lens

HasPosition DefinitionParams Position 
Instance details

Defined in Language.LSP.Types.Lens

HasPosition DocumentHighlightParams Position 
Instance details

Defined in Language.LSP.Types.Lens

HasPosition DocumentOnTypeFormattingParams Position 
Instance details

Defined in Language.LSP.Types.Lens

HasPosition HoverParams Position 
Instance details

Defined in Language.LSP.Types.Lens

HasPosition ImplementationParams Position 
Instance details

Defined in Language.LSP.Types.Lens

HasPosition ReferenceParams Position 
Instance details

Defined in Language.LSP.Types.Lens

HasPosition PrepareRenameParams Position 
Instance details

Defined in Language.LSP.Types.Lens

HasPosition RenameParams Position 
Instance details

Defined in Language.LSP.Types.Lens

HasPosition TypeDefinitionParams Position 
Instance details

Defined in Language.LSP.Types.Lens

HasPosition TextDocumentPositionParams Position 
Instance details

Defined in Language.LSP.Types.Lens

HasEnd Range Position 
Instance details

Defined in Language.LSP.Types.Lens

HasStart Range Position 
Instance details

Defined in Language.LSP.Types.Lens

HasCharacter Position UInt 
Instance details

Defined in Language.LSP.Types.Lens

HasLine Position UInt 
Instance details

Defined in Language.LSP.Types.Lens

HasPositions SelectionRangeParams (List Position) 
Instance details

Defined in Language.LSP.Types.Lens

type Rep Position 
Instance details

Defined in Language.LSP.Types.Location

type Rep Position = D1 ('MetaData "Position" "Language.LSP.Types.Location" "lsp-types-1.4.0.1-KkYKenBF7kF5FxcHFj59QO" 'False) (C1 ('MetaCons "Position" 'PrefixI 'True) (S1 ('MetaSel ('Just "_line") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 UInt) :*: S1 ('MetaSel ('Just "_character") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 UInt)))

newtype Uri #

Constructors

Uri 

Fields

Instances

Instances details
Eq Uri 
Instance details

Defined in Language.LSP.Types.Uri

Methods

(==) :: Uri -> Uri -> Bool #

(/=) :: Uri -> Uri -> Bool #

Ord Uri 
Instance details

Defined in Language.LSP.Types.Uri

Methods

compare :: Uri -> Uri -> Ordering #

(<) :: Uri -> Uri -> Bool #

(<=) :: Uri -> Uri -> Bool #

(>) :: Uri -> Uri -> Bool #

(>=) :: Uri -> Uri -> Bool #

max :: Uri -> Uri -> Uri #

min :: Uri -> Uri -> Uri #

Read Uri 
Instance details

Defined in Language.LSP.Types.Uri

Show Uri 
Instance details

Defined in Language.LSP.Types.Uri

Methods

showsPrec :: Int -> Uri -> ShowS #

show :: Uri -> String #

showList :: [Uri] -> ShowS #

Generic Uri 
Instance details

Defined in Language.LSP.Types.Uri

Associated Types

type Rep Uri :: Type -> Type #

Methods

from :: Uri -> Rep Uri x #

to :: Rep Uri x -> Uri #

Hashable Uri 
Instance details

Defined in Language.LSP.Types.Uri

Methods

hashWithSalt :: Int -> Uri -> Int #

hash :: Uri -> Int #

ToJSON Uri 
Instance details

Defined in Language.LSP.Types.Uri

ToJSONKey Uri 
Instance details

Defined in Language.LSP.Types.Uri

FromJSON Uri 
Instance details

Defined in Language.LSP.Types.Uri

FromJSONKey Uri 
Instance details

Defined in Language.LSP.Types.Uri

NFData Uri 
Instance details

Defined in Language.LSP.Types.Uri

Methods

rnf :: Uri -> () #

HasNewUri RenameFile Uri 
Instance details

Defined in Language.LSP.Types.Lens

HasOldUri RenameFile Uri 
Instance details

Defined in Language.LSP.Types.Lens

HasTargetUri LocationLink Uri 
Instance details

Defined in Language.LSP.Types.Lens

HasUri DeleteFile Uri 
Instance details

Defined in Language.LSP.Types.Lens

HasUri CreateFile Uri 
Instance details

Defined in Language.LSP.Types.Lens

HasUri ShowDocumentParams Uri 
Instance details

Defined in Language.LSP.Types.Lens

HasUri FileEvent Uri 
Instance details

Defined in Language.LSP.Types.Lens

Methods

uri :: Lens' FileEvent Uri #

HasUri CallHierarchyItem Uri 
Instance details

Defined in Language.LSP.Types.Lens

HasUri PublishDiagnosticsParams Uri 
Instance details

Defined in Language.LSP.Types.Lens

HasUri TextDocumentItem Uri 
Instance details

Defined in Language.LSP.Types.Lens

HasUri VersionedTextDocumentIdentifier Uri 
Instance details

Defined in Language.LSP.Types.Lens

HasUri TextDocumentIdentifier Uri 
Instance details

Defined in Language.LSP.Types.Lens

HasUri Location Uri 
Instance details

Defined in Language.LSP.Types.Lens

Methods

uri :: Lens' Location Uri #

HasTarget DocumentLink (Maybe Uri) 
Instance details

Defined in Language.LSP.Types.Lens

HasChanges WorkspaceEdit (Maybe WorkspaceEditMap) 
Instance details

Defined in Language.LSP.Types.Lens

HasRootUri InitializeParams (Maybe Uri) 
Instance details

Defined in Language.LSP.Types.Lens

type Rep Uri 
Instance details

Defined in Language.LSP.Types.Uri

type Rep Uri = D1 ('MetaData "Uri" "Language.LSP.Types.Uri" "lsp-types-1.4.0.1-KkYKenBF7kF5FxcHFj59QO" 'True) (C1 ('MetaCons "Uri" 'PrefixI 'True) (S1 ('MetaSel ('Just "getUri") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text)))

data NormalizedFilePath #

Newtype wrapper around FilePath that always has normalized slashes. The NormalizedUri and hash of the FilePath are cached to avoided repeated normalisation when we need to compute them (which is a lot).

This is one of the most performance critical parts of ghcide, do not modify it without profiling.

Instances

Instances details
Eq NormalizedFilePath 
Instance details

Defined in Language.LSP.Types.Uri

Ord NormalizedFilePath 
Instance details

Defined in Language.LSP.Types.Uri

Show NormalizedFilePath 
Instance details

Defined in Language.LSP.Types.Uri

IsString NormalizedFilePath 
Instance details

Defined in Language.LSP.Types.Uri

Generic NormalizedFilePath 
Instance details

Defined in Language.LSP.Types.Uri

Associated Types

type Rep NormalizedFilePath :: Type -> Type #

Hashable NormalizedFilePath 
Instance details

Defined in Language.LSP.Types.Uri

Binary NormalizedFilePath 
Instance details

Defined in Language.LSP.Types.Uri

NFData NormalizedFilePath 
Instance details

Defined in Language.LSP.Types.Uri

Methods

rnf :: NormalizedFilePath -> () #

type Rep NormalizedFilePath 
Instance details

Defined in Language.LSP.Types.Uri

type Rep NormalizedFilePath = D1 ('MetaData "NormalizedFilePath" "Language.LSP.Types.Uri" "lsp-types-1.4.0.1-KkYKenBF7kF5FxcHFj59QO" 'False) (C1 ('MetaCons "NormalizedFilePath" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 NormalizedUri) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 FilePath)))

newtype List a #

All LSP types representing a list **must** use this type rather than '[]'. In particular this is necessary to change the FromJSON instance to be compatible with Elisp (where empty lists show up as null)

Constructors

List [a] 

Instances

Instances details
Functor List 
Instance details

Defined in Language.LSP.Types.Common

Methods

fmap :: (a -> b) -> List a -> List b #

(<$) :: a -> List b -> List a #

Foldable List 
Instance details

Defined in Language.LSP.Types.Common

Methods

fold :: Monoid m => List m -> m #

foldMap :: Monoid m => (a -> m) -> List a -> m #

foldMap' :: Monoid m => (a -> m) -> List a -> m #

foldr :: (a -> b -> b) -> b -> List a -> b #

foldr' :: (a -> b -> b) -> b -> List a -> b #

foldl :: (b -> a -> b) -> b -> List a -> b #

foldl' :: (b -> a -> b) -> b -> List a -> b #

foldr1 :: (a -> a -> a) -> List a -> a #

foldl1 :: (a -> a -> a) -> List a -> a #

toList :: List a -> [a] #

null :: List a -> Bool #

length :: List a -> Int #

elem :: Eq a => a -> List a -> Bool #

maximum :: Ord a => List a -> a #

minimum :: Ord a => List a -> a #

sum :: Num a => List a -> a #

product :: Num a => List a -> a #

Traversable List 
Instance details

Defined in Language.LSP.Types.Common

Methods

traverse :: Applicative f => (a -> f b) -> List a -> f (List b) #

sequenceA :: Applicative f => List (f a) -> f (List a) #

mapM :: Monad m => (a -> m b) -> List a -> m (List b) #

sequence :: Monad m => List (m a) -> m (List a) #

HasFormats SemanticTokensClientCapabilities (List TokenFormat) 
Instance details

Defined in Language.LSP.Types.Lens

HasTokenModifiers SemanticTokensClientCapabilities (List SemanticTokenModifiers) 
Instance details

Defined in Language.LSP.Types.Lens

HasTokenModifiers SemanticTokensLegend (List SemanticTokenModifiers) 
Instance details

Defined in Language.LSP.Types.Lens

HasTokenTypes SemanticTokensClientCapabilities (List SemanticTokenTypes) 
Instance details

Defined in Language.LSP.Types.Lens

HasTokenTypes SemanticTokensLegend (List SemanticTokenTypes) 
Instance details

Defined in Language.LSP.Types.Lens

HasFromRanges CallHierarchyOutgoingCall (List Range) 
Instance details

Defined in Language.LSP.Types.Lens

HasFromRanges CallHierarchyIncomingCall (List Range) 
Instance details

Defined in Language.LSP.Types.Lens

HasSignatures SignatureHelp (List SignatureInformation) 
Instance details

Defined in Language.LSP.Types.Lens

HasRetriggerCharacters SignatureHelpRegistrationOptions (Maybe (List Text)) 
Instance details

Defined in Language.LSP.Types.Lens

HasRetriggerCharacters SignatureHelpOptions (Maybe (List Text)) 
Instance details

Defined in Language.LSP.Types.Lens

HasContentFormat HoverClientCapabilities (Maybe (List MarkupKind)) 
Instance details

Defined in Language.LSP.Types.Lens

HasRelatedInformation Diagnostic (Maybe (List DiagnosticRelatedInformation)) 
Instance details

Defined in Language.LSP.Types.Lens

HasCommands ExecuteCommandRegistrationOptions (List Text) 
Instance details

Defined in Language.LSP.Types.Lens

HasCommands ExecuteCommandOptions (List Text) 
Instance details

Defined in Language.LSP.Types.Lens

HasArguments Command (Maybe (List Value)) 
Instance details

Defined in Language.LSP.Types.Lens

HasArguments ExecuteCommandParams (Maybe (List Value)) 
Instance details

Defined in Language.LSP.Types.Lens

HasContentChanges DidChangeTextDocumentParams (List TextDocumentContentChangeEvent) 
Instance details

Defined in Language.LSP.Types.Lens

HasAdded WorkspaceFoldersChangeEvent (List WorkspaceFolder) 
Instance details

Defined in Language.LSP.Types.Lens

HasRemoved WorkspaceFoldersChangeEvent (List WorkspaceFolder) 
Instance details

Defined in Language.LSP.Types.Lens

HasResourceOperations WorkspaceEditClientCapabilities (Maybe (List ResourceOperationKind)) 
Instance details

Defined in Language.LSP.Types.Lens

HasDocumentChanges WorkspaceEdit (Maybe (List DocumentChange)) 
Instance details

Defined in Language.LSP.Types.Lens

HasEdits TextDocumentEdit (List (TextEdit |? AnnotatedTextEdit)) 
Instance details

Defined in Language.LSP.Types.Lens

HasEdits SemanticTokensDeltaPartialResult (List SemanticTokensEdit) 
Instance details

Defined in Language.LSP.Types.Lens

HasEdits SemanticTokensDelta (List SemanticTokensEdit) 
Instance details

Defined in Language.LSP.Types.Lens

HasChildren DocumentSymbol (Maybe (List DocumentSymbol)) 
Instance details

Defined in Language.LSP.Types.Lens

HasPositions SelectionRangeParams (List Position) 
Instance details

Defined in Language.LSP.Types.Lens

HasDiagnostics CodeAction (Maybe (List Diagnostic)) 
Instance details

Defined in Language.LSP.Types.Lens

HasDiagnostics CodeActionContext (List Diagnostic) 
Instance details

Defined in Language.LSP.Types.Lens

HasDiagnostics PublishDiagnosticsParams (List Diagnostic) 
Instance details

Defined in Language.LSP.Types.Lens

HasOnly CodeActionContext (Maybe (List CodeActionKind)) 
Instance details

Defined in Language.LSP.Types.Lens

HasCodeActionKinds CodeActionRegistrationOptions (Maybe (List CodeActionKind)) 
Instance details

Defined in Language.LSP.Types.Lens

HasCodeActionKinds CodeActionOptions (Maybe (List CodeActionKind)) 
Instance details

Defined in Language.LSP.Types.Lens

HasDocumentationFormat CompletionItemClientCapabilities (Maybe (List MarkupKind)) 
Instance details

Defined in Language.LSP.Types.Lens

HasDocumentationFormat SignatureHelpSignatureInformation (Maybe (List MarkupKind)) 
Instance details

Defined in Language.LSP.Types.Lens

HasProperties CodeActionResolveClientCapabilities (List Text) 
Instance details

Defined in Language.LSP.Types.Lens

HasProperties CompletionItemResolveClientCapabilities (List Text) 
Instance details

Defined in Language.LSP.Types.Lens

HasDocumentSelector CodeActionRegistrationOptions (Maybe DocumentSelector) 
Instance details

Defined in Language.LSP.Types.Lens

HasDocumentSelector CompletionRegistrationOptions (Maybe DocumentSelector) 
Instance details

Defined in Language.LSP.Types.Lens

HasDocumentSelector DocumentColorRegistrationOptions (Maybe DocumentSelector) 
Instance details

Defined in Language.LSP.Types.Lens

HasDocumentSelector CallHierarchyRegistrationOptions (Maybe DocumentSelector) 
Instance details

Defined in Language.LSP.Types.Lens

HasDocumentSelector CodeLensRegistrationOptions (Maybe DocumentSelector) 
Instance details

Defined in Language.LSP.Types.Lens

HasDocumentSelector DeclarationRegistrationOptions (Maybe DocumentSelector) 
Instance details

Defined in Language.LSP.Types.Lens

HasDocumentSelector DefinitionRegistrationOptions (Maybe DocumentSelector) 
Instance details

Defined in Language.LSP.Types.Lens

HasDocumentSelector DocumentHighlightRegistrationOptions (Maybe DocumentSelector) 
Instance details

Defined in Language.LSP.Types.Lens

HasDocumentSelector DocumentLinkRegistrationOptions (Maybe DocumentSelector) 
Instance details

Defined in Language.LSP.Types.Lens

HasDocumentSelector DocumentSymbolRegistrationOptions (Maybe DocumentSelector) 
Instance details

Defined in Language.LSP.Types.Lens

HasDocumentSelector FoldingRangeRegistrationOptions (Maybe DocumentSelector) 
Instance details

Defined in Language.LSP.Types.Lens

HasDocumentSelector DocumentOnTypeFormattingRegistrationOptions (Maybe DocumentSelector) 
Instance details

Defined in Language.LSP.Types.Lens

HasDocumentSelector DocumentRangeFormattingRegistrationOptions (Maybe DocumentSelector) 
Instance details

Defined in Language.LSP.Types.Lens

HasDocumentSelector DocumentFormattingRegistrationOptions (Maybe DocumentSelector) 
Instance details

Defined in Language.LSP.Types.Lens

HasDocumentSelector HoverRegistrationOptions (Maybe DocumentSelector) 
Instance details

Defined in Language.LSP.Types.Lens

HasDocumentSelector ImplementationRegistrationOptions (Maybe DocumentSelector) 
Instance details

Defined in Language.LSP.Types.Lens

HasDocumentSelector ReferenceRegistrationOptions (Maybe DocumentSelector) 
Instance details

Defined in Language.LSP.Types.Lens

HasDocumentSelector RenameRegistrationOptions (Maybe DocumentSelector) 
Instance details

Defined in Language.LSP.Types.Lens

HasDocumentSelector SelectionRangeRegistrationOptions (Maybe DocumentSelector) 
Instance details

Defined in Language.LSP.Types.Lens

HasDocumentSelector SignatureHelpRegistrationOptions (Maybe DocumentSelector) 
Instance details

Defined in Language.LSP.Types.Lens

HasDocumentSelector TypeDefinitionRegistrationOptions (Maybe DocumentSelector) 
Instance details

Defined in Language.LSP.Types.Lens

HasDocumentSelector TextDocumentSaveRegistrationOptions (Maybe DocumentSelector) 
Instance details

Defined in Language.LSP.Types.Lens

HasDocumentSelector TextDocumentChangeRegistrationOptions (Maybe DocumentSelector) 
Instance details

Defined in Language.LSP.Types.Lens

HasDocumentSelector TextDocumentRegistrationOptions (Maybe DocumentSelector) 
Instance details

Defined in Language.LSP.Types.Lens

HasTriggerCharacters SignatureHelpRegistrationOptions (Maybe (List Text)) 
Instance details

Defined in Language.LSP.Types.Lens

HasTriggerCharacters SignatureHelpOptions (Maybe (List Text)) 
Instance details

Defined in Language.LSP.Types.Lens

HasAdditionalTextEdits CompletionItem (Maybe (List TextEdit)) 
Instance details

Defined in Language.LSP.Types.Lens

HasAdditionalTextEdits ColorPresentation (Maybe (List TextEdit)) 
Instance details

Defined in Language.LSP.Types.Lens

HasCommitCharacters CompletionItem (Maybe (List Text)) 
Instance details

Defined in Language.LSP.Types.Lens

HasTags CompletionItem (Maybe (List CompletionItemTag)) 
Instance details

Defined in Language.LSP.Types.Lens

HasTags CallHierarchyItem (Maybe (List SymbolTag)) 
Instance details

Defined in Language.LSP.Types.Lens

HasTags Diagnostic (Maybe (List DiagnosticTag)) 
Instance details

Defined in Language.LSP.Types.Lens

HasTags SymbolInformation (Maybe (List SymbolTag)) 
Instance details

Defined in Language.LSP.Types.Lens

HasTags DocumentSymbol (Maybe (List SymbolTag)) 
Instance details

Defined in Language.LSP.Types.Lens

HasXdata SemanticTokensEdit (Maybe (List UInt)) 
Instance details

Defined in Language.LSP.Types.Lens

HasXdata SemanticTokensPartialResult (List UInt) 
Instance details

Defined in Language.LSP.Types.Lens

HasXdata SemanticTokens (List UInt) 
Instance details

Defined in Language.LSP.Types.Lens

HasValueSet WorkspaceSymbolKindClientCapabilities (Maybe (List SymbolKind)) 
Instance details

Defined in Language.LSP.Types.Lens

HasValueSet CodeActionKindClientCapabilities (List CodeActionKind) 
Instance details

Defined in Language.LSP.Types.Lens

HasValueSet CompletionItemKindClientCapabilities (Maybe (List CompletionItemKind)) 
Instance details

Defined in Language.LSP.Types.Lens

HasValueSet CompletionItemInsertTextModeClientCapabilities (List InsertTextMode) 
Instance details

Defined in Language.LSP.Types.Lens

HasValueSet CompletionItemTagsClientCapabilities (List CompletionItemTag) 
Instance details

Defined in Language.LSP.Types.Lens

HasValueSet PublishDiagnosticsTagsClientCapabilities (List DiagnosticTag) 
Instance details

Defined in Language.LSP.Types.Lens

HasValueSet DocumentSymbolKindClientCapabilities (Maybe (List SymbolKind)) 
Instance details

Defined in Language.LSP.Types.Lens

HasChanges WorkspaceEdit (Maybe WorkspaceEditMap) 
Instance details

Defined in Language.LSP.Types.Lens

HasChanges DidChangeWatchedFilesParams (List FileEvent) 
Instance details

Defined in Language.LSP.Types.Lens

HasWatchers DidChangeWatchedFilesRegistrationOptions (List FileSystemWatcher) 
Instance details

Defined in Language.LSP.Types.Lens

HasItems CompletionList (List CompletionItem) 
Instance details

Defined in Language.LSP.Types.Lens

HasItems ConfigurationParams (List ConfigurationItem) 
Instance details

Defined in Language.LSP.Types.Lens

HasParameters SignatureInformation (Maybe (List ParameterInformation)) 
Instance details

Defined in Language.LSP.Types.Lens

HasUnregisterations UnregistrationParams (List Unregistration) 
Instance details

Defined in Language.LSP.Types.Lens

HasRegistrations RegistrationParams (List SomeRegistration) 
Instance details

Defined in Language.LSP.Types.Lens

HasWorkspaceFolders InitializeParams (Maybe (List WorkspaceFolder)) 
Instance details

Defined in Language.LSP.Types.Lens

HasRetryOnContentModified StaleRequestClientCapabilities (List Text) 
Instance details

Defined in Language.LSP.Types.Lens

Eq a => Eq (List a) 
Instance details

Defined in Language.LSP.Types.Common

Methods

(==) :: List a -> List a -> Bool #

(/=) :: List a -> List a -> Bool #

Ord a => Ord (List a) 
Instance details

Defined in Language.LSP.Types.Common

Methods

compare :: List a -> List a -> Ordering #

(<) :: List a -> List a -> Bool #

(<=) :: List a -> List a -> Bool #

(>) :: List a -> List a -> Bool #

(>=) :: List a -> List a -> Bool #

max :: List a -> List a -> List a #

min :: List a -> List a -> List a #

Read a => Read (List a) 
Instance details

Defined in Language.LSP.Types.Common

Show a => Show (List a) 
Instance details

Defined in Language.LSP.Types.Common

Methods

showsPrec :: Int -> List a -> ShowS #

show :: List a -> String #

showList :: [List a] -> ShowS #

Generic (List a) 
Instance details

Defined in Language.LSP.Types.Common

Associated Types

type Rep (List a) :: Type -> Type #

Methods

from :: List a -> Rep (List a) x #

to :: Rep (List a) x -> List a #

Semigroup (List a) 
Instance details

Defined in Language.LSP.Types.Common

Methods

(<>) :: List a -> List a -> List a #

sconcat :: NonEmpty (List a) -> List a #

stimes :: Integral b => b -> List a -> List a #

Monoid (List a) 
Instance details

Defined in Language.LSP.Types.Common

Methods

mempty :: List a #

mappend :: List a -> List a -> List a #

mconcat :: [List a] -> List a #

ToJSON a => ToJSON (List a) 
Instance details

Defined in Language.LSP.Types.Common

FromJSON a => FromJSON (List a) 
Instance details

Defined in Language.LSP.Types.Common

NFData a => NFData (List a) 
Instance details

Defined in Language.LSP.Types.Common

Methods

rnf :: List a -> () #

type Rep (List a) 
Instance details

Defined in Language.LSP.Types.Common

type Rep (List a) = D1 ('MetaData "List" "Language.LSP.Types.Common" "lsp-types-1.4.0.1-KkYKenBF7kF5FxcHFj59QO" 'True) (C1 ('MetaCons "List" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [a])))

renderStrict :: SimpleDocStream ann -> Text #

(renderStrict sdoc) takes the output sdoc from a rendering function and transforms it to strict text.

pipe :: Doc ann #

>>> pipe
|

equals :: Doc ann #

>>> equals
=

backslash :: Doc ann #

>>> backslash
\

slash :: Doc ann #

>>> slash
/

dot :: Doc ann #

>>> dot
.

space :: Doc ann #

>>> "a" <> space <> "b"
a b

This is mostly used via <+>,

>>> "a" <+> "b"
a b

comma :: Doc ann #

>>> comma
,

colon :: Doc ann #

>>> colon
:

semi :: Doc ann #

>>> semi
;

rbrace :: Doc ann #

>>> rbrace
}

lbrace :: Doc ann #

>>> lbrace
{

rbracket :: Doc ann #

>>> rbracket
]

lbracket :: Doc ann #

>>> lbracket
[

rangle :: Doc ann #

>>> rangle
>

langle :: Doc ann #

>>> langle
<

rparen :: Doc ann #

>>> rparen
)

lparen :: Doc ann #

>>> lparen
(

dquote :: Doc ann #

>>> dquote
"

squote :: Doc ann #

>>> squote
'

braces :: Doc ann -> Doc ann #

>>> braces "·"
{·}

brackets :: Doc ann -> Doc ann #

>>> brackets "·"
[·]

angles :: Doc ann -> Doc ann #

>>> angles "·"
<·>

parens :: Doc ann -> Doc ann #

>>> parens "·"
(·)

dquotes :: Doc ann -> Doc ann #

>>> dquotes "·"
"·"

squotes :: Doc ann -> Doc ann #

>>> squotes "·"
'·'

layoutCompact :: Doc ann1 -> SimpleDocStream ann2 #

(layoutCompact x) lays out the document x without adding any indentation and without preserving annotations. Since no 'pretty' printing is involved, this layouter is very fast. The resulting output contains fewer characters than a prettyprinted version and can be used for output that is read by other programs.

>>> let doc = hang 4 (vsep ["lorem", "ipsum", hang 4 (vsep ["dolor", "sit"])])
>>> doc
lorem
    ipsum
    dolor
        sit
>>> let putDocCompact = renderIO System.IO.stdout . layoutCompact
>>> putDocCompact doc
lorem
ipsum
dolor
sit

layoutSmart :: LayoutOptions -> Doc ann -> SimpleDocStream ann #

A layout algorithm with more lookahead than layoutPretty, that introduces line breaks earlier if the content does not (or will not, rather) fit into one line.

Consider the following python-ish document,

>>> let fun x = hang 2 ("fun(" <> softline' <> x) <> ")"
>>> let doc = (fun . fun . fun . fun . fun) (align (list ["abcdef", "ghijklm"]))

which we’ll be rendering using the following pipeline (where the layout algorithm has been left open):

>>> import Data.Text.IO as T
>>> import Prettyprinter.Render.Text
>>> let hr = pipe <> pretty (replicate (26-2) '-') <> pipe
>>> let go layouter x = (T.putStrLn . renderStrict . layouter (LayoutOptions (AvailablePerLine 26 1))) (vsep [hr, x, hr])

If we render this using layoutPretty with a page width of 26 characters per line, all the fun calls fit into the first line so they will be put there:

>>> go layoutPretty doc
|------------------------|
fun(fun(fun(fun(fun(
                  [ abcdef
                  , ghijklm ])))))
|------------------------|

Note that this exceeds the desired 26 character page width. The same document, rendered with layoutSmart, fits the layout contstraints:

>>> go layoutSmart doc
|------------------------|
fun(
  fun(
    fun(
      fun(
        fun(
          [ abcdef
          , ghijklm ])))))
|------------------------|

The key difference between layoutPretty and layoutSmart is that the latter will check the potential document until it encounters a line with the same indentation or less than the start of the document. Any line encountered earlier is assumed to belong to the same syntactic structure. layoutPretty checks only the first line.

Consider for example the question of whether the As fit into the document below:

1 A
2   A
3  A
4 B
5   B

layoutPretty will check only line 1, ignoring whether e.g. line 2 might already be too wide. By contrast, layoutSmart stops only once it reaches line 4, where the B has the same indentation as the first A.

layoutPretty :: LayoutOptions -> Doc ann -> SimpleDocStream ann #

This is the default layout algorithm, and it is used by show, putDoc and hPutDoc.

layoutPretty commits to rendering something in a certain way if the next element fits the layout constraints; in other words, it has one SimpleDocStream element lookahead when rendering. Consider using the smarter, but a bit less performant, layoutSmart algorithm if the results seem to run off to the right before having lots of line breaks.

defaultLayoutOptions :: LayoutOptions #

The default layout options, suitable when you just want some output, and don’t particularly care about the details. Used by the Show instance, for example.

>>> defaultLayoutOptions
LayoutOptions {layoutPageWidth = AvailablePerLine 80 1.0}

removeTrailingWhitespace :: SimpleDocStream ann -> SimpleDocStream ann #

Remove all trailing space characters.

This has some performance impact, because it does an entire additional pass over the SimpleDocStream.

No trimming will be done inside annotations, which are considered to contain no (trimmable) whitespace, since the annotation might actually be about the whitespace, for example a renderer that colors the background of trailing whitespace, as e.g. git diff can be configured to do.

Historical note: Since v1.7.0, layoutPretty and layoutSmart avoid producing the trailing whitespace that was the original motivation for creating removeTrailingWhitespace. See https://github.com/quchen/prettyprinter/pull/139 for some background info.

fuse :: FusionDepth -> Doc ann -> Doc ann #

(fuse depth doc) combines text nodes so they can be rendered more efficiently. A fused document is always laid out identical to its unfused version.

When laying a Document out to a SimpleDocStream, every component of the input is translated directly to the simpler output format. This sometimes yields undesirable chunking when many pieces have been concatenated together.

For example

>>> "a" <> "b" <> pretty 'c' <> "d"
abcd

results in a chain of four entries in a SimpleDocStream, although this is fully equivalent to the tightly packed

>>> "abcd" :: Doc ann
abcd

which is only a single SimpleDocStream entry, and can be processed faster.

It is therefore a good idea to run fuse on concatenations of lots of small strings that are used many times:

>>> let oftenUsed = fuse Shallow ("a" <> "b" <> pretty 'c' <> "d")
>>> hsep (replicate 5 oftenUsed)
abcd abcd abcd abcd abcd

alterAnnotationsS :: (ann -> Maybe ann') -> SimpleDocStream ann -> SimpleDocStream ann' #

Change the annotation of a document to a different annotation, or none at all. alterAnnotations for SimpleDocStream.

Note that the Doc version is more flexible, since it allows changing a single annotation to multiple ones. (SimpleDocTree restores this flexibility again.)

reAnnotateS :: (ann -> ann') -> SimpleDocStream ann -> SimpleDocStream ann' #

Change the annotation of a document. reAnnotate for SimpleDocStream.

unAnnotateS :: SimpleDocStream ann -> SimpleDocStream xxx #

Remove all annotations. unAnnotate for SimpleDocStream.

alterAnnotations :: (ann -> [ann']) -> Doc ann -> Doc ann' #

Change the annotations of a Document. Individual annotations can be removed, changed, or replaced by multiple ones.

This is a general function that combines unAnnotate and reAnnotate, and it is useful for mapping semantic annotations (such as »this is a keyword«) to display annotations (such as »this is red and underlined«), because some backends may not care about certain annotations, while others may.

Annotations earlier in the new list will be applied earlier, i.e. returning [Bold, Green] will result in a bold document that contains green text, and not vice-versa.

Since this traverses the entire Doc tree, including parts that are not rendered due to other layouts fitting better, it is preferrable to reannotate after producing the layout by using alterAnnotationsS.

reAnnotate :: (ann -> ann') -> Doc ann -> Doc ann' #

Change the annotation of a Document.

Useful in particular to embed documents with one form of annotation in a more generally annotated document.

Since this traverses the entire Doc tree, including parts that are not rendered due to other layouts fitting better, it is preferrable to reannotate after producing the layout by using reAnnotateS.

Since reAnnotate has the right type and satisfies 'reAnnotate id = id', it is used to define the Functor instance of Doc.

unAnnotate :: Doc ann -> Doc xxx #

Remove all annotations.

Although unAnnotate is idempotent with respect to rendering,

unAnnotate . unAnnotate = unAnnotate

it should not be used without caution, for each invocation traverses the entire contained document. If possible, it is preferrable to unannotate after producing the layout by using unAnnotateS.

annotate :: ann -> Doc ann -> Doc ann #

Add an annotation to a Doc. This annotation can then be used by the renderer to e.g. add color to certain parts of the output. For a full tutorial example on how to use it, see the Prettyprinter.Render.Tutorials.StackMachineTutorial or Prettyprinter.Render.Tutorials.TreeRenderingTutorial modules.

This function is only relevant for custom formats with their own annotations, and not relevant for basic prettyprinting. The predefined renderers, e.g. Prettyprinter.Render.Text, should be enough for the most common needs.

surround :: Doc ann -> Doc ann -> Doc ann -> Doc ann #

(surround x l r) surrounds document x with l and r.

>>> surround "·" "A" "Z"
A·Z

This is merely an argument reordering of enclose, but allows for definitions like

>>> concatWith (surround dot) ["Prettyprinter", "Render", "Text"]
Prettyprinter.Render.Text

enclose #

Arguments

:: Doc ann

L

-> Doc ann

R

-> Doc ann

x

-> Doc ann

LxR

(enclose l r x) encloses document x between documents l and r using <>.

>>> enclose "A" "Z" "·"
A·Z
enclose l r x = l <> x <> r

plural #

Arguments

:: (Num amount, Eq amount) 
=> doc

1 case

-> doc

other cases

-> amount 
-> doc 

(plural n one many) is one if n is 1, and many otherwise. A typical use case is adding a plural "s".

>>> let things = [True]
>>> let amount = length things
>>> pretty things <+> "has" <+> pretty amount <+> plural "entry" "entries" amount
[True] has 1 entry

fillBreak #

Arguments

:: Int

Append spaces until the document is at least this wide

-> Doc ann 
-> Doc ann 

(fillBreak i x) first lays out the document x. It then appends spaces until the width is equal to i. If the width of x is already larger than i, the nesting level is increased by i and a line is appended. When we redefine ptype in the example given in fill to use fillBreak, we get a useful variation of the output:

>>> let types = [("empty","Doc"), ("nest","Int -> Doc -> Doc"), ("fillSep","[Doc] -> Doc")]
>>> let ptype (name, tp) = fillBreak 5 (pretty name) <+> "::" <+> pretty tp
>>> "let" <+> align (vcat (map ptype types))
let empty :: Doc
    nest  :: Int -> Doc -> Doc
    fillSep
          :: [Doc] -> Doc

fill #

Arguments

:: Int

Append spaces until the document is at least this wide

-> Doc ann 
-> Doc ann 

(fill i x) lays out the document x. It then appends spaces until the width is equal to i. If the width of x is already larger, nothing is appended.

This function is quite useful in practice to output a list of bindings:

>>> let types = [("empty","Doc"), ("nest","Int -> Doc -> Doc"), ("fillSep","[Doc] -> Doc")]
>>> let ptype (name, tp) = fill 5 (pretty name) <+> "::" <+> pretty tp
>>> "let" <+> align (vcat (map ptype types))
let empty :: Doc
    nest  :: Int -> Doc -> Doc
    fillSep :: [Doc] -> Doc

pageWidth :: (PageWidth -> Doc ann) -> Doc ann #

Layout a document depending on the page width, if one has been specified.

>>> let prettyPageWidth (AvailablePerLine l r) = "Width:" <+> pretty l <> ", ribbon fraction:" <+> pretty r
>>> let doc = "prefix" <+> pageWidth (brackets . prettyPageWidth)
>>> putDocW 32 (vsep [indent n doc | n <- [0,4,8]])
prefix [Width: 32, ribbon fraction: 1.0]
    prefix [Width: 32, ribbon fraction: 1.0]
        prefix [Width: 32, ribbon fraction: 1.0]

width :: Doc ann -> (Int -> Doc ann) -> Doc ann #

(width doc f) lays out the document doc, and makes the column width of it available to a function.

>>> let annotate doc = width (brackets doc) (\w -> " <- width:" <+> pretty w)
>>> align (vsep (map annotate ["---", "------", indent 3 "---", vsep ["---", indent 4 "---"]]))
[---] <- width: 5
[------] <- width: 8
[   ---] <- width: 8
[---
    ---] <- width: 8

nesting :: (Int -> Doc ann) -> Doc ann #

Layout a document depending on the current nesting level. align is implemented in terms of nesting.

>>> let doc = "prefix" <+> nesting (\l -> brackets ("Nested:" <+> pretty l))
>>> vsep [indent n doc | n <- [0,4,8]]
prefix [Nested: 0]
    prefix [Nested: 4]
        prefix [Nested: 8]

column :: (Int -> Doc ann) -> Doc ann #

Layout a document depending on which column it starts at. align is implemented in terms of column.

>>> column (\l -> "Columns are" <+> pretty l <> "-based.")
Columns are 0-based.
>>> let doc = "prefix" <+> column (\l -> "| <- column" <+> pretty l)
>>> vsep [indent n doc | n <- [0,4,8]]
prefix | <- column 7
    prefix | <- column 11
        prefix | <- column 15

punctuate #

Arguments

:: Doc ann

Punctuation, e.g. comma

-> [Doc ann] 
-> [Doc ann] 

(punctuate p xs) appends p to all but the last document in xs.

>>> let docs = punctuate comma (Util.words "lorem ipsum dolor sit amet")
>>> putDocW 80 (hsep docs)
lorem, ipsum, dolor, sit, amet

The separators are put at the end of the entries, which we can see if we position the result vertically:

>>> putDocW 20 (vsep docs)
lorem,
ipsum,
dolor,
sit,
amet

If you want put the commas in front of their elements instead of at the end, you should use tupled or, in general, encloseSep.

cat :: [Doc ann] -> Doc ann #

(cat xs) tries laying out the documents xs separated with nothing, and if this does not fit the page, separates them with newlines. This is what differentiates it from vcat, which always lays out its contents beneath each other.

>>> let docs = Util.words "lorem ipsum dolor"
>>> putDocW 80 ("Docs:" <+> cat docs)
Docs: loremipsumdolor

When there is enough space, the documents are put above one another:

>>> putDocW 10 ("Docs:" <+> cat docs)
Docs: lorem
ipsum
dolor
cat = group . vcat

fillCat :: [Doc ann] -> Doc ann #

(fillCat xs) concatenates documents xs horizontally with <> as long as it fits the page, then inserts a line' and continues doing that for all documents in xs. This is similar to how an ordinary word processor lays out the text if you just keep typing after you hit the maximum line length.

(line' means that if grouped, the documents are separated with nothing instead of newlines. See fillSep if you want a space instead.)

Observe the difference between fillSep and fillCat. fillSep concatenates the entries spaced when grouped:

>>> let docs = take 20 (cycle (["lorem", "ipsum", "dolor", "sit", "amet"]))
>>> putDocW 40 ("Grouped:" <+> group (fillSep docs))
Grouped: lorem ipsum dolor sit amet
lorem ipsum dolor sit amet lorem ipsum
dolor sit amet lorem ipsum dolor sit
amet

On the other hand, fillCat concatenates the entries directly when grouped:

>>> putDocW 40 ("Grouped:" <+> group (fillCat docs))
Grouped: loremipsumdolorsitametlorem
ipsumdolorsitametloremipsumdolorsitamet
loremipsumdolorsitamet

vcat :: [Doc ann] -> Doc ann #

(vcat xs) vertically concatenates the documents xs. If it is grouped, the line breaks are removed.

In other words vcat is like vsep, with newlines removed instead of replaced by spaces.

>>> let docs = Util.words "lorem ipsum dolor"
>>> vcat docs
lorem
ipsum
dolor
>>> group (vcat docs)
loremipsumdolor

Since grouping a vcat is rather common, cat is a built-in shortcut for it.

hcat :: [Doc ann] -> Doc ann #

(hcat xs) concatenates all documents xs horizontally with <> (i.e. without any spacing).

It is provided only for consistency, since it is identical to mconcat.

>>> let docs = Util.words "lorem ipsum dolor"
>>> hcat docs
loremipsumdolor

sep :: [Doc ann] -> Doc ann #

(sep xs) tries laying out the documents xs separated with spaces, and if this does not fit the page, separates them with newlines. This is what differentiates it from vsep, which always lays out its contents beneath each other.

>>> let doc = "prefix" <+> sep ["text", "to", "lay", "out"]
>>> putDocW 80 doc
prefix text to lay out

With a narrower layout, the entries are separated by newlines:

>>> putDocW 20 doc
prefix text
to
lay
out
sep = group . vsep

fillSep :: [Doc ann] -> Doc ann #

(fillSep xs) concatenates the documents xs horizontally with <+> as long as it fits the page, then inserts a line and continues doing that for all documents in xs. (line means that if grouped, the documents are separated with a space instead of newlines. Use fillCat if you do not want a space.)

Let's print some words to fill the line:

>>> let docs = take 20 (cycle ["lorem", "ipsum", "dolor", "sit", "amet"])
>>> putDocW 80 ("Docs:" <+> fillSep docs)
Docs: lorem ipsum dolor sit amet lorem ipsum dolor sit amet lorem ipsum dolor
sit amet lorem ipsum dolor sit amet

The same document, printed at a width of only 40, yields

>>> putDocW 40 ("Docs:" <+> fillSep docs)
Docs: lorem ipsum dolor sit amet lorem
ipsum dolor sit amet lorem ipsum dolor
sit amet lorem ipsum dolor sit amet

vsep :: [Doc ann] -> Doc ann #

(vsep xs) concatenates all documents xs above each other. If a group undoes the line breaks inserted by vsep, the documents are separated with a space instead.

Using vsep alone yields

>>> "prefix" <+> vsep ["text", "to", "lay", "out"]
prefix text
to
lay
out

grouping a vsep separates the documents with a space if it fits the page (and does nothing otherwise). See the sep convenience function for this use case.

The align function can be used to align the documents under their first element:

>>> "prefix" <+> align (vsep ["text", "to", "lay", "out"])
prefix text
       to
       lay
       out

Since grouping a vsep is rather common, sep is a built-in for doing that.

hsep :: [Doc ann] -> Doc ann #

(hsep xs) concatenates all documents xs horizontally with <+>, i.e. it puts a space between all entries.

>>> let docs = Util.words "lorem ipsum dolor sit amet"
>>> hsep docs
lorem ipsum dolor sit amet

hsep does not introduce line breaks on its own, even when the page is too narrow:

>>> putDocW 5 (hsep docs)
lorem ipsum dolor sit amet

For automatic line breaks, consider using fillSep instead.

concatWith :: Foldable t => (Doc ann -> Doc ann -> Doc ann) -> t (Doc ann) -> Doc ann #

Concatenate all documents element-wise with a binary function.

concatWith _ [] = mempty
concatWith (**) [x,y,z] = x ** y ** z

Multiple convenience definitions based on concatWith are already predefined, for example:

hsep    = concatWith (<+>)
fillSep = concatWith (\x y -> x <> softline <> y)

This is also useful to define customized joiners:

>>> concatWith (surround dot) ["Prettyprinter", "Render", "Text"]
Prettyprinter.Render.Text

(<+>) :: Doc ann -> Doc ann -> Doc ann infixr 6 #

(x <+> y) concatenates document x and y with a space in between.

>>> "hello" <+> "world"
hello world
x <+> y = x <> space <> y

tupled :: [Doc ann] -> Doc ann #

Haskell-inspired variant of encloseSep with parentheses and comma as separator.

>>> let doc = tupled (map pretty [1,20,300,4000])
>>> putDocW 80 doc
(1, 20, 300, 4000)
>>> putDocW 10 doc
( 1
, 20
, 300
, 4000 )

list :: [Doc ann] -> Doc ann #

Haskell-inspired variant of encloseSep with braces and comma as separator.

>>> let doc = list (map pretty [1,20,300,4000])
>>> putDocW 80 doc
[1, 20, 300, 4000]
>>> putDocW 10 doc
[ 1
, 20
, 300
, 4000 ]

encloseSep #

Arguments

:: Doc ann

left delimiter

-> Doc ann

right delimiter

-> Doc ann

separator

-> [Doc ann]

input documents

-> Doc ann 

(encloseSep l r sep xs) concatenates the documents xs separated by sep, and encloses the resulting document by l and r.

The documents are laid out horizontally if that fits the page:

>>> let doc = "list" <+> align (encloseSep lbracket rbracket comma (map pretty [1,20,300,4000]))
>>> putDocW 80 doc
list [1,20,300,4000]

If there is not enough space, then the input is split into lines entry-wise therwise they are laid out vertically, with separators put in the front:

>>> putDocW 10 doc
list [1
     ,20
     ,300
     ,4000]

Note that doc contains an explicit call to align so that the list items are aligned vertically.

For putting separators at the end of entries instead, have a look at punctuate.

indent #

Arguments

:: Int

Number of spaces to increase indentation by

-> Doc ann 
-> Doc ann 

(indent i x) indents document x by i columns, starting from the current cursor position.

>>> let doc = reflow "The indent function indents these words!"
>>> putDocW 24 ("prefix" <> indent 4 doc)
prefix    The indent
          function
          indents these
          words!
indent i d = hang i ({i spaces} <> d)

hang #

Arguments

:: Int

Change of nesting level, relative to the start of the first line

-> Doc ann 
-> Doc ann 

(hang i x) lays out the document x with a nesting level set to the current column plus i. Negative values are allowed, and decrease the nesting level accordingly.

>>> let doc = reflow "Indenting these words with hang"
>>> putDocW 24 ("prefix" <+> hang 4 doc)
prefix Indenting these
           words with
           hang

This differs from nest, which is based on the current nesting level plus i. When you're not sure, try the more efficient nest first. In our example, this would yield

>>> let doc = reflow "Indenting these words with nest"
>>> putDocW 24 ("prefix" <+> nest 4 doc)
prefix Indenting these
    words with nest
hang i doc = align (nest i doc)

align :: Doc ann -> Doc ann #

(align x) lays out the document x with the nesting level set to the current column. It is used for example to implement hang.

As an example, we will put a document right above another one, regardless of the current nesting level. Without alignment, the second line is put simply below everything we've had so far:

>>> "lorem" <+> vsep ["ipsum", "dolor"]
lorem ipsum
dolor

If we add an align to the mix, the vsep's contents all start in the same column:

>>> "lorem" <+> align (vsep ["ipsum", "dolor"])
lorem ipsum
      dolor

flatAlt #

Arguments

:: Doc ann

Default

-> Doc ann

Preferred when grouped

-> Doc ann 

By default, (flatAlt x y) renders as x. However when grouped, y will be preferred, with x as the fallback for the case when y doesn't fit.

>>> let doc = flatAlt "a" "b"
>>> putDoc doc
a
>>> putDoc (group doc)
b
>>> putDocW 0 (group doc)
a

flatAlt is particularly useful for defining conditional separators such as

softline = group (flatAlt hardline " ")
>>> let hello = "Hello" <> softline <> "world!"
>>> putDocW 12 hello
Hello world!
>>> putDocW 11 hello
Hello
world!

Example: Haskell's do-notation

Expand

We can use this to render Haskell's do-notation nicely:

>>> let open        = flatAlt "" "{ "
>>> let close       = flatAlt "" " }"
>>> let separator   = flatAlt "" "; "
>>> let prettyDo xs = group ("do" <+> align (encloseSep open close separator xs))
>>> let statements  = ["name:_ <- getArgs", "let greet = \"Hello, \" <> name", "putStrLn greet"]

This is put into a single line with {;} style if it fits:

>>> putDocW 80 (prettyDo statements)
do { name:_ <- getArgs; let greet = "Hello, " <> name; putStrLn greet }

When there is not enough space the statements are broken up into lines nicely:

>>> putDocW 10 (prettyDo statements)
do name:_ <- getArgs
   let greet = "Hello, " <> name
   putStrLn greet

Notes

Users should be careful to choose x to be less wide than y. Otherwise, if y turns out not to fit the page, we fall back on an even wider layout:

>>> let ugly = group (flatAlt "even wider" "too wide")
>>> putDocW 7 ugly
even wider

Also note that group will flatten y:

>>> putDoc (group (flatAlt "x" ("y" <> line <> "y")))
y y

This also means that an "unflattenable" y which contains a hard linebreak will never be rendered:

>>> putDoc (group (flatAlt "x" ("y" <> hardline <> "y")))
x

group :: Doc ann -> Doc ann #

(group x) tries laying out x into a single line by removing the contained line breaks; if this does not fit the page, or when a hardline within x prevents it from being flattened, x is laid out without any changes.

The group function is key to layouts that adapt to available space nicely.

See vcat, line, or flatAlt for examples that are related, or make good use of it.

hardline :: Doc ann #

A hardline is always laid out as a line break, even when grouped or when there is plenty of space. Note that it might still be simply discarded if it is part of a flatAlt inside a group.

>>> let doc = "lorem ipsum" <> hardline <> "dolor sit amet"
>>> putDocW 1000 doc
lorem ipsum
dolor sit amet
>>> group doc
lorem ipsum
dolor sit amet

softline' :: Doc ann #

softline' is like softline, but behaves like mempty if the resulting output does not fit on the page (instead of space). In other words, line is to line' how softline is to softline'.

With enough space, we get direct concatenation:

>>> let doc = "ThisWord" <> softline' <> "IsWayTooLong"
>>> putDocW 80 doc
ThisWordIsWayTooLong

If we narrow the page to width 10, the layouter produces a line break:

>>> putDocW 10 doc
ThisWord
IsWayTooLong
softline' = group line'

softline :: Doc ann #

softline behaves like space if the resulting output fits the page, otherwise like line.

Here, we have enough space to put everything in one line:

>>> let doc = "lorem ipsum" <> softline <> "dolor sit amet"
>>> putDocW 80 doc
lorem ipsum dolor sit amet

If we narrow the page to width 10, the layouter produces a line break:

>>> putDocW 10 doc
lorem ipsum
dolor sit amet
softline = group line

line' :: Doc ann #

line' is like line, but behaves like mempty if the line break is undone by group (instead of space).

>>> let doc = "lorem ipsum" <> line' <> "dolor sit amet"
>>> doc
lorem ipsum
dolor sit amet
>>> group doc
lorem ipsumdolor sit amet

line :: Doc ann #

The line document advances to the next line and indents to the current nesting level.

>>> let doc = "lorem ipsum" <> line <> "dolor sit amet"
>>> doc
lorem ipsum
dolor sit amet

line behaves like space if the line break is undone by group:

>>> group doc
lorem ipsum dolor sit amet

nest #

Arguments

:: Int

Change of nesting level

-> Doc ann 
-> Doc ann 

(nest i x) lays out the document x with the current nesting level (indentation of the following lines) increased by i. Negative values are allowed, and decrease the nesting level accordingly.

>>> vsep [nest 4 (vsep ["lorem", "ipsum", "dolor"]), "sit", "amet"]
lorem
    ipsum
    dolor
sit
amet

See also

  • hang (nest relative to current cursor position instead of current nesting level)
  • align (set nesting level to current cursor position)
  • indent (increase indentation on the spot, padding with spaces).

emptyDoc :: Doc ann #

The empty document behaves like (pretty ""), so it has a height of 1. This may lead to surprising behaviour if we expect it to bear no weight inside e.g. vcat, where we get an empty line of output from it (parens for visibility only):

>>> vsep ["hello", parens emptyDoc, "world"]
hello
()
world

Together with <>, emptyDoc forms the Monoid Doc.

unsafeViaShow :: Show a => a -> Doc ann #

Convenience function to convert a Showable value /that must not contain newlines/ to a Doc. If there may be newlines, use viaShow instead.

viaShow :: Show a => a -> Doc ann #

Convenience function to convert a Showable value to a Doc. If the String does not contain newlines, consider using the more performant unsafeViaShow.

data Doc ann #

The abstract data type Doc ann represents pretty documents that have been annotated with data of type ann.

More specifically, a value of type Doc represents a non-empty set of possible layouts of a document. The layout functions select one of these possibilities, taking into account things like the width of the output document.

The annotation is an arbitrary piece of data associated with (part of) a document. Annotations may be used by the rendering backends in order to display output differently, such as

  • color information (e.g. when rendering to the terminal)
  • mouseover text (e.g. when rendering to rich HTML)
  • whether to show something or not (to allow simple or detailed versions)

The simplest way to display a Doc is via the Show class.

>>> putStrLn (show (vsep ["hello", "world"]))
hello
world

Instances

Instances details
Functor Doc

Alter the document’s annotations.

This instance makes Doc more flexible (because it can be used in Functor-polymorphic values), but fmap is much less readable compared to using reAnnotate in code that only works for Doc anyway. Consider using the latter when the type does not matter.

Instance details

Defined in Prettyprinter.Internal

Methods

fmap :: (a -> b) -> Doc a -> Doc b #

(<$) :: a -> Doc b -> Doc a #

Show (Doc ann)

(show doc) prettyprints document doc with defaultLayoutOptions, ignoring all annotations.

Instance details

Defined in Prettyprinter.Internal

Methods

showsPrec :: Int -> Doc ann -> ShowS #

show :: Doc ann -> String #

showList :: [Doc ann] -> ShowS #

IsString (Doc ann)
>>> pretty ("hello\nworld")
hello
world

This instance uses the Pretty Text instance, and uses the same newline to line conversion.

Instance details

Defined in Prettyprinter.Internal

Methods

fromString :: String -> Doc ann #

Generic (Doc ann) 
Instance details

Defined in Prettyprinter.Internal

Associated Types

type Rep (Doc ann) :: Type -> Type #

Methods

from :: Doc ann -> Rep (Doc ann) x #

to :: Rep (Doc ann) x -> Doc ann #

Semigroup (Doc ann)
x <> y = hcat [x, y]
>>> "hello" <> "world" :: Doc ann
helloworld
Instance details

Defined in Prettyprinter.Internal

Methods

(<>) :: Doc ann -> Doc ann -> Doc ann #

sconcat :: NonEmpty (Doc ann) -> Doc ann #

stimes :: Integral b => b -> Doc ann -> Doc ann #

Monoid (Doc ann)
mempty = emptyDoc
mconcat = hcat
>>> mappend "hello" "world" :: Doc ann
helloworld
Instance details

Defined in Prettyprinter.Internal

Methods

mempty :: Doc ann #

mappend :: Doc ann -> Doc ann -> Doc ann #

mconcat :: [Doc ann] -> Doc ann #

type Rep (Doc ann) 
Instance details

Defined in Prettyprinter.Internal

type Rep (Doc ann) = D1 ('MetaData "Doc" "Prettyprinter.Internal" "prettyprinter-1.7.1-BauxLiNvN3EiJKyXe93SM" 'False) (((C1 ('MetaCons "Fail" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "Empty" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Char" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Char)))) :+: (C1 ('MetaCons "Text" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Int) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Text)) :+: (C1 ('MetaCons "Line" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "FlatAlt" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Doc ann)) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Doc ann)))))) :+: ((C1 ('MetaCons "Cat" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Doc ann)) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Doc ann))) :+: (C1 ('MetaCons "Nest" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Int) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Doc ann))) :+: C1 ('MetaCons "Union" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Doc ann)) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Doc ann))))) :+: ((C1 ('MetaCons "Column" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Int -> Doc ann))) :+: C1 ('MetaCons "WithPageWidth" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (PageWidth -> Doc ann)))) :+: (C1 ('MetaCons "Nesting" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Int -> Doc ann))) :+: C1 ('MetaCons "Annotated" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ann) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Doc ann)))))))

class Pretty a where #

Overloaded conversion to Doc.

Laws:

  1. output should be pretty. :-)

Minimal complete definition

pretty

Methods

pretty :: a -> Doc ann #

>>> pretty 1 <+> pretty "hello" <+> pretty 1.234
1 hello 1.234

prettyList :: [a] -> Doc ann #

prettyList is only used to define the instance Pretty a => Pretty [a]. In normal circumstances only the pretty function is used.

>>> prettyList [1, 23, 456]
[1, 23, 456]

Instances

Instances details
Pretty Bool
>>> pretty True
True
Instance details

Defined in Prettyprinter.Internal

Methods

pretty :: Bool -> Doc ann #

prettyList :: [Bool] -> Doc ann #

Pretty Char

Instead of (pretty 'n'), consider using line as a more readable alternative.

>>> pretty 'f' <> pretty 'o' <> pretty 'o'
foo
>>> pretty ("string" :: String)
string
Instance details

Defined in Prettyprinter.Internal

Methods

pretty :: Char -> Doc ann #

prettyList :: [Char] -> Doc ann #

Pretty Double
>>> pretty (exp 1 :: Double)
2.71828182845904...
Instance details

Defined in Prettyprinter.Internal

Methods

pretty :: Double -> Doc ann #

prettyList :: [Double] -> Doc ann #

Pretty Float
>>> pretty (pi :: Float)
3.1415927
Instance details

Defined in Prettyprinter.Internal

Methods

pretty :: Float -> Doc ann #

prettyList :: [Float] -> Doc ann #

Pretty Int
>>> pretty (123 :: Int)
123
Instance details

Defined in Prettyprinter.Internal

Methods

pretty :: Int -> Doc ann #

prettyList :: [Int] -> Doc ann #

Pretty Int8 
Instance details

Defined in Prettyprinter.Internal

Methods

pretty :: Int8 -> Doc ann #

prettyList :: [Int8] -> Doc ann #

Pretty Int16 
Instance details

Defined in Prettyprinter.Internal

Methods

pretty :: Int16 -> Doc ann #

prettyList :: [Int16] -> Doc ann #

Pretty Int32 
Instance details

Defined in Prettyprinter.Internal

Methods

pretty :: Int32 -> Doc ann #

prettyList :: [Int32] -> Doc ann #

Pretty Int64 
Instance details

Defined in Prettyprinter.Internal

Methods

pretty :: Int64 -> Doc ann #

prettyList :: [Int64] -> Doc ann #

Pretty Integer
>>> pretty (2^123 :: Integer)
10633823966279326983230456482242756608
Instance details

Defined in Prettyprinter.Internal

Methods

pretty :: Integer -> Doc ann #

prettyList :: [Integer] -> Doc ann #

Pretty Natural 
Instance details

Defined in Prettyprinter.Internal

Methods

pretty :: Natural -> Doc ann #

prettyList :: [Natural] -> Doc ann #

Pretty Word 
Instance details

Defined in Prettyprinter.Internal

Methods

pretty :: Word -> Doc ann #

prettyList :: [Word] -> Doc ann #

Pretty Word8 
Instance details

Defined in Prettyprinter.Internal

Methods

pretty :: Word8 -> Doc ann #

prettyList :: [Word8] -> Doc ann #

Pretty Word16 
Instance details

Defined in Prettyprinter.Internal

Methods

pretty :: Word16 -> Doc ann #

prettyList :: [Word16] -> Doc ann #

Pretty Word32 
Instance details

Defined in Prettyprinter.Internal

Methods

pretty :: Word32 -> Doc ann #

prettyList :: [Word32] -> Doc ann #

Pretty Word64 
Instance details

Defined in Prettyprinter.Internal

Methods

pretty :: Word64 -> Doc ann #

prettyList :: [Word64] -> Doc ann #

Pretty ()
>>> pretty ()
()

The argument is not used:

>>> pretty (error "Strict?" :: ())
()
Instance details

Defined in Prettyprinter.Internal

Methods

pretty :: () -> Doc ann #

prettyList :: [()] -> Doc ann #

Pretty Text

Automatically converts all newlines to line.

>>> pretty ("hello\nworld" :: Text)
hello
world

Note that line can be undone by group:

>>> group (pretty ("hello\nworld" :: Text))
hello world

Manually use hardline if you definitely want newlines.

Instance details

Defined in Prettyprinter.Internal

Methods

pretty :: Text -> Doc ann #

prettyList :: [Text] -> Doc ann #

Pretty Text

(lazy Text instance, identical to the strict version)

Instance details

Defined in Prettyprinter.Internal

Methods

pretty :: Text -> Doc ann #

prettyList :: [Text] -> Doc ann #

Pretty Void

Finding a good example for printing something that does not exist is hard, so here is an example of printing a list full of nothing.

>>> pretty ([] :: [Void])
[]
Instance details

Defined in Prettyprinter.Internal

Methods

pretty :: Void -> Doc ann #

prettyList :: [Void] -> Doc ann #

Pretty Log Source # 
Instance details

Defined in Development.IDE.Main.HeapStats

Methods

pretty :: Log -> Doc ann #

prettyList :: [Log] -> Doc ann #

Pretty Log Source # 
Instance details

Defined in Development.IDE.Core.Shake

Methods

pretty :: Log -> Doc ann #

prettyList :: [Log] -> Doc ann #

Pretty Log Source # 
Instance details

Defined in Development.IDE.Session

Methods

pretty :: Log -> Doc ann #

prettyList :: [Log] -> Doc ann #

Pretty Log Source # 
Instance details

Defined in Development.IDE.Plugin.HLS

Methods

pretty :: Log -> Doc ann #

prettyList :: [Log] -> Doc ann #

Pretty Log Source # 
Instance details

Defined in Development.IDE.Core.OfInterest

Methods

pretty :: Log -> Doc ann #

prettyList :: [Log] -> Doc ann #

Pretty Log Source # 
Instance details

Defined in Development.IDE.Core.FileStore

Methods

pretty :: Log -> Doc ann #

prettyList :: [Log] -> Doc ann #

Pretty Log Source # 
Instance details

Defined in Development.IDE.Core.Service

Methods

pretty :: Log -> Doc ann #

prettyList :: [Log] -> Doc ann #

Pretty Log Source # 
Instance details

Defined in Development.IDE.GHC.ExactPrint

Methods

pretty :: Log -> Doc ann #

prettyList :: [Log] -> Doc ann #

Pretty Log Source # 
Instance details

Defined in Development.IDE.Core.Rules

Methods

pretty :: Log -> Doc ann #

prettyList :: [Log] -> Doc ann #

Pretty Log Source # 
Instance details

Defined in Development.IDE.LSP.LanguageServer

Methods

pretty :: Log -> Doc ann #

prettyList :: [Log] -> Doc ann #

Pretty Log Source # 
Instance details

Defined in Development.IDE.Plugin.TypeLenses

Methods

pretty :: Log -> Doc ann #

prettyList :: [Log] -> Doc ann #

Pretty Log Source # 
Instance details

Defined in Development.IDE.Plugin.Completions

Methods

pretty :: Log -> Doc ann #

prettyList :: [Log] -> Doc ann #

Pretty Log Source # 
Instance details

Defined in Development.IDE.Plugin.HLS.GhcIde

Methods

pretty :: Log -> Doc ann #

prettyList :: [Log] -> Doc ann #

Pretty Log Source # 
Instance details

Defined in Development.IDE.Main

Methods

pretty :: Log -> Doc ann #

prettyList :: [Log] -> Doc ann #

Pretty a => Pretty [a]
>>> pretty [1,2,3]
[1, 2, 3]
Instance details

Defined in Prettyprinter.Internal

Methods

pretty :: [a] -> Doc ann #

prettyList :: [[a]] -> Doc ann #

Pretty a => Pretty (Maybe a)

Ignore Nothings, print Just contents.

>>> pretty (Just True)
True
>>> braces (pretty (Nothing :: Maybe Bool))
{}
>>> pretty [Just 1, Nothing, Just 3, Nothing]
[1, 3]
Instance details

Defined in Prettyprinter.Internal

Methods

pretty :: Maybe a -> Doc ann #

prettyList :: [Maybe a] -> Doc ann #

Pretty a => Pretty (Identity a)
>>> pretty (Identity 1)
1
Instance details

Defined in Prettyprinter.Internal

Methods

pretty :: Identity a -> Doc ann #

prettyList :: [Identity a] -> Doc ann #

Pretty a => Pretty (NonEmpty a) 
Instance details

Defined in Prettyprinter.Internal

Methods

pretty :: NonEmpty a -> Doc ann #

prettyList :: [NonEmpty a] -> Doc ann #

(Pretty a1, Pretty a2) => Pretty (a1, a2)
>>> pretty (123, "hello")
(123, hello)
Instance details

Defined in Prettyprinter.Internal

Methods

pretty :: (a1, a2) -> Doc ann #

prettyList :: [(a1, a2)] -> Doc ann #

(Pretty a1, Pretty a2, Pretty a3) => Pretty (a1, a2, a3)
>>> pretty (123, "hello", False)
(123, hello, False)
Instance details

Defined in Prettyprinter.Internal

Methods

pretty :: (a1, a2, a3) -> Doc ann #

prettyList :: [(a1, a2, a3)] -> Doc ann #

Pretty a => Pretty (Const a b) 
Instance details

Defined in Prettyprinter.Internal

Methods

pretty :: Const a b -> Doc ann #

prettyList :: [Const a b] -> Doc ann #

data FusionDepth #

Fusion depth parameter, used by fuse.

Constructors

Shallow

Do not dive deep into nested documents, fusing mostly concatenations of text nodes together.

Deep

Recurse into all parts of the Doc, including different layout alternatives, and location-sensitive values such as created by nesting which cannot be fused before, but only during, the layout process. As a result, the performance cost of using deep fusion is often hard to predict, and depends on the interplay between page layout and document to prettyprint.

This value should only be used if profiling shows it is significantly faster than using Shallow.

data SimpleDocStream ann #

The data type SimpleDocStream represents laid out documents and is used by the display functions.

A simplified view is that Doc = [SimpleDocStream], and the layout functions pick one of the SimpleDocStreams based on which one fits the layout constraints best. This means that SimpleDocStream has all complexity contained in Doc resolved, making it very easy to convert it to other formats, such as plain text or terminal output.

To write your own Doc to X converter, it is therefore sufficient to convert from SimpleDocStream. The »Render« submodules provide some built-in converters to do so, and helpers to create own ones.

Constructors

SFail 
SEmpty 
SChar !Char (SimpleDocStream ann) 
SText !Int !Text (SimpleDocStream ann)

length is O(n), so we cache it in the Int field.

SLine !Int (SimpleDocStream ann)

Int = indentation level for the (next) line

SAnnPush ann (SimpleDocStream ann)

Add an annotation to the remaining document.

SAnnPop (SimpleDocStream ann)

Remove a previously pushed annotation.

Instances

Instances details
Functor SimpleDocStream

Alter the document’s annotations.

This instance makes SimpleDocStream more flexible (because it can be used in Functor-polymorphic values), but fmap is much less readable compared to using reAnnotateST in code that only works for SimpleDocStream anyway. Consider using the latter when the type does not matter.

Instance details

Defined in Prettyprinter.Internal

Methods

fmap :: (a -> b) -> SimpleDocStream a -> SimpleDocStream b #

(<$) :: a -> SimpleDocStream b -> SimpleDocStream a #

Foldable SimpleDocStream

Collect all annotations from a document.

Instance details

Defined in Prettyprinter.Internal

Methods

fold :: Monoid m => SimpleDocStream m -> m #

foldMap :: Monoid m => (a -> m) -> SimpleDocStream a -> m #

foldMap' :: Monoid m => (a -> m) -> SimpleDocStream a -> m #

foldr :: (a -> b -> b) -> b -> SimpleDocStream a -> b #

foldr' :: (a -> b -> b) -> b -> SimpleDocStream a -> b #

foldl :: (b -> a -> b) -> b -> SimpleDocStream a -> b #

foldl' :: (b -> a -> b) -> b -> SimpleDocStream a -> b #

foldr1 :: (a -> a -> a) -> SimpleDocStream a -> a #

foldl1 :: (a -> a -> a) -> SimpleDocStream a -> a #

toList :: SimpleDocStream a -> [a] #

null :: SimpleDocStream a -> Bool #

length :: SimpleDocStream a -> Int #

elem :: Eq a => a -> SimpleDocStream a -> Bool #

maximum :: Ord a => SimpleDocStream a -> a #

minimum :: Ord a => SimpleDocStream a -> a #

sum :: Num a => SimpleDocStream a -> a #

product :: Num a => SimpleDocStream a -> a #

Traversable SimpleDocStream

Transform a document based on its annotations, possibly leveraging Applicative effects.

Instance details

Defined in Prettyprinter.Internal

Methods

traverse :: Applicative f => (a -> f b) -> SimpleDocStream a -> f (SimpleDocStream b) #

sequenceA :: Applicative f => SimpleDocStream (f a) -> f (SimpleDocStream a) #

mapM :: Monad m => (a -> m b) -> SimpleDocStream a -> m (SimpleDocStream b) #

sequence :: Monad m => SimpleDocStream (m a) -> m (SimpleDocStream a) #

Eq ann => Eq (SimpleDocStream ann) 
Instance details

Defined in Prettyprinter.Internal

Ord ann => Ord (SimpleDocStream ann) 
Instance details

Defined in Prettyprinter.Internal

Show ann => Show (SimpleDocStream ann) 
Instance details

Defined in Prettyprinter.Internal

Generic (SimpleDocStream ann) 
Instance details

Defined in Prettyprinter.Internal

Associated Types

type Rep (SimpleDocStream ann) :: Type -> Type #

Methods

from :: SimpleDocStream ann -> Rep (SimpleDocStream ann) x #

to :: Rep (SimpleDocStream ann) x -> SimpleDocStream ann #

type Rep (SimpleDocStream ann) 
Instance details

Defined in Prettyprinter.Internal

type Rep (SimpleDocStream ann) = D1 ('MetaData "SimpleDocStream" "Prettyprinter.Internal" "prettyprinter-1.7.1-BauxLiNvN3EiJKyXe93SM" 'False) ((C1 ('MetaCons "SFail" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "SEmpty" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "SChar" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Char) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (SimpleDocStream ann))))) :+: ((C1 ('MetaCons "SText" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Int) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Text) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (SimpleDocStream ann)))) :+: C1 ('MetaCons "SLine" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Int) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (SimpleDocStream ann)))) :+: (C1 ('MetaCons "SAnnPush" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ann) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (SimpleDocStream ann))) :+: C1 ('MetaCons "SAnnPop" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (SimpleDocStream ann))))))

data PageWidth #

Maximum number of characters that fit in one line. The layout algorithms will try not to exceed the set limit by inserting line breaks when applicable (e.g. via softline').

Constructors

AvailablePerLine !Int !Double

Layouters should not exceed the specified space per line.

  • The Int is the number of characters, including whitespace, that fit in a line. A typical value is 80.
  • The Double is the ribbon with, i.e. the fraction of the total page width that can be printed on. This allows limiting the length of printable text per line. Values must be between 0 and 1, and 0.4 to 1 is typical.
Unbounded

Layouters should not introduce line breaks on their own.

Instances

Instances details
Eq PageWidth 
Instance details

Defined in Prettyprinter.Internal

Ord PageWidth 
Instance details

Defined in Prettyprinter.Internal

Show PageWidth 
Instance details

Defined in Prettyprinter.Internal

uriToFilePath' :: Uri -> Maybe FilePath Source #

We use an empty string as a filepath when we don’t have a file. However, haskell-lsp doesn’t support that in uriToFilePath and given that it is not a valid filepath it does not make sense to upstream a fix. So we have our own wrapper here that supports empty filepaths.

readSrcSpan :: ReadS RealSrcSpan Source #

Parser for the GHC output format

type FileDiagnostic = (NormalizedFilePath, ShowDiagnostic, Diagnostic) Source #

Human readable diagnostics for a specific file.

This type packages a pretty printed, human readable error message along with the related source location so that we can display the error on either the console or in the IDE at the right source location.

data ShowDiagnostic Source #

Defines whether a particular diagnostic should be reported back to the user.

One important use case is "missing signature" code lenses, for which we need to enable the corresponding warning during type checking. However, we do not want to show the warning unless the programmer asks for it (#261).

Constructors

ShowDiag

Report back to the user

HideDiag

Hide from user

type IdeResultNoDiagnosticsEarlyCutoff v = (Maybe ByteString, Maybe v) Source #

an IdeResult with a fingerprint

type IdeResult v = ([FileDiagnostic], Maybe v) Source #

The result of an IDE operation. Warnings and errors are in the Diagnostic, and a value is in the Maybe. For operations that throw an error you expect a non-empty list of diagnostics, at least one of which is an error, and a Nothing. For operations that succeed you expect perhaps some warnings and a Just. For operations that depend on other failing operations you may get empty diagnostics and a Nothing, to indicate this phase throws no fresh errors but still failed.

A rule on a file should only return diagnostics for that given file. It should not propagate diagnostic errors through multiple phases.

modifyDynFlags :: GhcMonad m => (DynFlags -> DynFlags) -> m () Source #

Used to modify dyn flags in preference to calling setSessionDynFlags, since that function also reloads packages (which is very slow).

lookupPackageConfig :: Unit -> HscEnv -> Maybe UnitInfo Source #

Given a Unit try and find the associated PackageConfig in the environment.

textToStringBuffer :: Text -> StringBuffer Source #

Convert from the text package to the GHC StringBuffer. Currently implemented somewhat inefficiently (if it ever comes up in a profile).

printRdrName :: RdrName -> String Source #

Pretty print a RdrName wrapping operators in parens

printName :: Name -> String Source #

Pretty print a Name wrapping operators in parens

evalGhcEnv :: HscEnv -> Ghc b -> IO b Source #

Run a Ghc monad value using an existing HscEnv. Sets up and tears down all the required pieces, but designed to be more efficient than a standard runGhc.

moduleImportPath :: NormalizedFilePath -> ModuleName -> Maybe FilePath Source #

Given a module location, and its parse tree, figure out what is the include directory implied by it. For example, given the file /usr/Test/Foo/Bar.hs with the module name Foo.Bar the directory /usr/Test should be on the include path to find sibling modules.

readFileUtf8 :: FilePath -> IO Text Source #

Read a UTF8 file, with lenient decoding, so it will never raise a decoding error.

fingerprintToBS :: Fingerprint -> ByteString Source #

Convert a Fingerprint to a ByteString by copying the byte across. Will produce an 8 byte unreadable ByteString.

hDuplicateTo' :: Handle -> Handle -> IO () Source #

A slightly modified version of hDuplicateTo from GHC. Importantly, it avoids the bug listed in https://gitlab.haskell.org/ghc/ghc/merge_requests/2318.

traceAst :: (Data a, ExactPrint a, Outputable a, HasCallStack) => String -> a -> a Source #

Prints an Outputable value to stderr and to an HTML file for further inspection

printOutputable :: Outputable a => a -> Text Source #

Print a GHC value in defaultUserStyle without unique symbols.

This is the most common print utility, will print with a user-friendly style like: a_a4ME as a.

It internal using showSDocUnsafe with unsafeGlobalDynFlags.

diagFromErrMsg :: Text -> DynFlags -> MsgEnvelope DecoratedSDoc -> [FileDiagnostic] Source #

Produce a GHC-style error from a source span and a message.

srcSpanToRange :: SrcSpan -> Maybe Range Source #

Convert a GHC SrcSpan to a DAML compiler Range

srcSpanToFilename :: SrcSpan -> Maybe FilePath Source #

Extract a file name from a GHC SrcSpan (use message for unhelpful ones) FIXME This may not be an _absolute_ file name, needs fixing.

toDSeverity :: Severity -> Maybe DiagnosticSeverity Source #

Convert a GHC severity to a DAML compiler Severity. Severities below Warning level are dropped (returning Nothing).

diagFromStrings :: Text -> DiagnosticSeverity -> [(SrcSpan, String)] -> [FileDiagnostic] Source #

Produce a bag of GHC-style errors (ErrorMessages) from the given (optional) locations and message strings.

diagFromString :: Text -> DiagnosticSeverity -> SrcSpan -> String -> [FileDiagnostic] Source #

Produce a GHC-style error from a source span and a message.

noSpan :: String -> SrcSpan Source #

Produces an "unhelpful" source span with the given string.

zeroSpan Source #

Arguments

:: FastString

file path of span

-> RealSrcSpan 

creates a span with zero length in the filename of the argument passed

catchSrcErrors :: DynFlags -> Text -> IO a -> IO (Either [FileDiagnostic] a) Source #

Catch the errors thrown by GHC (SourceErrors and compiler-internal exceptions like Panic or InstallationError), and turn them into diagnostics

data HscEnvEq Source #

An HscEnv with equality. Two values are considered equal if they are created with the same call to newHscEnvEq.

Instances

Instances details
Eq HscEnvEq Source # 
Instance details

Defined in Development.IDE.Types.HscEnvEq

Show HscEnvEq Source # 
Instance details

Defined in Development.IDE.Types.HscEnvEq

Hashable HscEnvEq Source # 
Instance details

Defined in Development.IDE.Types.HscEnvEq

Methods

hashWithSalt :: Int -> HscEnvEq -> Int #

hash :: HscEnvEq -> Int #

NFData HscEnvEq Source # 
Instance details

Defined in Development.IDE.Types.HscEnvEq

Methods

rnf :: HscEnvEq -> () #

hscEnvWithImportPaths :: HscEnvEq -> HscEnv Source #

Unwrap the HscEnv with the original import paths. Used only for locating imports

data GhcSessionIO Source #

Constructors

GhcSessionIO 

Instances

Instances details
Eq GhcSessionIO Source # 
Instance details

Defined in Development.IDE.Core.RuleTypes

Show GhcSessionIO Source # 
Instance details

Defined in Development.IDE.Core.RuleTypes

Generic GhcSessionIO Source # 
Instance details

Defined in Development.IDE.Core.RuleTypes

Associated Types

type Rep GhcSessionIO :: Type -> Type #

Hashable GhcSessionIO Source # 
Instance details

Defined in Development.IDE.Core.RuleTypes

NFData GhcSessionIO Source # 
Instance details

Defined in Development.IDE.Core.RuleTypes

Methods

rnf :: GhcSessionIO -> () #

type Rep GhcSessionIO Source # 
Instance details

Defined in Development.IDE.Core.RuleTypes

type Rep GhcSessionIO = D1 ('MetaData "GhcSessionIO" "Development.IDE.Core.RuleTypes" "ghcide-1.7.0.0-Et6Gp1ZnqTjGFkpVtgQ7GA" 'False) (C1 ('MetaCons "GhcSessionIO" 'PrefixI 'False) (U1 :: Type -> Type))
type RuleResult GhcSessionIO Source # 
Instance details

Defined in Development.IDE.Core.RuleTypes

data IdeGhcSession Source #

Constructors

IdeGhcSession 

Fields

Instances

Instances details
Show IdeGhcSession Source # 
Instance details

Defined in Development.IDE.Core.RuleTypes

NFData IdeGhcSession Source # 
Instance details

Defined in Development.IDE.Core.RuleTypes

Methods

rnf :: IdeGhcSession -> () #

data AddWatchedFile Source #

Constructors

AddWatchedFile 

Instances

Instances details
Eq AddWatchedFile Source # 
Instance details

Defined in Development.IDE.Core.RuleTypes

Show AddWatchedFile Source # 
Instance details

Defined in Development.IDE.Core.RuleTypes

Generic AddWatchedFile Source # 
Instance details

Defined in Development.IDE.Core.RuleTypes

Associated Types

type Rep AddWatchedFile :: Type -> Type #

Hashable AddWatchedFile Source # 
Instance details

Defined in Development.IDE.Core.RuleTypes

NFData AddWatchedFile Source # 
Instance details

Defined in Development.IDE.Core.RuleTypes

Methods

rnf :: AddWatchedFile -> () #

type Rep AddWatchedFile Source # 
Instance details

Defined in Development.IDE.Core.RuleTypes

type Rep AddWatchedFile = D1 ('MetaData "AddWatchedFile" "Development.IDE.Core.RuleTypes" "ghcide-1.7.0.0-Et6Gp1ZnqTjGFkpVtgQ7GA" 'False) (C1 ('MetaCons "AddWatchedFile" 'PrefixI 'False) (U1 :: Type -> Type))
type RuleResult AddWatchedFile Source # 
Instance details

Defined in Development.IDE.Core.RuleTypes

data GetClientSettings Source #

Get the vscode client settings stored in the ide state

Constructors

GetClientSettings 

Instances

Instances details
Eq GetClientSettings Source # 
Instance details

Defined in Development.IDE.Core.RuleTypes

Show GetClientSettings Source # 
Instance details

Defined in Development.IDE.Core.RuleTypes

Generic GetClientSettings Source # 
Instance details

Defined in Development.IDE.Core.RuleTypes

Associated Types

type Rep GetClientSettings :: Type -> Type #

Hashable GetClientSettings Source # 
Instance details

Defined in Development.IDE.Core.RuleTypes

NFData GetClientSettings Source # 
Instance details

Defined in Development.IDE.Core.RuleTypes

Methods

rnf :: GetClientSettings -> () #

type Rep GetClientSettings Source # 
Instance details

Defined in Development.IDE.Core.RuleTypes

type Rep GetClientSettings = D1 ('MetaData "GetClientSettings" "Development.IDE.Core.RuleTypes" "ghcide-1.7.0.0-Et6Gp1ZnqTjGFkpVtgQ7GA" 'False) (C1 ('MetaCons "GetClientSettings" 'PrefixI 'False) (U1 :: Type -> Type))
type RuleResult GetClientSettings Source # 
Instance details

Defined in Development.IDE.Core.RuleTypes

data GetModSummary Source #

Constructors

GetModSummary 

Instances

Instances details
Eq GetModSummary Source # 
Instance details

Defined in Development.IDE.Core.RuleTypes

Show GetModSummary Source # 
Instance details

Defined in Development.IDE.Core.RuleTypes

Generic GetModSummary Source # 
Instance details

Defined in Development.IDE.Core.RuleTypes

Associated Types

type Rep GetModSummary :: Type -> Type #

Hashable GetModSummary Source # 
Instance details

Defined in Development.IDE.Core.RuleTypes

NFData GetModSummary Source # 
Instance details

Defined in Development.IDE.Core.RuleTypes

Methods

rnf :: GetModSummary -> () #

type Rep GetModSummary Source # 
Instance details

Defined in Development.IDE.Core.RuleTypes

type Rep GetModSummary = D1 ('MetaData "GetModSummary" "Development.IDE.Core.RuleTypes" "ghcide-1.7.0.0-Et6Gp1ZnqTjGFkpVtgQ7GA" 'False) (C1 ('MetaCons "GetModSummary" 'PrefixI 'False) (U1 :: Type -> Type))
type RuleResult GetModSummary Source #

Generate a ModSummary that has enough information to be used to get .hi and .hie files. without needing to parse the entire source

Instance details

Defined in Development.IDE.Core.RuleTypes

data GetModSummaryWithoutTimestamps Source #

Instances

Instances details
Eq GetModSummaryWithoutTimestamps Source # 
Instance details

Defined in Development.IDE.Core.RuleTypes

Show GetModSummaryWithoutTimestamps Source # 
Instance details

Defined in Development.IDE.Core.RuleTypes

Generic GetModSummaryWithoutTimestamps Source # 
Instance details

Defined in Development.IDE.Core.RuleTypes

Associated Types

type Rep GetModSummaryWithoutTimestamps :: Type -> Type #

Hashable GetModSummaryWithoutTimestamps Source # 
Instance details

Defined in Development.IDE.Core.RuleTypes

NFData GetModSummaryWithoutTimestamps Source # 
Instance details

Defined in Development.IDE.Core.RuleTypes

type Rep GetModSummaryWithoutTimestamps Source # 
Instance details

Defined in Development.IDE.Core.RuleTypes

type Rep GetModSummaryWithoutTimestamps = D1 ('MetaData "GetModSummaryWithoutTimestamps" "Development.IDE.Core.RuleTypes" "ghcide-1.7.0.0-Et6Gp1ZnqTjGFkpVtgQ7GA" 'False) (C1 ('MetaCons "GetModSummaryWithoutTimestamps" 'PrefixI 'False) (U1 :: Type -> Type))
type RuleResult GetModSummaryWithoutTimestamps Source #

Generate a ModSummary with the timestamps and preprocessed content elided, for more successful early cutoff

Instance details

Defined in Development.IDE.Core.RuleTypes

data IsFileOfInterest Source #

Constructors

IsFileOfInterest 

Instances

Instances details
Eq IsFileOfInterest Source # 
Instance details

Defined in Development.IDE.Core.RuleTypes

Show IsFileOfInterest Source # 
Instance details

Defined in Development.IDE.Core.RuleTypes

Generic IsFileOfInterest Source # 
Instance details

Defined in Development.IDE.Core.RuleTypes

Associated Types

type Rep IsFileOfInterest :: Type -> Type #

Hashable IsFileOfInterest Source # 
Instance details

Defined in Development.IDE.Core.RuleTypes

NFData IsFileOfInterest Source # 
Instance details

Defined in Development.IDE.Core.RuleTypes

Methods

rnf :: IsFileOfInterest -> () #

type Rep IsFileOfInterest Source # 
Instance details

Defined in Development.IDE.Core.RuleTypes

type Rep IsFileOfInterest = D1 ('MetaData "IsFileOfInterest" "Development.IDE.Core.RuleTypes" "ghcide-1.7.0.0-Et6Gp1ZnqTjGFkpVtgQ7GA" 'False) (C1 ('MetaCons "IsFileOfInterest" 'PrefixI 'False) (U1 :: Type -> Type))
type RuleResult IsFileOfInterest Source # 
Instance details

Defined in Development.IDE.Core.RuleTypes

data GetModIface Source #

Constructors

GetModIface 

Instances

Instances details
Eq GetModIface Source # 
Instance details

Defined in Development.IDE.Core.RuleTypes

Show GetModIface Source # 
Instance details

Defined in Development.IDE.Core.RuleTypes

Generic GetModIface Source # 
Instance details

Defined in Development.IDE.Core.RuleTypes

Associated Types

type Rep GetModIface :: Type -> Type #

Hashable GetModIface Source # 
Instance details

Defined in Development.IDE.Core.RuleTypes

NFData GetModIface Source # 
Instance details

Defined in Development.IDE.Core.RuleTypes

Methods

rnf :: GetModIface -> () #

type Rep GetModIface Source # 
Instance details

Defined in Development.IDE.Core.RuleTypes

type Rep GetModIface = D1 ('MetaData "GetModIface" "Development.IDE.Core.RuleTypes" "ghcide-1.7.0.0-Et6Gp1ZnqTjGFkpVtgQ7GA" 'False) (C1 ('MetaCons "GetModIface" 'PrefixI 'False) (U1 :: Type -> Type))
type RuleResult GetModIface Source #

Get a module interface details, either from an interface file or a typechecked module

Instance details

Defined in Development.IDE.Core.RuleTypes

data GetModIfaceFromDiskAndIndex Source #

Instances

Instances details
Eq GetModIfaceFromDiskAndIndex Source # 
Instance details

Defined in Development.IDE.Core.RuleTypes

Show GetModIfaceFromDiskAndIndex Source # 
Instance details

Defined in Development.IDE.Core.RuleTypes

Generic GetModIfaceFromDiskAndIndex Source # 
Instance details

Defined in Development.IDE.Core.RuleTypes

Associated Types

type Rep GetModIfaceFromDiskAndIndex :: Type -> Type #

Hashable GetModIfaceFromDiskAndIndex Source # 
Instance details

Defined in Development.IDE.Core.RuleTypes

NFData GetModIfaceFromDiskAndIndex Source # 
Instance details

Defined in Development.IDE.Core.RuleTypes

type Rep GetModIfaceFromDiskAndIndex Source # 
Instance details

Defined in Development.IDE.Core.RuleTypes

type Rep GetModIfaceFromDiskAndIndex = D1 ('MetaData "GetModIfaceFromDiskAndIndex" "Development.IDE.Core.RuleTypes" "ghcide-1.7.0.0-Et6Gp1ZnqTjGFkpVtgQ7GA" 'False) (C1 ('MetaCons "GetModIfaceFromDiskAndIndex" 'PrefixI 'False) (U1 :: Type -> Type))
type RuleResult GetModIfaceFromDiskAndIndex Source #

GetModIfaceFromDisk and index the `.hie` file into the database. This is an internal rule, use GetModIface instead.

Instance details

Defined in Development.IDE.Core.RuleTypes