aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPham Huy Hoang <hoangtun0810@gmail.com>2023-04-03 23:47:41 +0900
committerStephan Seitz <stephan.seitz@fau.de>2023-04-08 09:56:06 -0700
commit474c59dcf1d5586d6ef0d3f91b380c6c25eb314b (patch)
tree19d156bee39b9246be68bb6a450a77628924010e
parentfix(indent): Make indent ignore trailing spaces/comment (diff)
downloadnvim-treesitter-474c59dcf1d5586d6ef0d3f91b380c6c25eb314b.tar
nvim-treesitter-474c59dcf1d5586d6ef0d3f91b380c6c25eb314b.tar.gz
nvim-treesitter-474c59dcf1d5586d6ef0d3f91b380c6c25eb314b.tar.bz2
nvim-treesitter-474c59dcf1d5586d6ef0d3f91b380c6c25eb314b.tar.lz
nvim-treesitter-474c59dcf1d5586d6ef0d3f91b380c6c25eb314b.tar.xz
nvim-treesitter-474c59dcf1d5586d6ef0d3f91b380c6c25eb314b.tar.zst
nvim-treesitter-474c59dcf1d5586d6ef0d3f91b380c6c25eb314b.zip
add test
-rw-r--r--lua/nvim-treesitter/indent.lua4
-rw-r--r--tests/indent/algorithm/trailing.py6
-rw-r--r--tests/indent/algorithm/trailing_whitespace.html11
-rw-r--r--tests/indent/algorithm_spec.lua18
4 files changed, 37 insertions, 2 deletions
diff --git a/lua/nvim-treesitter/indent.lua b/lua/nvim-treesitter/indent.lua
index 7b3485341..fc11b4063 100644
--- a/lua/nvim-treesitter/indent.lua
+++ b/lua/nvim-treesitter/indent.lua
@@ -138,15 +138,15 @@ function M.get_indent(lnum)
-- The final node we capture of the previous line can be a comment node, which should also be ignored
-- Unless the last line is an entire line of comment, ignore the comment range and find the last node again
local first_node = get_first_node_at_line(root, prevlnum, indent)
+ local _, scol, _, _ = node:range()
if first_node:id() ~= node:id() then
-- In case the last captured node is a trailing comment node, re-trim the string
- prevline = vim.trim(prevline:sub(1, node:start() + 1 - indent))
+ prevline = vim.trim(prevline:sub(1, scol - indent))
-- Add back indent as indent of prevline was trimmed away
local col = indent + #prevline - 1
node = get_last_node_at_line(root, prevlnum, col)
end
end
-
if q.indent["end"][node:id()] then
node = get_first_node_at_line(root, lnum)
end
diff --git a/tests/indent/algorithm/trailing.py b/tests/indent/algorithm/trailing.py
new file mode 100644
index 000000000..9a753ae33
--- /dev/null
+++ b/tests/indent/algorithm/trailing.py
@@ -0,0 +1,6 @@
+class x: # Ignore comment
+
+class y:
+ def z(): # Ignore comment
+
+class t:
diff --git a/tests/indent/algorithm/trailing_whitespace.html b/tests/indent/algorithm/trailing_whitespace.html
new file mode 100644
index 000000000..f3cf177a2
--- /dev/null
+++ b/tests/indent/algorithm/trailing_whitespace.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+ <body>
+ <!-- This file deliberately contains trailing whitespace -->
+ <!-- Don't remove them -->
+ <div>
+ a
+
+ </div>
+ </body>
+</html>
diff --git a/tests/indent/algorithm_spec.lua b/tests/indent/algorithm_spec.lua
new file mode 100644
index 000000000..faf7998ec
--- /dev/null
+++ b/tests/indent/algorithm_spec.lua
@@ -0,0 +1,18 @@
+local Runner = require("tests.indent.common").Runner
+-- local XFAIL = require("tests.indent.common").XFAIL
+
+local runner = Runner:new(it, "tests/indent/algorithm", {
+ tabstop = 4,
+ shiftwidth = 4,
+ softtabstop = 4,
+ expandtab = true,
+})
+
+describe("test indent algorithm: ", function()
+ describe("new line:", function()
+ runner:new_line("trailing.py", { on_line = 1, text = "x: str", indent = 4 }, "indent next line, ignore comment")
+ runner:new_line("trailing.py", { on_line = 4, text = "pass", indent = 8 }, "indent next line, ignore comment")
+ runner:new_line("trailing.py", { on_line = 6, text = "pass", indent = 4 }, "indent next line, ignore whitespace")
+ runner:new_line("trailing_whitespace.html", { on_line = 9, text = "x", indent = 8 }, "not ignore @indent.end")
+ end)
+end)