nodes: 0, module; 1, function_definition; 2, function_name:_get_tags; 3, parameters; 4, block; 5, identifier:c; 6, expression_statement; 7, expression_statement; 8, for_statement; 9, comment:# Version objects sort semantically; 10, return_statement; 11, comment:"""
      Return sorted list of release-style tags as semver objects.
      """; 12, assignment; 13, identifier:tagstr; 14, call; 15, block; 16, call; 17, identifier:tags_; 18, list; 19, attribute; 20, argument_list; 21, try_statement; 22, identifier:sorted; 23, argument_list; 24, call; 25, identifier:split; 26, string:"\n"; 27, block; 28, comment:# Ignore anything non-semver; most of the time they'll be non-release; 29, comment:# tags, and even if they are, we can't reason about anything; 30, comment:# non-semver anyways.; 31, comment:# TODO: perhaps log these to DEBUG; 32, except_clause; 33, identifier:tags_; 34, attribute; 35, argument_list; 36, expression_statement; 37, identifier:ValueError; 38, block; 39, attribute; 40, identifier:strip; 41, call; 42, pass_statement; 43, call; 44, identifier:stdout; 45, attribute; 46, argument_list; 47, attribute; 48, argument_list; 49, identifier:tags_; 50, identifier:append; 51, call; 52, identifier:c; 53, identifier:run; 54, string:"git tag"; 55, keyword_argument; 56, identifier:Version; 57, argument_list; 58, identifier:hide; 59, True; 60, identifier:tagstr
code: def _get_tags(c):
      """
      Return sorted list of release-style tags as semver objects.
      """
      tags_ = []
      for tagstr in c.run("git tag", hide=True).stdout.strip().split("\n"):
          try:
              tags_.append(Version(tagstr))
          # Ignore anything non-semver; most of the time they'll be non-release
          # tags, and even if they are, we can't reason about anything
          # non-semver anyways.
          # TODO: perhaps log these to DEBUG
          except ValueError:
              pass
      # Version objects sort semantically
      return sorted(tags_)