MCPcopy Create free account
hub / github.com/CppCXY/EmmyLuaCodeStyle / Query

Method Query

CodeFormatCore/src/Format/Analyzer/LineBreakAnalyzer.cpp:191–235  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

189}
190
191void LineBreakAnalyzer::Query(FormatState &f, LuaSyntaxNode syntaxNode, const LuaSyntaxTree &t, FormatResolve &resolve) {
192 auto it = _lineBreaks.find(syntaxNode.GetIndex());
193 bool collapse = false;
194 if (it != _lineBreaks.end()) {
195 collapse = it->second.Strategy == LineBreakStrategy::NotBreak;
196 }
197 if (syntaxNode.IsToken(t) && !collapse) {
198 if (resolve.GetNextSpaceStrategy() == NextSpaceStrategy::None || resolve.GetNextSpaceStrategy() == NextSpaceStrategy::Space) {
199 auto nextToken = syntaxNode.GetNextToken(t);
200 if (nextToken.IsToken(t)) {
201 auto currentLine = syntaxNode.GetEndLine(t);
202 auto nextLine = nextToken.GetStartLine(t);
203 // 既然已经打断那就算了
204 if (nextLine > currentLine) {
205 resolve.SetNextLineBreak(LineSpace(nextLine - currentLine));
206 }
207 }
208 }
209 }
210
211 // force break
212 if (it != _lineBreaks.end()) {
213 auto &lineBreakData = it->second;
214 switch (lineBreakData.Strategy) {
215 case LineBreakStrategy::Standard: {
216 resolve.SetNextLineBreak(lineBreakData.Data.Line);
217 break;
218 }
219 case LineBreakStrategy::WhenMayExceed: {
220 auto lineWidth = f.CurrentWidth();
221 auto &style = f.GetStyle();
222 auto relationNode = LuaSyntaxNode(lineBreakData.Data.Index);
223 auto guessLineWidth = lineWidth + syntaxNode.GetFirstLineWidth(t) + relationNode.GetFirstLineWidth(t);
224 if (guessLineWidth > style.max_line_length) {
225 f.Notify(FormatEvent::NodeExceedLinebreak, syntaxNode, t);
226 resolve.SetNextLineBreak(LineSpace(1, LineBreakReason::ExceedMaxLine));
227 }
228 break;
229 }
230 default: {
231 break;
232 }
233 }
234 }
235}
236
237void LineBreakAnalyzer::BreakAfter(LuaSyntaxNode n, const LuaSyntaxTree &t, std::size_t line) {
238 auto token = n.GetLastToken(t);

Callers

nothing calls this directly

Calls 14

LineSpaceClass · 0.85
LuaSyntaxNodeClass · 0.85
GetIndexMethod · 0.80
GetNextSpaceStrategyMethod · 0.80
GetEndLineMethod · 0.80
GetStartLineMethod · 0.80
SetNextLineBreakMethod · 0.80
GetStyleMethod · 0.80
GetFirstLineWidthMethod · 0.80
NotifyMethod · 0.80
findMethod · 0.45
endMethod · 0.45

Tested by

no test coverage detected