diff --git a/hls-splice-plugin.cabal b/hls-splice-plugin.cabal
--- a/hls-splice-plugin.cabal
+++ b/hls-splice-plugin.cabal
@@ -1,6 +1,6 @@
 cabal-version:      2.4
 name:               hls-splice-plugin
-version:            1.0.0.2
+version:            1.0.0.3
 synopsis:
   HLS Plugin to expand TemplateHaskell Splices and QuasiQuotes
 
@@ -19,8 +19,6 @@
 build-type:         Simple
 extra-source-files:
   LICENSE
-  test/testdata/*.error
-  test/testdata/*.expected
   test/testdata/*.hs
   test/testdata/*.yaml
 
@@ -33,19 +31,18 @@
   hs-source-dirs:     src
   build-depends:
     , aeson
-    , base                  >=4.12    && <5
+    , base                  >=4.12 && <5
     , containers
     , dlist
     , extra
     , foldl
     , ghc
     , ghc-exactprint
-    , ghcide                ^>=1.2
+    , ghcide                >=1.2  && <1.5
     , hls-plugin-api        ^>=1.1
     , lens
     , lsp
     , retrie
-    , shake
     , syb
     , text
     , transformers
@@ -65,9 +62,7 @@
   ghc-options:      -threaded -rtsopts -with-rtsopts=-N
   build-depends:
     , base
-    , directory
-    , extra
     , filepath
     , hls-splice-plugin
-    , hls-test-utils  ^>= 1.0
+    , hls-test-utils     ^>=1.0
     , text
diff --git a/src/Ide/Plugin/Splice.hs b/src/Ide/Plugin/Splice.hs
--- a/src/Ide/Plugin/Splice.hs
+++ b/src/Ide/Plugin/Splice.hs
@@ -6,6 +6,7 @@
 {-# LANGUAGE GADTs                 #-}
 {-# LANGUAGE LambdaCase            #-}
 {-# LANGUAGE MagicHash             #-}
+{-# LANGUAGE NamedFieldPuns        #-}
 {-# LANGUAGE OverloadedStrings     #-}
 {-# LANGUAGE RankNTypes            #-}
 {-# LANGUAGE RecordWildCards       #-}
@@ -14,7 +15,6 @@
 {-# LANGUAGE TypeApplications      #-}
 {-# LANGUAGE TypeFamilies          #-}
 {-# LANGUAGE ViewPatterns          #-}
-{-# LANGUAGE NamedFieldPuns        #-}
 
 module Ide.Plugin.Splice
     ( descriptor,
@@ -24,7 +24,8 @@
 import           Control.Applicative             (Alternative ((<|>)))
 import           Control.Arrow
 import qualified Control.Foldl                   as L
-import           Control.Lens                    (ix, view, (%~), (<&>), (^.), Identity(..))
+import           Control.Lens                    (Identity (..), ix, view, (%~),
+                                                  (<&>), (^.))
 import           Control.Monad
 import           Control.Monad.Extra             (eitherM)
 import qualified Control.Monad.Fail              as Fail
@@ -100,7 +101,7 @@
             reportEditor
                 MtWarning
                 [ "Expansion in type-chcking phase failed;"
-                , "trying to expand manually, but note taht it is less rigorous."
+                , "trying to expand manually, but note that it is less rigorous."
                 ]
             pm <-
                 liftIO $
diff --git a/test/Main.hs b/test/Main.hs
--- a/test/Main.hs
+++ b/test/Main.hs
@@ -1,135 +1,109 @@
-{-# LANGUAGE CPP                   #-}
-{-# LANGUAGE DataKinds             #-}
 {-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns        #-}
 {-# LANGUAGE OverloadedStrings     #-}
-{-# LANGUAGE ScopedTypeVariables   #-}
 {-# LANGUAGE TypeOperators         #-}
 {-# LANGUAGE ViewPatterns          #-}
 
-module Main (main) where
+module Main
+  ( main
+  ) where
 
-import           Control.Monad
+import           Control.Monad           (void)
 import           Data.List               (find)
 import           Data.Text               (Text)
 import qualified Data.Text               as T
 import qualified Data.Text.IO            as T
 import qualified Ide.Plugin.Splice       as Splice
 import           Ide.Plugin.Splice.Types
-import           System.Directory
 import           System.FilePath
-import           System.Time.Extra       (sleep)
 import           Test.Hls
 
 main :: IO ()
 main = defaultTestRunner tests
 
-plugin :: PluginDescriptor IdeState
-plugin = Splice.descriptor "splice"
+splicePlugin :: PluginDescriptor IdeState
+splicePlugin = Splice.descriptor "splice"
 
 tests :: TestTree
-tests =
-    testGroup
-        "splice"
-        [ goldenTest "TSimpleExp.hs" Inplace 6 15
-        , goldenTest "TSimpleExp.hs" Inplace 6 24
-        , goldenTest "TTypeAppExp.hs" Inplace 7 5
-        , goldenTest "TErrorExp.hs" Inplace 6 15
-        , goldenTest "TErrorExp.hs" Inplace 6 51
-        , goldenTest "TQQExp.hs" Inplace 6 17
-        , goldenTest "TQQExp.hs" Inplace 6 25
-        , goldenTest "TQQExpError.hs" Inplace 6 13
-        , goldenTest "TQQExpError.hs" Inplace 6 22
-        , testGroup "Pattern Splices"
-            [ goldenTest "TSimplePat.hs" Inplace 6 3
-            , goldenTest "TSimplePat.hs" Inplace 6 22
-            , goldenTest "TSimplePat.hs" Inplace 6 3
-            , goldenTest "TSimplePat.hs" Inplace 6 22
-            , goldenTest "TErrorPat.hs" Inplace 6 3
-            , goldenTest "TErrorPat.hs" Inplace 6 18
-            , goldenTest "TQQPat.hs" Inplace 6 3
-            , goldenTest "TQQPat.hs" Inplace 6 11
-            , goldenTest "TQQPatError.hs" Inplace 6 3
-            , goldenTest "TQQPatError.hs" Inplace 6 11
-            ]
-        , goldenTest "TSimpleType.hs" Inplace 5 12
-        , goldenTest "TSimpleType.hs" Inplace 5 22
-        , goldenTest "TTypeTypeError.hs" Inplace 7 12
-        , goldenTest "TTypeTypeError.hs" Inplace 7 52
-        , goldenTest "TQQType.hs" Inplace 8 19
-        , goldenTest "TQQType.hs" Inplace 8 28
-        , goldenTest "TQQTypeTypeError.hs" Inplace 8 19
-        , goldenTest "TQQTypeTypeError.hs" Inplace 8 28
-        , goldenTest "TSimpleDecl.hs" Inplace 8 1
-        , goldenTest "TQQDecl.hs" Inplace 5 1
-        , goldenTestWithEdit "TTypeKindError.hs" Inplace 7 9
-        , goldenTestWithEdit "TDeclKindError.hs" Inplace 8 1
-        ]
+tests = testGroup "splice"
+  [ goldenTest "TSimpleExp" Inplace 6 15
+  , goldenTest "TSimpleExp" Inplace 6 24
+  , goldenTest "TTypeAppExp" Inplace 7 5
+  , goldenTest "TErrorExp" Inplace 6 15
+  , goldenTest "TErrorExp" Inplace 6 51
+  , goldenTest "TQQExp" Inplace 6 17
+  , goldenTest "TQQExp" Inplace 6 25
+  , goldenTest "TQQExpError" Inplace 6 13
+  , goldenTest "TQQExpError" Inplace 6 22
+  , testGroup "Pattern Splices"
+      [ goldenTest "TSimplePat" Inplace 6 3
+      , goldenTest "TSimplePat" Inplace 6 22
+      , goldenTest "TSimplePat" Inplace 6 3
+      , goldenTest "TSimplePat" Inplace 6 22
+      , goldenTest "TErrorPat" Inplace 6 3
+      , goldenTest "TErrorPat" Inplace 6 18
+      , goldenTest "TQQPat" Inplace 6 3
+      , goldenTest "TQQPat" Inplace 6 11
+      , goldenTest "TQQPatError" Inplace 6 3
+      , goldenTest "TQQPatError" Inplace 6 11
+      ]
+  , goldenTest "TSimpleType" Inplace 5 12
+  , goldenTest "TSimpleType" Inplace 5 22
+  , goldenTest "TTypeTypeError" Inplace 7 12
+  , goldenTest "TTypeTypeError" Inplace 7 52
+  , goldenTest "TQQType" Inplace 8 19
+  , goldenTest "TQQType" Inplace 8 28
+  , goldenTest "TQQTypeTypeError" Inplace 8 19
+  , goldenTest "TQQTypeTypeError" Inplace 8 28
+  , goldenTest "TSimpleDecl" Inplace 8 1
+  , goldenTest "TQQDecl" Inplace 5 1
+  , goldenTestWithEdit "TTypeKindError" Inplace 7 9
+  , goldenTestWithEdit "TDeclKindError" Inplace 8 1
+  ]
 
 goldenTest :: FilePath -> ExpandStyle -> Int -> Int -> TestTree
-goldenTest input tc line col =
-    testCase (input <> " (golden)") $ do
-        runSessionWithServer plugin spliceTestPath $ do
-            doc <- openDoc input "haskell"
-            _ <- waitForDiagnostics
-            actions <- getCodeActions doc $ pointRange line col
-            case find ((== Just (toExpandCmdTitle tc)) . codeActionTitle) actions of
-                Just (InR CodeAction {_command = Just c}) -> do
-                    executeCommand c
-                    _resp <- skipManyTill anyMessage (message SWorkspaceApplyEdit)
-                    edited <- documentContents doc
-                    let expected_name = input <.> "expected"
-                    -- Write golden tests if they don't already exist
-                    liftIO $
-                        (doesFileExist expected_name >>=) $
-                            flip unless $ do
-                                T.writeFile expected_name edited
-                    expected <- liftIO $ T.readFile expected_name
-                    liftIO $ edited @?= expected
-                _ -> liftIO $ assertFailure "No CodeAction detected"
+goldenTest fp tc line col =
+  goldenWithHaskellDoc splicePlugin (fp <> " (golden)") testDataDir fp "expected" "hs" $ \doc -> do
+    _ <- waitForDiagnostics
+    actions <- getCodeActions doc $ pointRange line col
+    case find ((== Just (toExpandCmdTitle tc)) . codeActionTitle) actions of
+      Just (InR CodeAction {_command = Just c}) -> do
+        executeCommand c
+        void $ skipManyTill anyMessage (message SWorkspaceApplyEdit)
+      _ -> liftIO $ assertFailure "No CodeAction detected"
 
 goldenTestWithEdit :: FilePath -> ExpandStyle -> Int -> Int -> TestTree
-goldenTestWithEdit input tc line col =
-    testCase (input <> " (golden)") $ do
-        runSessionWithServer plugin spliceTestPath $ do
-            doc <- openDoc input "haskell"
-            orig <- documentContents doc
-            let lns = T.lines orig
-                theRange =
-                    Range
-                        { _start = Position 0 0
-                        , _end = Position (length lns + 1) 1
-                        }
-            liftIO $ sleep 3
-            alt <- liftIO $ T.readFile (input <.> "error")
-            void $ applyEdit doc $ TextEdit theRange alt
-            changeDoc doc [TextDocumentContentChangeEvent (Just theRange) Nothing alt]
-            void waitForDiagnostics
-            actions <- getCodeActions doc $ pointRange line col
-            case find ((== Just (toExpandCmdTitle tc)) . codeActionTitle) actions of
-                Just (InR CodeAction {_command = Just c}) -> do
-                    executeCommand c
-                    _resp <- skipManyTill anyMessage (message SWorkspaceApplyEdit)
-                    edited <- documentContents doc
-                    let expected_name = input <.> "expected"
-                    -- Write golden tests if they don't already exist
-                    liftIO $
-                        (doesFileExist expected_name >>=) $
-                            flip unless $ do
-                                T.writeFile expected_name edited
-                    expected <- liftIO $ T.readFile expected_name
-                    liftIO $ edited @?= expected
-                _ -> liftIO $ assertFailure "No CodeAction detected"
+goldenTestWithEdit fp tc line col =
+  goldenWithHaskellDoc splicePlugin (fp <> " (golden)") testDataDir fp "expected" "hs" $ \doc -> do
+     orig <- documentContents doc
+     let
+       lns = T.lines orig
+       theRange =
+         Range
+         { _start = Position 0 0
+         , _end = Position (length lns + 1) 1
+         }
+     waitForProgressDone -- cradle
+     waitForProgressDone
+     alt <- liftIO $ T.readFile (fp <.> "error.hs")
+     void $ applyEdit doc $ TextEdit theRange alt
+     changeDoc doc [TextDocumentContentChangeEvent (Just theRange) Nothing alt]
+     void waitForDiagnostics
+     actions <- getCodeActions doc $ pointRange line col
+     case find ((== Just (toExpandCmdTitle tc)) . codeActionTitle) actions of
+       Just (InR CodeAction {_command = Just c}) -> do
+         executeCommand c
+         void $ skipManyTill anyMessage (message SWorkspaceApplyEdit)
+       _ -> liftIO $ assertFailure "No CodeAction detected"
 
-spliceTestPath :: FilePath
-spliceTestPath = "test" </> "testdata"
+testDataDir :: FilePath
+testDataDir = "test" </> "testdata"
 
 pointRange :: Int -> Int -> Range
-pointRange
-    (subtract 1 -> line)
-    (subtract 1 -> col) =
-        Range (Position line col) (Position line $ col + 1)
+pointRange (subtract 1 -> line) (subtract 1 -> col) =
+  Range (Position line col) (Position line $ col + 1)
 
 -- | Get the title of a code action.
 codeActionTitle :: (Command |? CodeAction) -> Maybe Text
-codeActionTitle InL{}                               = Nothing
-codeActionTitle (InR(CodeAction title _ _ _ _ _ _ _)) = Just title
+codeActionTitle InL {}                    = Nothing
+codeActionTitle (InR CodeAction {_title}) = Just _title
diff --git a/test/testdata/TDeclKindError.error.hs b/test/testdata/TDeclKindError.error.hs
new file mode 100644
--- /dev/null
+++ b/test/testdata/TDeclKindError.error.hs
@@ -0,0 +1,16 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE QuasiQuotes #-}
+module TSimpleDecl where
+import Language.Haskell.TH ( mkName, clause, normalB, funD, sigD )
+
+-- Foo
+--  Bar
+$(sequence
+    [sigD (mkName "foo") [t|Int|]
+    ,funD (mkName "foo") [clause [] (normalB [|42|]) []]
+    ,sigD (mkName "bar") [t|Int|]
+    ]
+    )
+-- Bar
+-- ee
+-- dddd
diff --git a/test/testdata/TDeclKindError.expected.hs b/test/testdata/TDeclKindError.expected.hs
new file mode 100644
--- /dev/null
+++ b/test/testdata/TDeclKindError.expected.hs
@@ -0,0 +1,13 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE QuasiQuotes #-}
+module TSimpleDecl where
+import Language.Haskell.TH ( mkName, clause, normalB, funD, sigD )
+
+-- Foo
+--  Bar
+foo :: Int
+foo = 42
+bar :: Int
+-- Bar
+-- ee
+-- dddd
diff --git a/test/testdata/TDeclKindError.hs.error b/test/testdata/TDeclKindError.hs.error
deleted file mode 100644
--- a/test/testdata/TDeclKindError.hs.error
+++ /dev/null
@@ -1,16 +0,0 @@
-{-# LANGUAGE TemplateHaskell #-}
-{-# LANGUAGE QuasiQuotes #-}
-module TSimpleDecl where
-import Language.Haskell.TH ( mkName, clause, normalB, funD, sigD )
-
--- Foo
---  Bar
-$(sequence
-    [sigD (mkName "foo") [t|Int|]
-    ,funD (mkName "foo") [clause [] (normalB [|42|]) []]
-    ,sigD (mkName "bar") [t|Int|]
-    ]
-    )
--- Bar
--- ee
--- dddd
diff --git a/test/testdata/TDeclKindError.hs.expected b/test/testdata/TDeclKindError.hs.expected
deleted file mode 100644
--- a/test/testdata/TDeclKindError.hs.expected
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# LANGUAGE TemplateHaskell #-}
-{-# LANGUAGE QuasiQuotes #-}
-module TSimpleDecl where
-import Language.Haskell.TH ( mkName, clause, normalB, funD, sigD )
-
--- Foo
---  Bar
-foo :: Int
-foo = 42
-bar :: Int
--- Bar
--- ee
--- dddd
diff --git a/test/testdata/TErrorExp.expected.hs b/test/testdata/TErrorExp.expected.hs
new file mode 100644
--- /dev/null
+++ b/test/testdata/TErrorExp.expected.hs
@@ -0,0 +1,6 @@
+{-# LANGUAGE TemplateHaskell #-}
+module TErrorExp where
+import Language.Haskell.TH ( tupE, litE, integerL )
+
+main :: IO ()
+main = return (42, ())
diff --git a/test/testdata/TErrorExp.hs.expected b/test/testdata/TErrorExp.hs.expected
deleted file mode 100644
--- a/test/testdata/TErrorExp.hs.expected
+++ /dev/null
@@ -1,6 +0,0 @@
-{-# LANGUAGE TemplateHaskell #-}
-module TErrorExp where
-import Language.Haskell.TH ( tupE, litE, integerL )
-
-main :: IO ()
-main = return (42, ())
diff --git a/test/testdata/TErrorPat.expected.hs b/test/testdata/TErrorPat.expected.hs
new file mode 100644
--- /dev/null
+++ b/test/testdata/TErrorPat.expected.hs
@@ -0,0 +1,6 @@
+{-# LANGUAGE TemplateHaskell #-}
+module TErrorPat where
+import Language.Haskell.TH ( conP )
+
+f :: () -> ()
+f True = x
diff --git a/test/testdata/TErrorPat.hs.expected b/test/testdata/TErrorPat.hs.expected
deleted file mode 100644
--- a/test/testdata/TErrorPat.hs.expected
+++ /dev/null
@@ -1,6 +0,0 @@
-{-# LANGUAGE TemplateHaskell #-}
-module TErrorPat where
-import Language.Haskell.TH ( conP )
-
-f :: () -> ()
-f True = x
diff --git a/test/testdata/TQQDecl.expected.hs b/test/testdata/TQQDecl.expected.hs
new file mode 100644
--- /dev/null
+++ b/test/testdata/TQQDecl.expected.hs
@@ -0,0 +1,6 @@
+{-# LANGUAGE QuasiQuotes #-}
+module TQQDecl where
+import QQ (str)
+
+foo :: String
+foo = "foo"
diff --git a/test/testdata/TQQDecl.hs.expected b/test/testdata/TQQDecl.hs.expected
deleted file mode 100644
--- a/test/testdata/TQQDecl.hs.expected
+++ /dev/null
@@ -1,6 +0,0 @@
-{-# LANGUAGE QuasiQuotes #-}
-module TQQDecl where
-import QQ (str)
-
-foo :: String
-foo = "foo"
diff --git a/test/testdata/TQQExp.expected.hs b/test/testdata/TQQExp.expected.hs
new file mode 100644
--- /dev/null
+++ b/test/testdata/TQQExp.expected.hs
@@ -0,0 +1,6 @@
+{-# LANGUAGE QuasiQuotes #-}
+module TQQExp where
+import QQ
+
+main :: IO ()
+main = putStrLn "str"
diff --git a/test/testdata/TQQExp.hs.expected b/test/testdata/TQQExp.hs.expected
deleted file mode 100644
--- a/test/testdata/TQQExp.hs.expected
+++ /dev/null
@@ -1,6 +0,0 @@
-{-# LANGUAGE QuasiQuotes #-}
-module TQQExp where
-import QQ
-
-main :: IO ()
-main = putStrLn "str"
diff --git a/test/testdata/TQQExpError.expected.hs b/test/testdata/TQQExpError.expected.hs
new file mode 100644
--- /dev/null
+++ b/test/testdata/TQQExpError.expected.hs
@@ -0,0 +1,6 @@
+{-# LANGUAGE QuasiQuotes #-}
+module TQQExpError where
+import QQ
+
+main :: IO ()
+main = pure "str"
diff --git a/test/testdata/TQQExpError.hs.expected b/test/testdata/TQQExpError.hs.expected
deleted file mode 100644
--- a/test/testdata/TQQExpError.hs.expected
+++ /dev/null
@@ -1,6 +0,0 @@
-{-# LANGUAGE QuasiQuotes #-}
-module TQQExpError where
-import QQ
-
-main :: IO ()
-main = pure "str"
diff --git a/test/testdata/TQQPat.expected.hs b/test/testdata/TQQPat.expected.hs
new file mode 100644
--- /dev/null
+++ b/test/testdata/TQQPat.expected.hs
@@ -0,0 +1,7 @@
+{-# LANGUAGE QuasiQuotes #-}
+module TQQPat where
+import QQ
+
+f :: String -> IO ()
+f "str" = putStrLn "is str"
+f _ = putStrLn " not str"
diff --git a/test/testdata/TQQPat.hs.expected b/test/testdata/TQQPat.hs.expected
deleted file mode 100644
--- a/test/testdata/TQQPat.hs.expected
+++ /dev/null
@@ -1,7 +0,0 @@
-{-# LANGUAGE QuasiQuotes #-}
-module TQQPat where
-import QQ
-
-f :: String -> IO ()
-f "str" = putStrLn "is str"
-f _ = putStrLn " not str"
diff --git a/test/testdata/TQQPatError.expected.hs b/test/testdata/TQQPatError.expected.hs
new file mode 100644
--- /dev/null
+++ b/test/testdata/TQQPatError.expected.hs
@@ -0,0 +1,7 @@
+{-# LANGUAGE QuasiQuotes #-}
+module TQQPatError where
+import QQ
+
+f :: () -> IO ()
+f "str" = putStrLn "is str"
+f _ = putStrLn " not str"
diff --git a/test/testdata/TQQPatError.hs.expected b/test/testdata/TQQPatError.hs.expected
deleted file mode 100644
--- a/test/testdata/TQQPatError.hs.expected
+++ /dev/null
@@ -1,7 +0,0 @@
-{-# LANGUAGE QuasiQuotes #-}
-module TQQPatError where
-import QQ
-
-f :: () -> IO ()
-f "str" = putStrLn "is str"
-f _ = putStrLn " not str"
diff --git a/test/testdata/TQQType.expected.hs b/test/testdata/TQQType.expected.hs
new file mode 100644
--- /dev/null
+++ b/test/testdata/TQQType.expected.hs
@@ -0,0 +1,9 @@
+{-# LANGUAGE DataKinds #-}
+{-# LANGUAGE QuasiQuotes #-}
+module TQQType where
+import Language.Haskell.TH ( appT, numTyLit, litT, conT )
+import Data.Proxy ( Proxy(..) )
+import QQ
+
+main :: IO (Proxy "str")
+main = return Proxy
diff --git a/test/testdata/TQQType.hs.expected b/test/testdata/TQQType.hs.expected
deleted file mode 100644
--- a/test/testdata/TQQType.hs.expected
+++ /dev/null
@@ -1,9 +0,0 @@
-{-# LANGUAGE DataKinds #-}
-{-# LANGUAGE QuasiQuotes #-}
-module TQQType where
-import Language.Haskell.TH ( appT, numTyLit, litT, conT )
-import Data.Proxy ( Proxy(..) )
-import QQ
-
-main :: IO (Proxy "str")
-main = return Proxy
diff --git a/test/testdata/TQQTypeTypeError.expected.hs b/test/testdata/TQQTypeTypeError.expected.hs
new file mode 100644
--- /dev/null
+++ b/test/testdata/TQQTypeTypeError.expected.hs
@@ -0,0 +1,9 @@
+{-# LANGUAGE DataKinds #-}
+{-# LANGUAGE QuasiQuotes #-}
+module TQQTypeTypeError where
+import Language.Haskell.TH ( appT, numTyLit, litT, conT )
+import Data.Proxy ( Proxy(..) )
+import QQ
+
+main :: IO (Proxy "str")
+main = return ()
diff --git a/test/testdata/TQQTypeTypeError.hs.expected b/test/testdata/TQQTypeTypeError.hs.expected
deleted file mode 100644
--- a/test/testdata/TQQTypeTypeError.hs.expected
+++ /dev/null
@@ -1,9 +0,0 @@
-{-# LANGUAGE DataKinds #-}
-{-# LANGUAGE QuasiQuotes #-}
-module TQQTypeTypeError where
-import Language.Haskell.TH ( appT, numTyLit, litT, conT )
-import Data.Proxy ( Proxy(..) )
-import QQ
-
-main :: IO (Proxy "str")
-main = return ()
diff --git a/test/testdata/TSimpleDecl.expected.hs b/test/testdata/TSimpleDecl.expected.hs
new file mode 100644
--- /dev/null
+++ b/test/testdata/TSimpleDecl.expected.hs
@@ -0,0 +1,12 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE QuasiQuotes #-}
+module TSimpleDecl where
+import Language.Haskell.TH ( mkName, clause, normalB, funD, sigD )
+
+-- Foo
+--  Bar
+foo :: Int
+foo = 42
+-- Bar
+-- ee
+-- dddd
diff --git a/test/testdata/TSimpleDecl.hs.expected b/test/testdata/TSimpleDecl.hs.expected
deleted file mode 100644
--- a/test/testdata/TSimpleDecl.hs.expected
+++ /dev/null
@@ -1,12 +0,0 @@
-{-# LANGUAGE TemplateHaskell #-}
-{-# LANGUAGE QuasiQuotes #-}
-module TSimpleDecl where
-import Language.Haskell.TH ( mkName, clause, normalB, funD, sigD )
-
--- Foo
---  Bar
-foo :: Int
-foo = 42
--- Bar
--- ee
--- dddd
diff --git a/test/testdata/TSimpleExp.expected.hs b/test/testdata/TSimpleExp.expected.hs
new file mode 100644
--- /dev/null
+++ b/test/testdata/TSimpleExp.expected.hs
@@ -0,0 +1,6 @@
+{-# LANGUAGE TemplateHaskell #-}
+module TSimpleExp where
+import Language.Haskell.TH ( tupE, litE, integerL )
+
+main :: IO ()
+main = return ()
diff --git a/test/testdata/TSimpleExp.hs.expected b/test/testdata/TSimpleExp.hs.expected
deleted file mode 100644
--- a/test/testdata/TSimpleExp.hs.expected
+++ /dev/null
@@ -1,6 +0,0 @@
-{-# LANGUAGE TemplateHaskell #-}
-module TSimpleExp where
-import Language.Haskell.TH ( tupE, litE, integerL )
-
-main :: IO ()
-main = return ()
diff --git a/test/testdata/TSimplePat.expected.hs b/test/testdata/TSimplePat.expected.hs
new file mode 100644
--- /dev/null
+++ b/test/testdata/TSimplePat.expected.hs
@@ -0,0 +1,6 @@
+{-# LANGUAGE TemplateHaskell #-}
+module TSimplePat where
+import Language.Haskell.TH ( varP, mkName )
+
+f :: x -> x
+f x = x
diff --git a/test/testdata/TSimplePat.hs.expected b/test/testdata/TSimplePat.hs.expected
deleted file mode 100644
--- a/test/testdata/TSimplePat.hs.expected
+++ /dev/null
@@ -1,6 +0,0 @@
-{-# LANGUAGE TemplateHaskell #-}
-module TSimplePat where
-import Language.Haskell.TH ( varP, mkName )
-
-f :: x -> x
-f x = x
diff --git a/test/testdata/TSimpleType.expected.hs b/test/testdata/TSimpleType.expected.hs
new file mode 100644
--- /dev/null
+++ b/test/testdata/TSimpleType.expected.hs
@@ -0,0 +1,6 @@
+{-# LANGUAGE TemplateHaskell #-}
+module TSimpleType where
+import Language.Haskell.TH ( tupleT )
+
+main :: IO ()
+main = return ()
diff --git a/test/testdata/TSimpleType.hs.expected b/test/testdata/TSimpleType.hs.expected
deleted file mode 100644
--- a/test/testdata/TSimpleType.hs.expected
+++ /dev/null
@@ -1,6 +0,0 @@
-{-# LANGUAGE TemplateHaskell #-}
-module TSimpleType where
-import Language.Haskell.TH ( tupleT )
-
-main :: IO ()
-main = return ()
diff --git a/test/testdata/TTypeAppExp.expected.hs b/test/testdata/TTypeAppExp.expected.hs
new file mode 100644
--- /dev/null
+++ b/test/testdata/TTypeAppExp.expected.hs
@@ -0,0 +1,7 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE TypeApplications #-}
+module TTypeAppExp where
+import Data.Proxy
+
+f :: Proxy Int
+f = Proxy @Int
diff --git a/test/testdata/TTypeAppExp.hs.expected b/test/testdata/TTypeAppExp.hs.expected
deleted file mode 100644
--- a/test/testdata/TTypeAppExp.hs.expected
+++ /dev/null
@@ -1,7 +0,0 @@
-{-# LANGUAGE TemplateHaskell #-}
-{-# LANGUAGE TypeApplications #-}
-module TTypeAppExp where
-import Data.Proxy
-
-f :: Proxy Int
-f = (Proxy @Int)
diff --git a/test/testdata/TTypeKindError.error.hs b/test/testdata/TTypeKindError.error.hs
new file mode 100644
--- /dev/null
+++ b/test/testdata/TTypeKindError.error.hs
@@ -0,0 +1,8 @@
+{-# LANGUAGE DataKinds #-}
+{-# LANGUAGE TemplateHaskell #-}
+module TTypeKindError where
+import Language.Haskell.TH ( numTyLit, litT )
+import Data.Proxy ( Proxy )
+
+main :: $(litT (numTyLit 42))
+main = return ()
diff --git a/test/testdata/TTypeKindError.expected.hs b/test/testdata/TTypeKindError.expected.hs
new file mode 100644
--- /dev/null
+++ b/test/testdata/TTypeKindError.expected.hs
@@ -0,0 +1,8 @@
+{-# LANGUAGE DataKinds #-}
+{-# LANGUAGE TemplateHaskell #-}
+module TTypeKindError where
+import Language.Haskell.TH ( numTyLit, litT )
+import Data.Proxy ( Proxy )
+
+main :: (42)
+main = return ()
diff --git a/test/testdata/TTypeKindError.hs.error b/test/testdata/TTypeKindError.hs.error
deleted file mode 100644
--- a/test/testdata/TTypeKindError.hs.error
+++ /dev/null
@@ -1,8 +0,0 @@
-{-# LANGUAGE DataKinds #-}
-{-# LANGUAGE TemplateHaskell #-}
-module TTypeKindError where
-import Language.Haskell.TH ( numTyLit, litT )
-import Data.Proxy ( Proxy )
-
-main :: $(litT (numTyLit 42))
-main = return ()
diff --git a/test/testdata/TTypeKindError.hs.expected b/test/testdata/TTypeKindError.hs.expected
deleted file mode 100644
--- a/test/testdata/TTypeKindError.hs.expected
+++ /dev/null
@@ -1,8 +0,0 @@
-{-# LANGUAGE DataKinds #-}
-{-# LANGUAGE TemplateHaskell #-}
-module TTypeKindError where
-import Language.Haskell.TH ( numTyLit, litT )
-import Data.Proxy ( Proxy )
-
-main :: (42)
-main = return ()
diff --git a/test/testdata/TTypeTypeError.expected.hs b/test/testdata/TTypeTypeError.expected.hs
new file mode 100644
--- /dev/null
+++ b/test/testdata/TTypeTypeError.expected.hs
@@ -0,0 +1,8 @@
+{-# LANGUAGE DataKinds #-}
+{-# LANGUAGE TemplateHaskell #-}
+module TTypeTypeError where
+import Language.Haskell.TH ( appT, numTyLit, litT, conT )
+import Data.Proxy ( Proxy )
+
+main :: IO (Proxy 42)
+main = return ()
diff --git a/test/testdata/TTypeTypeError.hs.expected b/test/testdata/TTypeTypeError.hs.expected
deleted file mode 100644
--- a/test/testdata/TTypeTypeError.hs.expected
+++ /dev/null
@@ -1,8 +0,0 @@
-{-# LANGUAGE DataKinds #-}
-{-# LANGUAGE TemplateHaskell #-}
-module TTypeTypeError where
-import Language.Haskell.TH ( appT, numTyLit, litT, conT )
-import Data.Proxy ( Proxy )
-
-main :: IO (Proxy 42)
-main = return ()
