From 6cc81518e3b7c086673efff74ba7668ed722672a Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Tue, 18 Feb 2025 14:23:39 +0100 Subject: [PATCH] ProjectExplorer: Construct the LdParser regex from small, named parts Change-Id: Ia05451454e19836a59c8285895b5f826963bc419 Reviewed-by: Christian Stenger --- src/plugins/projectexplorer/ldparser.cpp | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/plugins/projectexplorer/ldparser.cpp b/src/plugins/projectexplorer/ldparser.cpp index 480f1a54ed6..de02a189f14 100644 --- a/src/plugins/projectexplorer/ldparser.cpp +++ b/src/plugins/projectexplorer/ldparser.cpp @@ -108,14 +108,15 @@ bool LdParser::isContinuation(const QString &line) const std::optional LdParser::checkMainRegex( const QString &trimmedLine, const QString &originalLine) { - static const auto makePattern = []() -> QString { - // opt. drive letter + filename: (2 brackets) - const char * const FILE_PATTERN = "(([A-Za-z]:)?[^:]+\\.[^:]+):"; - // line no. or elf segment + offset (1 bracket) - const char * const POSITION_PATTERN = "(\\S+|\\(\\..+?[+-]0x[a-fA-F0-9]+\\)):"; - return QLatin1Char('^') + QString::fromLatin1(FILE_PATTERN) + QLatin1Char('(') - + QString::fromLatin1(FILE_PATTERN) + QLatin1String(")?(") - + QLatin1String(POSITION_PATTERN) + QLatin1String(")?\\s(.+)$"); + static const auto makePattern = [] { + const QString driveSpec = "([A-Za-z]:)?"; + + const QString filePattern = QString(R"re((%1[^:]+\.[^:]+):)re").arg(driveSpec); + const QString lineNumber = R"re(\S+)re"; + const QString elfSegmentAndOffset = R"re(\(\..+?[+-]0x[a-fA-F0-9]+\))re"; + const QString positionPattern = QString("(%1|%2):").arg(lineNumber, elfSegmentAndOffset); + + return QString(R"re(^%1(%1)?(%2)?\s(.+)$)re").arg(filePattern, positionPattern); }; static const QRegularExpression regex(makePattern());