navigator.lua/README.md
2021-04-25 13:58:32 +10:00

4.7 KiB

Navigator

Easy code navigation through LSP and 🌲Treesitter symbols, diagnostic errors.

Features:

  • LSP easy setup. Support some of the most commonly used lsp client setup
  • Unorthodox UI with floating windows
  • fzy search with Lua-JIT
  • Better navigation for diagnostic errors, Navigate through files that contain errors/warnings
  • Group references/implementation/incomming/outgoing based on file names.
  • Nerdfont, emoji for LSP and Treesitter kind

Why a new plugin

After installed a handful of lsp plugins, I still got ~800 loc for lsp and treesitter and still increasing because I need to tune the lsp plugins to fit my requirements. Navigator.lua help user setup lspconfig with only a few lines of codes. This plugin provide a visual way to manage and navigate through symobls, errors etc. It also the first plugin, IMO, that allows you to search in all treesitter symbols in the workspace.

Similar projects / special mentions:

Install

You can remove your lspconfig setup and use this plugin. The plugin depends on guihua.lua, which provides GUI and fzy support.

Plug 'ray-x/guihua.lua', {'do': 'cd lua/fzy && make' }
Plug 'ray-x/navigator.lua'

Packer


use {'ray-x/navigator.lua', requires = {'ray-x/guihua.lua', run = 'cd lua/fzy && make'}}

Setup

lua require'navigator'.setup()

Sample vimrc

call plug#begin('~/.vim/plugged')

Plug 'neovim/nvim-lspconfig'
Plug 'ray-x/guihua.lua', {'do': 'cd lua/fzy && make' }
Plug 'ray-x/navigator.lua'

call plug#end()

lua <<EOF
local nvim_lsp = require('lspconfig')
require'navigator'.setup()
EOF

Generally speaking, you could remove most part of your lspconfig.lua and use the hooks in navigator.lua

Depency

  • lspconfig
  • guihua (provides floating window, FZY)
  • Optional:
    • lsp-status
    • lsp-signature
    • vim-illuminate

The plugin can be loaded lazily (packer opt = true ), And it will check if optional plugins existance and load those plugins only if they existed.

Usage

Please refer to lua/navigator/lspclient/mapping.lua on key mappings. Should be able to work out-of-box.

  • Use <c-e> or :q! to kill the floating window
  • <up/down> (or <c-n>, <c-p>) to move
  • <c-o> to open location or apply code actions

Screenshots

colorschema: aurora

Reference

reference

Document Symbol

document symbol

Workspace Symbol

workspace symbol

Diagnostic

diagnostic Show diagnostic in files diagnostic multi files

Implementation

implementation

Fzy search in reference

fzy_reference

Code actions

code actions

Fill struct with gopls code actions fill struct

Code preview with highlight

code preview

Treesitter symbol

Treetsitter symbols in all buffers treesitter

Call hierarchy (incomming/outgoing)

incomming

Light bulb when codeAction avalible

lightbulb

Predefined LSP symbol nerdfont/emoji

nerdfont

Todo

  • Early phase, bugs expected, PR and suggestions are welcome
  • Async (some of the requests is slow on large codebases and might be good to use co-rountine)
  • More clients. I use go, python, js/ts, java, c/cpp, lua most of the time. Do not test other languages (e.g dart, swift etc)
  • Configuration options