mason-org / mason-org/mason.nvim
vtsls / pyright is not referring to correct place
Nobody has claimed this yet.
- Dominant language
- Lua
- Stars
- 10.5k
- Forks
- 338
- PR merge metrics
- No merged PRs in 30d
Description
### I've searched open issues for similar requests
- [x] Yes
### I've manually reviewed logs to find potential errors
- [x] Yes
### I've recently downloaded the latest plugin version of mason.nvim
- [x] Yes
### Problem description
today, i try to install fresh LazyVim in my wsl arch linux, its working well, but when i try to install vtsls with mason (lazyextra, typescript), its give me error like this, this also give error when try to use **pyright**
- vtsls
```shell
[ERROR][2025-07-01 12:04:05] ...p/_transport.lua:36 "rpc" "vtsls" "stderr" "node:internal/modules/cjs/loader:1408\n throw err;\n ^\n\nError: Cannot find module
'/home/ah/.local/share/nvim/mason/@vtsls/language-server/bin/vtsls.js'\n
at Module._resolveFilename (node:internal/modules/cjs/loader:1405:15 undefined)\n
at defaultResolveImpl .defaultResolveImpl (node:internal/modules/cjs/loader:1061:19 undefined)\n
at resolveForCJSWithHooks .resolveForCJSWithHooks (node:internal/modules/cjs/loader:1066:22 undefined)\n
at Module._load (node:internal/modules/cjs/loader:1215:37 undefined)\n
at TracingChannel.traceSync (node:diagnostics_channel:322:14 undefined)\n
at wrapModuleLoad .wrapModuleLoad (node:internal/modules/cjs/loader:235:24 undefined)\n
at Module.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:152:5 undefined)\n at node:internal/main/run_main_module:33:47 {\n code: 'MODULE_NOT_FOUND',\n requireStack: []\n}\n\nNode.js v24.2.0\n"
```
- pyright
```shell
[ERROR][2025-07-29 09:29:19] ...p/_transport.lua:36 "rpc" "pyright-langserver" "stderr"
"node:internal/modules/cjs/loader:1372\n throw err;\n ^\n\nError: Cannot find module
'/home/ah/.local/share/nvim/mason/pyright/langserver.index.js'\n
at Module._resolveFilename (node:internal/modules/cjs/loader:1369:15 undefined)\n
at defaultResolveImpl .defaultResolveImpl (node:internal/modules/cjs/loader:1025:19 undefined)\n
at resolveForCJSWithHooks .resolveForCJSWithHooks (node:internal/modules/cjs/loader:1030:22 undefined)\n
at Module._load (node:internal/modules/cjs/loader:1179:37 undefined)\n
at TracingChannel.traceSync (node:diagnostics_channel:322:14 undefined)\n
at wrapModuleLoad .wrapModuleLoad (node:internal/modules/cjs/loader:235:24 undefined)\n
at Module.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:152:5 undefined)\n at node:internal/main/run_main_module:33:47 {\n code: 'MODULE_NOT_FOUND',\n requireStack: []\n}\n\nNode.js v24.4.1\n"
```
i know script inside **bin** is linked to real binary for every package ( at least for this npm installed package).
> [!NOTE]
> I am not sure if it fixed in latest version, should i report to lazyvim instead? but i believe it from mason config
>
> mason.nvim ~
> - ⚠️ WARNING mason.nvim version v1.11.0
> - ADVICE:
> - The latest version of mason.nvim is: v2.0.1
## Solution I Found
to solve this **vtsls** / **pyright** cant find module
```shell
[ERROR][2025-07-29 09:29:19] ...p/_transport.lua:36 "rpc" "pyright-langserver" "stderr"
"node:internal/modules/cjs/loader:1372\n throw err;\n ^\n\nError: Cannot find module
'/home/ah/.local/share/nvim/mason/pyright/langserver.index.js'\n
at Module._resolveFilename (node:internal/modules/cjs/loader:1369:15 undefined)\n
at defaultResolveImpl .defaultResolveImpl (node:internal/modules/cjs/loader:1025:19 undefined)\n
at resolveForCJSWithHooks .resolveForCJSWithHooks (node:internal/modules/cjs/loader:1030:22 undefined)\n
at Module._load (node:internal/modules/cjs/loader:1179:37 undefined)\n
at TracingChannel.traceSync (node:diagnostics_channel:322:14 undefined)\n
at wrapModuleLoad .wrapModuleLoad (node:internal/modules/cjs/loader:235:24 undefined)\n
at Module.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:152:5 undefined)\n at node:internal/main/run_main_module:33:47 {\n code: 'MODULE_NOT_FOUND',\n requireStack: []\n}\n\nNode.js v24.4.1\n"
Formatted by https://st.elmah.io
```
you need change **basedir** variable to use `readlink -f` because its linked and using only `echo $0` will outputing _current folder_
```shell
//from
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
// to
basedir=$(dirname $(readlink -f $0) | sed -e 's,\\,/,g')
```
```shell
~/.local/share/nvim/mason/bin ⌚ 10:59:19
$ ls -lar
total 36
lrwxrwxrwx 1 ah ah 55 Jul 29 09:22 stylua -> /home/ah/.local/share/nvim/mason/packages/stylua/stylua
lrwxrwxrwx 1 ah ah 73 Jul 29 09:22 shfmt -> /home/ah/.local/share/nvim/mason/packages/shfmt/shfmt_v3.12.0_linux_amd64
lrwxrwxrwx 1 ah ah 60 Jul 29 09:25 ruff -> /home/ah/.local/share/nvim/mason/packages/ruff/venv/bin/ruff
lrwxrwxrwx 1 ah ah 86 Jul 29 09:27 pyright-langserver -> /home/ah/.local/share/nvim/mason/packages/pyright/node_modules/.bin/pyright-langserver
lrwxrwxrwx 1 ah ah 75 Jul 29 09:27 pyright -> /home/ah/.local/share/nvim/mason/packages/pyright/node_modules/.bin/pyright
lrwxrwxrwx 1 ah ah 105 Jul 29 09:25 prisma-language-server -> /home/ah/.local/share/nvim/mason/packages/prisma-language-server/node_modules/.bin/prisma-language-server
lrwxrwxrwx 1 ah ah 81 Jul 29 09:22 lua-language-server -> /home/ah/.local/share/nvim/mason/packages/lua-language-server/lua-language-server
```
after changing `echo $0` to `readlink -f $0` its work as expected. i am not sure with other env like `*CYGWIN* | *MINGW* | *MSYS*`, but at least it work for me.
### Expected behavior
vtslss / pyright should work on typescript / python file.
### Steps to reproduce
1. install fresh neovim with lazyvim, **on WSL** (archlinux)
2. install lazyextra for python / typescript lang
3. restart nvim, mason will download package
4. try to open typescript / python.
### Affected packages
npm installed package (i only try on vtsls and pyright)
### Neovim version (>= 0.10.0)
$ nvim --version
NVIM v0.11.3
Build type: RelWithDebInfo
LuaJIT 2.1.1753364724
Run "nvim -V1 -v" for more info
### Operating system/version
Linux DESKTOP-HD67VPS 6.6.87.2-microsoft-standard-WSL2 #1 SMP PREEMPT_DYNAMIC Thu Jun 5 18:30:46 UTC 2025 x86_64 GNU/Linux
### Healthcheck
```Text
==============================================================================
mason: 5 ⚠️
mason.nvim ~
- ⚠️ WARNING mason.nvim version v1.11.0
- ADVICE:
- The latest version of mason.nvim is: v2.0.1
- ✅ OK PATH: prepend
- ✅ OK Providers:
mason.providers.registry-api
mason.providers.client
- ✅ OK neovim version >= 0.7.0
mason.nvim [Registries] ~
- ✅ OK Registry `github.com/mason-org/mason-registry version: 2025-07-29-godly-yew` is installed.
mason.nvim [Core utils] ~
- ✅ OK unzip: `UnZip 6.00 of 20 April 2009, by Info-ZIP. Maintained by C. Spieler. Send`
- ✅ OK wget: `GNU Wget 1.25.0 built on linux-gnu.`
- ✅ OK curl: `curl 8.15.0 (x86_64-pc-linux-gnu) libcurl/8.15.0 OpenSSL/3.5.1 zlib/1.3.1 brotli/1.1.0 zstd/1.5.7 libidn2/2.3.7 libpsl/0.21.5 libssh2/1.11.1 nghttp2/1.66.0 nghttp3/1.10.1`
- ✅ OK gzip: `gzip 1.14-modified`
- ✅ OK tar: `tar (GNU tar) 1.35`
- ✅ OK bash: `GNU bash, version 5.3.3(1)-release (x86_64-pc-linux-gnu)`
- ✅ OK sh: `Ok`
mason.nvim [Languages] ~
- ⚠️ WARNING Ruby: not available
- ADVICE:
- spawn: ruby failed with exit code - and signal -. ruby is not executable
- ⚠️ WARNING Composer: not available
- ADVICE:
- spawn: composer failed with exit code - and signal -. composer is not executable
- ⚠️ WARNING PHP: not available
- ADVICE:
- spawn: php failed with exit code - and signal -. php is not executable
- ⚠️ WARNING RubyGem: not available
- ADVICE:
- spawn: gem failed with exit code - and signal -. gem is not executable
- ✅ OK luarocks: `/usr/sbin/luarocks 3.12.2`
- ✅ OK cargo: `cargo 1.87.0 (99624be96 2025-05-06)`
- ✅ OK Go: `go version go1.24.5 linux/amd64`
- ✅ OK node: `v24.4.1`
- ✅ OK python: `Python 3.13.5`
- ✅ OK JAVA_HOME: `openjdk version "21.0.7" 2025-04-15 LTS`
- ✅ OK java: `openjdk version "21.0.7" 2025-04-15 LTS`
- ✅ OK julia: `julia version 1.11.5`
- ✅ OK javac: `javac 21.0.7`
- ✅ OK pip: `pip 25.1.1 from /usr/lib/python3.13/site-packages/pip (python 3.13)`
- ✅ OK python venv: `Ok`
- ✅ OK npm: `10.9.2`
mason.nvim [GitHub] ~
- ✅ OK GitHub API rate limit. Used: 0. Remaining: 5000. Limit: 5000. Reset: Tue 29 Jul 2025 12:20:15 PM WIB.
```
### Screenshots or recordings
_No response_
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Inspect the generated launchers under ~/.local/share/nvim/mason/bin and their linked npm package .bin targets for vtsls and pyright. Reproduce the WSL installation steps, then compare how the launcher resolves its directory through the symlink. Done means both language servers start successfully and work on TypeScript and Python files without MODULE_NOT_FOUND errors.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- neovim, node.js, shell
- Domain
- devtools, tooling
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100