           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)
+      rawMatch = regexHeuristic01.execGroups(v_CurrMessageRaw.message)
       if rawMatch
-        if (@fastParser)
-          warnEndCol += rawMatch[1].length
+        if (output[0])
+          warnEndCol += rawMatch.name.length
         else
-          warnStartCol -= rawMatch[1].length
+          warnStartCol -= rawMatch.name.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)
-
+      if true
+        #Linter version 1.0.0
+        result.push(
+          {
+            type: 'Warning',
+            filePath: v_CurrMessageRaw.file,
+            range: [[warnStartLine, warnStartCol], [warnEndLine, warnEndCol]],
+            text: v_CurrMessageRaw.message,
+          }
+        )
+      else
+        #Linter version 2.0.0
+        result.push(
+          {
+            severity: 'Warning',
+            location: {
+              file: v_CurrMessageRaw.file,
+              position: [[warnStartLine, warnStartCol], [warnEndLine, warnEndCol]]
+            },
+            excerpt: v_CurrMessageRaw.message,
+            description: ""
+          }
+        )
     #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 = result + val + os.EOL
        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 = result + path.join(rootPath, val) + os.EOL
        else
          #Ignore, we only want warnings within the file being linted.
          ## This filters out warnings about *.pyi files

    # - line = The line number where the warning is.
    # - col = The column where the warning is within the line.
    # - message = The warning text.
    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 = []
    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 = 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
