docs: def noninjectable(*args):
      """Mark some parameters as not injectable.
  
      This serves as documentation for people reading the code and will prevent
      Injector from ever attempting to provide the parameters.
  
      For example:
  
      >>> class Service:
      ...    pass
      ...
      >>> class SomeClass:
      ...     @inject
      ...     @noninjectable('user_id')
      ...     def __init__(self, service: Service, user_id: int):
      ...         # ...
      ...         pass
  
      :func:`noninjectable` decorations can be stacked on top of
      each other and the order in which a function is decorated with
      :func:`inject` and :func:`noninjectable`
      doesn't matter.
      """
  
      def decorator(function):
          argspec = inspect.getfullargspec(inspect.unwrap(function))
          for arg in args:
              if arg not in argspec.args and arg not in argspec.kwonlyargs:
                  raise UnknownArgument('Unable to mark unknown argument %s ' 'as non-injectable.' % arg)
  
          existing = getattr(function, '__noninjectables__', set())
          merged = existing | set(args)
          function.__noninjectables__ = merged
          return function
  
      return decorator