From a53583d57387ec629ba9cb16e80bd0710cda31a4 Mon Sep 17 00:00:00 2001
From: Kai Koehne <kai.koehne@nokia.com>
Date: Mon, 8 Nov 2010 14:55:50 +0100
Subject: [PATCH] ApplicationOutput: Also linkify qml errors without column.

I didn't manage to find one regular expression that matches both lines with and
without column correctly. Instead use two distinct ones ...

Task-number: QTCREATORBUG-3022
---
 .../qt4projectmanager/qtoutputformatter.cpp   | 29 ++++++++++++++-----
 1 file changed, 22 insertions(+), 7 deletions(-)

diff --git a/src/plugins/qt4projectmanager/qtoutputformatter.cpp b/src/plugins/qt4projectmanager/qtoutputformatter.cpp
index 4917a937628..c993cf2a0de 100644
--- a/src/plugins/qt4projectmanager/qtoutputformatter.cpp
+++ b/src/plugins/qt4projectmanager/qtoutputformatter.cpp
@@ -42,7 +42,10 @@ using namespace Qt4ProjectManager;
 
 QtOutputFormatter::QtOutputFormatter(ProjectExplorer::Project *project)
     : OutputFormatter()
-    , m_qmlError(QLatin1String("(file:///.+:\\d+:\\d+):"))
+    , m_qmlError(QLatin1String("^(file:///.+"    // file url
+                               ":\\d+"           // colon, line
+                               "(?::\\d+)?)"     // colon, column (optional)
+                               ":"))             // colon
     , m_qtError(QLatin1String("Object::.*in (.*:\\d+)"))
     , m_qtAssert(QLatin1String("^ASSERT: .* in file (.+, line \\d+)$"))
     , m_qtTestFail(QLatin1String("^   Loc: \\[(.*)\\]$"))
@@ -176,16 +179,28 @@ void QtOutputFormatter::appendLine(QTextCursor &cursor, LinkResult lr, const QSt
 void QtOutputFormatter::handleLink(const QString &href)
 {
     if (!href.isEmpty()) {
-        const QRegExp qmlErrorLink(QLatin1String("^(file:///.+):(\\d+):(\\d+)"));
-
-        if (qmlErrorLink.indexIn(href) != -1) {
-            const QString fileName = QUrl(qmlErrorLink.cap(1)).toLocalFile();
-            const int line = qmlErrorLink.cap(2).toInt();
-            const int column = qmlErrorLink.cap(3).toInt();
+        const QRegExp qmlLineColumnLink(QLatin1String("^(file:///.+)" // file url
+                                                 ":(\\d+)"            // line
+                                                 ":(\\d+)$"));        // column
+
+        if (qmlLineColumnLink.indexIn(href) != -1) {
+            const QString fileName = QUrl(qmlLineColumnLink.cap(1)).toLocalFile();
+            const int line = qmlLineColumnLink.cap(2).toInt();
+            const int column = qmlLineColumnLink.cap(3).toInt();
             TextEditor::BaseTextEditor::openEditorAt(fileName, line, column - 1);
             return;
         }
 
+        const QRegExp qmlLineLink(QLatin1String("^(file:///.+)" // file url
+                                                 ":(\\d+)$"));  // line
+
+        if (qmlLineLink.indexIn(href) != -1) {
+            const QString fileName = QUrl(qmlLineLink.cap(1)).toLocalFile();
+            const int line = qmlLineLink.cap(2).toInt();
+            TextEditor::BaseTextEditor::openEditorAt(fileName, line);
+            return;
+        }
+
         QString fileName;
         int line = -1;
 
-- 
GitLab