     # - line = The line number where the warning is.
     # - col = The column where the warning is within the line.
     # - message = The warning text.
-    messages = helpers.parse(output[1],
-                             "^(?<file>([A-Z]:)?[^:]+)[:](?<line>\\d+):(?:(?<col>\\d+):)? error: (?<message>.+)",
-                             {flags: 'gm'})
+    regexLine = new NamedRegexp("^(?<file>([A-Z]:)?[^:]+)[:](?<line>\\d+):(?:(?<col>\\d+):)? error: (?<message>.+)")
+    regexHeuristic01 = new NamedRegexp("^Argument . to .(?<name>.+). has incompatible type ..+.; expected ..+.$")
 
     # Prepare an array of all the warnings to report.
     result = []
-    messages.forEach (msg) ->
-      @fastParser = output[0]
+    for msg, idx in output[1]
+      v_CurrMessageRaw = regexLine.execGroups(msg)
+      if v_CurrMessageRaw
+      else
+        continue
+
       # At this point every messages will be reported, we won't filter them
       # But we will improve them a little to make them more helpful.
 
       #HACK: Work around since mypy only provide the start column of the error, we have to use heuristics for the end column of the warning, without this workaround the warning would not be underline.
-      warnOrigStartLine = msg.range[0][0]
-      warnOrigStartCol = msg.range[0][1]
-      warnOrigEndLine = msg.range[1][0]
-      warnOrigEndCol = msg.range[1][1]
+      warnOrigStartLine = parseInt(v_CurrMessageRaw.line, 10) - 1
+      warnOrigStartCol = parseInt(v_CurrMessageRaw.col, 10) - 1
+      if warnOrigStartCol < 0
+        warnOrigStartCol = 0
+
+      warnOrigEndLine = warnOrigStartLine
+      warnOrigEndCol = warnOrigStartCol
 
       warnStartLine = warnOrigStartLine
       warnStartCol = warnOrigStartCol

          warnEndCol += 1

      #Rational: Since we know the method name we can underline its length
      compiledRegexp = new NamedRegexp("^Argument . to .(?<name>.+). has incompatible type ..+.; expected ..+.$", "g")
      rawMatch = compiledRegexp.exec(msg.text)
      if rawMatch
        if (@fastParser)
          warnEndCol += rawMatch[1].length
        else
          warnStartCol -= rawMatch[1].length
        if 0 < warnOrigStartCol
          warnEndCol -= 1

      #TODO: Put more heuristic

      msg.range = [[warnStartLine, warnStartCol], [warnEndLine, warnEndCol]]

      # The messages will be displayed as "Warning" to the user.
      msg.type = "Warning"

      #Append the current warning to the final result.
      result.push(msg)

    #The job is over, let's return the result so it can be displayed to the user.
    return result


      for key, val of lines
        if 0 == val.indexOf(filePath + ":")
          # Warning was reported using an absolute path to the file.
          result.push(val)
        else if 0 == val.indexOf(baseNamePath + ":")
          # Warning was reported using a relative path to the file.
          # Note: We use "path.join" even though "val" does not contain only the file name, but it creates the correct output nevertheless
          result.push(path.join(rootPath, val))
        else
          #Ignore, we only want warnings within the file being linted.
          ## This filters out warnings about *.pyi files
