code: function verify(parts, asPrefix) {
  	const has = arrayHas(parts);
  
  	if (has('only') + has('skip') + has('todo') > 1) {
  		return false;
  	}
  
  	const beforeAfterCount = has('before') + has('beforeEach') + has('after') + has('afterEach');
  
  	if (beforeAfterCount > 1) {
  		return false;
  	}
  
  	if (beforeAfterCount === 1) {
  		if (has('only')) {
  			return false;
  		}
  	}
  
  	if (has('always')) {
  		// `always` can only be used with `after` or `afterEach`.
  		// Without it can still be a valid prefix
  		if (has('after') || has('afterEach')) {
  			return true;
  		}
  
  		if (!verify(parts.concat(['after']), false) && !verify(parts.concat(['afterEach']), false)) {
  			// If `after` nor `afterEach` cannot be added to this prefix,
  			// `always` is not allowed here.
  			return false;
  		}
  
  		// Only allowed as a prefix
  		return asPrefix;
  	}
  
  	return true;
  }
docs: Checks whether a chain is a valid function name (when `asPrefix === false`) or a valid prefix that could contain members. For instance, `test.always` is not a valid function name, but it is a valid prefix of `test.always.after`.