MCPcopy Create free account
hub / github.com/KDE/kdevelop / findOpeningBracketOrEnd

Function findOpeningBracketOrEnd

kdevplatform/language/duchain/stringhelpers.cpp:298–337  ·  view source on GitHub ↗

Finds in @p str the position of @p parens[0] or @p parens[2] starting from @p pos at the top level. @return the position of the found symbol or str.size() if not found. @param parens see ParamIterator().

Source from the content-addressed store, hash-verified

296/// @return the position of the found symbol or str.size() if not found.
297/// @param parens see ParamIterator().
298int findOpeningBracketOrEnd(QStringView parens, QStringView str, int pos)
299{
300 Q_ASSERT(pos >= 0 && pos <= str.size());
301
302 Q_ASSERT(parens.size() == 2 || parens.size() == 3);
303
304 Q_ASSERT(QStringView(u"<([{").contains(parens[0]));
305 Q_ASSERT(parens.first(2) == u"<>" || parens[1] == fittingClosingNonAngleBracket(parens[0]));
306
307 Q_ASSERT(parens.size() == 2 || !QStringView(u"<>()[]{}").contains(parens[2]));
308
309 for (; pos < str.size(); ++pos) {
310 switch (str[pos].unicode()) {
311 // Take into account brackets of all types to skip searched-for symbols within them (i.e. not at the top level).
312 case '<':
313 if (!isOperator(str, pos)) {
314 if (str[pos] == parens[0]) {
315 return pos;
316 }
317 pos = findClosingAngleBracket(str, pos);
318 }
319 break;
320 case '(':
321 case '[':
322 case '{':
323 if (str[pos] == parens[0]) {
324 return pos;
325 }
326 pos = findClosingNonAngleBracket(str, pos);
327 break;
328 default:
329 if (parens.size() > 2 && str[pos] == parens[2]) {
330 return pos;
331 }
332 pos = trySkipStringOrCharLiteralOrComment(str, pos);
333 }
334 }
335
336 return str.size();
337}
338} // unnamed namespace
339
340int findCommaOrEnd(QStringView str, int pos, QChar validEnd)

Callers 1

ParamIteratorMethod · 0.85

Calls 9

isOperatorFunction · 0.85
findClosingAngleBracketFunction · 0.85
QStringViewClass · 0.70
sizeMethod · 0.45
containsMethod · 0.45
firstMethod · 0.45

Tested by

no test coverage detected