aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephan Seitz <stephan.seitz@fau.de>2020-08-29 11:37:26 +0200
committerThomas Vigouroux <39092278+vigoux@users.noreply.github.com>2020-08-31 22:16:27 +0200
commitbc365219671a132458a6f1259cd58799bd54d3f7 (patch)
treed15540d21b929c59309a71c3f1db924fece85a94
parentFix(modules): simplify configs.setup (diff)
downloadnvim-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.md7
-rw-r--r--doc/nvim-treesitter.txt5
-rw-r--r--lua/nvim-treesitter/refactor/navigation.lua14
3 files changed, 19 insertions, 7 deletions
diff --git a/README.md b/README.md
index cfdde0c3d..7ae98523b 100644
--- a/README.md
+++ b/README.md
@@ -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