From 0b8f679d3983346aa485f7398c0b052d388f43c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93lafur=20P=C3=A1ll=20Geirsson?= Date: Wed, 3 Mar 2021 15:43:15 +0100 Subject: [PATCH 1/4] Add documentation website Previously, lsif-java didn't have any documentation for end-users. We only had documentation for contributors. This commit adds a website that includes user-facing documentation on how to run lsif-java with automatic indexing and manual indexing. --- .github/workflows/ci.yml | 2 +- .github/workflows/mdoc.yml | 14 ++ .github/workflows/native.yml | 2 +- README.md | 37 +---- build.sbt | 18 ++- .../sourcegraph/lsif_java/IndexCommand.scala | 15 +- .../lsif_java/IndexSemanticdbCommand.scala | 55 +++++++ .../com/sourcegraph/lsif_java/LsifJava.scala | 32 ++-- docs/getting-started.md | 140 +++++++++++++++++ docs/manual-configuration.md | 135 +++++++++++++++++ project/plugins.sbt | 1 + .../test/scala/tests/BaseBuildToolSuite.scala | 2 +- .../scala/tests/MissingBuildToolSuite.scala | 8 +- website/.gitignore | 1 + website/core/Footer.js | 55 +++++++ website/package.json | 14 ++ website/pages/en/index.js | 142 ++++++++++++++++++ website/project/build.properties | 1 + website/sidebars.json | 8 + website/siteConfig.js | 68 +++++++++ website/static/css/custom.css | 3 + website/static/img/favicon.ico | Bin 0 -> 15406 bytes website/static/img/lsif-java.png | Bin 0 -> 195170 bytes 23 files changed, 700 insertions(+), 53 deletions(-) create mode 100644 .github/workflows/mdoc.yml create mode 100644 cli/src/main/scala/com/sourcegraph/lsif_java/IndexSemanticdbCommand.scala create mode 100644 docs/getting-started.md create mode 100644 docs/manual-configuration.md create mode 100644 website/.gitignore create mode 100644 website/core/Footer.js create mode 100644 website/package.json create mode 100755 website/pages/en/index.js create mode 100644 website/project/build.properties create mode 100644 website/sidebars.json create mode 100644 website/siteConfig.js create mode 100644 website/static/css/custom.css create mode 100644 website/static/img/favicon.ico create mode 100644 website/static/img/lsif-java.png diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 697c167e..0bf91c04 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,7 +12,7 @@ jobs: - uses: olafurpg/setup-scala@v10 - uses: actions/setup-go@v2 with: - go-version: '^1.13.1' + go-version: "^1.13.1" - run: go get github.com/sourcegraph/lsif-semanticdb/cmd/lsif-semanticdb - run: sbt test check: diff --git a/.github/workflows/mdoc.yml b/.github/workflows/mdoc.yml new file mode 100644 index 00000000..7d4ee799 --- /dev/null +++ b/.github/workflows/mdoc.yml @@ -0,0 +1,14 @@ +name: Website +on: + push: + branches: [master, documentation-website] + tags: ["*"] +jobs: + publish: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: olafurpg/setup-scala@v10 + - run: sbt docs/docusaurusPublishGhpages + env: + GIT_DEPLOY_KEY: ${{ secrets.GIT_DEPLOY_KEY }} diff --git a/.github/workflows/native.yml b/.github/workflows/native.yml index d9186ead..14c7de58 100644 --- a/.github/workflows/native.yml +++ b/.github/workflows/native.yml @@ -30,7 +30,7 @@ jobs: - name: sbt nativeImage shell: bash run: | - sbt cli/nativeImage "cli/nativeImageRun --cwd tests/gradle-example" + sbt cli/nativeImage "cli/nativeImageRun --cwd tests/gradle-example index" - uses: actions/upload-artifact@master with: path: ${{ matrix.local_path }} diff --git a/README.md b/README.md index 97336cfe..f8a92ac4 100644 --- a/README.md +++ b/README.md @@ -1,37 +1,10 @@ -# Java LSIF indexer ![](https://img.shields.io/badge/status-development-yellow?style=flat) - -Visit https://lsif.dev/ to learn about LSIF. +# Java indexer for the Language Server Index Format (LSIF) ![](https://img.shields.io/badge/status-development-yellow?style=flat) ## Usage -⚠️ This project is under development so there is nothing to try out at the -moment. - -### Supported tools and versions - -Currently, only Java 8 with the build tool sbt is supported. We hope to increase -compatibility with more Java language versions and build tools as the project -evolves. - -| Language version | Support | -| ---------------- | --------------------------------- | -| Java 7 | ❌ | -| Java 8 | ✅ | -| Java 11 | ✅ | -| Java 12 | Not tested in CI, but should work | -| Java 13 | Not tested in CI, but should work | -| Java 14 | Not tested in CI, but should work | -| Java 15 | ✅ | -| Java 16 | Not tested in CI, but should work | -| Java 17 | Not tested in CI, but should work | - -| Build tool | Support | -| ---------- | ------- | -| Gradle | ✅ | -| Maven | ✅ | -| Bazel | ❌ | -| Buck | ❌ | -| sbt | ✅ | +Visit https://sourcegraph.github.io/lsif-java to get started with lsif-java. + +⚠ The rest of this readme is targeted at contributors to the lsif-java codebase. ## Overview @@ -130,6 +103,8 @@ These are the main components of the project. | `snapshots/test` | sbt | Runs all snapshot tests. | | `snapshots/run` | sbt | Update snapshot tests. Use this command after you have fixed a bug. | | `cli/run --cwd DIRECTORY` | sbt | Run `lsif-java` command-line tool against a given Gradle/Maven build. | +| `cd website && yarn install && yarn start` | terminal | Start live-reload preview of the website at http://localhost:3000/lsif-java. | +| `docs/mdoc --watch` | sbt | Re-generate markdown files in the `docs/` directory. | | `fixAll` | sbt | Run Scalafmt, Scalafix and Javafmt on all sources. Run this before opening a PR. | ### Import the project into IntelliJ diff --git a/build.sbt b/build.sbt index a1a8dc72..a44f4414 100644 --- a/build.sbt +++ b/build.sbt @@ -59,7 +59,7 @@ commands += commands += Command.command("checkAll") { s => "scalafmtCheckAll" :: "scalafmtSbtCheck" :: "scalafixAll --check" :: - "javafmtCheckAll" :: "publishLocal" :: s + "javafmtCheckAll" :: "publishLocal" :: "docs/docusaurusCreateSite" :: s } lazy val agent = project @@ -293,3 +293,19 @@ lazy val fatjarPackageSettings = List[Def.Setting[_]]( slimJar } ) + +lazy val docs = project + .in(file("lsif-java-docs")) + .settings( + mdocOut := + baseDirectory.in(ThisBuild).value / "website" / "target" / "docs", + fork := false, + mdocVariables := + Map[String, String]( + "VERSION" -> version.value, + "SCALA_VERSION" -> scalaVersion.value, + "STABLE_VERSION" -> version.value.replaceFirst("\\-.*", "") + ) + ) + .dependsOn(unit) + .enablePlugins(DocusaurusPlugin) diff --git a/cli/src/main/scala/com/sourcegraph/lsif_java/IndexCommand.scala b/cli/src/main/scala/com/sourcegraph/lsif_java/IndexCommand.scala index cbc7d7ff..c41dbb16 100644 --- a/cli/src/main/scala/com/sourcegraph/lsif_java/IndexCommand.scala +++ b/cli/src/main/scala/com/sourcegraph/lsif_java/IndexCommand.scala @@ -6,9 +6,11 @@ import java.nio.file.Paths import com.sourcegraph.lsif_java.buildtools.BuildTool import moped.annotations.Description +import moped.annotations.ExampleUsage import moped.annotations.ExampleValue import moped.annotations.Inline import moped.annotations.TrailingArguments +import moped.annotations.Usage import moped.cli.Application import moped.cli.Command import moped.cli.CommandParser @@ -18,7 +20,12 @@ import os.Inherit import os.Shellable @Description( - "Generates an LSIF index for the Java build of a provided workspace directory." + "Automatically generate an LSIF index in the current working directory." +) +@Usage("lsif-java index [OPTIONS ...] -- [TRAILING_ARGUMENTS ...]") +@ExampleUsage( + """|# Running the `index` command with no flags should work most of the time. + |$ lsif-java index""".stripMargin ) case class IndexCommand( @Description("The path where to generate the LSIF index.") output: Path = @@ -41,12 +48,12 @@ case class IndexCommand( ) @ExampleValue("Gradle") buildTool: Option[String] = None, @Description( - "Whether to enable remove generated temporary files on exit." + "Whether to remove generated temporary files on exit." ) cleanup: Boolean = true, @Description( - "The build command to use to compile all sources. " + + "Optional. The build command to use to compile all sources. " + "Defaults to a build-specific command. For example, the default command for Maven command is 'clean verify -DskipTests'." + - "To override the default, pass in the build command after a double dash: 'lsif-java -- compile'" + "To override the default, pass in the build command after a double dash: 'lsif-java index -- compile test:compile'" ) @TrailingArguments() buildCommand: List[String] = Nil, @Inline diff --git a/cli/src/main/scala/com/sourcegraph/lsif_java/IndexSemanticdbCommand.scala b/cli/src/main/scala/com/sourcegraph/lsif_java/IndexSemanticdbCommand.scala new file mode 100644 index 00000000..55449b99 --- /dev/null +++ b/cli/src/main/scala/com/sourcegraph/lsif_java/IndexSemanticdbCommand.scala @@ -0,0 +1,55 @@ +package com.sourcegraph.lsif_java + +import java.nio.file.Path + +import scala.collection.mutable.ListBuffer + +import moped.annotations.CommandName +import moped.annotations.Description +import moped.annotations.ExampleUsage +import moped.annotations.Inline +import moped.annotations.PositionalArguments +import moped.annotations.Usage +import moped.cli.Application +import moped.cli.Command +import moped.cli.CommandParser +import os.Inherit +import os.Shellable + +@Description("Converts SemanticDB files into a single LSIF index file.") +@Usage("lsif-java index-semanticdb [OPTIONS ...] [POSITIONAL ARGUMENTS ...]") +@ExampleUsage( + "lsif-java index-semanticdb --out=myindex.lsif my/targetroot1 my/targetroot2" +) +@CommandName("index-semanticdb") +final case class IndexSemanticdbCommand( + @Description( + "The name of the output file. Defaults to 'dump.lsif'" + ) out: Option[Path] = None, + @Description( + "SemanticDB file paths or directories that contain SemanticDB files." + ) + @PositionalArguments() directories: List[Path] = Nil, + @Inline() app: Application = Application.default +) extends Command { + def run(): Int = { + val arguments = ListBuffer.empty[String] + arguments += "lsif-semanticdb" + out.foreach { dir => + arguments += s"--out=$dir" + } + directories.foreach { dir => + arguments += s"--semanticdbDir=$dir" + } + app.info(arguments.mkString(" ")) + app + .process(Shellable(arguments.toList)) + .call(check = false, stderr = Inherit, stdout = Inherit) + .exitCode + } +} + +object IndexSemanticdbCommand { + val default = IndexSemanticdbCommand() + implicit val parser = CommandParser.derive(default) +} diff --git a/cli/src/main/scala/com/sourcegraph/lsif_java/LsifJava.scala b/cli/src/main/scala/com/sourcegraph/lsif_java/LsifJava.scala index c9d6e9cc..d294755b 100644 --- a/cli/src/main/scala/com/sourcegraph/lsif_java/LsifJava.scala +++ b/cli/src/main/scala/com/sourcegraph/lsif_java/LsifJava.scala @@ -1,23 +1,35 @@ package com.sourcegraph.lsif_java +import java.io.PrintStream + import moped.cli.Application import moped.cli.CommandParser import moped.commands.HelpCommand import moped.commands.VersionCommand +import moped.reporters.Tput object LsifJava { - val app: Application = Application - .fromName( - binaryName = "lsif-java", - BuildInfo.version, - List( - CommandParser[HelpCommand], - CommandParser[VersionCommand], - CommandParser[IndexCommand] - ) + val app: Application = Application.fromName( + binaryName = "lsif-java", + BuildInfo.version, + List( + CommandParser[HelpCommand], + CommandParser[VersionCommand], + CommandParser[IndexCommand], + CommandParser[IndexSemanticdbCommand] ) - .withIsSingleCommand(true) + ) def main(args: Array[String]): Unit = { app.runAndExitIfNonZero(args.toList) } + + def printHelp(out: PrintStream): Unit = { + out.println("```text") + out.println("$ lsif-java index --help") + val newApp = app + .withTput(Tput.constant(100)) + .withEnv(app.env.withStandardOutput(out)) + newApp.run(List("index", "--help")) + out.println("```") + } } diff --git a/docs/getting-started.md b/docs/getting-started.md new file mode 100644 index 00000000..ebdee3a1 --- /dev/null +++ b/docs/getting-started.md @@ -0,0 +1,140 @@ +--- +id: getting-started +title: Getting started +--- + +By following the instructions on this page, you should be able to generate an +[LSIF](https://microsoft.github.io/language-server-protocol/specifications/lsif/0.5.0/specification/) +index of your Java codebase. + +## Install `lsif-java` + +The easiest way to install `lsif-java` is to download the native binary. + +### Native binary + +The native binary is only available for Linux and macOS. The native binary +includes all dependencies and does not need further access to the internet after +it's been downloaded. + +```sh +# macOS +curl -Lo lsif-java https://github.com/sourcegraph/lsif-java/releases/download/@STABLE_VERSION@/lsif-java-x86_64-apple-darwin +chmod +x lsif-java +./lsif-java --help + +# Linux +curl -Lo lsif-java https://github.com/sourcegraph/lsif-java/releases/download/@STABLE_VERSION@/lsif-java-x86_64-pc-linux +chmod +x lsif-java +./lsif-java --help +``` + +### Java launcher + +Use [Coursier](https://get-coursier.io/docs/cli-installation.html) to launch the +Java binary. The Java binary should work with any version of Java 8 or newer. + +```sh +# Homebrew +brew install coursier/formulas/coursier +coursier launch com.sourcegraph:lsif-java_2.13:@STABLE_VERSION@ -- --help + +# macOS/Linux +curl -fLo coursier https://git.io/coursier-cli +chmod +x coursier +./coursier launch com.sourcegraph:lsif-java_2.13:@STABLE_VERSION@ -- --help + +# Windows +bitsadmin /transfer downloadCoursierCli https://git.io/coursier-cli "%cd%\coursier" +bitsadmin /transfer downloadCoursierBat https://git.io/coursier-bat "%cd%\coursier.bat" +./coursier launch com.sourcegraph:lsif-java_2.13:@STABLE_VERSION@ -- --help +``` + +### Java fat jar + +Use the Coursier `bootstrap` command to generate a standalone Java binary, which +includes all dependencies and does not require further access to the internet +after installation. + +```sh +# macOS/Linux/Windows +cs bootstrap --standalone -o lsif-java com.sourcegraph:lsif-java_2.13:@STABLE_VERSION@ +./lsif-java --help +``` + +### Java library + +The `lsif-java` command-line interface is published to Maven Central. You can +run the command-line interface as a library by directly invoking the `main()` +method on the `com.sourcegraph.lsif_java.LsifJava` class. + +[![](https://img.shields.io/maven-central/v/com.sourcegraph/lsif-java_2.13)](https://repo1.maven.org/maven2/com/sourcegraph/lsif-java_2.13/) + +If you're using Gradle. + +```groovy +implementation group: 'com.sourcegraph', name: 'lsif-java_2.13', version: '@STABLE_VERSION@' +``` + +If you're using Maven. + +```xml + + com.sourcegraph + lsif-java_2.13 + @STABLE_VERSION@ + +``` + +If you're using sbt. + +```scala +scalaVersion := "@SCALA_VERSION@" // Only Scala 2.13 is supported. +libraryDependencies += "com.sourcegraph" %% "lsif-java" % "@STABLE_VERSION@" +``` + +## Run `lsif-java index` + +Run `lsif-java index --help` to see the available command-line options. + +```scala mdoc:passthrough +com.sourcegraph.lsif_java.LsifJava.printHelp(Console.out) +``` + +## Supported Java versions + +The `lsif-java` indexer is implemented as a Java compiler plugin that runs as +part of your regular compilation in the build tool. By using Java compiler APIs, +`lsif-java` is able to support a broad range of Java versions. + +| Language version | Support | +| ---------------- | ------------------------------ | +| Java 7 | ❌ | +| Java 8 | ✅ | +| Java 11 | ✅ | +| Java 12 | Not tested in CI, but may work | +| Java 13 | Not tested in CI, but may work | +| Java 14 | Not tested in CI, but may work | +| Java 15 | ✅ | +| Java 16 | Not tested in CI, but may work | +| Java 17 | Not tested in CI, but may work | + +## Supported build tools + +Please open an issue if your build tool is not listed in the table below. Feel +free to subscribe to the tracking issues to receive updates on your build tool. + +| Build tool | Support | Tracking issue | +| ---------- | ------- | -------------------------------------------------------------------------------- | +| Gradle | ✅ | | +| Maven | ✅ | | +| Bazel | ❌ | [sourcegraph/lsif-java#88](https://github.com/sourcegraph/lsif-java/issues/88) | +| Buck | ❌ | [sourcegraph/lsif-java#99](https://github.com/sourcegraph/lsif-java/issues/99) | +| sbt | ❌ | [sourcegraph/lsif-java#110](https://github.com/sourcegraph/lsif-java/issues/110) | + +**✅**: automatic indexing is fully supported. Please report a bug if the +`lsif-java index` command does not work on your codebase. + +**❌**: automatic inference is not supported but (!) you may still be able to +use `lsif-java` by configuring it manually using the instructions +[here](manual-configuration.md). diff --git a/docs/manual-configuration.md b/docs/manual-configuration.md new file mode 100644 index 00000000..4f440317 --- /dev/null +++ b/docs/manual-configuration.md @@ -0,0 +1,135 @@ +--- +id: manual-configuration +title: Manual configuration +--- + +The `lsif-java index` command does a best-effort to automatically index a given +codebase. The automatic step may not always work. The purpose of this page is to +document the steps to manually configure lsif-java when automatic indexing +fails. + +## Overview + +Indexing a codebase consists of two independent steps: + +- Compile the codebase with the SemanticDB compiler plugin. +- Generate LSIF index from SemanticDB files. + +![A three stage pipeline that starts with a list of Java sources, creates a list of SemanticDB files that then become a single LSIF index.](docs/img/semanticdb-javac-pipeline.svg) + +## Step 1: Add SemanticDB compiler plugin to the classpath + +The SemanticDB compiler plugin is published to Maven Central as a +zero-dependency Java library that you can install like any normal dependency. + +[![](https://img.shields.io/maven-central/v/com.sourcegraph/semanticdb-javac)](https://repo1.maven.org/maven2/com/sourcegraph/semanticdb-javac/) + +If you're using Gradle. + +```groovy +implementation group: 'com.sourcegraph', name: 'semanticdb-javac', version: '@STABLE_VERSION@' +``` + +If you're using Maven. + +```xml + + com.sourcegraph + semanticdb-javac + @STABLE_VERSION@ + +``` + +If you're using sbt. + +```scala +libraryDependencies += "com.sourcegraph" % "semanticdb-javac" % "@STABLE_VERSION@" +``` + +## Step 2: enable `-Xplugin:semanticdb` compiler option + +Add `-Xplugin:semanticdb` to your compiler options to enable the SemanticDB +compiler plugin. To do this you need to explicitly configure two directories: + +- `-sourceroot:PATH`: the absolute path to the root directory of your codebase. + It's important that all of the source files that should be index live under + this directory. +- `-targetroot:PATH`: the absolute path to the directory where to generate + SemanticDB file. This directory can be anywhere on your file system. + +If you're using Gradle. + +```groovy +tasks.withType(JavaCompile) { + def sourceroot = rootProject.projectDir + def targetroot = new File(rootProject.buildDir, "semanticdb-targetroot") + options.compilerArgs << '-Xplugin:semanticdb -sourceroot:$sourceroot -targetroot:$targetroot' +} +``` + +If you're using Maven. + +```diff + + [...] + + [...] + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + ++ -Xplugin:semanticdb -sourceroot:${session.executionRootDirectory} -targetroot:${session.executionRootDirectory}/target/semanticdb-targetroot + + + + + [...] + + [...] + +``` + +If you're using sbt. + +```scala +Compile / javacOptions += { + val sourceroot = (ThisBuild / baseDirectory).value + val targetroot = (ThisBuild / target).value / "semanticdb-targetroot" + s"-Xplugin:semanticdb -sourceroot:$sourceroot -targeroot:$sourceroot" +} +``` + +## Step 4: compile the codebase + +Compile all source files in the codebase once the compiler setting has been +configured. The exact command depends on your build tool. Below are some +examples: + +- Gradle: `./gradlew clean compileTestJava` +- Maven: `mvn clean verify -DskipTests` +- sbt: `sbt clean test:compile` +- Bazel: `bazel build //...` + +If everything went well, you should have a lot of `*.semanticdb` files in the +targetroot directory. + +``` +❯ find $TARGETROOT -type f +build/semanticdb-targetroot/META-INF/semanticdb/j8/src/test/java/example/ExampleTest.java.semanticdb +build/semanticdb-targetroot/META-INF/semanticdb/j8/src/main/java/example/Example.java.semanticdb +... +``` + +## Step 5: generate LSIF index from SemanticDB files + +Run the `lsif-java index-semanticdb` command to convert SemanticDB files into +LSIF. + +```sh +❯ lsif-java index-semanticdb $TARGETROOT +❯ file dump.lsif +dump.lsif: JSON data +``` diff --git a/project/plugins.sbt b/project/plugins.sbt index ef3b25f0..6349e1b4 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -2,6 +2,7 @@ addSbtPlugin("org.scalameta" % "sbt-native-image" % "0.3.0") addSbtPlugin("com.geirsson" % "sbt-ci-release" % "1.5.5") addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "0.10.0") addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.3.4") +addSbtPlugin("org.scalameta" % "sbt-mdoc" % "2.2.18") addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % "0.9.25") addSbtPlugin("com.thesamet" % "sbt-protoc" % "1.0.0") addSbtPlugin("ch.epfl.scala" % "sbt-bloop" % "1.4.6-21-464e4ec4") diff --git a/tests/buildTools/src/test/scala/tests/BaseBuildToolSuite.scala b/tests/buildTools/src/test/scala/tests/BaseBuildToolSuite.scala index 9827770c..6171e0ae 100644 --- a/tests/buildTools/src/test/scala/tests/BaseBuildToolSuite.scala +++ b/tests/buildTools/src/test/scala/tests/BaseBuildToolSuite.scala @@ -40,7 +40,7 @@ abstract class BaseBuildToolSuite extends MopedSuite(LsifJava.app) { FileLayout.fromString(original, root = workingDirectory) val targetroot = workingDirectory.resolve("targetroot") val arguments = - List("--targetroot", targetroot.toString) ++ extraArguments + List("index", "--targetroot", targetroot.toString) ++ extraArguments val exit = app().run(arguments) assertEquals(exit, 0, clues(app.capturedOutput)) val semanticdbFiles = FileIO diff --git a/tests/buildTools/src/test/scala/tests/MissingBuildToolSuite.scala b/tests/buildTools/src/test/scala/tests/MissingBuildToolSuite.scala index 1e25ab2f..5f4d3322 100644 --- a/tests/buildTools/src/test/scala/tests/MissingBuildToolSuite.scala +++ b/tests/buildTools/src/test/scala/tests/MissingBuildToolSuite.scala @@ -3,7 +3,7 @@ package tests class MissingBuildToolSuite extends BaseBuildToolSuite { checkErrorOutput( "basic", - List(), + List("index"), expectedOutput = """|error: No build tool detected in workspace '/workingDirectory'. At the moment, the only supported build tools are: Gradle, Maven. |""".stripMargin, @@ -12,7 +12,7 @@ class MissingBuildToolSuite extends BaseBuildToolSuite { checkErrorOutput( "ambiguous", - List(), + List("index"), expectedOutput = """|error: Multiple build tools detected: Gradle, Maven. To fix this problem, use the '--build-tools=BUILD_TOOL_NAME' flag to specify which build tool to run. |""".stripMargin, @@ -26,7 +26,7 @@ class MissingBuildToolSuite extends BaseBuildToolSuite { checkErrorOutput( "no-matching-explicit", - List("--build-tool", "Gradle"), + List("index", "--build-tool", "Gradle"), expectedOutput = """|error: Automatically detected the build tool(s) Maven but none of them match the explicitly provided flag '--build-tool=Gradle'. To fix this problem, run again with the --build-tool flag set to one of the detected build tools. |""".stripMargin, @@ -38,7 +38,7 @@ class MissingBuildToolSuite extends BaseBuildToolSuite { checkErrorOutput( "levenshtein", - List("--build-tool", "Mave"), + List("index", "--build-tool", "Mave"), expectedOutput = """|error: Automatically detected the build tool(s) Maven but none of them match the explicitly provided flag '--build-tool=Mave'. Did you mean --build-tool=Maven? |""".stripMargin, diff --git a/website/.gitignore b/website/.gitignore new file mode 100644 index 00000000..4ddfdc49 --- /dev/null +++ b/website/.gitignore @@ -0,0 +1 @@ +blog/ diff --git a/website/core/Footer.js b/website/core/Footer.js new file mode 100644 index 00000000..0e46e90e --- /dev/null +++ b/website/core/Footer.js @@ -0,0 +1,55 @@ +const React = require("react"); + +const siteConfig = require(process.cwd() + "/siteConfig.js"); + +class Footer extends React.Component { + render() { + const { + baseUrl, + copyright, + colors: { secondaryColor } + } = this.props.config; + const docsUrl = `${baseUrl}docs/`; + return ( + + ); + } +} + +module.exports = Footer; diff --git a/website/package.json b/website/package.json new file mode 100644 index 00000000..44915009 --- /dev/null +++ b/website/package.json @@ -0,0 +1,14 @@ +{ + "scripts": { + "examples": "docusaurus-examples", + "start": "docusaurus-start", + "build": "docusaurus-build", + "publish-gh-pages": "docusaurus-publish", + "write-translations": "docusaurus-write-translations", + "version": "docusaurus-version", + "rename-version": "docusaurus-rename-version" + }, + "devDependencies": { + "docusaurus": "1.14.4" + } +} diff --git a/website/pages/en/index.js b/website/pages/en/index.js new file mode 100755 index 00000000..d69f63a6 --- /dev/null +++ b/website/pages/en/index.js @@ -0,0 +1,142 @@ +const React = require("react"); + +const CompLibrary = require("../../core/CompLibrary.js"); +const Container = CompLibrary.Container; +const GridBlock = CompLibrary.GridBlock; + +const siteConfig = require(process.cwd() + "/siteConfig.js"); + +function imgUrl(img) { + return siteConfig.baseUrl + "img/" + img; +} + +function docUrl(doc, language) { + return siteConfig.baseUrl + "docs/" + (language ? language + "/" : "") + doc; +} + +class Button extends React.Component { + render() { + return ( +
+ + {this.props.children} + +
+ ); + } +} + +Button.defaultProps = { + target: "_self" +}; + +const SplashContainer = props => ( +
+
+
{props.children}
+
+
+); + +const ProjectTitle = props => ( +

+ {siteConfig.title} + {siteConfig.tagline} +

+); + +const PromoSection = props => ( +
+
+
{props.children}
+
+
+); + +class HomeSplash extends React.Component { + render() { + let language = this.props.language || ""; + return ( + +
+ + + + +
+
+ ); + } +} + +const Block = props => ( + + + +); + +const Features = props => { + const features = [ + { + title: "Multiple language versions", + content: "Works with Java 8, Java 11 and Java 15. The latest bleeding edge Java version probably works as well.", + image: + "https://user-images.githubusercontent.com/1408093/109818700-93378e00-7c33-11eb-8385-7ea88533cb87.png", + imageAlign: "left" + }, + { + title: "Multiple build tools", + content: + "The build tools Gradle and Maven are supported. We plan to add support for more build tools in the future.", + image: + "https://user-images.githubusercontent.com/1408093/109819002-e4478200-7c33-11eb-99d3-c42d84acda47.png", + imageAlign: "right" + }, + { + title: "Simple installation", + content: + "Run the `lsif-java` command-line tool at the root of your Gradle/Maven build to generate an LSIF index. No manual configuration needed.", + image: + "https://user-images.githubusercontent.com/1408093/109820615-769c5580-7c35-11eb-9063-98e932c5d6c5.png", + imageAlign: "left" + }, + { + title: "Low overhead", + content: + "Indexing a repository should be roughly as fast as compiling all of the sources in the repository.", + image: + "https://user-images.githubusercontent.com/1408093/109820240-1dccbd00-7c35-11eb-8a87-6b1850687e28.png", + imageAlign: "right" + } + ]; + return ( +
+ {features.map(feature => ( + {[feature]} + ))} +
+ ); +}; +class Index extends React.Component { + render() { + let language = this.props.language || ""; + + return ( +
+ + +
+ ); + } +} + +module.exports = Index; diff --git a/website/project/build.properties b/website/project/build.properties new file mode 100644 index 00000000..0b2e09c5 --- /dev/null +++ b/website/project/build.properties @@ -0,0 +1 @@ +sbt.version=1.4.7 diff --git a/website/sidebars.json b/website/sidebars.json new file mode 100644 index 00000000..079c08e5 --- /dev/null +++ b/website/sidebars.json @@ -0,0 +1,8 @@ +{ + "docs": { + "Overview": [ + "getting-started", + "manual-configuration" + ] + } +} \ No newline at end of file diff --git a/website/siteConfig.js b/website/siteConfig.js new file mode 100644 index 00000000..5b3f41b3 --- /dev/null +++ b/website/siteConfig.js @@ -0,0 +1,68 @@ +// See https://docusaurus.io/docs/site-config.html for all the possible +// site configuration options. + +const repoUrl = "https://github.com/sourcegraph/lsif-java"; +const baseUrl = "/lsif-java/"; + +const siteConfig = { + title: "lsif-java", + tagline: "Java indexer for the Language Server Index Format (LSIF)", + url: "https://sourcegraph.github.io/lsif-java", + baseUrl: baseUrl, + + // Used for publishing and more + projectName: "lsif-java", + organizationName: "sourcegraph", + + // algolia: { + // apiKey: "5791175eba35c6626d93ae96610a8ae9", + // indexName: "scalamenta_mdoc" + // }, + + // For no header links in the top nav bar -> headerLinks: [], + headerLinks: [ + { doc: "getting-started", label: "Docs" }, + { href: repoUrl, label: "GitHub", external: true } + ], + + // If you have users set above, you add it here: + // users, + + /* path to images for header/footer */ + headerIcon: "img/lsif-java.png", + footerIcon: "img/lsif-java.png", + favicon: "img/favicon.ico", + + /* colors for website */ + colors: { + primaryColor: "#664100", + secondaryColor: "#664100" + }, + + customDocsPath: "website/target/docs", + + stylesheets: [baseUrl + "css/custom.css"], + + + usePrism: ['scala'], + // This copyright info is used in /core/Footer.js and blog rss/atom feeds. + copyright: `Copyright © ${new Date().getFullYear()} lsif-java developers`, + + highlight: { + // Highlight.js theme to use for syntax highlighting in code blocks + theme: "github" + }, + + /* On page navigation for the current documentation page */ + onPageNav: "separate", + + /* Open Graph and Twitter card images */ + ogImage: "img/lsif-java.png", + twitterImage: "img/lsif-java.png", + + editUrl: `${repoUrl}/edit/master/docs/`, + + repoUrl, +}; + +module.exports = siteConfig; diff --git a/website/static/css/custom.css b/website/static/css/custom.css new file mode 100644 index 00000000..e70e763e --- /dev/null +++ b/website/static/css/custom.css @@ -0,0 +1,3 @@ +div[data-mdoc-js] { + background-color: blanchedalmond; +} diff --git a/website/static/img/favicon.ico b/website/static/img/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..ba16fea1d843759c23df9630c910b0e3f9ec76f2 GIT binary patch literal 15406 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 literal 0 HcmV?d00001 diff --git a/website/static/img/lsif-java.png b/website/static/img/lsif-java.png new file mode 100644 index 0000000000000000000000000000000000000000..9bed95ab65a12d8f945260d2fd65cfa7197e298a GIT binary patch literal 195170 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̮*;j#6ZD8=glbuU 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 KREdOf;Qs?`jose> literal 0 HcmV?d00001 From 01b09ecf6babad67d269966fe340e03621e0773c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93lafur=20P=C3=A1ll=20Geirsson?= Date: Fri, 5 Mar 2021 10:12:03 +0100 Subject: [PATCH 2/4] Address review feedback. --- README.md | 2 +- docs/{img => assets}/semanticdb-javac-pipeline.svg | 0 docs/manual-configuration.md | 10 +++++----- 3 files changed, 6 insertions(+), 6 deletions(-) rename docs/{img => assets}/semanticdb-javac-pipeline.svg (100%) diff --git a/README.md b/README.md index f8a92ac4..086d1702 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ that generates one every `*.java` source file. After compilation completes, the SemanticDB files are processed to produce LSIF. -![A three stage pipeline that starts with a list of Java sources, creates a list of SemanticDB files that then become a single LSIF index.](docs/img/semanticdb-javac-pipeline.svg) +![A three stage pipeline that starts with a list of Java sources, creates a list of SemanticDB files that then become a single LSIF index.](docs/assets/semanticdb-javac-pipeline.svg) ### Why Java compiler plugin? diff --git a/docs/img/semanticdb-javac-pipeline.svg b/docs/assets/semanticdb-javac-pipeline.svg similarity index 100% rename from docs/img/semanticdb-javac-pipeline.svg rename to docs/assets/semanticdb-javac-pipeline.svg diff --git a/docs/manual-configuration.md b/docs/manual-configuration.md index 4f440317..fd756f35 100644 --- a/docs/manual-configuration.md +++ b/docs/manual-configuration.md @@ -15,7 +15,7 @@ Indexing a codebase consists of two independent steps: - Compile the codebase with the SemanticDB compiler plugin. - Generate LSIF index from SemanticDB files. -![A three stage pipeline that starts with a list of Java sources, creates a list of SemanticDB files that then become a single LSIF index.](docs/img/semanticdb-javac-pipeline.svg) +![A three stage pipeline that starts with a list of Java sources, creates a list of SemanticDB files that then become a single LSIF index.](assets/semanticdb-javac-pipeline.svg) ## Step 1: Add SemanticDB compiler plugin to the classpath @@ -46,7 +46,7 @@ If you're using sbt. libraryDependencies += "com.sourcegraph" % "semanticdb-javac" % "@STABLE_VERSION@" ``` -## Step 2: enable `-Xplugin:semanticdb` compiler option +## Step 2: Enable `-Xplugin:semanticdb` compiler option Add `-Xplugin:semanticdb` to your compiler options to enable the SemanticDB compiler plugin. To do this you need to explicitly configure two directories: @@ -102,13 +102,13 @@ Compile / javacOptions += { } ``` -## Step 4: compile the codebase +## Step 3: Compile the codebase Compile all source files in the codebase once the compiler setting has been configured. The exact command depends on your build tool. Below are some examples: -- Gradle: `./gradlew clean compileTestJava` +- Gradle: `./gradlew clean compileJava compileTestJava` - Maven: `mvn clean verify -DskipTests` - sbt: `sbt clean test:compile` - Bazel: `bazel build //...` @@ -123,7 +123,7 @@ build/semanticdb-targetroot/META-INF/semanticdb/j8/src/main/java/example/Example ... ``` -## Step 5: generate LSIF index from SemanticDB files +## Step 4: Generate LSIF index from SemanticDB files Run the `lsif-java index-semanticdb` command to convert SemanticDB files into LSIF. From 387826b2f1593b66fa534999bc37d8db2dfecab7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93lafur=20P=C3=A1ll=20Geirsson?= Date: Fri, 5 Mar 2021 12:34:06 +0100 Subject: [PATCH 3/4] Address review feedback. --- CONTRIBUTING.md | 3 + README.md | 155 +----------------- build.sbt | 41 ++++- .../sourcegraph/lsif_java/IndexCommand.scala | 7 + docs/architecture.md | 54 ++++++ docs/benchmarks.md | 12 +- docs/contributing.md | 93 +++++++++++ docs/getting-started.md | 41 ++++- docs/manual-configuration.md | 16 +- website/sidebars.json | 7 +- 10 files changed, 263 insertions(+), 166 deletions(-) create mode 100644 CONTRIBUTING.md create mode 100644 docs/architecture.md create mode 100644 docs/contributing.md diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 00000000..fd947f01 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,3 @@ +# Contributing guide + +See https://sourcegraph.github.io/lsif-java/docs/contributing.html diff --git a/README.md b/README.md index 086d1702..027a58f6 100644 --- a/README.md +++ b/README.md @@ -1,150 +1,9 @@ # Java indexer for the Language Server Index Format (LSIF) ![](https://img.shields.io/badge/status-development-yellow?style=flat) -## Usage - -Visit https://sourcegraph.github.io/lsif-java to get started with lsif-java. - -⚠ The rest of this readme is targeted at contributors to the lsif-java codebase. - -## Overview - -This project is implemented as a -[Java compiler plugin](https://docs.oracle.com/en/java/javase/11/docs/api/jdk.compiler/com/sun/source/util/Plugin.html) -that generates one -[SemanticDB](https://scalameta.org/docs/semanticdb/specification.html) file for -every `*.java` source file. After compilation completes, the SemanticDB files -are processed to produce LSIF. - -![A three stage pipeline that starts with a list of Java sources, creates a list of SemanticDB files that then become a single LSIF index.](docs/assets/semanticdb-javac-pipeline.svg) - -### Why Java compiler plugin? - -There are several benefits to implementing lsif-java as a compiler plugin: - -- **Simple installation**: compiler plugins are enabled with the `-Xplugin` - compiler option. All Java build tools support a way to customize compiler - options, simplifying installation. -- **Language fidelity**: by using the Java compiler to produce semantic - information, we ensure that the produced LSIF data is accurate even as new - Java language versions with new language features are released. -- **Environment fidelity**: by hooking into the compilation process of the build - tool, we minimize the risk of diverging from the CI build environment such as - installed system dependencies, custom compiler options and custom annotation - processors. - -### Why SemanticDB? - -SemanticDB is Protobuf schema for information about symbols and types in Java -programs, Scala programs and other languages. There are several benefits to -using SemanticDB as an intermediary representation for LSIF: - -- **Simplicity**: It's easy to translate a single Java source file into a single - SemanticDB file inside a compiler plugin. It's more complicated to produce - LSIF because compiler plugins does not have access to a project-wide context, - which is necessary to produce accurate definitions and hovers in multi-module - projects with external library dependencies. -- **Performance**: SemanticDB is fast to write and read. Each compilation unit - can be processed independently to keep memory usage low. The final conversion - from SemanticDB to LSIF can be safely parallelized. -- **Cross-language**: SemanticDB has a - [spec](https://scalameta.org/docs/semanticdb/specification.html) for Java and - Scala enabling cross-language navigation in hybrid Java/Scala codebases. -- **Cross-repository**: Compiler plugins have access to both source code and the - classpath (compiled bytecode of upstream dependencies). SemanticDB has been - designed so that it's also possible to generate spec-compliant symbols from - the classpath alone (no source code) and from the syntax tree of an individual - source file (no classpath). This flexibility allows the - [Metals](https://scalameta.org/metals/) language server to index codebases - from a variety of different inputs, and will be helpful for lsif-java in the - future to unblock cross-repository navigation. - -## Contributing - -The following sections provide tips on how to contribute to this codebase. - -### System dependencies - -- `java`: any version should work -- `git`: any version should work -- `lsif-semanticdb`: - `go get github.com/sourcegraph/lsif-semanticdb/cmd/lsif-semanticdb` -- `gradle`: `brew install gradle`, or see - [general installation guide](https://gradle.org/install/). -- `mvn`: `brew install maven`, or see - [general installation guide](https://www.baeldung.com/install-maven-on-windows-linux-mac). - -### Project structure - -These are the main components of the project. - -- `semanticdb-javac/src/main/java`: the Java compiler plugin that creates - SemanticDB files. -- `tests/minimized`: minimized Java source files that reproduce interesting test - cases. -- `tests/unit`: fast running unit tests that are helpful for local edit-and-test - workflows. -- `tests/snapshots`: slow running - ["snapshot tests"](https://jestjs.io/docs/en/snapshot-testing) that index a - corpus of published Java libraries. -- `build.sbt`: the sbt build definition. -- `project/plugins.sbt`: plugins for the sbt build. - -### Helpful commands - -| Command | Where | Description | -| ------------------------------------------------------------------- | -------- | ----------------------------------------------------------------------------------- | -| `./sbt` | terminal | Start interactive sbt shell with Java 11. Takes a while to load on the first run. | -| `unit/test` | sbt | Run fast unit tests. | -| `~unit/test` | sbt | Start watch mode to run tests on file save, good for local edit-and-test workflows. | -| `buildTools/test` | sbt | Run slow build tool tests (Gradle, Maven). | -| `snapshots/testOnly tests.MinimizedSnapshotSuite` | sbt | Runs fast snapshot tests. Indexes a small set of files under `tests/minimized`. | -| `snapshots/testOnly tests.MinimizedSnapshotSuite -- *InnerClasses*` | sbt | Runs only individual tests cases matching the name "InnerClasses". | -| `snapshots/testOnly tests.LibrarySnapshotSuite` | sbt | Runs slow snapshot tests. Indexes a corpus of external Java libraries. | -| `snapshots/test` | sbt | Runs all snapshot tests. | -| `snapshots/run` | sbt | Update snapshot tests. Use this command after you have fixed a bug. | -| `cli/run --cwd DIRECTORY` | sbt | Run `lsif-java` command-line tool against a given Gradle/Maven build. | -| `cd website && yarn install && yarn start` | terminal | Start live-reload preview of the website at http://localhost:3000/lsif-java. | -| `docs/mdoc --watch` | sbt | Re-generate markdown files in the `docs/` directory. | -| `fixAll` | sbt | Run Scalafmt, Scalafix and Javafmt on all sources. Run this before opening a PR. | - -### Import the project into IntelliJ - -It's recommended to use IntelliJ when editing code in this codebase. - -First, install the -[IntelliJ Community Edition](https://www.jetbrains.com/idea/download/). The -community edition is -[open source](https://github.com/JetBrains/intellij-community) and free to use. - -Next, install the IntelliJ Scala plugin. - -Finally, run "File > Project From Existing Sources" to import the sbt build into -IntelliJ. Select the "sbt" option if it asks you to choose between -sbt/BSP/Bloop. - -It's best to run tests from the sbt shell, not from the IntelliJ UI. - -### Don't use VS Code/Vim/Sublime Text/Emacs - -If you want to use completions and precise code navigation, it's not recommended -to use other editors than IntelliJ. IntelliJ is the only IDE that properly -supports hybrid Java/Scala codebases at the moment, although that may change -soon thanks to lsif-java :) - -### Tests are written in Scala - -This codebases uses the Scala library [MUnit](https://scalameta.org/munit/) to -write tests because: - -- MUnit has built-in assertions that print readable multiline diffs in color. -- MUnit makes it easy to implement - [snapshot testing](https://jestjs.io/docs/en/snapshot-testing), which is a - testing technique that's heavily used in this codebase. -- Multiline literal strings in Scala make it easy to write unit tests for source - code (which is always multiline). Modern versions of Java support multiline - string literals, but they're not supported in Java 8, which is supported by - lsif-java. - -## Benchmarks - -See [docs/benchmarks.md] for benchmark results. +| Documentation | Link | +| -------------------- | ---------------------------------------------------------------------- | +| Landing page | https://sourcegraph.github.io/lsif-java | +| Getting started | https://sourcegraph.github.io/lsif-java/docs/getting-started.html | +| Manual configuration | https://sourcegraph.github.io/lsif-java/docs/manual-configuration.html | +| Contributing | https://sourcegraph.github.io/lsif-java/docs/contributing.html | +| Design | https://sourcegraph.github.io/lsif-java/docs/design.html | diff --git a/build.sbt b/build.sbt index a44f4414..f65b4f36 100644 --- a/build.sbt +++ b/build.sbt @@ -1,3 +1,5 @@ +import scala.xml.{Node => XmlNode, NodeSeq => XmlNodeSeq, _} +import scala.xml.transform.{RewriteRule, RuleTransformer} import java.io.File import java.util.Properties import scala.collection.mutable.ListBuffer @@ -97,6 +99,16 @@ lazy val plugin = project old.withEnabled(false) }, fatjarPackageSettings, + assemblyShadeRules.in(assembly) := + Seq( + ShadeRule + .rename( + "com.google.**" -> "com.sourcegraph.shaded.com.google.@1", + "google.**" -> "com.sourcegraph.shaded.google.@1", + "org.relaxng.**" -> "com.sourcegraph.shaded.relaxng.@1" + ) + .inAll + ), crossPaths := false, PB.targets.in(Compile) := Seq(PB.gens.java -> (Compile / sourceManaged).value) @@ -280,7 +292,7 @@ lazy val fatjarPackageSettings = List[Def.Setting[_]]( case PathList("sun", _ @_*) => MergeStrategy.discard case PathList("META-INF", "versions", "9", "module-info.class") => - MergeStrategy.first + MergeStrategy.discard case x => val oldStrategy = (assemblyMergeStrategy in assembly).value oldStrategy(x) @@ -291,6 +303,33 @@ lazy val fatjarPackageSettings = List[Def.Setting[_]]( val _ = assembly.value IO.copyFile(fatJar, slimJar, CopyOptions().withOverwrite(true)) slimJar + }, + packagedArtifact.in(Compile).in(packageBin) := { + val (art, slimJar) = packagedArtifact.in(Compile).in(packageBin).value + val fatJar = + new File(crossTarget.value + "/" + assemblyJarName.in(assembly).value) + val _ = assembly.value + IO.copy(List(fatJar -> slimJar), CopyOptions().withOverwrite(true)) + (art, slimJar) + }, + pomPostProcess := { node => + new RuleTransformer( + new RewriteRule { + private def isAbsorbedDependency(node: XmlNode): Boolean = { + node.label == "dependency" && + node.child.exists(child => child.label == "artifactId") + } + override def transform(node: XmlNode): XmlNodeSeq = + node match { + case e: Elem if isAbsorbedDependency(node) => + Comment( + "the dependency that was here has been absorbed via sbt-assembly" + ) + case _ => + node + } + } + ).transform(node).head } ) diff --git a/cli/src/main/scala/com/sourcegraph/lsif_java/IndexCommand.scala b/cli/src/main/scala/com/sourcegraph/lsif_java/IndexCommand.scala index c41dbb16..4e8e4cab 100644 --- a/cli/src/main/scala/com/sourcegraph/lsif_java/IndexCommand.scala +++ b/cli/src/main/scala/com/sourcegraph/lsif_java/IndexCommand.scala @@ -86,6 +86,7 @@ case class IndexCommand( def workingDirectory: Path = AbsolutePath.of(app.env.workingDirectory) def finalTargetroot(default: Path): Path = AbsolutePath.of(targetroot.getOrElse(default), workingDirectory) + def finalOutput: Path = AbsolutePath.of(output, workingDirectory) def finalBuildCommand(default: List[String]): List[String] = if (buildCommand.isEmpty) default @@ -149,8 +150,14 @@ case class IndexCommand( } else { val generateLsifResult = process( "lsif-semanticdb", + s"--out=${finalOutput}", s"--semanticdbDir=${tool.targetroot}" ) + if ( + generateLsifResult.exitCode == 0 && Files.isRegularFile(finalOutput) + ) { + app.info(finalOutput.toAbsolutePath().toString()) + } generateSemanticdbResult.exitCode + generateLsifResult.exitCode } case many => diff --git a/docs/architecture.md b/docs/architecture.md new file mode 100644 index 00000000..be340201 --- /dev/null +++ b/docs/architecture.md @@ -0,0 +1,54 @@ +--- +id: design +title: Design +--- + +This project is implemented as a +[Java compiler plugin](https://docs.oracle.com/en/java/javase/11/docs/api/jdk.compiler/com/sun/source/util/Plugin.html) +that generates one +[SemanticDB](https://scalameta.org/docs/semanticdb/specification.html) file for +every `*.java` source file. After compilation completes, the SemanticDB files +are processed to produce LSIF. + +![A three stage pipeline that starts with a list of Java sources, creates a list of SemanticDB files that then become a single LSIF index.](docs/assets/semanticdb-javac-pipeline.svg) + +### Why Java compiler plugin? + +There are several benefits to implementing lsif-java as a compiler plugin: + +- **Simple installation**: compiler plugins are enabled with the `-Xplugin` + compiler option. All Java build tools support a way to customize compiler + options, simplifying installation. +- **Language fidelity**: by using the Java compiler to produce semantic + information, we ensure that the produced LSIF data is accurate even as new + Java language versions with new language features are released. +- **Environment fidelity**: by hooking into the compilation process of the build + tool, we minimize the risk of diverging from the CI build environment such as + installed system dependencies, custom compiler options and custom annotation + processors. + +### Why SemanticDB? + +SemanticDB is Protobuf schema for information about symbols and types in Java +programs, Scala programs and other languages. There are several benefits to +using SemanticDB as an intermediary representation for LSIF: + +- **Simplicity**: It's easy to translate a single Java source file into a single + SemanticDB file inside a compiler plugin. It's more complicated to produce + LSIF because compiler plugins does not have access to a project-wide context, + which is necessary to produce accurate definitions and hovers in multi-module + projects with external library dependencies. +- **Performance**: SemanticDB is fast to write and read. Each compilation unit + can be processed independently to keep memory usage low. The final conversion + from SemanticDB to LSIF can be safely parallelized. +- **Cross-language**: SemanticDB has a + [spec](https://scalameta.org/docs/semanticdb/specification.html) for Java and + Scala enabling cross-language navigation in hybrid Java/Scala codebases. +- **Cross-repository**: Compiler plugins have access to both source code and the + classpath (compiled bytecode of upstream dependencies). SemanticDB has been + designed so that it's also possible to generate spec-compliant symbols from + the classpath alone (no source code) and from the syntax tree of an individual + source file (no classpath). This flexibility allows the + [Metals](https://scalameta.org/metals/) language server to index codebases + from a variety of different inputs, and will be helpful for lsif-java in the + future to unblock cross-repository navigation. diff --git a/docs/benchmarks.md b/docs/benchmarks.md index 87640660..6911614d 100644 --- a/docs/benchmarks.md +++ b/docs/benchmarks.md @@ -1,7 +1,15 @@ -# Benchmarks results +--- +id: benchmarks +title: Benchmarks +--- + +The repository contains benchmarks to measure the overhead of the SemanticDB +compiler plugin. ``` -sbt:root> bench/jmh:run -i 3 -wi 3 -f1 -t1 +$ sbt +... +sbt:root> bench/jmh:run -i 10 -wi 10 -f1 -t1 ... [info] Benchmark (lib) Mode Cnt Score Error Units [info] CompileBench.compile guava ss 10 2291.036 ± 243.428 ms/op 1x diff --git a/docs/contributing.md b/docs/contributing.md new file mode 100644 index 00000000..e7789c0a --- /dev/null +++ b/docs/contributing.md @@ -0,0 +1,93 @@ +--- +id: contributing +sidebar_label: Guide +title: Contributing guide +--- + +This page documents tips and tricks for contributing to the +[sourcegraph/lsif-java](https://github.com/sourcegraph/lsif-java) codebase. + +## System dependencies + +- `java`: any version should work +- `git`: any version should work +- `lsif-semanticdb`: + `go get github.com/sourcegraph/lsif-semanticdb/cmd/lsif-semanticdb` +- `gradle`: `brew install gradle`, or see + [general installation guide](https://gradle.org/install/). +- `mvn`: `brew install maven`, or see + [general installation guide](https://www.baeldung.com/install-maven-on-windows-linux-mac). + +## Project structure + +These are the main components of the project. + +- `semanticdb-javac/src/main/java`: the Java compiler plugin that creates + SemanticDB files. +- `tests/minimized`: minimized Java source files that reproduce interesting test + cases. +- `tests/unit`: fast running unit tests that are helpful for local edit-and-test + workflows. +- `tests/snapshots`: slow running + ["snapshot tests"](https://jestjs.io/docs/en/snapshot-testing) that index a + corpus of published Java libraries. +- `cli/src/main/scala`: implementation of the `lsif-java` command-line + interface. +- `build.sbt`: the sbt build definition. +- `project/plugins.sbt`: plugins for the sbt build. + +## Helpful commands + +| Command | Where | Description | +| ------------------------------------------------------------------- | -------- | ----------------------------------------------------------------------------------- | +| `./sbt` | terminal | Start interactive sbt shell with Java 11. Takes a while to load on the first run. | +| `unit/test` | sbt | Run fast unit tests. | +| `~unit/test` | sbt | Start watch mode to run tests on file save, good for local edit-and-test workflows. | +| `buildTools/test` | sbt | Run slow build tool tests (Gradle, Maven). | +| `snapshots/testOnly tests.MinimizedSnapshotSuite` | sbt | Runs fast snapshot tests. Indexes a small set of files under `tests/minimized`. | +| `snapshots/testOnly tests.MinimizedSnapshotSuite -- *InnerClasses*` | sbt | Runs only individual tests cases matching the name "InnerClasses". | +| `snapshots/testOnly tests.LibrarySnapshotSuite` | sbt | Runs slow snapshot tests. Indexes a corpus of external Java libraries. | +| `snapshots/test` | sbt | Runs all snapshot tests. | +| `snapshots/run` | sbt | Update snapshot tests. Use this command after you have fixed a bug. | +| `cli/run --cwd DIRECTORY` | sbt | Run `lsif-java` command-line tool against a given Gradle/Maven build. | +| `cd website && yarn install && yarn start` | terminal | Start live-reload preview of the website at http://localhost:3000/lsif-java. | +| `docs/mdoc --watch` | sbt | Re-generate markdown files in the `docs/` directory. | +| `fixAll` | sbt | Run Scalafmt, Scalafix and Javafmt on all sources. Run this before opening a PR. | + +## Import the project into IntelliJ + +It's recommended to use IntelliJ when editing code in this codebase. + +First, install the +[IntelliJ Community Edition](https://www.jetbrains.com/idea/download/). The +community edition is +[open source](https://github.com/JetBrains/intellij-community) and free to use. + +Next, install the IntelliJ Scala plugin. + +Finally, run "File > Project From Existing Sources" to import the sbt build into +IntelliJ. Select the "sbt" option if it asks you to choose between +sbt/BSP/Bloop. + +It's best to run tests from the sbt shell, not from the IntelliJ UI. + +## Don't use VS Code/Vim/Sublime Text/Emacs + +If you want to use completions and precise code navigation, it's not recommended +to use other editors than IntelliJ. IntelliJ is the only IDE that properly +supports hybrid Java/Scala codebases at the moment, although that may change +soon thanks to lsif-java :) + +## Tests are written in Scala + +This codebases uses the Scala library [MUnit](https://scalameta.org/munit/) to +write tests because: + +- MUnit has built-in assertions that print readable multiline diffs in color. +- MUnit makes it easy to implement + [snapshot testing](https://jestjs.io/docs/en/snapshot-testing), which is a + testing technique that's heavily used in this codebase. +- Multiline literal strings in Scala make it easy to write unit tests for source + code (which is always multiline). Modern versions of Java support multiline + string literals, but they're not supported in Java 8, which is supported by + lsif-java. diff --git a/docs/getting-started.md b/docs/getting-started.md index ebdee3a1..852e8664 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -5,11 +5,17 @@ title: Getting started By following the instructions on this page, you should be able to generate an [LSIF](https://microsoft.github.io/language-server-protocol/specifications/lsif/0.5.0/specification/) -index of your Java codebase. +index of your Java codebase using Gradle or Maven. See +[Supported build tools](#supported-build-tools) for an overview of other build +tools that we're planning to support in the future. ## Install `lsif-java` -The easiest way to install `lsif-java` is to download the native binary. +Most users only install `lsif-java` on a CI machine to upload LSIF indexes to a +remote service like [Sourcegraph](https://sourcegraph.com/). The easiest way to +install `lsif-java` is to download the native binary. However, you can also +install `lsif-java` as a Java binary if that's easier to integrate with your +setup. ### Native binary @@ -32,7 +38,8 @@ chmod +x lsif-java ### Java launcher Use [Coursier](https://get-coursier.io/docs/cli-installation.html) to launch the -Java binary. The Java binary should work with any version of Java 8 or newer. +Java binary. The jar files of `lsif-java` are downloaded the first time you run +the `launch` command, and they're cached for subsequent runs. ```sh # Homebrew @@ -52,9 +59,9 @@ bitsadmin /transfer downloadCoursierBat https://git.io/coursier-bat "%cd%\coursi ### Java fat jar -Use the Coursier `bootstrap` command to generate a standalone Java binary, which -includes all dependencies and does not require further access to the internet -after installation. +Use the Coursier `bootstrap` command to generate an executable Java binary, +which includes all dependencies and does not require further access to the +internet after installation. ```sh # macOS/Linux/Windows @@ -95,7 +102,24 @@ libraryDependencies += "com.sourcegraph" %% "lsif-java" % "@STABLE_VERSION@" ## Run `lsif-java index` -Run `lsif-java index --help` to see the available command-line options. +Run the `lsif-java index` command to generate an LSIF index for your codebase. +This command should automatically infer the structure of your codebase and +configure your build tool to generate LSIF. + +```sh +$ lsif-java index +... +info: /path/to/dump.lsif +``` + +The `dump.lsif` file contains the LSIF index and is ready to be used. + +> Running `lsif-java index` may perform side-effects on your build like cleaning +> the compile cache before indexing. This is done to make sure that all source +> files in the codebase get indexed. + +Run `lsif-java index --help` to learn more about the available command-line +options. ```scala mdoc:passthrough com.sourcegraph.lsif_java.LsifJava.printHelp(Console.out) @@ -105,7 +129,8 @@ com.sourcegraph.lsif_java.LsifJava.printHelp(Console.out) The `lsif-java` indexer is implemented as a Java compiler plugin that runs as part of your regular compilation in the build tool. By using Java compiler APIs, -`lsif-java` is able to support a broad range of Java versions. +`lsif-java` is able to generate accurate indexing information for a broad range +of Java versions. | Language version | Support | | ---------------- | ------------------------------ | diff --git a/docs/manual-configuration.md b/docs/manual-configuration.md index fd756f35..a19ad74c 100644 --- a/docs/manual-configuration.md +++ b/docs/manual-configuration.md @@ -10,13 +10,16 @@ fails. ## Overview -Indexing a codebase consists of two independent steps: +Indexing a codebase consists of two independent phases: - Compile the codebase with the SemanticDB compiler plugin. - Generate LSIF index from SemanticDB files. ![A three stage pipeline that starts with a list of Java sources, creates a list of SemanticDB files that then become a single LSIF index.](assets/semanticdb-javac-pipeline.svg) +The first phase can be complicated to configure and it can take a while to run. +The second phase is quite simple to configure and it usually runs very fast. + ## Step 1: Add SemanticDB compiler plugin to the classpath The SemanticDB compiler plugin is published to Maven Central as a @@ -61,9 +64,9 @@ If you're using Gradle. ```groovy tasks.withType(JavaCompile) { - def sourceroot = rootProject.projectDir - def targetroot = new File(rootProject.buildDir, "semanticdb-targetroot") - options.compilerArgs << '-Xplugin:semanticdb -sourceroot:$sourceroot -targetroot:$targetroot' + def sourceroot = rootProject.projectDir + def targetroot = new File(rootProject.buildDir, "semanticdb-targetroot") + options.compilerArgs << "-Xplugin:semanticdb -sourceroot:$sourceroot -targetroot:$targetroot" } ``` @@ -95,10 +98,11 @@ If you're using Maven. If you're using sbt. ```scala +javaHome := Some(...) // Must be configured to fork the compiler. Compile / javacOptions += { val sourceroot = (ThisBuild / baseDirectory).value - val targetroot = (ThisBuild / target).value / "semanticdb-targetroot" - s"-Xplugin:semanticdb -sourceroot:$sourceroot -targeroot:$sourceroot" + val targetroot = sourceroot / "target" / "semanticdb-targetroot" + s"-Xplugin:semanticdb -sourceroot:$sourceroot -targetroot:$targetroot" } ``` diff --git a/website/sidebars.json b/website/sidebars.json index 079c08e5..ec30cd23 100644 --- a/website/sidebars.json +++ b/website/sidebars.json @@ -1,8 +1,13 @@ { "docs": { - "Overview": [ + "Using": [ "getting-started", "manual-configuration" + ], + "Contributing": [ + "contributing", + "design", + "benchmarks" ] } } \ No newline at end of file From fe6bfdb90b2be171a66f0d1aaed8ca46c9b79c08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93lafur=20P=C3=A1ll=20Geirsson?= Date: Fri, 5 Mar 2021 15:36:07 +0100 Subject: [PATCH 4/4] Fix missing image link in design doc --- docs/{architecture.md => design.md} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename docs/{architecture.md => design.md} (98%) diff --git a/docs/architecture.md b/docs/design.md similarity index 98% rename from docs/architecture.md rename to docs/design.md index be340201..d908e78d 100644 --- a/docs/architecture.md +++ b/docs/design.md @@ -10,7 +10,7 @@ that generates one every `*.java` source file. After compilation completes, the SemanticDB files are processed to produce LSIF. -![A three stage pipeline that starts with a list of Java sources, creates a list of SemanticDB files that then become a single LSIF index.](docs/assets/semanticdb-javac-pipeline.svg) +![A three stage pipeline that starts with a list of Java sources, creates a list of SemanticDB files that then become a single LSIF index.](assets/semanticdb-javac-pipeline.svg) ### Why Java compiler plugin?