glean-0.2.0.0: glean/lang/flow/Glean/Indexer/Flow.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.Flow ( indexer ) where
import Options.Applicative
import Glean.Indexer
import Glean.Indexer.External
data Flow = Flow
{ flowBinary :: FilePath
, flowWriteRoot :: String
, flowIncludeDirectDeps :: Bool
, flowIncludeTransitiveDeps :: Bool
}
options :: Parser Flow
options = do
flowBinary <- strOption $
long "flow" <>
value "flow" <>
help "path to the flow binary"
flowWriteRoot <- strOption $ long "write-root" <> value ""
flowIncludeDirectDeps <- switch (long "include-direct-deps")
flowIncludeTransitiveDeps <- switch (long "include-transitive-deps")
return Flow{..}
indexer :: Indexer Flow
indexer = Indexer {
indexerShortName = "flow",
indexerDescription = "Index JS/Flow code",
indexerOptParser = options,
indexerRun = \Flow{..} -> do
let ext = Ext {
extRunScript = flowBinary,
extFlavour = Json,
extArgs =
[ "glean"
, "${TEST_ROOT}"
, "--output-dir"
, "${JSON_BATCH_DIR}"
, "--write-root"
, flowWriteRoot
] ++
[ "--include-direct-deps" | flowIncludeDirectDeps] ++
[ "--include-transitive-deps" | flowIncludeTransitiveDeps],
extDerivePredicates =
[ "flow.StringToFileModule"
, "flow.FileXRef"
, "flow.FileDeclaration"
, "flow.FlowEntityImportUses"
, "flow.FlowTypeEntityImportUses"
, "flow.ModuleContains"
, "flow.ModuleComments"
-- possibly deprecated
, "flow.ModuleNameLowerCase"
-- new search predicates
, "flow.SearchDeclarationByName"
, "flow.SearchDeclarationByLowerCaseName"
, "flow.SearchMemberDeclarationByName"
, "flow.SearchMemberDeclarationByLowerCaseName"
, "flow.SearchTypeDeclarationByName"
, "flow.SearchTypeDeclarationByLowerCaseName"
, "flow.SearchModuleByLowerCaseName"
],
extAllowNonZeroExit = False
}
indexerRun externalIndexer ext
}