Implements a comprehensive language server management system inspired by
Neovim's Mason, providing users an easy way to discover and install LSP
servers directly from the editor.
Features:
- First-run experience: LSP Server Manager automatically appears on first launch
- Alt+M keybinding: Toggle the manager panel anytime
- 20 language servers supported including Python, C/C++, Rust, Go, JavaScript/TypeScript, Lua, Ruby, Java, and more
- Installation with confirmation: Select a server, press Enter to see install command, Y to confirm
- Server status detection: Uses 'which' to detect installed servers
- Navigation: j/k or arrows to navigate, r to refresh, Esc/q to close
- State persistence: First-run state stored in ~/.config/fac/state.json
New modules:
- src/workspace/app_state_module.f90: First-run detection and state persistence
- src/lsp/server_detection_module.f90: Detect installed language servers
- src/lsp/server_installer_module.f90: Execute installation commands
- src/ui/lsp_server_installer_panel_module.f90: Modal UI panel
Additional fixes:
- Fixed modal panel border alignment (Command Palette & LSP Server Manager)
- Removed circular dependency in unified_search_module
- Updated Makefile with new modules in correct dependency order
- Fix Alt+. code actions for all tabs by sending LSP didOpen notification
when tabs are created via file tree, jump-to-definition, or workspace restore
- Fix Enter key double-processing on offcanvas panels (code actions, references,
symbols) - Enter was both executing action AND inserting newline in editor
- Fix Fortran syntax highlighting when switching between file types by auto-
updating the syntax highlighter when editor filename changes
- Enable CAP_CODE_ACTIONS for Fortran (fortls)
- Remove extensive debug logging from command_handler_module.f90 (550+ lines)
- Multiple LSP servers per file type (Pyright + Ruff for Python)
- Capability-based request routing (rename→Pyright, code actions→Ruff)
- Diagnostics track source server; code actions only see own diagnostics