glean-0.1.0.0: glean/lang/go/Glean/Indexer/Go.hs
{-
Copyright (c) Meta Platforms, Inc. and affiliates.
All rights reserved.
This source code is licensed under the BSD-style license found in the
LICENSE file in the root directory of this source tree.
-}
{-# LANGUAGE ApplicativeDo #-}
module Glean.Indexer.Go ( indexer ) where
import Options.Applicative
import Glean.Indexer
import Glean.Indexer.External
import Glean.Indexer.SCIP ( derive )
import qualified Glean.SCIP.Driver as SCIP
import System.Environment (setEnv)
import Control.Monad (forM_)
data Go = Go
{ scipGoBinary :: FilePath
, goPackagesDriverBinary :: Maybe FilePath
, scipExtraArgs :: [String]
}
options :: Parser Go
options = do
scipGoBinary <- strOption $
long "scip-go" <>
value "scip-go" <>
help "path to the scip-go binary"
goPackagesDriverBinary <- optional (strOption $
long "gopackagesdriver" <>
value "gopackagesdriver" <>
help "path to the gopackagesdriver binary")
scipExtraArgs <- many $ strOption $
long "extra-arg" <>
help "extra arguments to pass to the indexer"
return Go{..}
indexer :: Indexer Go
indexer = Indexer {
indexerShortName = "go",
indexerDescription = "Index Go code",
indexerOptParser = options,
indexerRun = \Go{..} backend repo IndexerParams{..} -> do
forM_ goPackagesDriverBinary (setEnv "GOPACKAGESDRIVER")
val <- SCIP.runIndexer SCIP.ScipIndexerParams {
scipBinary = scipGoBinary,
scipArgs = \outFile ->
["--module-version=glean", "--no-animation", "-o", outFile ]
++ scipExtraArgs,
scipRoot = indexerRoot,
scipWritesLocal = False,
scipLanguage = Just SCIP.Go
}
sendJsonBatches backend repo (scipGoBinary <> "/scip") val
derive backend repo
}