| 66 | } |
| 67 | |
| 68 | void FormatBuilder::DoResolve(LuaSyntaxNode &syntaxNode, const LuaSyntaxTree &t, FormatResolve &resolve) { |
| 69 | if (syntaxNode.IsToken(t)) { |
| 70 | if (_state.IsNewLine(syntaxNode, t)) { |
| 71 | WriteIndent(); |
| 72 | auto indentAnalyzer = _state.GetAnalyzer<IndentationAnalyzer>(); |
| 73 | if (indentAnalyzer) { |
| 74 | indentAnalyzer->MarkIndent(syntaxNode, t); |
| 75 | } |
| 76 | } |
| 77 | |
| 78 | switch (resolve.GetPrevSpaceStrategy()) { |
| 79 | case PrevSpaceStrategy::AlignPos: { |
| 80 | auto pos = resolve.GetAlign(); |
| 81 | if (pos > _state.CurrentWidth()) { |
| 82 | auto space = pos - _state.CurrentWidth(); |
| 83 | WriteSpace(space); |
| 84 | } |
| 85 | break; |
| 86 | } |
| 87 | case PrevSpaceStrategy::AlignRelativeIndent: { |
| 88 | auto relativePos = resolve.GetAlign(); |
| 89 | auto indentState = _state.GetCurrentIndent(); |
| 90 | auto pos = relativePos + indentState.SpaceSize + indentState.TabSize * _state.GetStyle().tab_width; |
| 91 | if (pos > _state.CurrentWidth()) { |
| 92 | auto space = pos - _state.CurrentWidth(); |
| 93 | WriteSpace(space); |
| 94 | } |
| 95 | break; |
| 96 | } |
| 97 | default: { |
| 98 | break; |
| 99 | } |
| 100 | } |
| 101 | |
| 102 | switch (resolve.GetPrevTokenStrategy()) { |
| 103 | case PrevTokenStrategy::LeftParentheses: { |
| 104 | WriteChar('('); |
| 105 | break; |
| 106 | } |
| 107 | default: { |
| 108 | break; |
| 109 | } |
| 110 | } |
| 111 | |
| 112 | switch (resolve.GetTokenStrategy()) { |
| 113 | case TokenStrategy::Origin: { |
| 114 | WriteSyntaxNode(syntaxNode, t); |
| 115 | break; |
| 116 | } |
| 117 | case TokenStrategy::StmtEndSemicolon: |
| 118 | case TokenStrategy::Remove: { |
| 119 | break; |
| 120 | } |
| 121 | case TokenStrategy::StringSingleQuote: { |
| 122 | if (syntaxNode.GetTokenKind(t) == TK_STRING) { |
| 123 | auto text = syntaxNode.GetText(t); |
| 124 | auto del = '\''; |
| 125 | if (text.size() >= 2 && text.front() == '\"' && !string_util::ExistDel(del, text)) { |
nothing calls this directly
no test coverage detected