@@ -36,15 +36,15 @@ void FormatBuilder::WriteSyntaxNode(LuaSyntaxNode &syntaxNode, const LuaSyntaxTr
3636 break ;
3737 }
3838 default : {
39- _state.GetCurrentWidth () += text.size ();
39+ _state.CurrentWidth () += text.size ();
4040 _formattedText.append (text);
4141 }
4242 }
4343}
4444
4545void FormatBuilder::DoResolve (LuaSyntaxNode &syntaxNode, const LuaSyntaxTree &t, FormatResolve &resolve) {
4646 if (syntaxNode.IsToken (t)) {
47- if (_state.IsNewLine ()) {
47+ if (_state.IsNewLine (syntaxNode, t )) {
4848 WriteIndent ();
4949 auto indentAnalyzer = _state.GetAnalyzer <IndentationAnalyzer>();
5050 if (indentAnalyzer) {
@@ -55,8 +55,8 @@ void FormatBuilder::DoResolve(LuaSyntaxNode &syntaxNode, const LuaSyntaxTree &t,
5555 switch (resolve.GetPrevSpaceStrategy ()) {
5656 case PrevSpaceStrategy::AlignPos: {
5757 auto pos = resolve.GetAlign ();
58- if (pos > _state.GetCurrentWidth ()) {
59- auto space = pos - _state.GetCurrentWidth ();
58+ if (pos > _state.CurrentWidth ()) {
59+ auto space = pos - _state.CurrentWidth ();
6060 WriteSpace (space);
6161 }
6262 break ;
@@ -65,8 +65,8 @@ void FormatBuilder::DoResolve(LuaSyntaxNode &syntaxNode, const LuaSyntaxTree &t,
6565 auto relativePos = resolve.GetAlign ();
6666 auto indentState = _state.GetCurrentIndent ();
6767 auto pos = relativePos + indentState.SpaceSize + indentState.TabSize * _state.GetStyle ().tab_width ;
68- if (pos > _state.GetCurrentWidth ()) {
69- auto space = pos - _state.GetCurrentWidth ();
68+ if (pos > _state.CurrentWidth ()) {
69+ auto space = pos - _state.CurrentWidth ();
7070 WriteSpace (space);
7171 }
7272 break ;
@@ -133,6 +133,26 @@ void FormatBuilder::DoResolve(LuaSyntaxNode &syntaxNode, const LuaSyntaxTree &t,
133133 } else {
134134 WriteChar (' ,' );
135135 }
136+ break ;
137+ }
138+ case TokenStrategy::OriginRange: {
139+ auto range = resolve.GetOriginRange ();
140+ LuaSyntaxNode startNode (range.StartIndex );
141+ LuaSyntaxNode endNode (range.EndIndex );
142+ auto startOffset = startNode.GetTextRange (t).StartOffset ;
143+ auto endOffset = endNode.GetTextRange (t).StartOffset ;
144+ auto endLength = endNode.GetTextRange (t).Length ;
145+ if (endOffset >= startOffset) {
146+ TextRange textRange (startOffset, endOffset - startOffset + endLength);
147+ auto text = t.GetFile ().Slice (textRange);
148+ WriteText (text);
149+ auto nextToken = endNode.GetNextToken (t);
150+ if (nextToken.IsToken (t)) {
151+ auto line = nextToken.GetStartLine (t) - endNode.GetEndLine (t);
152+ WriteLine (line);
153+ }
154+ }
155+ return ;
136156 }
137157 default : {
138158 break ;
@@ -219,7 +239,7 @@ void FormatBuilder::WriteSpace(std::size_t space) {
219239 auto size = _formattedText.size ();
220240 _formattedText.resize (size + space, ' ' );
221241 }
222- _state.GetCurrentWidth () += space;
242+ _state.CurrentWidth () += space;
223243}
224244
225245void FormatBuilder::WriteLine (std::size_t line) {
@@ -272,7 +292,7 @@ void FormatBuilder::WriteLine(std::size_t line) {
272292 break ;
273293 }
274294 }
275- _state.GetCurrentWidth () = 0 ;
295+ _state.CurrentWidth () = 0 ;
276296}
277297
278298void FormatBuilder::WriteIndent () {
@@ -297,11 +317,11 @@ void FormatBuilder::WriteIndent() {
297317 break ;
298318 }
299319 }
300- _state.GetCurrentWidth () += topLevelIndent.SpaceSize + topLevelIndent.TabSize * _state.GetStyle ().tab_width ;
320+ _state.CurrentWidth () += topLevelIndent.SpaceSize + topLevelIndent.TabSize * _state.GetStyle ().tab_width ;
301321}
302322
303323void FormatBuilder::WriteChar (char ch) {
304- _state.GetCurrentWidth ()++;
324+ _state.CurrentWidth ()++;
305325 _formattedText.push_back (ch);
306326}
307327
@@ -324,7 +344,7 @@ void FormatBuilder::WriteText(std::string_view text) {
324344 }
325345
326346 if (text.size () > last) {
327- _state.GetCurrentWidth () += text.size () - last;
347+ _state.CurrentWidth () += text.size () - last;
328348 if (last != 0 ) {
329349 _formattedText.append (text.substr (last));
330350 } else {
0 commit comments