diff --git a/javascript/packages/formatter/src/format-printer.ts b/javascript/packages/formatter/src/format-printer.ts
index 24afdcd58..9acadc9e8 100644
--- a/javascript/packages/formatter/src/format-printer.ts
+++ b/javascript/packages/formatter/src/format-printer.ts
@@ -1832,7 +1832,7 @@ export class FormatPrinter extends Printer {
if (adjacentInlineCount >= 2) {
const { processedIndices } = this.renderAdjacentInlineElements(children, adjacentInlineCount)
- this.visitRemainingChildren(children, processedIndices)
+ this.visitRemainingChildrenAsTextFlow(children, processedIndices)
return
}
@@ -1975,7 +1975,7 @@ export class FormatPrinter extends Printer {
}
}
- if (lastProcessedIndex >= 0) {
+ if (inlineContent && lastProcessedIndex >= 0) {
for (let index = lastProcessedIndex + 1; index < children.length; index++) {
const child = children[index]
@@ -2101,6 +2101,55 @@ export class FormatPrinter extends Printer {
}
}
+ /**
+ * Visit remaining children as text flow after processing adjacent inline elements.
+ * Detects subsequent groups of adjacent inline elements and renders them as a group,
+ * while passing non-group children through text flow wrapping.
+ */
+ private visitRemainingChildrenAsTextFlow(children: Node[], processedIndices: Set
- <%= event.static_metadata.location %> •
- <%= event.formatted_dates %>
+ <%= event.static_metadata.location %> • <%= event.formatted_dates %>
diff --git a/javascript/packages/formatter/test/erb-formatter/erb-formatter-additional.test.ts b/javascript/packages/formatter/test/erb-formatter/erb-formatter-additional.test.ts
index b76ccf5e4..ba5d7232e 100644
--- a/javascript/packages/formatter/test/erb-formatter/erb-formatter-additional.test.ts
+++ b/javascript/packages/formatter/test/erb-formatter/erb-formatter-additional.test.ts
@@ -47,10 +47,10 @@ describe("ERB Formatter Additional Tests", () => {
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. 🍰🍰🍰🍰🍰🍰🍰🍰🍰🍰Ut
enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
- aliquip ex ea commodo consequat. Duis aute
- irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat
- nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa
- qui officia deserunt mollit anim id est laborum.
+ aliquip ex ea commodo consequat. Duis aute irure
+ dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
+ pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui
+ officia deserunt mollit anim id est laborum.
This will be the all-in-one home for everything to do with Hanami, - Dry and - Rom. + Dry and Rom.
`) @@ -384,13 +383,13 @@ describe("@herb-tools/formatter", () => { const result = formatter.format(input) expect(result).toBe(dedent` -- Visit - our amazing product catalog with hundreds of items - or contact our customer support team for assistance - with your order. -
- `) ++ Visit + our amazing product catalog with hundreds of items or + contact our customer support team for assistance with + your order. +
+ `) }) test("handles multiple inline elements with adjacent text", () => { @@ -676,8 +675,8 @@ describe("@herb-tools/formatter", () => { <%= hosted_image_tag('mailer/footer-logo.png', class: 'h-[48px] mb-1') %>
- ©<%= Time.current.year %> - Company Inc, All
- rights reserved.
+ ©<%= Time.current.year %> - Company Inc, All rights
+ reserved.
Main Street, San Francisco, CAs, USA 12345
@@ -1387,9 +1386,7 @@ describe("@herb-tools/formatter", () => {
Cover Image
Dimensions
-
- <%= "#{cover.metadata['width']}x#{cover.metadata['height']}" %>
-
+ <%= "#{cover.metadata['width']}x#{cover.metadata['height']}" %>
—
<%= link_to "View original", rails_blob_path(cover), target: "_blank", rel: "noopener" %>
@@ -1397,6 +1394,7 @@ describe("@herb-tools/formatter", () => {
<% end %>
`)
+
})
test("adjecent ERB text within elements", () => {
@@ -1461,8 +1459,8 @@ describe("@herb-tools/formatter", () => {
const expected = dedent`
Ut enim ad minima veniam
+ <%= foo %> sed quia consequuntur magni <%= bar %>. Lorem ipsum dolor sit amet...
+ Ut enim ad minima veniam
+ <%= foo %> sed quia consequuntur magni <%= bar %>. Lorem ipsum dolor sit
+ amet...
+
Summary:
Lorem ipsum <%= foo %> dolor <%= bar %>. Sit amet...
+ Summary:
+ Lorem ipsum <%= foo %> dolor <%= bar %>. Sit amet...
+
<%= user.name %>'s profile
`) + }) + + test("issue 903: preserves possessive apostrophe after ERB tag", () => { + expectFormattedToMatch(`Waiting for <%= contractor.name.first_or_business %>'s signature.`) + }) + + test("issue 903: multiple ERB tags in text flow afterSummary:
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua, <%= foo %> quis nostrud exercitation ullamco laboris. Duis aute irure dolor in reprehenderit <%= bar %> that <%= baz %> sed quia non numquam eius modi tempora.
+ Summary:
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor
+ incididunt ut labore et dolore magna aliqua, <%= foo %> quis nostrud
+ exercitation ullamco laboris. Duis aute irure dolor in reprehenderit
+ <%= bar %> that <%= baz %> sed quia non numquam eius modi tempora.
+
Ut enim ad minima veniam
+ <%= foo %> sed quia consequuntur magni <%= bar %>. Lorem ipsum dolor sit amet consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Summary:
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua, <%= foo %> quis nostrud exercitation ullamco laboris. Duis aute irure dolor in reprehenderit <%= bar %> that <%= baz %> sed quia non numquam eius modi tempora.
+ Ut enim ad minima veniam
+ <%= foo %> sed quia consequuntur magni <%= bar %>. Lorem ipsum dolor sit amet
+ consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
+ dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation
+ ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor
+ in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
+ pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui
+ officia deserunt mollit anim id est laborum.
+
+ Summary:
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor
+ incididunt ut labore et dolore magna aliqua, <%= foo %> quis nostrud
+ exercitation ullamco laboris. Duis aute irure dolor in reprehenderit
+ <%= bar %> that <%= baz %> sed quia non numquam eius modi tempora.
+
Ut enim ad minima veniam
+ <%= foo %> sed quia consequuntur magni <%= bar %>. Lorem ipsum dolor sit amet consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
+ Ut enim ad minima veniam
+ <%= foo %> sed quia consequuntur magni <%= bar %>. Lorem ipsum dolor sit amet
+ consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
+ dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation
+ ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor
+ in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
+ pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui
+ officia deserunt mollit anim id est laborum.
+
<%# herb:disable some-rule %> - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod - tempor incididunt ut labore et dolore magna aliqua. + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor + incididunt ut labore et dolore magna aliqua.
`) }) @@ -102,8 +102,8 @@ describe("herb:disable comment formatting", () => { expect(result).toBe(dedent` <%# herb:disable all %> - Some content that needs wrapping because it is quite long and exceeds the - line length limit. + Some content that needs wrapping because it is quite long and exceeds the line + length limit. `) }) @@ -152,8 +152,7 @@ describe("herb:disable comment formatting", () => { expect(result).toBe(dedent`- Some text with <%# herb:disable some-rule %>inline content - here. + Some text with <%# herb:disable some-rule %>inline content here.
`) }) @@ -286,8 +285,8 @@ describe("herb:disable comment formatting", () => { const expectedOutput = dedent`