aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lua/nvim-treesitter/indent.lua16
1 files changed, 13 insertions, 3 deletions
diff --git a/lua/nvim-treesitter/indent.lua b/lua/nvim-treesitter/indent.lua
index 5f346d643..83b706730 100644
--- a/lua/nvim-treesitter/indent.lua
+++ b/lua/nvim-treesitter/indent.lua
@@ -35,6 +35,7 @@ local get_indents = utils.memoize_by_buf_tick(function(bufnr)
indents = get_map('@indent.node'),
branches = get_map('@branch.node'),
returns = get_map('@return.node'),
+ ignores = get_map('@ignore.node'),
}
end)
@@ -85,15 +86,24 @@ function M.get_indent(lnum)
node = node:parent()
end
+ local first = true
local prev_row = node:start()
while node do
- node = node:parent()
- local row = node and node:start() or prev_row
- if q.indents[node_fmt(node)] and prev_row ~= row then
+ -- do not indent if we are inside an @ignore block
+ if q.ignores[node_fmt(node)] and node:start() < lnum-1 and node:end_() > lnum-1 then
+ return -1
+ end
+
+ -- do not indent the starting node, do not add multiple indent levels on single line
+ local row = node:start()
+ if not first and q.indents[node_fmt(node)] and prev_row ~= row then
indent = indent + indent_size
prev_row = row
end
+
+ node = node:parent()
+ first = false
end
return indent