aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephan Seitz <stephan.seitz@fau.de>2022-01-22 18:24:38 +0100
committerStephan Seitz <stephan.seitz@fau.de>2022-02-05 18:54:55 +0100
commitfd5a551d7ca3c0d4fc384884c9d3201beb07a95a (patch)
treea10e33b9e6a761c95590105b3be3094338da033d
parentindents(c): fix indentation on block comment (diff)
downloadnvim-treesitter-fd5a551d7ca3c0d4fc384884c9d3201beb07a95a.tar
nvim-treesitter-fd5a551d7ca3c0d4fc384884c9d3201beb07a95a.tar.gz
nvim-treesitter-fd5a551d7ca3c0d4fc384884c9d3201beb07a95a.tar.bz2
nvim-treesitter-fd5a551d7ca3c0d4fc384884c9d3201beb07a95a.tar.lz
nvim-treesitter-fd5a551d7ca3c0d4fc384884c9d3201beb07a95a.tar.xz
nvim-treesitter-fd5a551d7ca3c0d4fc384884c9d3201beb07a95a.tar.zst
nvim-treesitter-fd5a551d7ca3c0d4fc384884c9d3201beb07a95a.zip
indents(c): add zero_indent for #if
-rw-r--r--lua/nvim-treesitter/indent.lua5
-rw-r--r--queries/c/indents.scm14
-rw-r--r--tests/indent/c/aligned_indent.c3
-rw-r--r--tests/indent/c/comment.c3
-rw-r--r--tests/indent/c/unfinished_comment.c2
-rw-r--r--tests/indent/c_spec.lua2
-rw-r--r--tests/indent/cpp_spec.lua2
7 files changed, 18 insertions, 13 deletions
diff --git a/lua/nvim-treesitter/indent.lua b/lua/nvim-treesitter/indent.lua
index 04aa141bb..4ec0a3e23 100644
--- a/lua/nvim-treesitter/indent.lua
+++ b/lua/nvim-treesitter/indent.lua
@@ -35,6 +35,7 @@ local get_indents = tsutils.memoize_by_buf_tick(function(bufnr, root, lang)
branch = {},
ignore = {},
aligned_indent = {},
+ zero_indent = {},
}
for name, node, metadata in queries.iter_captures(bufnr, "indents", root, lang) do
@@ -88,6 +89,10 @@ function M.get_indent(lnum)
-- tracks to ensure multiple indent levels are not applied for same line
local is_processed_by_row = {}
+ if q.zero_indent[node:id()] then
+ return 0
+ end
+
while node do
-- do 'autoindent' if not marked as @indent
if not q.indent[node:id()] and q.auto[node:id()] and node:start() < lnum - 1 and lnum - 1 <= node:end_() then
diff --git a/queries/c/indents.scm b/queries/c/indents.scm
index 4438dec73..f601962d1 100644
--- a/queries/c/indents.scm
+++ b/queries/c/indents.scm
@@ -27,15 +27,19 @@
(compound_statement "}" @indent_end)
[
+ "else"
+ ")"
+ "}"
+ (statement_identifier)
+] @branch
+
+[
"#define"
"#ifdef"
"#if"
"#else"
- "else"
"#endif"
- ")"
- "}"
-] @branch
+] @zero_indent
[
(preproc_arg)
@@ -47,7 +51,7 @@
([(argument_list) (parameter_list)] @aligned_indent
(#set! "delimiter" "()"))
-([ (ERROR) (comment) ] @aligned_indent
+((comment) @aligned_indent
(#lua-match? @aligned_indent "^/\*"))
((comment) @ignore
(#lua-match? @ignore "^//"))
diff --git a/tests/indent/c/aligned_indent.c b/tests/indent/c/aligned_indent.c
index 75555b971..7a3120497 100644
--- a/tests/indent/c/aligned_indent.c
+++ b/tests/indent/c/aligned_indent.c
@@ -5,6 +5,3 @@ void foo(int a,
void foo(int a,
int b
-
-
-
diff --git a/tests/indent/c/comment.c b/tests/indent/c/comment.c
index 435b70661..b32de8218 100644
--- a/tests/indent/c/comment.c
+++ b/tests/indent/c/comment.c
@@ -6,6 +6,3 @@
void foo(int *x, int y) {
*x = y;
}
-
-/*
- *
diff --git a/tests/indent/c/unfinished_comment.c b/tests/indent/c/unfinished_comment.c
new file mode 100644
index 000000000..fb48bfb82
--- /dev/null
+++ b/tests/indent/c/unfinished_comment.c
@@ -0,0 +1,2 @@
+/*
+ *
diff --git a/tests/indent/c_spec.lua b/tests/indent/c_spec.lua
index c7d21e904..40d393ca8 100644
--- a/tests/indent/c_spec.lua
+++ b/tests/indent/c_spec.lua
@@ -13,7 +13,7 @@ describe("indent C:", function()
runner:whole_file(".", {
expected_failures = {
"./preproc_func.c",
- "./label.c",
+ "./unfinished_comment.c",
},
})
end)
diff --git a/tests/indent/cpp_spec.lua b/tests/indent/cpp_spec.lua
index 56be5db47..b3f394375 100644
--- a/tests/indent/cpp_spec.lua
+++ b/tests/indent/cpp_spec.lua
@@ -16,7 +16,7 @@ describe("indent C++:", function()
expected_failures = {
-- C
"c/preproc_func.c",
- "c/label.c",
+ "c/unfinished_comment.c",
},
})
end)