@@ -18,14 +18,15 @@ import Data.Aeson.TH
1818import Data.Aeson.Types
1919import Data.Text (Text )
2020import qualified Data.Text as T
21+ import Language.Haskell.LSP.Types.ClientCapabilities
2122import Language.Haskell.LSP.Types.Command
2223import Language.Haskell.LSP.Types.Constants
23- import Language.Haskell.LSP.Types.ClientCapabilities
2424import Language.Haskell.LSP.Types.Diagnostic
2525import Language.Haskell.LSP.Types.DocumentFilter
2626import Language.Haskell.LSP.Types.List
27- import Language.Haskell.LSP.Types.Message
2827import Language.Haskell.LSP.Types.Location
28+ import Language.Haskell.LSP.Types.MarkupContent
29+ import Language.Haskell.LSP.Types.Message
2930import Language.Haskell.LSP.Types.Symbol
3031import Language.Haskell.LSP.Types.TextDocument
3132import Language.Haskell.LSP.Types.Uri
@@ -1749,11 +1750,10 @@ interface Hover {
17491750}
17501751
17511752
1752- Where MarkedString is defined as follows:
17531753/**
17541754 * MarkedString can be used to render human readable text. It is either a markdown string
17551755 * or a code-block that provides a language and a code snippet. The language identifier
1756- * is sematically equal to the optional language identifier in fenced code blocks in GitHub
1756+ * is semantically equal to the optional language identifier in fenced code blocks in GitHub
17571757 * issues. See https://help.github.com/articles/creating-and-highlighting-code-blocks/#syntax-highlighting
17581758 *
17591759 * The pair of a language and a value is an equivalent to markdown:
@@ -1762,7 +1762,8 @@ Where MarkedString is defined as follows:
17621762 * ```
17631763 *
17641764 * Note that markdown strings will be sanitized - that means html will be escaped.
1765- */
1765+ * @deprecated use MarkupContent instead.
1766+ */
17661767type MarkedString = string | { language: string; value: string };
17671768
17681769 error: code and message set in case an exception happens during the hover
@@ -1780,6 +1781,7 @@ data LanguageString =
17801781
17811782deriveJSON lspOptions ''LanguageString
17821783
1784+ {-# DEPRECATED MarkedString, PlainString, CodeString "Use MarkupContent instead, since 3.3.0 (11/24/2017)" #-}
17831785data MarkedString =
17841786 PlainString T. Text
17851787 | CodeString LanguageString
@@ -1792,9 +1794,32 @@ instance FromJSON MarkedString where
17921794 parseJSON (A. String t) = pure $ PlainString t
17931795 parseJSON o = CodeString <$> parseJSON o
17941796
1797+ -- -------------------------------------
1798+
1799+ data HoverContents =
1800+ HoverContentsMS (List MarkedString )
1801+ | HoverContents MarkupContent
1802+ deriving (Read ,Show ,Eq )
1803+
1804+ instance ToJSON HoverContents where
1805+ toJSON (HoverContentsMS x) = toJSON x
1806+ toJSON (HoverContents x) = toJSON x
1807+ instance FromJSON HoverContents where
1808+ parseJSON v@ (A. String _) = HoverContentsMS <$> parseJSON v
1809+ parseJSON v@ (A. Null ) = HoverContentsMS <$> parseJSON v
1810+ parseJSON v@ (A. Array _) = HoverContentsMS <$> parseJSON v
1811+ parseJSON v@ (A. Object o) = do
1812+ mk <- o .:? " kind" :: Parser (Maybe MarkupKind )
1813+ case mk of
1814+ Nothing -> HoverContentsMS <$> parseJSON v
1815+ _ -> HoverContents <$> parseJSON v
1816+ parseJSON _ = fail " HoverContents"
1817+
1818+ -- -------------------------------------
1819+
17951820data Hover =
17961821 Hover
1797- { _contents :: List MarkedString
1822+ { _contents :: HoverContents
17981823 , _range :: Maybe Range
17991824 } deriving (Read ,Show ,Eq )
18001825
0 commit comments