diff --git a/wasm/src/formatter.cpp b/wasm/src/formatter.cpp index df9d2c1..a6467bd 100644 --- a/wasm/src/formatter.cpp +++ b/wasm/src/formatter.cpp @@ -254,8 +254,10 @@ std::string Formatter::Format(std::string_view content) { // NOLINT break; case TokenKind::TK_SEMICOLON: { // ; AppendNoSpace(token); - PipeBeforeNewLine(&lexer, PipeType::kComment); - NewLineActively(); + if (!IsInFor()) { + PipeBeforeNewLine(&lexer, PipeType::kComment); + NewLineActively(); + } break; } case TokenKind::TK_WHITESPACE: { @@ -330,6 +332,12 @@ bool Formatter::IsNewLine() const { return new_line_type_ != NewLineType::kNone; } +bool Formatter::IsInFor() const { + return std::ranges::any_of(line_tokens_, [this](const auto& token) { + return content_.substr(token.fOffset, token.fLength) == "for"; + }); +} + SkSL::Token Formatter::GetLastToken() const { for (auto iter = line_tokens_.rbegin(); iter != line_tokens_.rend(); ++iter) { // NOLINT switch (iter->fKind) { diff --git a/wasm/src/formatter.h b/wasm/src/formatter.h index 8897723..36a5a6a 100644 --- a/wasm/src/formatter.h +++ b/wasm/src/formatter.h @@ -33,6 +33,7 @@ class Formatter { bool PipeBeforeNewLine(SkSL::Lexer* lexer, std::uint8_t type); [[nodiscard]] bool IsNewLine() const; + [[nodiscard]] bool IsInFor() const; [[nodiscard]] SkSL::Token GetLastToken() const; [[nodiscard]] SkSL::Token GetLastMaybeEmptyToken() const; [[nodiscard]] SkSL::Token GetSecondLastToken() const; diff --git a/wasm/src/formatter_test.cpp b/wasm/src/formatter_test.cpp index a0d9be7..127c2ed 100644 --- a/wasm/src/formatter_test.cpp +++ b/wasm/src/formatter_test.cpp @@ -98,3 +98,7 @@ TEST(FormatterTest, Layout) { "layout(color) uniform vec4 in_color;\n" ); } + +TEST(FormatterTest, For) { + EXPECT_STREQ(Formatter().Format("for(1;1;1)").c_str(), "for (1; 1; 1)\n"); +}