diff --git a/9.10 b/9.10 new file mode 100644 index 0000000000..7f0f40c245 --- /dev/null +++ b/9.10 @@ -0,0 +1,822 @@ +( L RealSrcSpan SrcSpanPoint "/home/gthomas/code/haskell-language-server/plugins/hls-splice-plugin/test/testdata/TQQPat.hs" 1 1 Nothing + ( HsModule + ( XModulePs + ( EpAnn + ( EpaSpan RealSrcSpan SrcSpanPoint "/home/gthomas/code/haskell-language-server/plugins/hls-splice-plugin/test/testdata/TQQPat.hs" 1 1 Nothing ) + ( AnnsModule + ( ( : ) + ( AddEpAnn ( AnnModule ) + ( EpaSpan RealSrcSpan SrcSpanOneLine "/home/gthomas/code/haskell-language-server/plugins/hls-splice-plugin/test/testdata/TQQPat.hs" 2 1 7 + ( Just + ( BufSpan + { bufSpanStart = BufPos + { bufPos = 29 } + , bufSpanEnd = BufPos + { bufPos = 35 } + } + ) + ) + ) + ) + ( ( : ) + ( AddEpAnn ( AnnWhere ) + ( EpaSpan RealSrcSpan SrcSpanOneLine "/home/gthomas/code/haskell-language-server/plugins/hls-splice-plugin/test/testdata/TQQPat.hs" 2 15 20 + ( Just + ( BufSpan + { bufSpanStart = BufPos + { bufPos = 43 } + , bufSpanEnd = BufPos + { bufPos = 48 } + } + ) + ) + ) + ) ( [] ) + ) + ) ( [] ) ( [] ) + ( Just + ( () ( { abstract:RealSrcSpan } ) ( { abstract:RealSrcSpan } ) ) + ) + ) + ( EpaCommentsBalanced ( [] ) ( [] ) ) + ) + ( EpVirtualBraces ( 1 ) ) ( Nothing ) ( Nothing ) + ) + ( Just + ( L + ( EpAnn + ( EpaSpan RealSrcSpan SrcSpanOneLine "/home/gthomas/code/haskell-language-server/plugins/hls-splice-plugin/test/testdata/TQQPat.hs" 2 8 14 + ( Just + ( BufSpan + { bufSpanStart = BufPos + { bufPos = 36 } + , bufSpanEnd = BufPos + { bufPos = 42 } + } + ) + ) + ) + ( AnnListItem ( [] ) ) + ( EpaComments ( [] ) ) + ) ( { abstract:ModuleName } ) + ) + ) ( Nothing ) + ( ( : ) + ( L + ( EpAnn + ( EpaSpan RealSrcSpan SrcSpanOneLine "/home/gthomas/code/haskell-language-server/plugins/hls-splice-plugin/test/testdata/TQQPat.hs" 3 1 10 + ( Just + ( BufSpan + { bufSpanStart = BufPos + { bufPos = 49 } + , bufSpanEnd = BufPos + { bufPos = 58 } + } + ) + ) + ) + ( AnnListItem ( [] ) ) + ( EpaComments ( [] ) ) + ) + ( ImportDecl + ( XImportDeclPass + ( EpAnn + ( EpaSpan RealSrcSpan SrcSpanOneLine "/home/gthomas/code/haskell-language-server/plugins/hls-splice-plugin/test/testdata/TQQPat.hs" 3 1 10 + ( Just + ( BufSpan + { bufSpanStart = BufPos + { bufPos = 49 } + , bufSpanEnd = BufPos + { bufPos = 58 } + } + ) + ) + ) + ( EpAnnImportDecl + ( EpaSpan RealSrcSpan SrcSpanOneLine "/home/gthomas/code/haskell-language-server/plugins/hls-splice-plugin/test/testdata/TQQPat.hs" 3 1 7 + ( Just + ( BufSpan + { bufSpanStart = BufPos + { bufPos = 49 } + , bufSpanEnd = BufPos + { bufPos = 55 } + } + ) + ) + ) ( Nothing ) ( Nothing ) ( Nothing ) ( Nothing ) ( Nothing ) + ) + ( EpaComments ( [] ) ) + ) ( NoSourceText ) ( False ) + ) + ( L + ( EpAnn + ( EpaSpan RealSrcSpan SrcSpanOneLine "/home/gthomas/code/haskell-language-server/plugins/hls-splice-plugin/test/testdata/TQQPat.hs" 3 8 10 + ( Just + ( BufSpan + { bufSpanStart = BufPos + { bufPos = 56 } + , bufSpanEnd = BufPos + { bufPos = 58 } + } + ) + ) + ) + ( AnnListItem ( [] ) ) + ( EpaComments ( [] ) ) + ) ( { abstract:ModuleName } ) + ) ( NoRawPkgQual ) ( NotBoot ) ( False ) ( NotQualified ) ( Nothing ) ( Nothing ) + ) + ) ( [] ) + ) + ( ( : ) + ( L + ( EpAnn + ( EpaSpan RealSrcSpan SrcSpanOneLine "/home/gthomas/code/haskell-language-server/plugins/hls-splice-plugin/test/testdata/TQQPat.hs" 5 1 21 + ( Just + ( BufSpan + { bufSpanStart = BufPos + { bufPos = 60 } + , bufSpanEnd = BufPos + { bufPos = 80 } + } + ) + ) + ) + ( AnnListItem ( [] ) ) + ( EpaComments ( [] ) ) + ) + ( SigD ( NoExtField ) + ( TypeSig + ( AnnSig + ( AddEpAnn ( AnnDcolon ) + ( EpaSpan RealSrcSpan SrcSpanOneLine "/home/gthomas/code/haskell-language-server/plugins/hls-splice-plugin/test/testdata/TQQPat.hs" 5 3 5 + ( Just + ( BufSpan + { bufSpanStart = BufPos + { bufPos = 62 } + , bufSpanEnd = BufPos + { bufPos = 64 } + } + ) + ) + ) + ) ( [] ) + ) + ( ( : ) + ( L + ( EpAnn + ( EpaSpan RealSrcSpan SrcSpanOneLine "/home/gthomas/code/haskell-language-server/plugins/hls-splice-plugin/test/testdata/TQQPat.hs" 5 1 2 + ( Just + ( BufSpan + { bufSpanStart = BufPos + { bufPos = 60 } + , bufSpanEnd = BufPos + { bufPos = 61 } + } + ) + ) + ) + ( NameAnnTrailing ( [] ) ) + ( EpaComments ( [] ) ) + ) + ( Unqual ( { abstract:OccName } ) ) + ) ( [] ) + ) + ( HsWC ( NoExtField ) + ( L + ( EpAnn + ( EpaSpan RealSrcSpan SrcSpanOneLine "/home/gthomas/code/haskell-language-server/plugins/hls-splice-plugin/test/testdata/TQQPat.hs" 5 6 21 + ( Just + ( BufSpan + { bufSpanStart = BufPos + { bufPos = 65 } + , bufSpanEnd = BufPos + { bufPos = 80 } + } + ) + ) + ) + ( AnnListItem ( [] ) ) + ( EpaComments ( [] ) ) + ) + ( HsSig ( NoExtField ) + ( HsOuterImplicit ( NoExtField ) ) + ( L + ( EpAnn + ( EpaSpan RealSrcSpan SrcSpanOneLine "/home/gthomas/code/haskell-language-server/plugins/hls-splice-plugin/test/testdata/TQQPat.hs" 5 6 21 + ( Just + ( BufSpan + { bufSpanStart = BufPos + { bufPos = 65 } + , bufSpanEnd = BufPos + { bufPos = 80 } + } + ) + ) + ) + ( AnnListItem ( [] ) ) + ( EpaComments ( [] ) ) + ) + ( HsFunTy ( NoExtField ) + ( HsUnrestrictedArrow + ( EpUniTok + ( EpaSpan RealSrcSpan SrcSpanOneLine "/home/gthomas/code/haskell-language-server/plugins/hls-splice-plugin/test/testdata/TQQPat.hs" 5 13 15 + ( Just + ( BufSpan + { bufSpanStart = BufPos + { bufPos = 72 } + , bufSpanEnd = BufPos + { bufPos = 74 } + } + ) + ) + ) ( NormalSyntax ) + ) + ) + ( L + ( EpAnn + ( EpaSpan RealSrcSpan SrcSpanOneLine "/home/gthomas/code/haskell-language-server/plugins/hls-splice-plugin/test/testdata/TQQPat.hs" 5 6 12 + ( Just + ( BufSpan + { bufSpanStart = BufPos + { bufPos = 65 } + , bufSpanEnd = BufPos + { bufPos = 71 } + } + ) + ) + ) + ( AnnListItem ( [] ) ) + ( EpaComments ( [] ) ) + ) + ( HsTyVar ( [] ) ( NotPromoted ) + ( L + ( EpAnn + ( EpaSpan RealSrcSpan SrcSpanOneLine "/home/gthomas/code/haskell-language-server/plugins/hls-splice-plugin/test/testdata/TQQPat.hs" 5 6 12 + ( Just + ( BufSpan + { bufSpanStart = BufPos + { bufPos = 65 } + , bufSpanEnd = BufPos + { bufPos = 71 } + } + ) + ) + ) + ( NameAnnTrailing ( [] ) ) + ( EpaComments ( [] ) ) + ) + ( Unqual ( { abstract:OccName } ) ) + ) + ) + ) + ( L + ( EpAnn + ( EpaSpan RealSrcSpan SrcSpanOneLine "/home/gthomas/code/haskell-language-server/plugins/hls-splice-plugin/test/testdata/TQQPat.hs" 5 16 21 + ( Just + ( BufSpan + { bufSpanStart = BufPos + { bufPos = 75 } + , bufSpanEnd = BufPos + { bufPos = 80 } + } + ) + ) + ) + ( AnnListItem ( [] ) ) + ( EpaComments ( [] ) ) + ) + ( HsAppTy ( NoExtField ) + ( L + ( EpAnn + ( EpaSpan RealSrcSpan SrcSpanOneLine "/home/gthomas/code/haskell-language-server/plugins/hls-splice-plugin/test/testdata/TQQPat.hs" 5 16 18 + ( Just + ( BufSpan + { bufSpanStart = BufPos + { bufPos = 75 } + , bufSpanEnd = BufPos + { bufPos = 77 } + } + ) + ) + ) + ( AnnListItem ( [] ) ) + ( EpaComments ( [] ) ) + ) + ( HsTyVar ( [] ) ( NotPromoted ) + ( L + ( EpAnn + ( EpaSpan RealSrcSpan SrcSpanOneLine "/home/gthomas/code/haskell-language-server/plugins/hls-splice-plugin/test/testdata/TQQPat.hs" 5 16 18 + ( Just + ( BufSpan + { bufSpanStart = BufPos + { bufPos = 75 } + , bufSpanEnd = BufPos + { bufPos = 77 } + } + ) + ) + ) + ( NameAnnTrailing ( [] ) ) + ( EpaComments ( [] ) ) + ) + ( Unqual ( { abstract:OccName } ) ) + ) + ) + ) + ( L + ( EpAnn + ( EpaSpan RealSrcSpan SrcSpanOneLine "/home/gthomas/code/haskell-language-server/plugins/hls-splice-plugin/test/testdata/TQQPat.hs" 5 19 21 + ( Just + ( BufSpan + { bufSpanStart = BufPos + { bufPos = 78 } + , bufSpanEnd = BufPos + { bufPos = 80 } + } + ) + ) + ) + ( AnnListItem ( [] ) ) + ( EpaComments ( [] ) ) + ) + ( HsTupleTy + ( AnnParen ( AnnParens ) + ( EpaSpan RealSrcSpan SrcSpanOneLine "/home/gthomas/code/haskell-language-server/plugins/hls-splice-plugin/test/testdata/TQQPat.hs" 5 19 20 + ( Just + ( BufSpan + { bufSpanStart = BufPos + { bufPos = 78 } + , bufSpanEnd = BufPos + { bufPos = 79 } + } + ) + ) + ) + ( EpaSpan RealSrcSpan SrcSpanOneLine "/home/gthomas/code/haskell-language-server/plugins/hls-splice-plugin/test/testdata/TQQPat.hs" 5 20 21 + ( Just + ( BufSpan + { bufSpanStart = BufPos + { bufPos = 79 } + , bufSpanEnd = BufPos + { bufPos = 80 } + } + ) + ) + ) + ) ( HsBoxedOrConstraintTuple ) ( [] ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ( ( : ) + ( L + ( EpAnn + ( EpaSpan RealSrcSpan SrcSpanMultiLine "/home/gthomas/code/haskell-language-server/plugins/hls-splice-plugin/test/testdata/TQQPat.hs" 6 1 7 26 + ( Just + ( BufSpan + { bufSpanStart = BufPos + { bufPos = 81 } + , bufSpanEnd = BufPos + { bufPos = 139 } + } + ) + ) + ) + ( AnnListItem ( [] ) ) + ( EpaComments ( [] ) ) + ) + ( ValD ( NoExtField ) + ( FunBind ( NoExtField ) + ( L + ( EpAnn + ( EpaSpan RealSrcSpan SrcSpanOneLine "/home/gthomas/code/haskell-language-server/plugins/hls-splice-plugin/test/testdata/TQQPat.hs" 6 1 2 + ( Just + ( BufSpan + { bufSpanStart = BufPos + { bufPos = 81 } + , bufSpanEnd = BufPos + { bufPos = 82 } + } + ) + ) + ) + ( NameAnnTrailing ( [] ) ) + ( EpaComments ( [] ) ) + ) + ( Unqual ( { abstract:OccName } ) ) + ) + ( MG ( FromSource ) + ( L + ( EpAnn + ( EpaSpan RealSrcSpan SrcSpanMultiLine "/home/gthomas/code/haskell-language-server/plugins/hls-splice-plugin/test/testdata/TQQPat.hs" 6 1 7 26 + ( Just + ( BufSpan + { bufSpanStart = BufPos + { bufPos = 81 } + , bufSpanEnd = BufPos + { bufPos = 139 } + } + ) + ) + ) + ( AnnList ( Nothing ) ( Nothing ) ( Nothing ) ( [] ) ( [] ) ) + ( EpaComments ( [] ) ) + ) + ( ( : ) + ( L + ( EpAnn + ( EpaSpan RealSrcSpan SrcSpanOneLine "/home/gthomas/code/haskell-language-server/plugins/hls-splice-plugin/test/testdata/TQQPat.hs" 6 1 33 + ( Just + ( BufSpan + { bufSpanStart = BufPos + { bufPos = 81 } + , bufSpanEnd = BufPos + { bufPos = 113 } + } + ) + ) + ) + ( AnnListItem ( [] ) ) + ( EpaComments ( [] ) ) + ) + ( Match ( [] ) + ( FunRhs + ( L + ( EpAnn + ( EpaSpan RealSrcSpan SrcSpanOneLine "/home/gthomas/code/haskell-language-server/plugins/hls-splice-plugin/test/testdata/TQQPat.hs" 6 1 2 + ( Just + ( BufSpan + { bufSpanStart = BufPos + { bufPos = 81 } + , bufSpanEnd = BufPos + { bufPos = 82 } + } + ) + ) + ) + ( NameAnnTrailing ( [] ) ) + ( EpaComments ( [] ) ) + ) + ( Unqual ( { abstract:OccName } ) ) + ) ( Prefix ) ( NoSrcStrict ) + ) + ( ( : ) + ( L + ( EpAnn + ( EpaDelta + ( SameLine ( 1 ) ) ( [] ) + ) + ( AnnListItem ( [] ) ) + ( EpaComments ( [] ) ) + ) + ( LitPat ( NoExtField ) + ( HsString + ( SourceText ""str"" ) "str" + ) + ) + ) ( [] ) + ) + ( GRHSs + ( EpaComments ( [] ) ) + ( ( : ) + ( L + ( EpAnn + ( EpaSpan RealSrcSpan SrcSpanOneLine "/home/gthomas/code/haskell-language-server/plugins/hls-splice-plugin/test/testdata/TQQPat.hs" 6 14 33 + ( Just + ( BufSpan + { bufSpanStart = BufPos + { bufPos = 94 } + , bufSpanEnd = BufPos + { bufPos = 113 } + } + ) + ) + ) ( NoEpAnns ) + ( EpaComments ( [] ) ) + ) + ( GRHS + ( EpAnn + ( EpaSpan RealSrcSpan SrcSpanOneLine "/home/gthomas/code/haskell-language-server/plugins/hls-splice-plugin/test/testdata/TQQPat.hs" 6 14 33 + ( Just + ( BufSpan + { bufSpanStart = BufPos + { bufPos = 94 } + , bufSpanEnd = BufPos + { bufPos = 113 } + } + ) + ) + ) + ( GrhsAnn ( Nothing ) + ( AddEpAnn ( AnnEqual ) + ( EpaSpan RealSrcSpan SrcSpanOneLine "/home/gthomas/code/haskell-language-server/plugins/hls-splice-plugin/test/testdata/TQQPat.hs" 6 14 15 + ( Just + ( BufSpan + { bufSpanStart = BufPos + { bufPos = 94 } + , bufSpanEnd = BufPos + { bufPos = 95 } + } + ) + ) + ) + ) + ) + ( EpaComments ( [] ) ) + ) ( [] ) + ( L + ( EpAnn + ( EpaSpan RealSrcSpan SrcSpanOneLine "/home/gthomas/code/haskell-language-server/plugins/hls-splice-plugin/test/testdata/TQQPat.hs" 6 16 33 + ( Just + ( BufSpan + { bufSpanStart = BufPos + { bufPos = 96 } + , bufSpanEnd = BufPos + { bufPos = 113 } + } + ) + ) + ) + ( AnnListItem ( [] ) ) + ( EpaComments ( [] ) ) + ) + ( HsApp ( NoExtField ) + ( L + ( EpAnn + ( EpaSpan RealSrcSpan SrcSpanOneLine "/home/gthomas/code/haskell-language-server/plugins/hls-splice-plugin/test/testdata/TQQPat.hs" 6 16 24 + ( Just + ( BufSpan + { bufSpanStart = BufPos + { bufPos = 96 } + , bufSpanEnd = BufPos + { bufPos = 104 } + } + ) + ) + ) + ( AnnListItem ( [] ) ) + ( EpaComments ( [] ) ) + ) + ( HsVar ( NoExtField ) + ( L + ( EpAnn + ( EpaSpan RealSrcSpan SrcSpanOneLine "/home/gthomas/code/haskell-language-server/plugins/hls-splice-plugin/test/testdata/TQQPat.hs" 6 16 24 + ( Just + ( BufSpan + { bufSpanStart = BufPos + { bufPos = 96 } + , bufSpanEnd = BufPos + { bufPos = 104 } + } + ) + ) + ) + ( NameAnnTrailing ( [] ) ) + ( EpaComments ( [] ) ) + ) + ( Unqual ( { abstract:OccName } ) ) + ) + ) + ) + ( L + ( EpAnn + ( EpaSpan RealSrcSpan SrcSpanOneLine "/home/gthomas/code/haskell-language-server/plugins/hls-splice-plugin/test/testdata/TQQPat.hs" 6 25 33 + ( Just + ( BufSpan + { bufSpanStart = BufPos + { bufPos = 105 } + , bufSpanEnd = BufPos + { bufPos = 113 } + } + ) + ) + ) + ( AnnListItem ( [] ) ) + ( EpaComments ( [] ) ) + ) + ( HsLit ( NoExtField ) + ( HsString + ( SourceText ""is str"" ) "is str" + ) + ) + ) + ) + ) + ) + ) ( [] ) + ) + ( EmptyLocalBinds ( NoExtField ) ) + ) + ) + ) + ( ( : ) + ( L + ( EpAnn + ( EpaSpan RealSrcSpan SrcSpanOneLine "/home/gthomas/code/haskell-language-server/plugins/hls-splice-plugin/test/testdata/TQQPat.hs" 7 1 26 + ( Just + ( BufSpan + { bufSpanStart = BufPos + { bufPos = 114 } + , bufSpanEnd = BufPos + { bufPos = 139 } + } + ) + ) + ) + ( AnnListItem ( [] ) ) + ( EpaComments ( [] ) ) + ) + ( Match ( [] ) + ( FunRhs + ( L + ( EpAnn + ( EpaSpan RealSrcSpan SrcSpanOneLine "/home/gthomas/code/haskell-language-server/plugins/hls-splice-plugin/test/testdata/TQQPat.hs" 7 1 2 + ( Just + ( BufSpan + { bufSpanStart = BufPos + { bufPos = 114 } + , bufSpanEnd = BufPos + { bufPos = 115 } + } + ) + ) + ) + ( NameAnnTrailing ( [] ) ) + ( EpaComments ( [] ) ) + ) + ( Unqual ( { abstract:OccName } ) ) + ) ( Prefix ) ( NoSrcStrict ) + ) + ( ( : ) + ( L + ( EpAnn + ( EpaSpan RealSrcSpan SrcSpanOneLine "/home/gthomas/code/haskell-language-server/plugins/hls-splice-plugin/test/testdata/TQQPat.hs" 7 3 4 + ( Just + ( BufSpan + { bufSpanStart = BufPos + { bufPos = 116 } + , bufSpanEnd = BufPos + { bufPos = 117 } + } + ) + ) + ) + ( AnnListItem ( [] ) ) + ( EpaComments ( [] ) ) + ) + ( WildPat ( NoExtField ) ) + ) ( [] ) + ) + ( GRHSs + ( EpaComments ( [] ) ) + ( ( : ) + ( L + ( EpAnn + ( EpaSpan RealSrcSpan SrcSpanOneLine "/home/gthomas/code/haskell-language-server/plugins/hls-splice-plugin/test/testdata/TQQPat.hs" 7 5 26 + ( Just + ( BufSpan + { bufSpanStart = BufPos + { bufPos = 118 } + , bufSpanEnd = BufPos + { bufPos = 139 } + } + ) + ) + ) ( NoEpAnns ) + ( EpaComments ( [] ) ) + ) + ( GRHS + ( EpAnn + ( EpaSpan RealSrcSpan SrcSpanOneLine "/home/gthomas/code/haskell-language-server/plugins/hls-splice-plugin/test/testdata/TQQPat.hs" 7 5 26 + ( Just + ( BufSpan + { bufSpanStart = BufPos + { bufPos = 118 } + , bufSpanEnd = BufPos + { bufPos = 139 } + } + ) + ) + ) + ( GrhsAnn ( Nothing ) + ( AddEpAnn ( AnnEqual ) + ( EpaSpan RealSrcSpan SrcSpanOneLine "/home/gthomas/code/haskell-language-server/plugins/hls-splice-plugin/test/testdata/TQQPat.hs" 7 5 6 + ( Just + ( BufSpan + { bufSpanStart = BufPos + { bufPos = 118 } + , bufSpanEnd = BufPos + { bufPos = 119 } + } + ) + ) + ) + ) + ) + ( EpaComments ( [] ) ) + ) ( [] ) + ( L + ( EpAnn + ( EpaSpan RealSrcSpan SrcSpanOneLine "/home/gthomas/code/haskell-language-server/plugins/hls-splice-plugin/test/testdata/TQQPat.hs" 7 7 26 + ( Just + ( BufSpan + { bufSpanStart = BufPos + { bufPos = 120 } + , bufSpanEnd = BufPos + { bufPos = 139 } + } + ) + ) + ) + ( AnnListItem ( [] ) ) + ( EpaComments ( [] ) ) + ) + ( HsApp ( NoExtField ) + ( L + ( EpAnn + ( EpaSpan RealSrcSpan SrcSpanOneLine "/home/gthomas/code/haskell-language-server/plugins/hls-splice-plugin/test/testdata/TQQPat.hs" 7 7 15 + ( Just + ( BufSpan + { bufSpanStart = BufPos + { bufPos = 120 } + , bufSpanEnd = BufPos + { bufPos = 128 } + } + ) + ) + ) + ( AnnListItem ( [] ) ) + ( EpaComments ( [] ) ) + ) + ( HsVar ( NoExtField ) + ( L + ( EpAnn + ( EpaSpan RealSrcSpan SrcSpanOneLine "/home/gthomas/code/haskell-language-server/plugins/hls-splice-plugin/test/testdata/TQQPat.hs" 7 7 15 + ( Just + ( BufSpan + { bufSpanStart = BufPos + { bufPos = 120 } + , bufSpanEnd = BufPos + { bufPos = 128 } + } + ) + ) + ) + ( NameAnnTrailing ( [] ) ) + ( EpaComments ( [] ) ) + ) + ( Unqual ( { abstract:OccName } ) ) + ) + ) + ) + ( L + ( EpAnn + ( EpaSpan RealSrcSpan SrcSpanOneLine "/home/gthomas/code/haskell-language-server/plugins/hls-splice-plugin/test/testdata/TQQPat.hs" 7 16 26 + ( Just + ( BufSpan + { bufSpanStart = BufPos + { bufPos = 129 } + , bufSpanEnd = BufPos + { bufPos = 139 } + } + ) + ) + ) + ( AnnListItem ( [] ) ) + ( EpaComments ( [] ) ) + ) + ( HsLit ( NoExtField ) + ( HsString + ( SourceText "" not str"" ) " not str" + ) + ) + ) + ) + ) + ) + ) ( [] ) + ) + ( EmptyLocalBinds ( NoExtField ) ) + ) + ) + ) ( [] ) + ) + ) + ) + ) + ) + ) + ) ( [] ) + ) + ) + ) +) diff --git a/plugins/hls-splice-plugin/src/Ide/Plugin/Splice.hs b/plugins/hls-splice-plugin/src/Ide/Plugin/Splice.hs index 43bdf5decb..183d2e21d5 100644 --- a/plugins/hls-splice-plugin/src/Ide/Plugin/Splice.hs +++ b/plugins/hls-splice-plugin/src/Ide/Plugin/Splice.hs @@ -9,6 +9,7 @@ {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE ViewPatterns #-} +{-# LANGUAGE BlockArguments #-} module Ide.Plugin.Splice (descriptor) where @@ -53,6 +54,14 @@ import Ide.Types import qualified Language.LSP.Protocol.Lens as J import Language.LSP.Protocol.Message import Language.LSP.Protocol.Types +import Debug.Trace +import Development.IDE.GHC.Compat.Util (FastString, fsLit) +import GHC.Types.SrcLoc (BufPos (..), BufSpan (..)) +import System.IO.Unsafe (unsafePerformIO) +import System.Process.Extra (readProcess) +import GHC (EpaLocation'(EpaSpan)) +import Ide.PluginUtils (diffText, WithDeletions (..)) +import Control.Monad #if !MIN_VERSION_base(4,20,0) import Data.Foldable (Foldable (foldl')) @@ -133,7 +142,7 @@ expandTHSplice _eStyle ideState _ params@ExpandSpliceParams {..} = ExceptT $ do let Splices {..} = tmrTopLevelSplices let exprSuperSpans = listToMaybe $ findSubSpansDesc srcSpan exprSplices - _patSuperSpans = + patSuperSpans = listToMaybe $ findSubSpansDesc srcSpan patSplices typeSuperSpans = listToMaybe $ findSubSpansDesc srcSpan typeSplices @@ -156,10 +165,72 @@ expandTHSplice _eStyle ideState _ params@ExpandSpliceParams {..} = ExceptT $ do maybe (throwError $ PluginInternalError "No splice information found") (either (throwError . PluginInternalError . T.pack) pure) $ case spliceContext of Expr -> graftSpliceWith exprSuperSpans - Pat -> - - graftSpliceWith _patSuperSpans - + -- Pat -> graftSpliceWith patSuperSpans + Pat -> patSuperSpans <&> \(_, expanded) -> + -- basically just the old code inlined and with some debug tracing added + let edit0 = do + let src = printA ps + (a', _, _) <- runTransformFromT 0 $ do + val'0 <- Development.IDE.GHC.ExactPrint.annotate dflags True $ maybeParensAST expanded + -- on 9.10, this becomes `UnhelpfulSpan UnhelpfulNoLocationInfo` + -- but seems a red herring - adding the old span manually makes no difference + -- let L (EpAnn _sp0 a0 cs0) x = val'0 + -- let sp' = mkSrcSpan (mkSrcLoc (fsLit "RealSrcSpan SrcSpanPoint \"ghc-exactprint\" -1 0 Nothing") 1 1) ((mkSrcLoc (fsLit "unused") 1 6)) + -- -- let sp'' = sp + -- let val'' = + -- traceShow (getLoc val'') $ + -- traceShow (getLoc val'0) $ + -- L (EpAnn (EpaSpan sp') a0 cs0) x + + let val' = val'0 + pure $ + -- traceShow (printA expanded) $ -- same, but weird: `"\n\n\n\n\n \"str\""` + -- traceShow (printA $ maybeParensAST expanded) $ + -- traceShow (printA val') $ + everywhere' + ( mkT \case + L src _ :: LocatedAn l ast | locA src `eqSrcSpan` dst -> + -- prints the same, but has different spans + -- traceShow (printA val') $ -- same old and new - " \"str\"" + -- traceShow (locA src) $ -- same + -- traceShow (getLoc val') $ + -- traceShow dst $ -- same except `Nothing` for `BufSpan` + val' + l -> l + ) + ps + -- this differs - 9.10 version lacks the space + -- how does that happen? src spans are the same as for the expr replaced... + let res = printA a' + pure $ + -- trace (renderWithContext defaultSDocContext $ ppr a') $ + -- traceShow a' $ + -- traceShow res $ + + -- trace (pShow $ showsMod a' "") $ + traceFile traceFileName (pShowNoColor $ showsMod a' "") $ + + -- traceShow (src,res) $ + -- same apart from `_newText = "f \"str\"= putStrLn \"is str\""` + -- where previously there was correctly an extra space + diffText clientCapabilities (verTxtDocId, T.pack src) (T.pack res) IncludeDeletions + edit = edit0 + dst = (RealSrcSpan spliceSpan Nothing) + in + traceShow () $ + -- same on both GHC versions - weird leading newlines but no whitespace at end + -- traceShow (printA expanded) $ + -- traceShow (g dflags) $ + -- traceShow spliceSpan $ + traceShowId $ + edit + -- matchSplice _ (SplicePat _ spl) = Just spl + -- matchSplice _ _ = Nothing + -- expandSplice _ = + -- #if MIN_VERSION_ghc(9,5,0) + -- fmap (first (Left . unLoc . utsplice_result . snd )) . + -- #endif + -- rnSplicePat HsType -> graftSpliceWith typeSuperSpans HsDecl -> declSuperSpans <&> \(_, expanded) -> @@ -181,7 +252,7 @@ expandTHSplice _eStyle ideState _ params@ExpandSpliceParams {..} = ExceptT $ do =<< MaybeT (runAction "expandTHSplice.TypeCheck" ideState $ use TypeCheck fp) ) - <|> lift (runExceptT $ expandManually fp) + -- <|> lift (runExceptT $ expandManually fp) case eedits of Left err -> do @@ -195,6 +266,8 @@ expandTHSplice _eStyle ideState _ params@ExpandSpliceParams {..} = ExceptT $ do Nothing -> pure $ Right $ InR Null Just (Left err) -> pure $ Left err Just (Right edit) -> do + -- huh, edit unnecessarily goes all the way to end of line - why? + -- liftIO $ print edit _ <- pluginSendRequest SMethod_WorkspaceApplyEdit (ApplyWorkspaceEditParams Nothing edit) (\_ -> pure ()) pure $ Right $ InR Null @@ -202,6 +275,54 @@ expandTHSplice _eStyle ideState _ params@ExpandSpliceParams {..} = ExceptT $ do range = realSrcSpanToRange spliceSpan srcSpan = RealSrcSpan spliceSpan Nothing +traceFileName :: [Char] +traceFileName = +#if MIN_VERSION_ghc(9,9,0) + "9.10" +#else + "9.8" +#endif + +showsModSimple :: ParsedSource -> ShowS +showsModSimple = gshowsWith + (\(s :: SrcSpan) -> + -- ("george-src-span-placeholder" <>) + shows s + ) +showsMod :: Data a => a -> ShowS +showsMod = + ( \t -> + showChar '(' + . (showString . showConstr . toConstr $ t) + . (foldr (.) id . gmapQ ((showChar ' ' .) . showsMod) $ t) + . showChar ')' + ) + `extQ` (shows :: String -> ShowS) + `extQ` (\(s :: SrcSpan) -> shows s) + `extQ` (\(s :: FastString) -> shows s) + +gshowsWith :: (Data a, Typeable b) => (b -> ShowS) -> a -> ShowS +gshowsWith f = + ( \t -> + showChar '(' + . (showString . showConstr . toConstr $ t) + . (foldr (.) id . gmapQ ((showChar ' ' .) . gshowsWith f) $ t) + . showChar ')' + ) + `extQ` (shows :: String -> ShowS) + `extQ` f + +pPrint :: (Show a) => a -> IO () +pPrint = putStrLn <=< readProcess "pretty-simple" [] . show +{-# NOINLINE pShow #-} +pShow :: String -> String +pShow = unsafePerformIO . readProcess "pretty-simple" [] +{-# NOINLINE pShowNoColor #-} +pShowNoColor :: String -> String +pShowNoColor = unsafePerformIO . readProcess "pretty-simple" ["-cno-color"] +{-# NOINLINE traceFile #-} +traceFile :: String -> String -> a -> a +traceFile fp s x = unsafePerformIO $ writeFile fp s >> pure x setupHscEnv :: IdeState diff --git a/plugins/hls-splice-plugin/test/Main.hs b/plugins/hls-splice-plugin/test/Main.hs index 38cbd4d5da..c726946ac1 100644 --- a/plugins/hls-splice-plugin/test/Main.hs +++ b/plugins/hls-splice-plugin/test/Main.hs @@ -23,45 +23,46 @@ splicePlugin = mkPluginTestDescriptor' Splice.descriptor "splice" tests :: TestTree 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" ( - if ghcVersion >= GHC96 then - "96-expected" - else - "expected" - ) Inplace 7 9 - , goldenTestWithEdit "TDeclKindError" "expected" Inplace 8 1 - ] + [goldenTest "TQQPat" Inplace 6 11] -- a useful simple test to focus on + -- [ 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" ( + -- if ghcVersion >= GHC96 then + -- "96-expected" + -- else + -- "expected" + -- ) Inplace 7 9 + -- , goldenTestWithEdit "TDeclKindError" "expected" Inplace 8 1 + -- ] goldenTest :: FilePath -> ExpandStyle -> Int -> Int -> TestTree goldenTest fp tc line col =