11#include " CodeService/FormatElement/AlignToFirstElement.h"
22
3+ #include " CodeService/FormatElement/KeepElement.h"
4+
35AlignToFirstElement::AlignToFirstElement ()
46{
57}
@@ -62,7 +64,16 @@ void AlignToFirstElement::Serialize(SerializeContext& ctx, ChildIterator selfIt,
6264 ctx.AddIndent (indentState);
6365 }
6466
65- child->Serialize (ctx, it, *this );
67+ if (child->Is (FormatElementType::KeepElement))
68+ {
69+ auto keepElement = std::dynamic_pointer_cast<KeepElement>(child);
70+
71+ keepElement->AllowBreakLineSerialize (ctx, it, *this );
72+ }
73+ else
74+ {
75+ child->Serialize (ctx, it, *this );
76+ }
6677 }
6778
6879 if (!_children.empty ())
@@ -83,43 +94,43 @@ void AlignToFirstElement::Diagnosis(DiagnosisContext& ctx, ChildIterator selfIt,
8394 switch (indentState.Style )
8495 {
8596 case IndentStyle::Space:
86- {
87- if (writeCount > indentState.SpaceIndent )
88- {
89- indentState.SpaceIndent = writeCount;
90- }
91- else
9297 {
93- indentState.SpaceIndent = ctx.GetColumn (child->GetTextRange ().StartOffset );
98+ if (writeCount > indentState.SpaceIndent )
99+ {
100+ indentState.SpaceIndent = writeCount;
101+ }
102+ else
103+ {
104+ indentState.SpaceIndent = ctx.GetColumn (child->GetTextRange ().StartOffset );
105+ }
106+ break ;
94107 }
95- break ;
96- }
97108 case IndentStyle::Tab:
98- {
99- if (writeCount > indentState.TabIndent )
100- {
101- indentState.SpaceIndent += writeCount - indentState.TabIndent ;
102- }
103- else
104109 {
105- auto & options = ctx.GetOptions ();
106- auto state = ctx.CalculateIndentState (child->GetTextRange ().StartOffset );
107- if (state.TabIndent < indentState.TabIndent )
110+ if (writeCount > indentState.TabIndent )
108111 {
109- auto diff = (indentState.TabIndent - state.TabIndent ) * options.tab_width ;
110- if (state.SpaceIndent > diff)
111- {
112- indentState.SpaceIndent = state.SpaceIndent - diff;
113- }
112+ indentState.SpaceIndent += writeCount - indentState.TabIndent ;
114113 }
115114 else
116115 {
117- indentState.SpaceIndent = (state.TabIndent - indentState.TabIndent ) * options.tab_width +
118- state.SpaceIndent ;
116+ auto & options = ctx.GetOptions ();
117+ auto state = ctx.CalculateIndentState (child->GetTextRange ().StartOffset );
118+ if (state.TabIndent < indentState.TabIndent )
119+ {
120+ auto diff = (indentState.TabIndent - state.TabIndent ) * options.tab_width ;
121+ if (state.SpaceIndent > diff)
122+ {
123+ indentState.SpaceIndent = state.SpaceIndent - diff;
124+ }
125+ }
126+ else
127+ {
128+ indentState.SpaceIndent = (state.TabIndent - indentState.TabIndent ) * options.tab_width +
129+ state.SpaceIndent ;
130+ }
119131 }
132+ break ;
120133 }
121- break ;
122- }
123134 }
124135 ctx.AddIndent (indentState);
125136 }
0 commit comments