Skip to content

Commit f4c1858

Browse files
authored
Fixed irregular spacing between list items (#79388)
fixed bug: #39500 <img width="720" height="381" alt="Screenshot 2025-07-14 155112" src="https://github.com/user-attachments/assets/4cc79cd2-5ace-4312-9c3a-7dc6218e48a3" />
2 parents ecc165b + 6c405e8 commit f4c1858

File tree

2 files changed

+87
-72
lines changed

2 files changed

+87
-72
lines changed

src/EditorFeatures/Test2/IntelliSense/IntellisenseQuickInfoBuilderTests_Lists.vb

Lines changed: 79 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -57,21 +57,23 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.IntelliSense
5757
New ClassifiedTextRun(ClassificationTypeNames.Punctuation, "("),
5858
New ClassifiedTextRun(ClassificationTypeNames.Punctuation, ")"))),
5959
New ContainerElement(
60-
ContainerElementStyle.Wrapped,
61-
New ClassifiedTextElement(
62-
New ClassifiedTextRun(ClassificationTypeNames.Text, "• ")),
60+
ContainerElementStyle.Stacked,
6361
New ContainerElement(
64-
ContainerElementStyle.Stacked,
62+
ContainerElementStyle.Wrapped,
6563
New ClassifiedTextElement(
66-
New ClassifiedTextRun(ClassificationTypeNames.Text, "Item 1"))))),
67-
New ContainerElement(
68-
ContainerElementStyle.Wrapped,
69-
New ClassifiedTextElement(
70-
New ClassifiedTextRun(ClassificationTypeNames.Text, "• ")),
71-
New ContainerElement(
72-
ContainerElementStyle.Stacked,
73-
New ClassifiedTextElement(
74-
New ClassifiedTextRun(ClassificationTypeNames.Text, "Item 2")))))
64+
New ClassifiedTextRun(ClassificationTypeNames.Text, "• ")),
65+
New ContainerElement(
66+
ContainerElementStyle.Stacked,
67+
New ClassifiedTextElement(
68+
New ClassifiedTextRun(ClassificationTypeNames.Text, "Item 1")))),
69+
New ContainerElement(
70+
ContainerElementStyle.Wrapped,
71+
New ClassifiedTextElement(
72+
New ClassifiedTextRun(ClassificationTypeNames.Text, "• ")),
73+
New ContainerElement(
74+
ContainerElementStyle.Stacked,
75+
New ClassifiedTextElement(
76+
New ClassifiedTextRun(ClassificationTypeNames.Text, "Item 2")))))))
7577

7678
ToolTipAssert.EqualContent(expected, intellisenseQuickInfo.Item)
7779
End Function
@@ -120,21 +122,23 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.IntelliSense
120122
New ClassifiedTextRun(ClassificationTypeNames.Punctuation, "("),
121123
New ClassifiedTextRun(ClassificationTypeNames.Punctuation, ")"))),
122124
New ContainerElement(
123-
ContainerElementStyle.Wrapped,
124-
New ClassifiedTextElement(
125-
New ClassifiedTextRun(ClassificationTypeNames.Text, "1. ")),
125+
ContainerElementStyle.Stacked,
126126
New ContainerElement(
127-
ContainerElementStyle.Stacked,
127+
ContainerElementStyle.Wrapped,
128128
New ClassifiedTextElement(
129-
New ClassifiedTextRun(ClassificationTypeNames.Text, "Item 1"))))),
130-
New ContainerElement(
131-
ContainerElementStyle.Wrapped,
132-
New ClassifiedTextElement(
133-
New ClassifiedTextRun(ClassificationTypeNames.Text, "2. ")),
134-
New ContainerElement(
135-
ContainerElementStyle.Stacked,
136-
New ClassifiedTextElement(
137-
New ClassifiedTextRun(ClassificationTypeNames.Text, "Item 2")))))
129+
New ClassifiedTextRun(ClassificationTypeNames.Text, "1. ")),
130+
New ContainerElement(
131+
ContainerElementStyle.Stacked,
132+
New ClassifiedTextElement(
133+
New ClassifiedTextRun(ClassificationTypeNames.Text, "Item 1")))),
134+
New ContainerElement(
135+
ContainerElementStyle.Wrapped,
136+
New ClassifiedTextElement(
137+
New ClassifiedTextRun(ClassificationTypeNames.Text, "2. ")),
138+
New ContainerElement(
139+
ContainerElementStyle.Stacked,
140+
New ClassifiedTextElement(
141+
New ClassifiedTextRun(ClassificationTypeNames.Text, "Item 2")))))))
138142

