Skip to content

Commit c98956e

Browse files
committed
ghcide: Remove dependency on retrie, since it doesn't build yet
1 parent e24ce26 commit c98956e

File tree

4 files changed

+86
-44
lines changed

4 files changed

+86
-44
lines changed

ghcide/ghcide.cabal

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ library
6868
prettyprinter-ansi-terminal,
6969
prettyprinter,
7070
regex-tdfa >= 1.3.1.0,
71-
retrie,
71+
-- retrie,
7272
rope-utf16-splay,
7373
safe,
7474
safe-exceptions,

ghcide/src/Development/IDE/GHC/ExactPrint.hs

Lines changed: 79 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -33,45 +33,84 @@ module Development.IDE.GHC.ExactPrint
3333
)
3434
where
3535

36-
import BasicTypes (appPrec)
37-
import Control.Applicative (Alternative)
38-
import Control.Monad
39-
import qualified Control.Monad.Fail as Fail
40-
import Control.Monad.IO.Class (MonadIO)
41-
import Control.Monad.Trans.Class
42-
import Control.Monad.Trans.Except
43-
import Control.Monad.Zip
44-
import qualified Data.DList as DL
45-
import Data.Either.Extra (mapLeft)
46-
import Data.Functor.Classes
47-
import Data.Functor.Contravariant
48-
import qualified Data.Text as T
49-
import Development.IDE.Core.RuleTypes
50-
import Development.IDE.Core.Service (runAction)
51-
import Development.IDE.Core.Shake
52-
import Development.IDE.GHC.Compat hiding (parseExpr)
53-
import Development.IDE.Types.Location
54-
import Development.Shake (RuleResult, Rules)
55-
import Development.Shake.Classes
56-
import qualified GHC.Generics as GHC
57-
import Generics.SYB
58-
import Ide.PluginUtils
59-
import Language.Haskell.GHC.ExactPrint
60-
import Language.Haskell.GHC.ExactPrint.Parsers
61-
import Language.LSP.Types
62-
import Language.LSP.Types.Capabilities (ClientCapabilities)
63-
import Outputable (Outputable, ppr, showSDoc)
64-
import Retrie.ExactPrint hiding (parseDecl, parseExpr, parsePattern, parseType)
65-
import Parser (parseIdentifier)
66-
import Data.Traversable (for)
67-
import Data.Foldable (Foldable(fold))
68-
import Data.Bool (bool)
69-
import Data.Monoid (All(All), Any(Any))
70-
import Data.Functor.Compose (Compose(Compose))
36+
import BasicTypes (appPrec)
37+
import Control.Applicative (Alternative)
38+
import Control.Monad
39+
import qualified Control.Monad.Fail as Fail
40+
import Control.Monad.IO.Class (MonadIO)
41+
import Control.Monad.Trans.Class
42+
import Control.Monad.Trans.Except
43+
import Control.Monad.Zip
44+
import qualified Data.DList as DL
45+
import Data.Either.Extra (mapLeft)
46+
import Data.Functor.Classes
47+
import Data.Functor.Contravariant
48+
import qualified Data.Text as T
49+
import Development.IDE.Core.RuleTypes
50+
import Development.IDE.Core.Service (runAction)
51+
import Development.IDE.Core.Shake
52+
import Development.IDE.GHC.Compat hiding (parseExpr)
53+
import Development.IDE.Types.Location
54+
import Development.Shake (RuleResult, Rules)
55+
import Development.Shake.Classes
56+
import qualified GHC.Generics as GHC
57+
import Generics.SYB
58+
import Ide.PluginUtils
59+
import Language.Haskell.GHC.ExactPrint
60+
import Language.Haskell.GHC.ExactPrint.Parsers
61+
import Language.LSP.Types
62+
import Language.LSP.Types.Capabilities (ClientCapabilities)
63+
import Outputable (Outputable, ppr,
64+
showSDoc)
65+
-- import Retrie.ExactPrint hiding (parseDecl, parseExpr, parsePattern, parseType)
66+
import Data.Bool (bool)
67+
import Data.Foldable (Foldable (fold))
68+
import Data.Functor.Compose (Compose (Compose))
69+
import Data.Monoid (All (All), Any (Any))
70+
import Data.Traversable (for)
71+
import Language.Haskell.GHC.ExactPrint.Annotate (Annotate)
72+
import Parser (parseIdentifier)
7173
#if __GLASGOW_HASKELL__ == 808
72-
import Control.Arrow
74+
import Control.Arrow
7375
#endif
7476

