void (@NotNull PsiElement o, @NotNull AnnotationHolder holder) { // todo comment in case of poor performance because of the issue with EditorGutterComponentImpl#updateSize() if (o instanceof ShGenericCommandDirective) { mark(o, holder, GENERIC_COMMAND); } else if (o instanceof ShAssignmentCommand) { PsiElement literal = ((ShAssignmentCommand)o).getLiteral(); mark(literal, holder, VARIABLE_DECLARATION); } else if (o instanceof ShShellParameterExpansion) { ASTNode[] children = o.getNode().getChildren(TokenSet.create(ShTypes.PARAM_SEPARATOR)); for (ASTNode node : children) { mark(node.getPsi(), holder, COMPOSED_VARIABLE); } } else if (o instanceof ShSubshellCommand subshellCommand) { mark(subshellCommand.getLeftParen(), holder, SUBSHELL_COMMAND); mark(subshellCommand.getRightParen(), holder, SUBSHELL_COMMAND); } ASTNode node = o.getNode(); IElementType elementType = node == null ? null : node.getElementType(); if (elementType == ShTypes.WORD) { PsiElement parent = o.getParent(); if (parent instanceof ShSimpleCommandElement) { holder.newSilentAnnotation(HighlightSeverity.INFORMATION).enforcedTextAttributes(TextAttributes.ERASE_MARKER).create(); } if (parent instanceof ShFunctionDefinition) { mark(o, holder, FUNCTION_DECLARATION); } } }