diff --git a/exe/Arguments.hs b/exe/Arguments.hs index 88fe14c8..8821c417 100644 --- a/exe/Arguments.hs +++ b/exe/Arguments.hs @@ -10,6 +10,7 @@ data Arguments = Arguments {argLSP :: Bool ,argsCwd :: Maybe FilePath ,argFiles :: [FilePath] + ,argsVersion :: Bool } getArguments :: IO Arguments @@ -25,3 +26,4 @@ arguments = Arguments <$> switch (long "lsp" <> help "Start talking to an LSP server") <*> optional (strOption $ long "cwd" <> metavar "DIR" <> help "Change to this directory") <*> many (argument str (metavar "FILES/DIRS...")) + <*> switch (long "version" <> help "Show ghcide and GHC versions") diff --git a/exe/Main.hs b/exe/Main.hs index 4772498d..5602d1e4 100644 --- a/exe/Main.hs +++ b/exe/Main.hs @@ -1,6 +1,7 @@ -- Copyright (c) 2019 The DAML Authors. All rights reserved. -- SPDX-License-Identifier: Apache-2.0 {-# OPTIONS_GHC -Wno-dodgy-imports #-} -- GHC no longer exports def in GHC 8.6 and above +{-# LANGUAGE CPP #-} -- To get precise GHC version module Main(main) where @@ -29,12 +30,13 @@ import qualified Data.Text as T import qualified Data.Text.IO as T import Language.Haskell.LSP.Messages import Linker -import System.Info import Data.Version import Development.IDE.LSP.LanguageServer import System.Directory.Extra as IO import System.Environment import System.IO +import System.Exit +import Paths_ghcide import Development.Shake hiding (Env) import qualified Data.Set as Set @@ -47,13 +49,19 @@ import HIE.Bios getLibdir :: IO FilePath getLibdir = fromMaybe GHC.Paths.libdir <$> lookupEnv "NIX_GHC_LIBDIR" +ghcideVersion :: String +ghcideVersion = "ghcide version: " <> showVersion version + <> " (GHC: " <> VERSION_ghc <> ")" + main :: IO () main = do -- WARNING: If you write to stdout before runLanguageServer -- then the language server will not work - hPutStrLn stderr $ "Starting ghcide (GHC v" ++ showVersion compilerVersion ++ ")" Arguments{..} <- getArguments + if argsVersion then putStrLn ghcideVersion >> exitSuccess + else hPutStrLn stderr {- see WARNING above -} ghcideVersion + -- lock to avoid overlapping output on stdout lock <- newLock let logger = Logger $ \pri msg -> withLock lock $