Skip to content

ZLS language server isn't started unless a project root is found #5082

@Techatrix

Description

@Techatrix

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 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 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 and 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:

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions