@NotNull
  static HtmlChunk describeTypeAlias(@NotNull PyTypeAliasStatement typeAliasStatement, @NotNull TypeEvalContext context) {
    HtmlBuilder result = new HtmlBuilder();
    result.append(styledSpan("type ", PyHighlighter.PY_KEYWORD)); //NON-NLS
    result.append(styledSpan(StringUtil.notNullize(typeAliasStatement.getName()), DefaultLanguageHighlighterColors.IDENTIFIER));
    if (typeAliasStatement.getTypeParameterList() != null) {
      List<PyTypeParameter> typeParameters = typeAliasStatement.getTypeParameterList().getTypeParameters();
      result.append(styledSpan("[", PyHighlighter.PY_BRACKETS));
      result.append(StreamEx
                      .of(typeParameters)
                      .map(typeParameter -> describeTypeParameter(typeParameter, false, context))
                      .collect(HtmlChunk.toFragment(styledSpan(", ", PyHighlighter.PY_COMMA))));
      result.append(styledSpan("]", PyHighlighter.PY_BRACKETS));
    }
    PyExpression typeExpression = typeAliasStatement.getTypeExpression();
    if (typeExpression != null) {
      result.append(styledSpan(" = ", PyHighlighter.PY_OPERATION_SIGN));
      result.append(styledSpan(formatTypeWithLinks(context.getType(typeExpression),
                                                   typeExpression, typeAliasStatement, context), PyHighlighter.PY_ANNOTATION));
    }
    return result.toFragment();
  }
@NotNull
  static HtmlChunk describeTypeAlias(@NotNull PyTypeAliasStatement typeAliasStatement, @NotNull TypeEvalContext context)