Skip to content

bzz/client-scala

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Babelfish Scala client Build Status

This a Scala/JNI implementation of the Babelfish client. It uses ScalaPB for Protobuf/gRPC code generation and libuast for XPath queries.

Status

Current scala-client v1.x only supports bblfsh protocol and UASTv1.

Installation

Manual

git clone https://github.com/bblfsh/scala-client.git
cd scala-client
./sbt assembly

gRPC/protobuf files are re-generate from src/main/proto on every ./sbt compile and are stored under ./target/src_managed/.

The jar file and the native module are generated in the build/ directory. If you move the jar file to some other path, the native (.so or .dylib) library must be in the same path.

If the build fails because it can't find the jni.h header file, run it with:

./sbt -java-home /usr/lib/jvm/java-8-openjdk-amd64 assembly

Changing the JDK directory to the one right for your system.

Apache Maven

The bblfsh-client package is available thorugh Maven central, so it can be easily added as a dependency in various package management systems. Examples of how to handle it for most commons systems are included below; for other systems just look at Maven central's dependency information.

<dependency>
    <groupId>org.bblfsh</groupId>
    <artifactId>bblfsh-client</artifactId>
    <version>${version}</version>
</dependency>

Scala sbt

libraryDependencies += "org.bblfsh" % "bblfsh-client" % version

Dependencies

You need to install the Java SDK and its header files. The command for Debian and derived distributions would be:

sudo apt install openjdk-8 openjdk-8-jdk-headless

Usage

If you don't have a bblfsh server running you can execute it using the following command:

docker run --privileged --rm -it -p 9432:9432 --name bblfsh bblfsh/bblfshd

Please, read the getting started guide to learn more about how to use and deploy a bblfsh server.

API

import scala.io.Source
import org.bblfsh.client.BblfshClient
import gopkg.in.bblfsh.sdk.v2.protocol.driver.Mode

val client = BblfshClient("localhost", 9432)

val filename = "/path/to/file.py" // client responsible for encoding it to utf-8
val fileContent = Source.fromFile(filename).getLines.mkString("\n")
val resp = client.parse(filename, fileContent, Mode.SEMANTIC)

// Full response
println(resp.get)

// Filtered response
println(client.filter(resp.get, "//uast:Import"))

Command line:

java -jar build/bblfsh-client-assembly-*.jar -f <file.py>

or if you want to use a XPath query:

java -jar build/bblfsh-client-assembly-*.jar -f <file.py> -q "//Import[@roleImport]"

Please read the Babelfish clients guide section to learn more about babelfish clients and their query language.

License

Apache 2.0

About

Babelfish Scala client

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • PHP 88.3%
  • C++ 5.5%
  • Scala 4.0%
  • Shell 1.9%
  • C 0.3%
  • Java 0.0%