void (@NotNull PyTargetExpression target, boolean isProperty) { if (isAttribute() && !isProperty) { final PyClass containingClass = target.getContainingClass(); @SuppressWarnings("ConstantConditions") final HtmlChunk link = getLinkToClass(containingClass, true); String targetName = target.getName(); if (link != null && targetName != null) { if (PyUtil.isInstanceAttribute(target)) { myBody.appendRaw(PyPsiBundle.message("QDOC.instance.attribute", HtmlChunk.text(targetName).bold(), link)); } else { myBody.appendRaw(PyPsiBundle.message("QDOC.class.attribute", HtmlChunk.text(targetName).bold(), link)); } myBody.br(); } // if there is no separate doc for attribute we will try to take it from class doc if (getEffectiveDocStringExpression(target) == null) { final PyStringLiteralExpression docString = getEffectiveDocStringExpression(containingClass); if (docString != null) { final StructuredDocString structuredDocString = DocStringUtil.parse(docString.getStringValue()); final String description = structuredDocString.getAttributeDescription(targetName); if (StringUtil.isNotEmpty(description)) { myContent.append(runFormatterService(description)); } } } } myBody.append(PythonDocumentationProvider.describeTarget(target, myContext)); }