       ScrollSubscription?.dispose()
     @Lint:->
       Main.V.H.exec(['--json'],null,ActiveFile).then (result)=>
-        try
-          result = JSON.parse(result.stderr.substr(result.stderr.indexOf('{')))
-        catch error
-          console.log "Invalid JSON"
-          console.log result
+        if result.stderr.substr(0,5) is 'Error'
+          setTimeout ->
+            throw new Error(result.stderr.substr(7)); # Throw an error that can not be caught
+          ,0
+          return ;
+        result = JSON.parse(result.stderr.substr(result.stderr.indexOf('{')))
         Errors = result.errors
+        if Main.V.H.config.type is 'remote'
+          Errors.forEach (ErrorEntry)->
+            ErrorEntry.message.forEach (ErrorMessageEntry)->
+              ErrorMessageEntry.path = ErrorMessageEntry.path.replace(Main.V.H.config.remoteDir, atom.project.getPath()).split('/').join(Path.sep)
         try
           @ProcessErrors()
         catch error

  ActiveFile = Editor?.getPath()
  ScrollSubscription = null
  ScrollTimeout = null
  class TypeChecker
    @activate:->
      return unless not Main.Status.TypeChecker

          clearTimeout ScrollTimeout
          ScrollTimeout = setTimeout(@OnScroll.bind(this),100)
      Subscriptions.push atom.workspace.observeTextEditors (editor)=>
	    Grammar = editor.getGrammar()
        return unless Grammar or Grammar.name isnt 'PHP' or Grammar.name isnt 'Hack' or Grammar.name isnt 'C++'
        editor.buffer.onDidSave (info)=>
          @Lint()
