All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.joern.php2cpg.Main.scala Maven / Gradle / Ivy

There is a newer version: 4.0.131
Show newest version
package io.joern.php2cpg

import io.joern.php2cpg.Frontend.*
import io.joern.x2cpg.passes.frontend.*
import io.joern.x2cpg.{DependencyDownloadConfig, X2CpgConfig, X2CpgMain}
import io.joern.x2cpg.utils.server.FrontendHTTPServer
import scopt.OParser

/** Command line configuration parameters
  */
final case class Config(
  phpIni: Option[String] = None,
  phpParserBin: Option[String] = None,
  downloadDependencies: Boolean = false
) extends X2CpgConfig[Config]
    with TypeRecoveryParserConfig[Config]
    with TypeStubsParserConfig[Config]
    with DependencyDownloadConfig[Config] {

  def withPhpIni(phpIni: String): Config = {
    copy(phpIni = Some(phpIni)).withInheritedFields(this)
  }

  def withPhpParserBin(phpParserBin: String): Config = {
    copy(phpParserBin = Some(phpParserBin)).withInheritedFields(this)
  }

  override def withDownloadDependencies(downloadDependencies: Boolean): Config = {
    copy(downloadDependencies = downloadDependencies).withInheritedFields(this)
  }
}

object Frontend {

  implicit val defaultConfig: Config = Config()

  val cmdLineParser: OParser[Unit, Config] = {
    val builder = OParser.builder[Config]
    import builder.*
    OParser.sequence(
      programName("php2cpg"),
      opt[String]("php-ini")
        .action((x, c) => c.withPhpIni(x))
        .text("php.ini path used by php-parser. Defaults to php.ini shipped with Joern."),
      opt[String]("php-parser-bin")
        .action((x, c) => c.withPhpParserBin(x))
        .text("path to php-parser.phar binary. Defaults to php-parser shipped with Joern."),
      XTypeRecoveryConfig.parserOptionsForParserConfig,
      XTypeStubsParser.parserOptions,
      DependencyDownloadConfig.parserOptions
    )
  }
}

object Main extends X2CpgMain(cmdLineParser, new Php2Cpg()) with FrontendHTTPServer[Config, Php2Cpg] {

  override protected def newDefaultConfig(): Config = Config()

  def run(config: Config, php2Cpg: Php2Cpg): Unit = {
    if (config.serverMode) { startup() }
    else { php2Cpg.run(config) }
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy