docs: def task(*args, **kwargs):
  	'''Register a function as a task, as well as applying any attributes. '''
  
  	# support @task
  	if args and hasattr(args[0], '__call__'):
  		return _taskify(args[0])
  
  	# as well as @task(), @task('default'), etc.
  	else:
  		def wrapper(func):
  			global DEFAULT, SETUP, TEARDOWN
  			func = _taskify(func)
  
  			if 'default' in args:
  				DEFAULT = func
  
  			if 'setup' in args:
  				SETUP = func
  
  			if 'teardown' in args:
  				TEARDOWN = func
  
  			if 'private' in args:
  				TASKS.remove(func)
  
  			if 'method' in args:
  				func.method = True
  				func.args = func.args[1:]
  
  			if 'consume' in args:
  				func.consume = True
  
  			if 'reqs' in kwargs:
  				func.reqs = _tuplify(kwargs['reqs'])
  				func.file_reqs = [req for req in func.reqs if type(req) is str]
  				func.task_reqs = [req for req in func.reqs if type(req) is not str]
  
  			if 'gens' in kwargs:
  				func.gens = kwargs['gens']
  				GENERATES[kwargs['gens']] = func
  
  			if 'alias' in kwargs:
  				func.aliases = _tuplify(kwargs['alias'])
  
  			if 'namespace' in kwargs:
  				func.ns = kwargs['namespace'] + '.' if kwargs['namespace'] else ''
  
  			return func
  
  		return wrapper