139143
ToolTipAssert.EqualContent(expected, intellisenseQuickInfo.Item)
140144
End Function
@@ -179,28 +183,29 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.IntelliSense
179183
New ClassifiedTextRun(ClassificationTypeNames.Punctuation, "("),
180184
New ClassifiedTextRun(ClassificationTypeNames.Punctuation, ")"))),
181185
New ContainerElement(
182-
ContainerElementStyle.Wrapped,
183-
New ClassifiedTextElement(
184-
New ClassifiedTextRun(ClassificationTypeNames.Text, "• ")),
186+
ContainerElementStyle.Stacked,
185187
New ContainerElement(
186-
ContainerElementStyle.Stacked,
188+
ContainerElementStyle.Wrapped,
187189
New ClassifiedTextElement(
188-
New ClassifiedTextRun(ClassificationTypeNames.Text, "word1", ClassifiedTextRunStyle.Bold),
189-
New ClassifiedTextRun(ClassificationTypeNames.WhiteSpace, " "),
190-
New ClassifiedTextRun(ClassificationTypeNames.Text, "–"),
191-
New ClassifiedTextRun(ClassificationTypeNames.Text, "Item 1"))))),
192-
New ContainerElement(
193-
ContainerElementStyle.Wrapped,
194-
New ClassifiedTextElement(
195-
New ClassifiedTextRun(ClassificationTypeNames.Text, "• ")),
196-
New ContainerElement(
197-
ContainerElementStyle.Stacked,
198-
New ClassifiedTextElement(
199-
New ClassifiedTextRun(ClassificationTypeNames.Text, "word2", ClassifiedTextRunStyle.Bold),
200-
New ClassifiedTextRun(ClassificationTypeNames.WhiteSpace, " "),
201-
New ClassifiedTextRun(ClassificationTypeNames.Text, "–"),
202-
New ClassifiedTextRun(ClassificationTypeNames.Text, "Item 2")))))
203-
190+
New ClassifiedTextRun(ClassificationTypeNames.Text, "• ")),
191+
New ContainerElement(
192+
ContainerElementStyle.Stacked,
193+
New ClassifiedTextElement(
194+
New ClassifiedTextRun(ClassificationTypeNames.Text, "word1", ClassifiedTextRunStyle.Bold),
195+
New ClassifiedTextRun(ClassificationTypeNames.WhiteSpace, " "),
196+
New ClassifiedTextRun(ClassificationTypeNames.Text, "–"),
197+
New ClassifiedTextRun(ClassificationTypeNames.Text, "Item 1")))),
198+
New ContainerElement(
199+
ContainerElementStyle.Wrapped,
200+
New ClassifiedTextElement(
201+
New ClassifiedTextRun(ClassificationTypeNames.Text, "• ")),
202+
New ContainerElement(
203+
ContainerElementStyle.Stacked,
204+
New ClassifiedTextElement(
205+
New ClassifiedTextRun(ClassificationTypeNames.Text, "word2", ClassifiedTextRunStyle.Bold),
206+
New ClassifiedTextRun(ClassificationTypeNames.WhiteSpace, " "),
207+
New ClassifiedTextRun(ClassificationTypeNames.Text, "–"),
208+
New ClassifiedTextRun(ClassificationTypeNames.Text, "Item 2")))))))
204209
ToolTipAssert.EqualContent(expected, intellisenseQuickInfo.Item)
205210
End Function
206211

