diff options
| author | Stephan Seitz <stephan.seitz@fau.de> | 2020-08-29 11:37:26 +0200 |
|---|---|---|
| committer | Thomas Vigouroux <39092278+vigoux@users.noreply.github.com> | 2020-08-31 22:16:27 +0200 |
| commit | bc365219671a132458a6f1259cd58799bd54d3f7 (patch) | |
| tree | d15540d21b929c59309a71c3f1db924fece85a94 | |
| parent | Fix(modules): simplify configs.setup (diff) | |
| download | nvim-treesitter-bc365219671a132458a6f1259cd58799bd54d3f7.tar nvim-treesitter-bc365219671a132458a6f1259cd58799bd54d3f7.tar.gz nvim-treesitter-bc365219671a132458a6f1259cd58799bd54d3f7.tar.bz2 nvim-treesitter-bc365219671a132458a6f1259cd58799bd54d3f7.tar.lz nvim-treesitter-bc365219671a132458a6f1259cd58799bd54d3f7.tar.xz nvim-treesitter-bc365219671a132458a6f1259cd58799bd54d3f7.tar.zst nvim-treesitter-bc365219671a132458a6f1259cd58799bd54d3f7.zip | |
feat(refactor.navigation): allow a `fallback_function` for goto_definition
`fallback_function` is called when nvim-treesitter can not resolve the
variable under the cursor.
| -rw-r--r-- | README.md | 7 | ||||
| -rw-r--r-- | doc/nvim-treesitter.txt | 5 | ||||
| -rw-r--r-- | lua/nvim-treesitter/refactor/navigation.lua | 14 |
3 files changed, 19 insertions, 7 deletions
@@ -184,9 +184,10 @@ EOF ## Refactor: navigation Provides "go to definition" for the symbol under the cursor, -and lists the definitions from the current file. -goto_next_usage/goto_previous_usage go to the next usage of the -identifier under the cursor. +and lists the definitions from the current file. If you use +`goto_definition_lsp_fallback` instead of `goto_definition` in the config below +`vim.lsp.buf.definition` is used if nvim-treesitter can not resolve the variable. +`goto_next_usage`/`goto_previous_usage` go to the next usage of the identifier under the cursor. ```lua diff --git a/doc/nvim-treesitter.txt b/doc/nvim-treesitter.txt index 09e3d1677..36fe1dbd4 100644 --- a/doc/nvim-treesitter.txt +++ b/doc/nvim-treesitter.txt @@ -244,6 +244,11 @@ Supported options: - keymaps: - goto_definition: go to the definition of the symbol under the cursor. Defaults to `gnd`. + - goto_definition_lsp_fallback: go to the definition of the symbol under + the cursor or use vim.lsp.buf.definition if the symbol can not be + resolved. You can use your own fallback function if create a mapping for + `lua require'nvim-treesitter.refactor.navigation(nil, fallback_function)<cr>` . + No default mapping - list_definitions: list all definitions from the current file. Defaults to `gnD`. - goto_next_usage: go to next usage of identifier under the cursor. diff --git a/lua/nvim-treesitter/refactor/navigation.lua b/lua/nvim-treesitter/refactor/navigation.lua index 98ef37802..112a1e412 100644 --- a/lua/nvim-treesitter/refactor/navigation.lua +++ b/lua/nvim-treesitter/refactor/navigation.lua @@ -8,16 +8,23 @@ local api = vim.api local M = {} -function M.goto_definition(bufnr) +function M.goto_definition(bufnr, fallback_function) local bufnr = bufnr or api.nvim_get_current_buf() local node_at_point = ts_utils.get_node_at_cursor() if not node_at_point then return end - local definition, _ = locals.find_definition(node_at_point, bufnr) - ts_utils.goto_node(definition) + local definition = locals.find_definition(node_at_point, bufnr) + + if fallback_function and definition.id == node_at_point.id then + fallback_function() + else + ts_utils.goto_node(definition) + end end +function M.goto_definition_lsp_fallback(bufnr) M.goto_definition(bufnr, vim.lsp.buf.definition) end + function M.list_definitions(bufnr) local bufnr = bufnr or api.nvim_get_current_buf() local definitions = locals.get_definitions(bufnr) @@ -57,7 +64,6 @@ function M.goto_adjacent_usage(bufnr, delta) local target_index = (index + delta + #usages - 1) % #usages + 1 ts_utils.goto_node(usages[target_index]) - return usages[target_index] end function M.goto_next_usage(bufnr) return M.goto_adjacent_usage(bufnr, 1) end |
