summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lua/nvim-treesitter/indent.lua2
-rw-r--r--queries/cpp/indents.scm2
-rw-r--r--tests/indent/cpp/initializer_list.cpp17
3 files changed, 20 insertions, 1 deletions
diff --git a/lua/nvim-treesitter/indent.lua b/lua/nvim-treesitter/indent.lua
index d63f4320..a86b5baf 100644
--- a/lua/nvim-treesitter/indent.lua
+++ b/lua/nvim-treesitter/indent.lua
@@ -117,7 +117,7 @@ function M.get_indent(lnum)
end
-- do not indent for nodes that starts-and-ends on same line and starts on target line (lnum)
- if not is_processed_by_row[srow] and (q.indent[node:id()] and srow ~= erow and srow ~= lnum - 1) then
+ if not is_processed_by_row[srow] and (q.indent[node:id()] and srow ~= erow and ((srow ~= lnum - 1) or q.indent[node:id()].start_at_same_line)) then
indent = indent + indent_size
is_processed = true
end
diff --git a/queries/cpp/indents.scm b/queries/cpp/indents.scm
index cb027795..f1007dd2 100644
--- a/queries/cpp/indents.scm
+++ b/queries/cpp/indents.scm
@@ -5,4 +5,6 @@
(condition_clause)
] @indent
+((field_initializer_list) @indent
+ (#set! "start_at_same_line" 1))
(access_specifier) @branch
diff --git a/tests/indent/cpp/initializer_list.cpp b/tests/indent/cpp/initializer_list.cpp
new file mode 100644
index 00000000..5a27d17f
--- /dev/null
+++ b/tests/indent/cpp/initializer_list.cpp
@@ -0,0 +1,17 @@
+class Foo {
+
+ Foo(int a, int b, int c, int d)
+ : m_a(a)
+ , m_b(b)
+ , m_c(c)
+ , m_d(d) {}
+
+ Foo(int a, int b, int c) :
+ m_a(a),
+ m_b(b),
+ m_c(c)
+ {}
+
+ int m_a, m_b, m_c, m_d;
+};
+