def METHOD_NAME(node):
    if hasattr(node, 'inject_params'):
        node.inject_params = False
    snlite_info = {
        'inputs': [], 'outputs': [],
        'snlite_ui': [], 'includes': {},
        'custom_enum': [], 'custom_enum_2': [],
        'callbacks': {}, 'inputs_required': [],
    }
    directive = extract_directive_as_multiline_string(node.script_str)
    if not directive:
        print_node_script(node)
        return snlite_info
    for line in directive.split('\n'):
        L = line.strip()
        if L.startswith('in ') or L.startswith('out '):
            socket_dir = L.split(' ')[0] + 'puts'
            snlite_info[socket_dir].append(parse_socket_line(node, L))
        if L.startswith('>in '):
            # one or more inputs can be required before processing/showing errors
            input_info = parse_required_socket_line(node, L)
            snlite_info['inputs'].append(input_info)
            snlite_info['inputs_required'].append(input_info[1])
        if L.startswith('+in '):
            # this is extended :regex: parsing of socket info line.
            input_info = parse_extended_socket_line(node, L)
            snlite_info['inputs'].append(input_info)
        elif L.startswith('inject'):
            if hasattr(node, 'inject_params'):
                node.inject_params = True
        elif L.startswith('enum ='):
            snlite_info['custom_enum'] = L[6:].strip().split(' ')
        elif L.startswith('enum2 ='):
            snlite_info['custom_enum_2'] = L[7:].strip().split(' ')
        elif L.startswith('include <') and L.endswith('>'):
            filename = L[9:-1]
            file = bpy.data.texts.get(filename)
            if file:
                snlite_info['includes'][filename] = file.as_string()
        elif L in {'fh', 'filehandler'}:
            snlite_info['display_file_handler'] = True
    return snlite_info