77+
import Control.DeepSeq (rwhnf)
78+
79+
-- Start stolen from retrie and not compatible with retrie
80+
81+
-- | 'Annotated' packages an AST fragment with the annotations necessary to
82+
-- 'exactPrint' or 'transform' that AST.
83+
data Annotated ast = Annotated
84+
{ astA :: ast
85+
-- ^ Examine the actual AST.
86+
, annsA :: Anns
87+
-- ^ Annotations generated/consumed by ghc-exactprint
88+
, seedA :: Int
89+
-- ^ Name supply used by ghc-exactprint to generate unique locations.
90+
}
91+
deriving (Show)
92+
93+
-- | Construct an 'Annotated'.
94+
-- This should really only be used in the parsing functions, hence the scary name.
95+
-- Don't use this unless you know what you are doing.
96+
unsafeMkA :: ast -> Anns -> Int -> Annotated ast
97+
unsafeMkA = Annotated
98+
99+
-- | Exactprint an 'Annotated' thing.
100+
printA :: Annotate ast => Annotated (Located ast) -> String
101+
printA (Annotated ast anns _) = exactPrint ast anns
102+
103+
-- | Transform an 'Annotated' thing.
104+
transformA
105+
:: Monad m => Annotated ast1 -> (ast1 -> TransformT m ast2) -> m (Annotated ast2)
106+
transformA (Annotated ast anns seed) f = do
107+
(ast',(anns',seed'),_) <- runTransformFromT seed anns (f ast)
108+
return $ Annotated ast' anns' seed'
109+
110+
instance NFData (Annotated a) where
111+
rnf = rwhnf
112+
113+
-- End stolen from retrie and not compatible with retrie
75114

76115
------------------------------------------------------------------------------
77116

@@ -233,7 +272,7 @@ graft' needs_space dst val = Graft $ \dflags a -> do
233272
( mkT $
234273
\case
235274
(L src _ :: Located ast) | src == dst -> val'
236-
l -> l
275+
l -> l
237276
)
238277
a
239278

@@ -539,7 +578,7 @@ smallestM q f = fmap snd . go
539578
Just True -> do
540579
it@(r, x') <- gmapMQ go x
541580
case r of
542-
Any True -> pure it
581+
Any True -> pure it
543582
Any False -> fmap (Any True,) $ f x'
544583
Just False -> pure (mempty, x)
545584

@@ -559,9 +598,9 @@ largestM q f = go
559598
go :: GenericM m
560599
go x = do
561600
case q x of
562-
Just True -> f x
601+
Just True -> f x
563602
Just False -> pure x
564-
Nothing -> gmapM go x
603+
Nothing -> gmapM go x
565604

566605
newtype MonadicQuery r m a = MonadicQuery
567606
{ runMonadicQuery :: m (r, a)

ghcide/src/Development/IDE/Plugin/CodeAction/Args.hs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,9 @@ import Development.IDE.Types.Exports (ExportsMap)
2222
import Development.IDE.Types.Options (IdeOptions)
2323
import Language.LSP.Types (CodeActionKind (CodeActionQuickFix),
2424
TextEdit)
25-
import Retrie (Annotated (astA))
26-
import Retrie.ExactPrint (annsA)
25+
-- import Retrie (Annotated (astA))
26+
-- import Retrie.ExactPrint (annsA)
27+
import Development.IDE.GHC.ExactPrint (Annotated (annsA, astA))
2728

2829
type CodeActionTitle = T.Text
2930

ghcide/src/Development/IDE/Plugin/CodeAction/ExactPrint.hs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,9 @@ import Language.Haskell.GHC.ExactPrint.Types (DeltaPos (DP),
4242
import Language.LSP.Types
4343
import OccName
4444
import Outputable (ppr, showSDocUnsafe)
45-
import Retrie.GHC (rdrNameOcc, unpackFS)
45+
-- import Retrie.GHC (rdrNameOcc, unpackFS)
46+
import FastString (unpackFS)
47+
import GhcPlugins (rdrNameOcc)
4648

4749
------------------------------------------------------------------------------
4850

0 commit comments

Comments
 (0)