[clang] e3acfbc - [clang-format] Stop aligning the to continuation lines (#76378)
via cfe-commits
cfe-commits at lists.llvm.org
Sun Jan 14 19:04:46 PST 2024
Author: sstwcw
Date: 2024-01-15T03:04:42Z
New Revision: e3acfbc471ac74425c2a4b54546b322b42c4cf00
URL: https://github.com/llvm/llvm-project/commit/e3acfbc471ac74425c2a4b54546b322b42c4cf00
DIFF: https://github.com/llvm/llvm-project/commit/e3acfbc471ac74425c2a4b54546b322b42c4cf00.diff
LOG: [clang-format] Stop aligning the to continuation lines (#76378)
Some unwrapped lines are marked as continuations of the previous lines,
for example the ports in a Verilog module header. Previously, if the
first line following the ports line was changed, and git-clang-format
was run, the changed line would be indented by an extra continuation
indentation.
Added:
Modified:
clang/lib/Format/UnwrappedLineFormatter.cpp
clang/unittests/Format/FormatTestCSharp.cpp
clang/unittests/Format/FormatTestVerilog.cpp
Removed:
################################################################################
diff --git a/clang/lib/Format/UnwrappedLineFormatter.cpp b/clang/lib/Format/UnwrappedLineFormatter.cpp
index 27983a330ac40a..adeb072434873f 100644
--- a/clang/lib/Format/UnwrappedLineFormatter.cpp
+++ b/clang/lib/Format/UnwrappedLineFormatter.cpp
@@ -95,7 +95,7 @@ class LevelIndentTracker {
/// level to the same indent.
/// Note that \c nextLine must have been called before this method.
void adjustToUnmodifiedLine(const AnnotatedLine &Line) {
- if (Line.InPPDirective)
+ if (Line.InPPDirective || Line.IsContinuation)
return;
assert(Line.Level < IndentForLevel.size());
if (Line.First->is(tok::comment) && IndentForLevel[Line.Level] != -1)
diff --git a/clang/unittests/Format/FormatTestCSharp.cpp b/clang/unittests/Format/FormatTestCSharp.cpp
index 4a0840d32341e8..6f5e1e41ef7e0b 100644
--- a/clang/unittests/Format/FormatTestCSharp.cpp
+++ b/clang/unittests/Format/FormatTestCSharp.cpp
@@ -1304,6 +1304,18 @@ TEST_F(FormatTestCSharp, CSharpGenericTypeConstraints) {
"}",
Style);
+ // When the "where" line is not to be formatted, following lines should not
+ // take on its indentation.
+ verifyFormat("class ItemFactory<T>\n"
+ " where T : new() {\n"
+ " int f() {}\n"
+ "}",
+ "class ItemFactory<T>\n"
+ " where T : new() {\n"
+ " int f() {}\n"
+ "}",
+ Style, {tooling::Range(43, 13)});
+
verifyFormat("class Dictionary<TKey, TVal>\n"
" where TKey : IComparable<TKey>\n"
" where TVal : IMyInterface {\n"
diff --git a/clang/unittests/Format/FormatTestVerilog.cpp b/clang/unittests/Format/FormatTestVerilog.cpp
index fcda05df182687..abebf9f7d4c785 100644
--- a/clang/unittests/Format/FormatTestVerilog.cpp
+++ b/clang/unittests/Format/FormatTestVerilog.cpp
@@ -613,6 +613,17 @@ TEST_F(FormatTestVerilog, Headers) {
" (input var x aaaaaaaaaaaaaaa``x, \\\n"
" b);",
Style);
+ // When the ports line is not to be formatted, following lines should not take
+ // on its indentation.
+ verifyFormat("module x\n"
+ " (output x);\n"
+ " assign x = 0;\n"
+ "endmodule",
+ "module x\n"
+ " (output x);\n"
+ " assign x = 0;\n"
+ "endmodule",
+ getDefaultStyle(), {tooling::Range(25, 18)});
}
TEST_F(FormatTestVerilog, Hierarchy) {
More information about the cfe-commits
mailing list