@@ -244,27 +249,29 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.IntelliSense
244249
New ClassifiedTextRun(ClassificationTypeNames.Punctuation, "("),
245250
New ClassifiedTextRun(ClassificationTypeNames.Punctuation, ")"))),
246251
New ContainerElement(
247-
ContainerElementStyle.Wrapped,
248-
New ClassifiedTextElement(
249-
New ClassifiedTextRun(ClassificationTypeNames.Text, "1. ")),
252+
ContainerElementStyle.Stacked,
250253
New ContainerElement(
251-
ContainerElementStyle.Stacked,
254+
ContainerElementStyle.Wrapped,
252255
New ClassifiedTextElement(
253-
New ClassifiedTextRun(ClassificationTypeNames.Text, "word1", ClassifiedTextRunStyle.Bold),
254-
New ClassifiedTextRun(ClassificationTypeNames.WhiteSpace, " "),
255-
New ClassifiedTextRun(ClassificationTypeNames.Text, "–"),
256-
New ClassifiedTextRun(ClassificationTypeNames.Text, "Item 1"))))),
257-
New ContainerElement(
258-
ContainerElementStyle.Wrapped,
259-
New ClassifiedTextElement(
260-
New ClassifiedTextRun(ClassificationTypeNames.Text, "2. ")),
261-
New ContainerElement(
262-
ContainerElementStyle.Stacked,
263-
New ClassifiedTextElement(
264-
New ClassifiedTextRun(ClassificationTypeNames.Text, "word2", ClassifiedTextRunStyle.Bold),
265-
New ClassifiedTextRun(ClassificationTypeNames.WhiteSpace, " "),
266-
New ClassifiedTextRun(ClassificationTypeNames.Text, "–"),
267-
New ClassifiedTextRun(ClassificationTypeNames.Text, "Item 2")))))
256+
New ClassifiedTextRun(ClassificationTypeNames.Text, "1. ")),
257+
New ContainerElement(
258+
ContainerElementStyle.Stacked,
259+
New ClassifiedTextElement(
260+
New ClassifiedTextRun(ClassificationTypeNames.Text, "word1", ClassifiedTextRunStyle.Bold),
261+
New ClassifiedTextRun(ClassificationTypeNames.WhiteSpace, " "),
262+
New ClassifiedTextRun(ClassificationTypeNames.Text, "–"),
263+
New ClassifiedTextRun(ClassificationTypeNames.Text, "Item 1")))),
264+
New ContainerElement(
265+
ContainerElementStyle.Wrapped,
266+
New ClassifiedTextElement(
267+
New ClassifiedTextRun(ClassificationTypeNames.Text, "2. ")),
268+
New ContainerElement(
269+
ContainerElementStyle.Stacked,
270+
New ClassifiedTextElement(
271+
New ClassifiedTextRun(ClassificationTypeNames.Text, "word2", ClassifiedTextRunStyle.Bold),
272+
New ClassifiedTextRun(ClassificationTypeNames.WhiteSpace, " "),
273+
New ClassifiedTextRun(ClassificationTypeNames.Text, "–"),
274+
New ClassifiedTextRun(ClassificationTypeNames.Text, "Item 2")))))))
268275

269276
ToolTipAssert.EqualContent(expected, intellisenseQuickInfo.Item)
270277
End Function
@@ -357,15 +364,15 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.IntelliSense
357364
New ContainerElement(
358365
ContainerElementStyle.Stacked,
359366
New ContainerElement(
360-
ContainerElementStyle.Wrapped,
361-
New ClassifiedTextElement(
362-
New ClassifiedTextRun(ClassificationTypeNames.Text, "1. ")),
367+
ContainerElementStyle.Stacked,
363368
New ContainerElement(
364-
ContainerElementStyle.Stacked,
369+
ContainerElementStyle.Wrapped,
365370
New ClassifiedTextElement(
366-
New ClassifiedTextRun(ClassificationTypeNames.Text, "Item 2.1")))),
367-
New ContainerElement(
368-
ContainerElementStyle.Stacked Or ContainerElementStyle.VerticalPadding,
371+
New ClassifiedTextRun(ClassificationTypeNames.Text, "1. ")),
372+
New ContainerElement(
373+
ContainerElementStyle.Stacked,
374+
New ClassifiedTextElement(
375+
New ClassifiedTextRun(ClassificationTypeNames.Text, "Item 2.1")))),
369376
New ContainerElement(
370377
ContainerElementStyle.Wrapped,
371378
New ClassifiedTextElement(

src/Features/Core/Portable/QuickInfo/Presentation/TaggedTextExtensions.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,14 @@ ref TextElementBuilder.AsRef(in nestedBuilder),
5959

6060
case TextTags.ContainerEnd:
6161
// We're finished processing inline elements. Break out and let the caller continue
62+
63+
// Documentation formatting may add an extra LineBreak after ContainerEnd to separate
64+
// elements in LSP scenarios. During rendering, we consume this extra LineBreak to
65+
// prevent double spacing, since each line is already rendered on its own line.
66+
if (taggedTexts is [var head, ..] && head.Tag == TextTags.LineBreak)
67+
{
68+
taggedTexts = taggedTexts[1..];
69+
}
6270
done = true;
6371
break;
6472

0 commit comments

Comments
 (0)