Skip to content

Commit 7878c0c

Browse files
simmsbpepeiborrajneiramergify[bot]
authored
Fix #723 (Instance declarations in hs-boot files result in GHC errors) (#781)
* Fix #723 * Update boot test to have instance declarations * Correct expected location of 'f' in boot-def-test * Missed TemplateHaskell pragma from boot test * Fix comment placement Co-authored-by: Pepe Iborra <[email protected]> Co-authored-by: Javier Neira <[email protected]> Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
1 parent 8d5cbe1 commit 7878c0c

File tree

4 files changed

+16
-4
lines changed

4 files changed

+16
-4
lines changed

ghcide/src/Development/IDE/Core/Compile.hs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -229,14 +229,23 @@ mkHiFileResultCompile
229229
mkHiFileResultCompile session' tcm simplified_guts ltype = catchErrs $ do
230230
let session = session' { hsc_dflags = ms_hspp_opts ms }
231231
ms = pm_mod_summary $ tmrParsed tcm
232-
-- give variables unique OccNames
233-
(guts, details) <- tidyProgram session simplified_guts
232+
tcGblEnv = tmrTypechecked tcm
234233

235234
let genLinkable = case ltype of
236235
ObjectLinkable -> generateObjectCode
237236
BCOLinkable -> generateByteCode
238237

239-
(diags, linkable) <- genLinkable session ms guts
238+
(linkable, details, diags) <-
239+
if mg_hsc_src simplified_guts == HsBootFile
240+
then do
241+
-- give variables unique OccNames
242+
details <- mkBootModDetailsTc session tcGblEnv
243+
pure (Nothing, details, [])
244+
else do
245+
-- give variables unique OccNames
246+
(guts, details) <- tidyProgram session simplified_guts
247+
(diags, linkable) <- genLinkable session ms guts
248+
pure (linkable, details, diags)
240249
#if MIN_GHC_API_VERSION(8,10,0)
241250
let !partial_iface = force (mkPartialIface session details simplified_guts)
242251
final_iface <- mkFullIface session partial_iface

ghcide/test/data/boot/A.hs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
1+
{-# LANGUAGE TemplateHaskell #-}
12
module A where
23

34
import B( TB(..) )
45

56
newtype TA = MkTA Int
7+
deriving Eq
68

79
f :: TB -> TA
810
f (MkTB x) = MkTA x

ghcide/test/data/boot/A.hs-boot

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
module A where
22
newtype TA = MkTA Int
3+
instance Eq TA

ghcide/test/exe/Main.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3673,7 +3673,7 @@ bootTests = testCase "boot-def-test" $ runWithExtraFiles "boot" $ \dir -> do
36733673

36743674
cdoc <- createDoc cPath "haskell" cSource
36753675
locs <- getDefinitions cdoc (Position 7 4)
3676-
let floc = mkR 7 0 7 1
3676+
let floc = mkR 9 0 9 1
36773677
checkDefs locs (pure [floc])
36783678

36793679
-- | test that TH reevaluates across interfaces

0 commit comments

Comments
 (0)