def _format_node(obj):
    """
    Return the format for the given node.
    """
    if isinstance(obj, SimType):
        return FORMATS["type"]
    elif isinstance(obj, CFunctionCall):
        if obj.callee_func is not None and (
            obj.callee_func.is_simprocedure or obj.callee_func.is_plt or obj.callee_func.is_syscall
        ):
            return FORMATS["library_function"]
        return FORMATS["function"]
    elif isinstance(obj, CFunction):
        return FORMATS["function"]
    elif isinstance(obj, CLabel):
        return FORMATS["label"]
    elif isinstance(obj, CVariable):
        if type(obj.variable) is SimMemoryVariable:
            return FORMATS["global_variable"]
        return FORMATS["variable"]
    elif isinstance(obj, CArrayTypeLength):
        # This is the part that goes after a fixed-size array (the
        # "[20]" in "char foo[20];"), and it's highly unlikely
        # that anyone will want to change the color here. But if
        # you do, follow the format of the rest.
        return FORMATS["normal"]
    elif isinstance(obj, CStructFieldNameDef):
        # This is the part that is a field name in a struct def,
        # and it's highly unlikely that anyone will want to change
        # the color here. But if you do, follow the format of the
        # rest.
        return FORMATS["normal"]
    elif isinstance(obj, CClosingObject | CStatement | CConstant | CExpression):
        return FORMATS["normal"]
    return FORMATS["normal"]

    Return the format for the given node.
    
angrmanagement/ui/widgets/qccode_highlighter.py