Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

QuasiQuotes that are not part of the Haskell standard or haskell-font-lock-quasi-quote-modes will cause haskell-indentation to be incorrect afterwards #1789

Open
ncaq opened this issue Nov 3, 2022 · 0 comments

Comments

@ncaq
Copy link
Contributor

ncaq commented Nov 3, 2022

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant