def get_nodekey(self, token, types=types, coll_abc=collections.abc):
        '''Given a particular token, check the visitor instance for methods
        mathing the computed methodnames (the function is a generator).
        '''
        # Check the mro.
        for mro_type in type(token).__mro__:
            yield mro_type.__name__

        # Check for callability.
        if callable(token):
            yield 'callable'

        # Check for the collections.abc types.
        abc_types = (
            'Hashable',
            'Iterable',
            'Iterator',
            'Sized',
            'Container',
            'Callable',
            'Set',
            'MutableSet',
            'Mapping',
            'MutableMapping',
            'MappingView',
            'KeysView',
            'ItemsView',
            'ValuesView',
            'Sequence',
            'MutableSequence',
            'ByteString')
        for type_name in abc_types:
            type_ = getattr(coll_abc, type_name, None)
            if type_ is None:
                continue
            if isinstance(token, type_):
                yield type_name

        # Check for the standard interpreter types in the types module.
        interp_types = (
            'BuiltinFunctionType',
            'BuiltinMethodType',
            'CodeType',
            'DynamicClassAttribute',
            'FrameType',
            'FunctionType',
            'GeneratorType',
            'GetSetDescriptorType',
            'LambdaType',
            'MappingProxyType',
            'MemberDescriptorType',
            'MethodType',
            'ModuleType',
            'SimpleNamespace',
            'TracebackType')
        for type_name in interp_types:
            type_ = getattr(types, type_name, None)
            if type_ is None:
                continue
            if isinstance(token, type_):
                yield type_name