code: func (s *stackContext) render() lines {
  	siz := len(s.tags)
  	if s.internalReason != "" {
  		siz++
  	}
  	if s.reason != "" {
  		siz++
  	}
  	if siz == 0 {
  		return nil
  	}
  
  	ret := make(lines, 0, siz)
  	if s.reason != "" {
  		ret = append(ret, fmt.Sprintf("reason: %s", s.reason))
  	}
  	if s.internalReason != "" {
  		ret = append(ret, fmt.Sprintf("internal reason: %s", s.internalReason))
  	}
  	keys := make(tagKeySlice, 0, len(s.tags))
  	for key := range s.tags {
  		keys = append(keys, key)
  	}
  	sort.Sort(keys)
  	for _, key := range keys {
  		if key != nil {
  			ret = append(ret, fmt.Sprintf("tag[%q]: %#v", key.description, s.tags[key]))
  		} else {
  			ret = append(ret, fmt.Sprintf("tag[nil]: %#v", s.tags[key]))
  		}
  	}
  
  	return ret
  }
docs: // render renders the frame as a single entry in a stack trace. This looks like:
  //
  //  reason: "The literal content of the reason field: %(key2)d"
  //  internal reason: I am an internal reason formatted with key1: value