@Nullable
  private static @Nls String describeExpression(@NotNull PyExpression expression,
                                                @NotNull PsiElement originalElement,
                                                @NotNull TypeEvalContext context) {
    final String name = expression.getName();
    if (name != null) {
      final HtmlBuilder result = new HtmlBuilder();
      if (expression instanceof PyNamedParameter) {
        final PyFunction function = PsiTreeUtil.getParentOfType(expression, PyFunction.class);
        if (function != null) {
          final String functionName = function.getName();
          if (function.getContainingClass() == null) {
            result.append(PyPsiBundle.message("QDOC.parameter.of.function.name", name, functionName));
          }
          else {
            result.append(PyPsiBundle.message("QDOC.parameter.of.method.name", name, functionName));
          }
        }
        else {
          result.append(PyPsiBundle.message("QDOC.parameter.name", name));
        }
      }
      else {
        result.append(PyPsiBundle.message("QDOC.variable.name", name));
      }

      if (originalElement instanceof PyTypedElement typedElement) {
        final PyType type = context.getType(typedElement);
        final HtmlChunk formattedType = formatTypeWithLinks(type, typedElement, typedElement, context);
        result.br().appendRaw(PyPsiBundle.message("QDOC.inferred.type.name", formattedType));
      }
      return result.toString();
    }
    return null;
  }
@Nullable
  private static @Nls String describeExpression(@NotNull PyExpression expression,
                                                @NotNull PsiElement originalElement,
                                                @NotNull TypeEvalContext context)