๐ Unable to get Biome running in a subfolder of a single-folder workspace
Closed this issue ยท 13 comments
VS Code version
1.93.1
Extension version
v2024.10.131712
Biome version
1.9.4
Operating system
- Windows
- macOS
- Linux
Description
I'm trying to get the Biome VSCode extension running to lint+format JS code that lives in a subfolder of my workspace.
My setup is fairly simply:
- .vscode
- settings.json
- js
- src
- index.js (etc.)
- biome.json
- pypackage
My .vscode/settings.json
is
{
"biome.enabled": true,
"biome.lsp.trace.server": "verbose",
"biome.projects": [
{
"path": "js"
}
]
}
I see that the extension is loaded when looking at the Output
panel:
2024-10-17 16:33:02.458 [info] Biome extension 2024.10.131712 activated
2024-10-17 16:33:02.558 [error] Could not find the Biome binary
2024-10-17 16:33:02.575 [info] Using previously downloaded version 1.9.3: /Users/Me/Library/Application Support/Cursor/User/globalStorage/biomejs.biome/global-bin/biome
2024-10-17 16:33:02.576 [debug] Found downloaded Biome binary
path=/Users/Me/Library/Application Support/Cursor/User/globalStorage/biomejs.biome/global-bin/biome
strategy=Download Biome
2024-10-17 16:33:02.586 [debug] A Biome binary for the same version 1.9.3 already exists in the temporary location.
original=/Users/Me/Library/Application Support/Cursor/User/globalStorage/biomejs.biome/global-bin/biome
temporary=/Users/Me/Library/Application Support/Cursor/User/globalStorage/biomejs.biome/tmp-bin/biome-1.9.3
2024-10-17 16:33:02.586 [debug] Ensure binary is executable
binary=/Users/Me/Library/Application Support/Cursor/User/globalStorage/biomejs.biome/global-bin/biome
before=is executable: true
after=is executable: true
2024-10-17 16:33:02.801 [error] Failed to start Biome extension
2024-10-17 16:33:02.801 [info] Biome extension started
2024-10-17 16:33:02.802 [info] User-facing commands registered
2024-10-17 16:33:02.802 [info] Started listening for lockfile changes
2024-10-17 16:33:02.802 [info] Started listening for configuration changes
2024-10-17 16:33:02.802 [info] Started listening for active text editor changes
Apart from that, nothing else is logged, even after I change some files to JS files under js/src
.
Am I missing anything? Should I be concerned about the initial fail to start biome and then the info output saying the extension started?
Steps to reproduce
Create an environment as outlined in Description
, install VSCode, install the extension, open a JS file under js/src
and add an unused variable, and finally notice how no hints are shown in the code panel.
Expected behavior
See Biome hints in the code editor
Does this issue occur when using the CLI directly?
No
Link to a minimal reproduction
https://github.com/flekschas/biome-issue
Logs
No response
Hey, thanks for reporting. Would you mind creating a minimal reproduction repo using npm create @biomejs/biome-reproduction
Thanks for getting back quickly and apologies for my late response. I've create a minimal reproducing repo at https://github.com/flekschas/biome-issue.
Screen.Recording.2024-10-20.at.11.33.23.AM.mp4
I wonder if my configuration is incorrect or if this kind of setup is just not supported by Biome. I hope it's the former because you guys did an absolutely fantastic job with Biome ๐ and I would not want to go back to ESLint + Prettier.
Sorry for the time it took to follow up here.
I'm assuming you're expecting Biome to warn about noUnusedVariable
, but this won't be reported here because you're using a constant (const
).
I've opened your repo, and Biome started correctly for your project, as seen in the following screencast.
Screen.Recording.2024-11-30.at.16.13.47.mov
Apologies, this was my mistake. Even if I change const
to let
, I don't get the Biome extension working in VSCode. It runs fine in Sublime Text but there's no pop up in VSCode.
biome.mp4
Any ideas what the issue might be? I wonder if there's an issue with the biome binary. For a few seconds I saw the following popup but it went away on it's own:
When I set "biome.lsp.bin": null
then Biome throws [error] Could not find the Biome binary
even though I have the binary located at js/node_modules/.bin/biome
When I set "biome.lsp.bin": null
You shouldn't. You should remove that option. When you set it, the extension tries to use the value that you set. Setting null
is incorrect. You need to remove it.
Sure, I only tested this as the popup open. In the recorded video I'm not using the setting. So somehow, VSCode isn't able to resolve the local biome binary and is looking for a global one. Is that expected? I was under the impression that adding biome as a dependency ensures that the extension is using the local biome binary (https://biomejs.dev/reference/vscode/#biome-resolution). But somehow it seems like it's not.
Sure, I only tested this as the popup open. In the recorded video I'm not using the setting. So somehow, VSCode isn't able to resolve the local biome binary and is looking for a global one. Is that expected? I was under the impression that adding biome as a dependency ensures that the extension is using the local biome binary (https://biomejs.dev/reference/vscode/#biome-resolution). But somehow it seems like it's not.
This is indeed the expected behavior.
Could you set your logging level to Debug using the Developer: Set log level...
command and reload the window? This should print debug logs that will tell us a bit more about how the resolution goes.
The debug logs are:
2024-11-30 20:06:59.465 [info] Biome extension 2024.11.301111 activated
2024-11-30 20:06:59.465 [debug] Trying to find Biome binary in VS Code settings
bin=
2024-11-30 20:06:59.465 [debug] Trying to find Biome binary in Node Modules
path=file:///Users/Fritz/Code/biome-issue/js
2024-11-30 20:06:59.465 [debug] Trying to find Biome binary in Yarn Plug'n'Play
path=file:///Users/Fritz/Code/biome-issue/js
2024-11-30 20:06:59.487 [debug] Trying to find Biome binary in PATH environment variable
2024-11-30 20:06:59.567 [debug] Could not find Biome locally using any of the strategies.
2024-11-30 20:06:59.567 [error] Could not find the Biome binary
2024-11-30 20:06:59.567 [error] Failed to create session for project.
project=/Users/Fritz/Code/biome-issue/js
2024-11-30 20:06:59.568 [debug] Trying to find Biome binary in VS Code settings
bin=
2024-11-30 20:06:59.568 [debug] Trying to find Biome binary in PATH environment variable
2024-11-30 20:06:59.586 [debug] Trying to find downloaded Biome binary
2024-11-30 20:06:59.586 [debug] Getting downloaded version
I've played around with the biome.lsp.bin
setting of .vscode/setting.json
but no matter what I set there I always end up with
2024-11-30 20:14:02.661 [info] Biome extension 2024.11.301111 activated
2024-11-30 20:14:02.661 [debug] Trying to find Biome binary in VS Code settings
bin=js/node_modules/@biomejs/biome/bin/biome
2024-11-30 20:14:02.687 [debug] Trying to find Biome binary in Node Modules
path=file:///Users/Fritz/Code/biome-issue/js
2024-11-30 20:14:02.687 [debug] Trying to find Biome binary in Yarn Plug'n'Play
path=file:///Users/Fritz/Code/biome-issue/js
2024-11-30 20:14:02.705 [debug] Trying to find Biome binary in PATH environment variable
2024-11-30 20:14:02.777 [debug] Could not find Biome locally using any of the strategies.
2024-11-30 20:14:02.777 [error] Could not find the Biome binary
I've tried the following settings:
js/node_modules/.bin
js/node_modules/.bin/
js/node_modules/.bin/biome
js/node_modules/@biomejs/biome
js/node_modules/@biomejs/biome/bin
js/node_modules/@biomejs/biome/bin/
js/node_modules/@biomejs/biome/bin/biome
biome.lsp.bin
is meant to contain the path (relative or absolute) to the actual biome binary, not the wrapper shell script that you're referencing here.
Depending on your system, this would be something like js/node_modules/@biomejs/cli-darwin-x64/biome
.
However, in this case, you're actually better off letting the extension figure out automatically this path.
Sure but the extension doesn't seem to find the binary in the js
or am I misreading the logs?
In my case, there was no issue starting the LSP session.
Did you reload the window after having installed your node modules ?
Yes I did.
So I figured out what the issue is: I never properly migrated my machine setup to arm64 after I got an Apple silicon macbook. This caused the x64
version to be installed because the node version was x64
. I suspect that because VSCode was on arm64
it didn't recognize the locally installed x64
binary.
After migrating by bash version + brew + nvm, the VSCode extension successfully finds the binary.
For anyone else who might run into this issue, here's the chain of things I did to fix the problem:
- Change your shell in case that's still on
i386
. See https://apple.stackexchange.com/a/458142 - [Optional] Upgrade/reinstall homebrew. See https://apple.stackexchange.com/questions/410825/apple-silicon-port-all-homebrew-packages-under-usr-local-opt-to-opt-homebrew
- Potentially remove the current node binary using
nvm uninstall
and reinstall it. - Check that node is truly running on
arm64
vianode -p 'process.arch'
- Remove
node_modules
and reinstall all packages vianpm install
- Reload VSCode's window
I know this is a very esoteric error but it would be nice if the Biome extension was somehow notifying the user about the issue similar to how npm notifies the user when they try to install a binary that doesn't match their shell. But I also know that this is probably very low of a priority :)
Thanks for your help guys and keep up the good work with Biome!
Thanks for the deets, @flekschas!