code: def nextversion(current_version):
      
      norm_ver = verlib.suggest_normalized_version(current_version)
      if norm_ver is None:
          return None
      norm_ver = verlib.NormalizedVersion(norm_ver)
  
      # increment last version figure
      parts = norm_ver.parts   # see comments of `verlib.py` to get the idea of `parts`
      assert(len(parts) == 3)
      if len(parts[2]) > 1:    # postdev
          if parts[2][-1] == 'f':  # when `post` exists but `dev` doesn't
              parts = _mk_incremented_parts(parts, part_idx=2, in_part_idx=-2, incval=1)
          else:                    # when both `post` and `dev` exist
              parts = _mk_incremented_parts(parts, part_idx=2, in_part_idx=-1, incval=1)
      elif len(parts[1]) > 1:  # prerel
          parts = _mk_incremented_parts(parts, part_idx=1, in_part_idx=-1, incval=1)
      else:                    # version & extraversion
          parts = _mk_incremented_parts(parts, part_idx=0, in_part_idx=-1, incval=1)
      norm_ver.parts = parts
  
      return str(norm_ver)
docs: Returns incremented module version number.
  
      :param current_version: version string to increment
      :returns:               Next version string (PEP 386 compatible) if possible.
                              If impossible (since `current_version` is too far from PEP 386),
                              `None` is returned.