<commit_before>'use strict';

var path = require('path');
var vow = require('vow');
var vowFs = require('vow-fs');

var techs = [
    'bemhtml',
    'css',
    'js'
];

/**
 * Создает файл для соответствующей технологии.
 *
 * @param  {string}   filePath
 * @param  {string}   tech     bemhtml|css|js.
 * @return {function}
 */
function appendTech(filePath) {
    return function (exist) {
        if (exist) {
            return;
        }

        return vowFs.write(filePath, '');
    };
}

/**
 * Получает список папок, которые необходимо создать.
 *
 * @param  {string} pathName
 * @return {array}
 */
function folderList(pathName) {
    pathName = path.resolve(pathName);

    var base = path.basename(pathName);
    var basePath = pathName.replace(RegExp(base + '$'), '');

    // блок
    if (/^([a-z\-]+)$/i.exec(base)) {
        return [
            path.join(basePath, RegExp.$1)
        ];
    // модификатор блока
    } else if (/^([a-z\-]+)(_[a-z\-]+)(?:_[a-z\-]+)?$/i.exec(base)) {
        return [
            path.join(basePath, RegExp.$1),
            path.join(basePath, RegExp.$1, RegExp.$2)
        ];
    // элемент блока
    } else if (/^([a-z\-]+)(__[a-z\-]+)$/i.exec(base)) {
        return [
            path.join(basePath, RegExp.$1),
            path.join(basePath, RegExp.$1, RegExp.$2)
        ];
    // модификатор элемента
    } else if (/^([a-z\-]+)(__[a-z\-]+)(_[a-z\-]+)(?:_[a-z\-]+)?$/i.exec(base)) {
        return [
            path.join(basePath, RegExp.$1),
            path.join(basePath, RegExp.$1, RegExp.$2),
            path.join(basePath, RegExp.$1, RegExp.$2, RegExp.$3)
        ];
    }
}

/**
 * Логирует ошибки.
 *
 * @param  {*} err
 */
exports.log = function (err) {
    console.log(err.stack || err);
};

/**
 * Создает БЕМ сущность.
 *
 * @param  {string}  str
 * @param  {boolean} bemhtml
 * @param  {boolean} css
 * @param  {boolean} js
 * @return {promise}
 */
exports.make = function (str) {
    var list = folderList(str);
    var promise = vow.resolve();

    list.forEach(function (pathName) {
        promise.then(vowFs.makeDir(pathName));
    });

    var ln = arguments.length;
    var basePath = list.pop();
    for (var a = 1; a < ln; ++a) {
        if (!arguments[a]) {
            continue;
        }

        var ext = techs[a - 1];
        var pathName = path.join(basePath, str + '.' + ext);
        promise
            .then(vowFs.exists(pathName))
            .then(appendTech(pathName, ext));
    }

    return promise;
};

// exports.rename = function () {};<commit_msg>Баг фикс для относительных путей<commit_after>'use strict';

var path = require('path');
var vow = require('vow');
var vowFs = require('vow-fs');

var techs = [
    'bemhtml',
    'css',
    'js'
];

/**
 * Создает файл для соответствующей технологии.
 *
 * @param  {string}   filePath
 * @param  {string}   tech     bemhtml|css|js.
 * @return {function}
 */
function appendTech(filePath) {
    return function (exist) {
        if (exist) {
            return;
        }

        console.log(filePath);

        return vowFs.write(filePath, '');
    };
}

/**
 * Получает список папок, которые необходимо создать.
 *
 * @param  {string} pathName
 * @return {array}
 */
function folderList(pathName) {
    pathName = path.resolve(pathName);

    var base = path.basename(pathName);
    var basePath = pathName.replace(RegExp(base + '$'), '');

    // блок
    if (/^([a-z\-]+)$/i.exec(base)) {
        return [
            path.join(basePath, RegExp.$1)
        ];
    // модификатор блока
    } else if (/^([a-z\-]+)(_[a-z\-]+)(?:_[a-z\-]+)?$/i.exec(base)) {
        return [
            path.join(basePath, RegExp.$1),
            path.join(basePath, RegExp.$1, RegExp.$2)
        ];
    // элемент блока
    } else if (/^([a-z\-]+)(__[a-z\-]+)$/i.exec(base)) {
        return [
            path.join(basePath, RegExp.$1),
            path.join(basePath, RegExp.$1, RegExp.$2)
        ];
    // модификатор элемента
    } else if (/^([a-z\-]+)(__[a-z\-]+)(_[a-z\-]+)(?:_[a-z\-]+)?$/i.exec(base)) {
        return [
            path.join(basePath, RegExp.$1),
            path.join(basePath, RegExp.$1, RegExp.$2),
            path.join(basePath, RegExp.$1, RegExp.$2, RegExp.$3)
        ];
    }
}

/**
 * Логирует ошибки.
 *
 * @param  {*} err
 */
exports.log = function (err) {
    console.log(err.stack || err);
};

/**
 * Создает БЕМ сущность.
 *
 * @param  {string}  str
 * @param  {boolean} bemhtml
 * @param  {boolean} css
 * @param  {boolean} js
 * @return {promise}
 */
exports.make = function (str) {
    var list = folderList(str);
    var promise = vow.resolve();

    list.forEach(function (pathName) {
        promise.then(vowFs.makeDir(pathName));
    });

    var ln = arguments.length;
    var basePath = list.pop();
    str = path.basename(str);
    for (var a = 1; a < ln; ++a) {
        if (!arguments[a]) {
            continue;
        }

        var ext = techs[a - 1];
        var pathName = path.join(basePath, str + '.' + ext);
        promise
            .then(vowFs.exists(pathName))
            .then(appendTech(pathName, ext));
    }

    return promise;
};

// exports.rename = function () {};
{'fraction_non_alphanumeric': 0.19280603364919743, 'fraction_numerical': 0.0058015857667762525, 'mean_word_length': 2.1007194244604315, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '269627', 'n_tokens_mistral': 1933, 'n_tokens_neox': 1935, 'n_words': 357}