QuasiQuotes that are not part of the Haskell standard or haskell-font-lock-quasi-quote-modes will cause haskell-indentation to be incorrect afterwards
ncaq opened this issue · 0 comments
The indent function is buggy when using anything other than hardcoded QuasiQuote.
I was editing ncaq/dic-nico-intersection-pixiv and thought haskell-indentation-newline-and-indent
was wrong.
When I use QuasiQuote
, the haskell-indentation-newline-and-indent
inside that function and the indent-for-tab-command
on TAB are strange.
Haskell standard ones such as [|foo|]
and [d|foo|]
and hsx
in haskell-font-lock-quasi-quote-modes
do not go wrong.
Reproduction procedure.
stack new foo
Add template-haskell
to dependencies
.
Put the following in src/DoNothing.hs
.
{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE TemplateHaskell #-}
module DoNothing where
import Language.Haskell.TH
import Language.Haskell.TH.Quote
doNothing :: QuasiQuoter
doNothing = QuasiQuoter
{ quoteExp = litE . . stringL
, quotePat = undefined
, quoteType = undefined
, quoteDec = undefined
}
Put the following in src/Lib.hs
.
{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE TemplateHaskell #-}
module Lib
( someFunc
) where
import DoNothing
someFunc :: IO ()
someFunc = do
print [doNothing|aaa|]]
print "foo"
If I move the cursor over print "foo"
here and invoke indent-for-tab-command
with TAB, it should return to the original indentation level after a few presses, but it is fixed at a strange indentation, like this.
someFunc :: IO ()
someFunc = do
print [doNothing|aaa|]]
print "foo"
As I mentioned at the beginning, I confirmed that this does not happen with already registered Quote names such as hsx
.
Also, the font-lock looks different.
I took a quick peek at the code and couldn't figure it out, so I'm reporting it anyway.