docs: async function block(name = '', skip = 0) {
  	const
  		baseRoot = path.join(sourceDirs[0], config.blockDir);
  
  	if (!name) {
  		return baseRoot;
  	}
  
  	const
  		baseExt = path.extname(name),
  		advExt = baseExt ? '' : 'index.js';
  
  	let
  		r = sourceDirs,
  		ctx;
  
  	if (Sugar.Object.isString(skip)) {
  		ctx = skip;
  		skip = 0;
  	}
  
  	if (config.superRgxp.test(name)) {
  		if (!ctx) {
  			throw Error('Context for block is not defined');
  		}
  
  		name = name.replace(config.superRgxp, '');
  		r = r.slice(1);
  
  		for (let i = 0; i < r.length; i++) {
  			if (isPathInside(ctx, r[i])) {
  				r = r.slice(i + 1);
  				break;
  			}
  		}
  	}
  
  	const
  		wrap = (path, lvl) => skip ? {path, from: lvl + 1} : path;
  
  	for (let i = skip; i < r.length; i++) {
  		if (i && baseExt && ignore[i - 1].has(baseExt)) {
  			continue;
  		}
  
  		const
  			root = r[i],
  			file = path.join(name, advExt).replace(/\.logic$/, `.${types[i]}`);
  
  		if (!glob.hasMagic(file) && fs.existsSync(path.join(root, file))) {
  			return wrap(path.join(root, baseExt ? file : name), i);
  		}
  
  		const
  			components = `/**/${file}`,
  			virtualComponents = !baseExt && `/**/${name}.index.js`,
  			mask = [path.join(root, components)].concat(virtualComponents ? path.join(root, virtualComponents) : []);
  
  		let src;
  		await $C(vinyl.src(mask, {read: false})).one.forEach((el, i, data, o) => {
  			src = el.path;
  			o.cursor.destroy();
  		});
  
  		if (src) {
  			return wrap(advExt ? path.dirname(src) : src, i);
  		}
  	}
  
  	return baseExt || skip ? null : path.join(baseRoot, name);
  }