Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bazel Support #27

Open
notpeter opened this issue Dec 17, 2024 · 2 comments
Open

Bazel Support #27

notpeter opened this issue Dec 17, 2024 · 2 comments
Labels
enhancement New feature or request

Comments

@notpeter
Copy link

notpeter commented Dec 17, 2024

I think it would be possible to support bazel with jdtls, just as salesforce/bazel-vscode-java provides jars via contributes.javaExtensions to redhat-developer/vscode-java which get injected into the jdtls initializationOptions.bundles

The salesforce/bazel-vscode-java extension downloads p2-repository.zip which it then extracts, does some renaming and puts them under ~/.vscode/extensions/sfdc.bazel-vscode-java-1.4.0/server. And since salesforce/bazel-vscode-java exports a list of those jars via contributes.javaExtensions in it's package.json those settings are available to other extensions.
Source: salesforce/bazel-vscode-java:gulpfile.js and salesforce/bazel-vscode-java:package.json

When redhat-developer/vscode-java starts the language server it pulls from contributes.javaExtensions and provides those as a bundles array under the initializationOptions when starting jdtls:
Source: redhat-developer/vscode-java:src/extension.ts

I think the Zed Java Extension could potentially add support for Bazel with the following settings:

{
  "lsp": {
    "jdtls": {
      "initialization_options": {
        "bundles": [
          "somepath/org.eclipse.equinox.event.jar",
          "somepath/com.github.ben-manes.caffeine.jar",
          "somepath/org.jsr-305.jar",
          "somepath/org.fusesource.jansi.jar",
          "somepath/com.google.protobuf.jar",
          "somepath/com.salesforce.bazel.importedsource.jar",
          "somepath/com.salesforce.bazel.sdk.jar",
          "somepath/com.salesforce.bazel.eclipse.core.jar",
          "somepath/com.salesforce.bazel.eclipse.jdtls.jar"
        ]
      }
    }
  }
}

Totally untested but I wanted to document my research somewhere.

Not sure whether the current Extension APIs are sufficient to support downloading arbitrary zip files, extracting a subset of them and then injecting the correct pathing for where those files are. But assuming this works, we could certainly provide instructions doing this manually.

I'm not a Java programmer.
I have no experience with Bazel.
Would love if someone can see if they can get this working.

See also:

@valentinegb
Copy link
Collaborator

valentinegb commented Dec 18, 2024

This would seem perfectly implementable to me, but unfortunately, as far as I'm aware1, there isn't a way to have an extension modify the initialization options before they're passed to the language server :(

Footnotes

  1. emphasized because I don't know everything and I'd love to be proven wrong!

@notpeter
Copy link
Author

We definitely fiddle that for the non-extension languages (json, yaml, etc) but I think you're right. :(

I think that's worth consider adding an API for.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants