code: def handle(self):
          
          #If we have more statements in the buffer than the cached, it doesn't matter, 
          #we just run the first few replacements of the cache concurrently and do 
          #what's left over from the buffer.
          #REVIEW
          if self.mode == "insert": #then self.icached[0] == self.icached[1]:
              #We are inserting the lines from the buffer into the cached version
              for ib in range(len(self.buffered)):
                  self.state = (ib, None)
                  self.parser.parse(self)
                  self._update_extent()
  
          elif self.mode == "delete": #then self.ibuffer[0] == self.ibuffer[1]:
              #We are deleting lines from the cached version
              for ic in range(len(self.cached)):
                  self.state = (None, ic)
                  self.parser.parse(self)
                  self._update_extent()
          
          else: # mode == 'replace'
              #Need lines from both the buffer and the cached version
              #First we run all the statements in cached as deletions
              for ic in range(len(self.cached)):
                  self.state = (None, ic)
                  self.parser.parse(self, "delete")
                  self._update_extent()
              #Then run all the buffer statements as insertions.
              for ib in range(len(self.buffered)):
                  self.state = (ib, None)
                  self.parser.parse(self, "insert")
                  self._update_extent()
  
          self._handle_docstrings()
docs: Handles the real time update of some code from the cached representation
          of the module.