Stylish Haskell: CPP parse issues (#3199)

* Stylish Haskell: Parse issues

* CPP language extension
* Manually fix some files with duplication

* Pre-commit: Fix ignored files

It looks like `ExactPrint` was ignored before, but since absolute paths
are used and weren't adapted it wasn't ignored afterwards.
This commit is contained in:
Andy 2022-09-19 22:31:37 +02:00 committed by GitHub
parent 00469199cf
commit bd1d0a1675
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 43 additions and 36 deletions

View File

@ -4,7 +4,7 @@
"hooks": [ "hooks": [
{ {
"entry": "stylish-haskell --inplace", "entry": "stylish-haskell --inplace",
"exclude": "(^Setup.hs$|test/testdata/.*$|test/data/.*$|test/manual/lhs/.*$|^hie-compat/.*$|^plugins/hls-tactics-plugin/.*$|^ghcide/src/Development/IDE/GHC/Compat.hs$|^ghcide/src/Development/IDE/Plugin/CodeAction/ExactPrint.hs$|^ghcide/src/Development/IDE/GHC/Compat/Core.hs$|^ghcide/src/Development/IDE/Spans/Pragmas.hs$|^ghcide/src/Development/IDE/LSP/Outline.hs$|^plugins/hls-splice-plugin/src/Ide/Plugin/Splice.hs$|^ghcide/test/exe/Main.hs$|ghcide/src/Development/IDE/Core/Rules.hs|^hls-test-utils/src/Test/Hls/Util.hs$)", "exclude": "(^Setup.hs$|test/testdata/.*$|test/data/.*$|test/manual/lhs/.*$|^hie-compat/.*$|^plugins/hls-tactics-plugin/.*$|^ghcide/src/Development/IDE/GHC/Compat.hs$|^plugins/hls-refactor-plugin/src/Development/IDE/GHC/Compat/ExactPrint.hs$|^ghcide/src/Development/IDE/GHC/Compat/Core.hs$|^ghcide/src/Development/IDE/Spans/Pragmas.hs$|^ghcide/src/Development/IDE/LSP/Outline.hs$|^plugins/hls-splice-plugin/src/Ide/Plugin/Splice.hs$|^ghcide/test/exe/Main.hs$|^ghcide/src/Development/IDE/Core/Rules.hs$|^hls-test-utils/src/Test/Hls/Util.hs$|^ghcide/src/Development/IDE/Core/Compile.hs$|^plugins/hls-refactor-plugin/src/Development/IDE/GHC/ExactPrint.hs$|^plugins/hls-refactor-plugin/src/Development/IDE/Plugin/CodeAction/ExactPrint.hs$)",
"files": "\\.l?hs$", "files": "\\.l?hs$",
"id": "stylish-haskell", "id": "stylish-haskell",
"language": "system", "language": "system",

View File

@ -57,6 +57,7 @@ newline: lf
language_extensions: language_extensions:
- BangPatterns - BangPatterns
- CPP
- DataKinds - DataKinds
- DeriveFunctor - DeriveFunctor
- DeriveGeneric - DeriveGeneric

View File

@ -1,7 +1,7 @@
{-# LANGUAGE CPP #-}
{-# LANGUAGE ExistentialQuantification #-} {-# LANGUAGE ExistentialQuantification #-}
{-# LANGUAGE RankNTypes #-} {-# LANGUAGE RankNTypes #-}
{-# LANGUAGE TypeFamilies #-} {-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE CPP #-}
{-| {-|
The logic for setting up a ghcide session by tapping into hie-bios. The logic for setting up a ghcide session by tapping into hie-bios.
@ -67,15 +67,16 @@ import Development.IDE.Types.Location
import Development.IDE.Types.Logger (Pretty (pretty), import Development.IDE.Types.Logger (Pretty (pretty),
Priority (Debug, Error, Info, Warning), Priority (Debug, Error, Info, Warning),
Recorder, WithPriority, Recorder, WithPriority,
logWith, nest, vcat, cmapWithPrio, logWith,
viaShow, (<+>), nest,
toCologActionWithPrio, cmapWithPrio) toCologActionWithPrio,
vcat, viaShow, (<+>))
import Development.IDE.Types.Options import Development.IDE.Types.Options
import GHC.Check import GHC.Check
import qualified HIE.Bios as HieBios import qualified HIE.Bios as HieBios
import qualified HIE.Bios.Types as HieBios
import HIE.Bios.Environment hiding (getCacheDir) import HIE.Bios.Environment hiding (getCacheDir)
import HIE.Bios.Types hiding (Log) import HIE.Bios.Types hiding (Log)
import qualified HIE.Bios.Types as HieBios
import Hie.Implicit.Cradle (loadImplicitHieCradle) import Hie.Implicit.Cradle (loadImplicitHieCradle)
import Language.LSP.Server import Language.LSP.Server
import Language.LSP.Types import Language.LSP.Types
@ -90,6 +91,8 @@ import Data.Void
import Control.Concurrent.STM.Stats (atomically, modifyTVar', import Control.Concurrent.STM.Stats (atomically, modifyTVar',
readTVar, writeTVar) readTVar, writeTVar)
import Control.Concurrent.STM.TQueue import Control.Concurrent.STM.TQueue
import Control.DeepSeq
import Control.Exception (evaluate)
import Control.Monad.IO.Unlift (MonadUnliftIO) import Control.Monad.IO.Unlift (MonadUnliftIO)
import Data.Foldable (for_) import Data.Foldable (for_)
import Data.HashMap.Strict (HashMap) import Data.HashMap.Strict (HashMap)
@ -103,9 +106,6 @@ import HieDb.Types
import HieDb.Utils import HieDb.Utils
import qualified System.Random as Random import qualified System.Random as Random
import System.Random (RandomGen) import System.Random (RandomGen)
import Control.Monad.IO.Unlift (MonadUnliftIO)
import Control.Exception (evaluate)
import Control.DeepSeq
data Log data Log
= LogSettingInitialDynFlags = LogSettingInitialDynFlags

View File

@ -8,7 +8,7 @@ module Development.IDE.GHC.Compat.Iface (
import GHC import GHC
#if MIN_VERSION_ghc(9,3,0) #if MIN_VERSION_ghc(9,3,0)
import GHC.Driver.Session (targetProfile) import GHC.Driver.Session (targetProfile)
#endif #endif
#if MIN_VERSION_ghc(9,2,0) #if MIN_VERSION_ghc(9,2,0)
import qualified GHC.Iface.Load as Iface import qualified GHC.Iface.Load as Iface

View File

@ -28,7 +28,7 @@ import Data.List (isSuffixOf)
import Data.Maybe import Data.Maybe
import System.FilePath import System.FilePath
#if MIN_VERSION_ghc(9,3,0) #if MIN_VERSION_ghc(9,3,0)
import GHC.Types.PkgQual import GHC.Types.PkgQual
#endif #endif
data Import data Import
@ -123,11 +123,12 @@ locateModule env comp_info exts targetFor modName mbPkgName isSource = do
#if MIN_VERSION_ghc(9,3,0) #if MIN_VERSION_ghc(9,3,0)
OtherPkg uid OtherPkg uid
| Just dirs <- lookup uid import_paths | Just dirs <- lookup uid import_paths
-> lookupLocal uid dirs
#else #else
Just pkgName Just pkgName
| Just (uid, dirs) <- lookup (PackageName pkgName) import_paths | Just (uid, dirs) <- lookup (PackageName pkgName) import_paths
#endif
-> lookupLocal uid dirs -> lookupLocal uid dirs
#endif
| otherwise -> lookupInPackageDB env | otherwise -> lookupInPackageDB env
#if MIN_VERSION_ghc(9,3,0) #if MIN_VERSION_ghc(9,3,0)
NoPkgQual -> do NoPkgQual -> do
@ -148,7 +149,7 @@ locateModule env comp_info exts targetFor modName mbPkgName isSource = do
mbFile <- locateModuleFile ((homeUnitId_ dflags, importPaths dflags) : import_paths') exts targetFor isSource $ unLoc modName mbFile <- locateModuleFile ((homeUnitId_ dflags, importPaths dflags) : import_paths') exts targetFor isSource $ unLoc modName
case mbFile of case mbFile of
Nothing -> lookupInPackageDB env Nothing -> lookupInPackageDB env
Just (uid, file) -> toModLocation uid file Just (uid, file) -> toModLocation uid file
where where
dflags = hsc_dflags env dflags = hsc_dflags env

View File

@ -59,7 +59,8 @@ import GHC.Plugins (Depth (AllTheWay),
#endif #endif
import Ide.PluginUtils (mkLspCommand) import Ide.PluginUtils (mkLspCommand)
import Ide.Types (CommandId (..), import Ide.Types (CommandId (..),
IdePlugins(..), PluginId) IdePlugins (..),
PluginId)
import Language.LSP.Types import Language.LSP.Types
import Language.LSP.Types.Capabilities import Language.LSP.Types.Capabilities
import qualified Language.LSP.VFS as VFS import qualified Language.LSP.VFS as VFS
@ -516,7 +517,6 @@ findRecordCompl uri pmod mn DataDecl {tcdLName, tcdDataDefn} = result
PrefixCon{} -> Just [] PrefixCon{} -> Just []
_ -> Nothing _ -> Nothing
extract ConDeclField{..}
-- NOTE: 'cd_fld_names' is grouped so that the fields -- NOTE: 'cd_fld_names' is grouped so that the fields
-- sharing the same type declaration to fit in the same group; e.g. -- sharing the same type declaration to fit in the same group; e.g.
-- --
@ -527,8 +527,10 @@ findRecordCompl uri pmod mn DataDecl {tcdLName, tcdDataDefn} = result
-- is encoded as @[[arg1, arg2], [arg3], [arg4]]@ -- is encoded as @[[arg1, arg2], [arg3], [arg4]]@
-- Hence, we must concat nested arguments into one to get all the fields. -- Hence, we must concat nested arguments into one to get all the fields.
#if MIN_VERSION_ghc(9,3,0) #if MIN_VERSION_ghc(9,3,0)
extract ConDeclField{..}
= map (foLabel . unLoc) cd_fld_names = map (foLabel . unLoc) cd_fld_names
#else #else
extract ConDeclField{..}
= map (rdrNameFieldOcc . unLoc) cd_fld_names = map (rdrNameFieldOcc . unLoc) cd_fld_names
#endif #endif
-- XConDeclField -- XConDeclField

View File

@ -15,10 +15,10 @@ import qualified Data.Map as Map
import qualified Data.Text as T import qualified Data.Text as T
import Development.IDE hiding (pluginHandlers) import Development.IDE hiding (pluginHandlers)
import Development.IDE.GHC.Compat import Development.IDE.GHC.Compat
import Development.IDE.Plugin.CodeAction
import Development.IDE.GHC.Compat.ExactPrint import Development.IDE.GHC.Compat.ExactPrint
import Development.IDE.GHC.ExactPrint (GetAnnotatedParsedSource (..)) import Development.IDE.GHC.ExactPrint (GetAnnotatedParsedSource (..))
import qualified Development.IDE.GHC.ExactPrint as E import qualified Development.IDE.GHC.ExactPrint as E
import Development.IDE.Plugin.CodeAction
import Ide.Types import Ide.Types
import Language.Haskell.GHC.ExactPrint import Language.Haskell.GHC.ExactPrint
import Language.Haskell.GHC.ExactPrint.Types hiding (GhcPs) import Language.Haskell.GHC.ExactPrint.Types hiding (GhcPs)

View File

@ -19,9 +19,9 @@ import Control.Arrow (second,
(&&&), (&&&),
(>>>)) (>>>))
import Control.Concurrent.STM.Stats (atomically) import Control.Concurrent.STM.Stats (atomically)
import Control.Monad.Extra
import Control.Monad.IO.Class import Control.Monad.IO.Class
import Control.Monad.Trans.Maybe import Control.Monad.Trans.Maybe
import Control.Monad.Extra
import Data.Aeson import Data.Aeson
import Data.Char import Data.Char
import qualified Data.DList as DL import qualified Data.DList as DL
@ -39,50 +39,52 @@ import qualified Data.Set as S
import qualified Data.Text as T import qualified Data.Text as T
import qualified Data.Text.Utf16.Rope as Rope import qualified Data.Text.Utf16.Rope as Rope
import Data.Tuple.Extra (fst3) import Data.Tuple.Extra (fst3)
import Development.IDE.Types.Logger hiding (group)
import Development.IDE.Core.Rules import Development.IDE.Core.Rules
import Development.IDE.Core.RuleTypes import Development.IDE.Core.RuleTypes
import Development.IDE.Core.Service import Development.IDE.Core.Service
import Development.IDE.Core.Shake hiding (Log)
import Development.IDE.GHC.Compat import Development.IDE.GHC.Compat
import Development.IDE.GHC.Compat.ExactPrint import Development.IDE.GHC.Compat.ExactPrint
import Development.IDE.GHC.Compat.Util import Development.IDE.GHC.Compat.Util
import Development.IDE.GHC.Error import Development.IDE.GHC.Error
import Development.IDE.GHC.ExactPrint import Development.IDE.GHC.ExactPrint
import qualified Development.IDE.GHC.ExactPrint as E import qualified Development.IDE.GHC.ExactPrint as E
import Development.IDE.GHC.Util (printOutputable, import Development.IDE.GHC.Util (printOutputable,
printRdrName) printRdrName)
import Development.IDE.Core.Shake hiding (Log)
import Development.IDE.Plugin.CodeAction.Args import Development.IDE.Plugin.CodeAction.Args
import Development.IDE.Plugin.CodeAction.ExactPrint import Development.IDE.Plugin.CodeAction.ExactPrint
import Development.IDE.Plugin.CodeAction.Util
import Development.IDE.Plugin.CodeAction.PositionIndexed import Development.IDE.Plugin.CodeAction.PositionIndexed
import Development.IDE.Plugin.CodeAction.Util
import Development.IDE.Plugin.Completions.Types import Development.IDE.Plugin.Completions.Types
import Development.IDE.Plugin.TypeLenses (suggestSignature) import Development.IDE.Plugin.TypeLenses (suggestSignature)
import Development.IDE.Types.Exports import Development.IDE.Types.Exports
import Development.IDE.Types.Location import Development.IDE.Types.Location
import Development.IDE.Types.Logger hiding
(group)
import Development.IDE.Types.Options import Development.IDE.Types.Options
import GHC.Exts (fromList)
import qualified GHC.LanguageExtensions as Lang import qualified GHC.LanguageExtensions as Lang
import Ide.PluginUtils (subRange) import Ide.PluginUtils (subRange)
import Ide.Types import Ide.Types
import qualified Language.LSP.Server as LSP import qualified Language.LSP.Server as LSP
import Language.LSP.Types (ApplyWorkspaceEditParams(..), CodeAction (..), import Language.LSP.Types (ApplyWorkspaceEditParams (..),
CodeAction (..),
CodeActionContext (CodeActionContext, _diagnostics), CodeActionContext (CodeActionContext, _diagnostics),
CodeActionKind (CodeActionQuickFix, CodeActionUnknown), CodeActionKind (CodeActionQuickFix, CodeActionUnknown),
CodeActionParams (CodeActionParams), CodeActionParams (CodeActionParams),
Command, Command,
Diagnostic (..), Diagnostic (..),
MessageType (..),
ShowMessageParams (..),
List (..), List (..),
MessageType (..),
ResponseError, ResponseError,
SMethod (..), SMethod (..),
ShowMessageParams (..),
TextDocumentIdentifier (TextDocumentIdentifier), TextDocumentIdentifier (TextDocumentIdentifier),
TextEdit (TextEdit, _range), TextEdit (TextEdit, _range),
UInt, UInt,
WorkspaceEdit (WorkspaceEdit, _changeAnnotations, _changes, _documentChanges), WorkspaceEdit (WorkspaceEdit, _changeAnnotations, _changes, _documentChanges),
type (|?) (InR), type (|?) (InR),
uriToFilePath) uriToFilePath)
import GHC.Exts (fromList)
import Language.LSP.VFS (VirtualFile, import Language.LSP.VFS (VirtualFile,
_file_text) _file_text)
import Text.Regex.TDFA (mrAfter, import Text.Regex.TDFA (mrAfter,

View File

@ -1,22 +1,23 @@
module Development.IDE.Plugin.CodeAction.Util where module Development.IDE.Plugin.CodeAction.Util where
import Data.Data (Data) import Data.Data (Data)
import qualified Data.Unique as U import Data.Time.Clock.POSIX (POSIXTime,
getCurrentTime,
utcTimeToPOSIXSeconds)
import qualified Data.Unique as U
import Debug.Trace import Debug.Trace
import Development.IDE.GHC.Compat.ExactPrint as GHC import Development.IDE.GHC.Compat.ExactPrint as GHC
import Development.IDE.GHC.Dump (showAstDataHtml)
import GHC.Stack import GHC.Stack
import System.Environment.Blank (getEnvDefault) import System.Environment.Blank (getEnvDefault)
import System.IO.Unsafe import System.IO.Unsafe
import Text.Printf import Text.Printf
import Development.IDE.GHC.Dump (showAstDataHtml)
import Data.Time.Clock.POSIX (POSIXTime, getCurrentTime,
utcTimeToPOSIXSeconds)
#if MIN_VERSION_ghc(9,2,0) #if MIN_VERSION_ghc(9,2,0)
import GHC.Utils.Outputable import GHC.Utils.Outputable
#else #else
import Development.IDE.GHC.Util
import Development.IDE.GHC.Compat.Util
import Development.IDE.GHC.Compat import Development.IDE.GHC.Compat
import Development.IDE.GHC.Compat.Util
import Development.IDE.GHC.Util
#endif #endif
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
-- Tracing exactprint terms -- Tracing exactprint terms

View File

@ -7,15 +7,15 @@ import Control.Monad.Trans.Class (lift)
import Control.Monad.Trans.Maybe (MaybeT (MaybeT), runMaybeT) import Control.Monad.Trans.Maybe (MaybeT (MaybeT), runMaybeT)
import Data.Default import Data.Default
import Data.Foldable (toList) import Data.Foldable (toList)
import qualified Data.HashMap.Strict as HM
import Data.Hashable (Hashable) import Data.Hashable (Hashable)
import qualified Data.HashMap.Strict as HM
import qualified Data.Map as Map import qualified Data.Map as Map
import Data.Maybe (fromJust, mapMaybe) import Data.Maybe (fromJust, mapMaybe)
import qualified Data.Text as T import qualified Data.Text as T
import Development.IDE import Development.IDE
import Development.IDE.Core.RuleTypes (HieAstResult (..))
import Development.IDE.Core.Rules (getHieFile, import Development.IDE.Core.Rules (getHieFile,
getSourceFileSource) getSourceFileSource)
import Development.IDE.Core.RuleTypes (HieAstResult (..))
import qualified Development.IDE.Core.Shake as Shake import qualified Development.IDE.Core.Shake as Shake
import Development.IDE.GHC.Compat (HieASTs (HieASTs), import Development.IDE.GHC.Compat (HieASTs (HieASTs),
RealSrcSpan (..), mkHieFile', RealSrcSpan (..), mkHieFile',