dense-analysis / dense-analysis/ale
ZLS language server isn't started unless a project root is found
- Dominant language
- Vim Script
- Stars
- 14k
- Forks
- 1.5k
- Avg merge
- 17h 49m
- Merged PRs (30d)
- 1
Description
## Information
**VIM version**
NVIM v0.11.5
Build type: Release
Operating System: Linux 6.12.62, NixOS 25.11, x86_64
## What went wrong
ALE does not start the [ZLS language server](https://github.com/zigtools/zls) in files that have no `build.zig` file in any parent directory. The `:ALEInfo` output will contain the following to indicate that it did not start ZLS:
```
LSP Error Messages:
(Errors for zls)
Failed to find project root, language server won't start.
```
This has been initially [reported to ZLS](https://github.com/zigtools/zls/issues/2536) because it prevents LSP features from working inside the Zig standard library since it doesn't have a `build.zig`.
There are some other issues I found that mentioned the "Failed to find project root, language server won't start." error but none of the seemed to asked whether it was necessary to find a project root to start the language server. I guess this is specific to each language server but ZLS does support to be run without a project root or workspace folder. So perhaps start ZLS anyway if possible?
## Reproducing the bug
1. Install [Zig](https://ziglang.org/) and [ZLS](https://github.com/zigtools/zls)
2. Open a Zig file that doesn't have a `build.zig` in any parent directory. Like the Zig standard library.
3. Try to use commands like `:ALEGoToDefinition` which do not work.
### :ALEInfo
Expand
```
Current Filetype: zig
Available Linters: ['zlint', 'zls']
Enabled Linters: ['zls']
Ignored Linters: []
Suggested Fixers:
'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.
'zigfmt' - Official formatter for Zig
Linter Variables:
let g:ale_zig_zls_config = {}
let g:ale_zig_zls_executable = '/home/techatrix/repos/zls/my/zls.sh'
Global Variables:
let g:ale_cache_executable_check_failures = v:null
let g:ale_change_sign_column_color = v:null
let g:ale_command_wrapper = v:null
let g:ale_completion_delay = v:null
let g:ale_completion_enabled = v:false
let g:ale_completion_max_suggestions = v:null
let g:ale_disable_lsp = 'auto'
let g:ale_echo_cursor = v:true
let g:ale_echo_msg_error_str = 'Error'
let g:ale_echo_msg_format = '%code: %%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 = v:false
let g:ale_fixers = {}
let g:ale_history_enabled = v:true
let g:ale_info_default_mode = 'preview'
let g:ale_history_log_output = v:true
let g:ale_keep_list_window_open = 0
let g:ale_lint_delay = 200
let g:ale_lint_on_enter = v:true
let g:ale_lint_on_filetype_changed = v:true
let g:ale_lint_on_insert_leave = v:true
let g:ale_lint_on_save = v:true
let g:ale_lint_on_text_changed = 'normal'
let g:ale_linter_aliases = {}
let g:ale_linters = {'zig': ['zls']}
let g:ale_linters_explicit = v:false
let g:ale_linters_ignore = {}
let g:ale_list_vertical = v:false
let g:ale_list_window_size = 10
let g:ale_loclist_msg_format = '%code: %%s'
let g:ale_max_buffer_history_size = v:null
let g:ale_max_signs = v:null
let g:ale_maximum_file_size = v:null
let g:ale_open_list = v:false
let g:ale_pattern_options = v:null
let g:ale_pattern_options_enabled = v:null
let g:ale_root = {}
let g:ale_set_balloons = v:false
let g:ale_set_highlights = v:true
let g:ale_set_loclist = v:true
let g:ale_set_quickfix = v:false
let g:ale_set_signs = v:true
let g:ale_sign_column_always = v:null
let g:ale_sign_error = v:null
let g:ale_sign_info = v:null
let g:ale_sign_offset = v:null
let g:ale_sign_style_error = v:null
let g:ale_sign_style_warning = v:null
let g:ale_sign_warning = v:null
let g:ale_sign_highlight_linenrs = v:null
let g:ale_type_map = {}
let g:ale_use_neovim_diagnostics_api = v:true
let g:ale_use_global_executables = v:null
let g:ale_virtualtext_cursor = 'all'
let g:ale_warn_about_trailing_blank_lines = v:true
let g:ale_warn_about_trailing_whitespace = v:true
LSP Error Messages:
(Errors for zls)
Failed to find project root, language server won't start.
Failed to find project root, language server won't start.
Command History:
```
Contributor guide
Assessment
This issue has not been assessed yet.