From b4e954bd2bfc19236b82705cb87e5bcb9b31f063 Mon Sep 17 00:00:00 2001 From: Shuhei Hayashibara Date: Sun, 2 Feb 2025 04:07:34 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=F0=9F=90=9B=20unexpected=20indent=20on?= =?UTF-8?q?=20break=20directive=20inside=20if=20directive?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- __tests__/formatter/builtin-directives.test.ts | 8 ++++++++ src/formatter.ts | 7 +++++++ 2 files changed, 15 insertions(+) diff --git a/__tests__/formatter/builtin-directives.test.ts b/__tests__/formatter/builtin-directives.test.ts index b6beefc4..3aa02bc3 100644 --- a/__tests__/formatter/builtin-directives.test.ts +++ b/__tests__/formatter/builtin-directives.test.ts @@ -867,4 +867,12 @@ describe("formatter builtin directives test", () => { sortHtmlAttributes: "idiomatic", }); }); + + test("@if-@break structure", async () => { + const content = ["@if ($user)", " @break", "@endif"].join("\n"); + + const expected = ["@if ($user)", " @break", "@endif", ""].join("\n"); + + await util.doubleFormatCheck(content, expected); + }); }); diff --git a/src/formatter.ts b/src/formatter.ts index 8ce938be..7772a2f6 100644 --- a/src/formatter.ts +++ b/src/formatter.ts @@ -127,6 +127,13 @@ export default class Formatter { return; } + // if @break is inside @if, decrement indent after @break + if (_.last(this.stack) === "@if" && token === "@break") { + this.shouldBeIndent = false; + + return; + } + if (_.includes(phpKeywordEndTokens, token)) { if (token === "@break") { this.decrementIndentLevel();