88module Main (main ) where
99
1010import Arguments
11- import Data.Maybe
12- import Data.List.Extra
13- import System.FilePath
1411import Control.Concurrent.Extra
1512import Control.Exception
1613import Control.Monad.Extra
1714import Control.Monad.IO.Class
1815import Data.Default
19- import System.Time.Extra
16+ import Data.List.Extra
17+ import qualified Data.Map.Strict as Map
18+ import Data.Maybe
19+ import qualified Data.Set as Set
20+ import qualified Data.Text as T
21+ import qualified Data.Text.IO as T
2022import Development.IDE.Core.FileStore
2123import Development.IDE.Core.OfInterest
22- import Development.IDE.Core.Service
24+ import Development.IDE.Core.RuleTypes
2325import Development.IDE.Core.Rules
26+ import Development.IDE.Core.Service
2427import Development.IDE.Core.Shake
25- import Development.IDE.Core.RuleTypes
28+ import Development.IDE.GHC.Util
29+ import Development.IDE.LSP.LanguageServer
2630import Development.IDE.LSP.Protocol
27- import Development.IDE.Types.Location
31+ import Development.IDE.Plugin
2832import Development.IDE.Types.Diagnostics
29- import Development.IDE.Types.Options
33+ import Development.IDE.Types.Location
3034import Development.IDE.Types.Logger
31- import Development.IDE.GHC.Util
32- import Development.IDE.Plugin
33- import qualified Data.Text as T
34- import qualified Data.Text.IO as T
35+ import Development.IDE.Types.Options
36+ import Development.Shake ( Action , action )
37+ import GHC hiding ( def )
38+ import HIE.Bios
3539import Language.Haskell.LSP.Messages
3640import Language.Haskell.LSP.Types (LspId (IdInt ))
3741import Linker
38- import Development.IDE.LSP.LanguageServer
3942import System.Directory.Extra as IO
40- import System.IO
4143import System.Exit
42- import Development.Shake (Action , action )
43- import qualified Data.Set as Set
44- import qualified Data.Map.Strict as Map
45-
46- import GHC hiding (def )
47-
48- import HIE.Bios
44+ import System.FilePath
45+ import System.IO
46+ import System.Time.Extra
4947
5048-- ---------------------------------------------------------------------
5149
5250import Development.IDE.Plugin.CodeAction as CodeAction
5351import Development.IDE.Plugin.Completions as Completions
5452import Ide.Plugin.Example as Example
53+ import Ide.Plugin.Ormolu as Ormolu
5554
5655-- ---------------------------------------------------------------------
5756
57+ -- The plugins configured for use in this instance of the language
58+ -- server.
59+ -- These can be freely added or removed to tailor the available
60+ -- features of the server.
5861idePlugins :: Bool -> Plugin
5962idePlugins includeExample
6063 = Completions. plugin <>
6164 CodeAction. plugin <>
65+ Ormolu. plugin <>
6266 if includeExample then Example. plugin else mempty
6367
68+ -- ---------------------------------------------------------------------
69+
6470main :: IO ()
6571main = do
6672 -- WARNING: If you write to stdout before runLanguageServer
@@ -100,7 +106,9 @@ main = do
100106 putStrLn " Report bugs at https://github.com/haskell/haskell-language-server/issues"
101107
102108 putStrLn $ " \n Step 1/6: Finding files to test in " ++ dir
103- files <- nubOrd <$> expandFiles (argFiles ++ [" ." | null argFiles])
109+ files <- expandFiles (argFiles ++ [" ." | null argFiles])
110+ -- LSP works with absolute file paths, so try and behave similarly
111+ files <- nubOrd <$> mapM canonicalizePath files
104112 putStrLn $ " Found " ++ show (length files) ++ " files"
105113
106114 putStrLn " \n Step 2/6: Looking for hie.yaml files that control setup"
@@ -123,7 +131,11 @@ main = do
123131 let grab file = fromMaybe (head sessions) $ do
124132 cradle <- Map. lookup file filesToCradles
125133 Map. lookup cradle cradlesToSessions
126- ide <- initialise def mainRule (pure $ IdInt 0 ) (showEvent lock) (logger Info ) (defaultIdeOptions $ return $ return . grab) vfs
134+
135+ let options =
136+ (defaultIdeOptions $ return $ return . grab)
137+ { optShakeProfiling = argsShakeProfiling }
138+ ide <- initialise def mainRule (pure $ IdInt 0 ) (showEvent lock) (logger Info ) options vfs
127139
128140 putStrLn " \n Step 6/6: Type checking the files"
129141 setFilesOfInterest ide $ Set. fromList $ map toNormalizedFilePath files
@@ -164,7 +176,7 @@ showEvent lock (EventFileDiagnostics (toNormalizedFilePath -> file) diags) =
164176showEvent lock e = withLock lock $ print e
165177
166178
167- cradleToSession :: Cradle -> IO HscEnvEq
179+ cradleToSession :: Cradle a -> IO HscEnvEq
168180cradleToSession cradle = do
169181 cradleRes <- getCompilerOptions " " cradle
170182 opts <- case cradleRes of
0 commit comments