@NotNull
  static HtmlChunk describeTypeParameter(@NotNull PyTypeParameter typeParameter, boolean showKind, @NotNull TypeEvalContext context) {
    HtmlBuilder result = new HtmlBuilder();
    result.append(styledSpan(StringUtil.notNullize(typeParameter.getName()), PyHighlighter.PY_TYPE_PARAMETER));
    PyExpression boundExpression = typeParameter.getBoundExpression();
    if (boundExpression != null && typeParameter.getBoundExpressionText() != null) {
      result.append(styledSpan(": ", PyHighlighter.PY_OPERATION_SIGN));
      result.append(highlightExpressionText(typeParameter.getBoundExpressionText(), typeParameter.getBoundExpression()));
    }
    if (showKind) {
      result
        .append(", ")
        .append(PyPsiBundle.message("QDOC.type.parameter.kind"))
        .append(" ")
        .append(styledSpan(formatTypeWithLinks(context.getType(typeParameter), typeParameter, typeParameter, context), PyHighlighter.PY_ANNOTATION));
    }
    return result.toFragment();
  }
@NotNull
  static HtmlChunk describeTypeParameter(@NotNull PyTypeParameter typeParameter, boolean showKind, @NotNull TypeEvalContext context)