Can't ALEGoToDefinition with Yarn PNP
Information
VIM version
NVIM v0.9.0 Build type: Release LuaJIT 2.1.0-beta3
Operating System: macOS 13.2.1
What went wrong
:ALEGoToDefinition doesn't open file with definition when in project using Yarn PNP.
Reproducing the bug
- Install nvim-lspconfig
- Install vim-rzip
- While cursor is on an import from some Yarn PNP packge, do
:ALEGoToDefinition - ALE will try to open
.yarn/__virtual__/.../package.zip/node_modules/package...instead of.yarn/__virtual__/...package.zip::node_modules/package...
:ALEInfo
Expand
Current Filetype: typescript
Available Linters: ['cspell', 'deno', 'eslint', 'standard', 'tslint', 'tsserver', 'typecheck', 'xo']
Enabled Linters: ['eslint', 'tsserver']
Ignored Linters: []
Suggested Fixers:
'deno' - Fix TypeScript using deno fmt.
'dprint' - Pluggable and configurable code formatting platform
'eslint' - Apply eslint --fix to a file.
'prettier' - Apply prettier to a file.
'remove_trailing_lines' - Remove all blank lines at the end of a file.
'trim_whitespace' - Remove all trailing whitespace characters at the end of every line.
'tslint' - Fix typescript files with tslint --fix.
'xo' - Fix JavaScript/TypeScript files using xo --fix.
Linter Variables:
let g:ale_typescript_tsserver_config_path = ''
let g:ale_typescript_tsserver_executable = 'tsserver'
let g:ale_typescript_tsserver_use_global = 0
Global Variables:
let g:ale_cache_executable_check_failures = v:null
let g:ale_change_sign_column_color = 0
let g:ale_command_wrapper = ''
let g:ale_completion_delay = v:null
let g:ale_completion_enabled = 0
let g:ale_completion_max_suggestions = v:null
let g:ale_disable_lsp = 0
let g:ale_echo_cursor = 1
let g:ale_echo_msg_error_str = 'Error'
let g:ale_echo_msg_format = '[%linter%/%severity%] %s'
let g:ale_echo_msg_info_str = 'Info'
let g:ale_echo_msg_warning_str = 'Warning'
let g:ale_enabled = 1
let g:ale_fix_on_save = 0
let g:ale_fixers = {'typescript': ['eslint'], 'typescriptreact': ['eslint'], 'json': ['prettier'], 'javascript': ['eslint'], 'css': ['stylelint'], 'javascriptreact': ['eslint']}
let g:ale_history_enabled = 1
let g:ale_history_log_output = 1
let g:ale_keep_list_window_open = 0
let g:ale_lint_delay = 200
let g:ale_lint_on_enter = 1
let g:ale_lint_on_filetype_changed = 1
let g:ale_lint_on_insert_leave = 1
let g:ale_lint_on_save = 1
let g:ale_lint_on_text_changed = 'normal'
let g:ale_linter_aliases = {}
let g:ale_linters = {'mustache': ['ember-template-lint'], 'typescript': ['eslint', 'tsserver'], 'scss': ['stylelint'], 'typescriptreact': ['eslint', 'tsserver'], 'javascriptreact': ['eslint'], 'json': ['prettier', 'eslint'], 'html': ['pa11y'], 'handlebars': ['ember-template-lint'], 'javascript': ['eslint'], 'css': ['stylelint'], 'markdown': ['proselint']}
let g:ale_linters_explicit = 0
let g:ale_linters_ignore = {}
let g:ale_list_vertical = 0
let g:ale_list_window_size = 10
let g:ale_loclist_msg_format = '[%linter%/%severity%] %s'
let g:ale_max_buffer_history_size = 20
let g:ale_max_signs = -1
let g:ale_maximum_file_size = v:null
let g:ale_open_list = 0
let g:ale_pattern_options = {'ControlP': {'ale_enabled': 0}}
let g:ale_pattern_options_enabled = v:null
let g:ale_root = {}
let g:ale_set_balloons = 0
let g:ale_set_highlights = 1
let g:ale_set_loclist = 1
let g:ale_set_quickfix = 0
let g:ale_set_signs = 1
let g:ale_sign_column_always = 0
let g:ale_sign_error = '◆'
let g:ale_sign_info = '𝓲'
let g:ale_sign_offset = 1000000
let g:ale_sign_style_error = '⇝'
let g:ale_sign_style_warning = '⇢'
let g:ale_sign_warning = '◇'
let g:ale_sign_highlight_linenrs = 0
let g:ale_statusline_format = v:null
let g:ale_type_map = {}
let g:ale_use_neovim_diagnostics_api = 0
let g:ale_use_global_executables = v:null
let g:ale_virtualtext_cursor = 0
let g:ale_warn_about_trailing_blank_lines = 1
let g:ale_warn_about_trailing_whitespace = 1
Command History:
(executable check - success) /Users/me/Code/project/.yarn/sdks/eslint/bin/eslint.js
(finished - exit code 1) ['/bin/bash', '-c', 'cd ''/Users/me/Code/project'' && ''/Users/me/Code/project/.yarn/sdks/eslint/bin/eslint.js'' -f json --stdin --stdin-filename ''/Users/me/Code/project/Props.ts'' < ''/Users/me/tmp/nvim.me/sOv4rp/1/Props.ts''']
<<<NO OUTPUT RETURNED>>>
(executable check - success) /Users/me/Code/project/.yarn/sdks/typescript/bin/tsserver
(started) ['/bin/bash', '-c', '''/Users/me/Code/project/.yarn/sdks/typescript/bin/tsserver''']
I fix this setting this in my .yarnrc.yml
nodeLinker: node-modules
I know is not the best solution, but you could use it until there is a fix
Hi @felipesilvadv - thank you for the bug report.
I believe that the "go to defintion" logic itself is done by/in the LSP.
Do you know if other editors (e.g. helix, vscode) or LSP plugins (e.g. vim-lsp, lsp) resolve "go to definition" with yarn PNP correctly?
Hi @pbnj
I haven't tried with another LSP, I just changed the nodeLinker option in my .yarnrc and add node_modules to my .gitignore like always with yarn classic.