Giter VIP home page Giter VIP logo

bemhint's Introduction

bemhint Build Status Dependency Status devDependency Status

bemhint – это плагинируемый линтер БЭМ-проектов.

Данный модуль является ядром линтера, предоставляющим API для запуска и написания внешних плагинов, через которые реализуются проверки БЭМ-сущностей проекта.

Установка

$ npm install bemhint

Использование

$ bemhint --help

Использование:
    bemhint [ОПЦИИ] [АРГУМЕНТЫ]

Опции:
    -h, --help : Помощь
    -с CONFIGPATH, --config=CONFIGPATH : Путь до конфигурационного файла (по умолчанию: .bemhint.js)
    -r REPORTERS, --reporter=REPORTERS : Вид отчета с ошибками – flat и/или html (по умолчанию: flat)

Аргументы:
    TARGETS : Пути до БЭМ-сущностей для проверки (обязательный аргумент)

Конфигурационный файл

JS/JSON-файл следующего формата:

module.exports = {
    // cписок имен папок, которые являются уровнями переопределения (папками с блоками)
    levels: [
        '*.blocks',
        'blocks-*'
    ],

    // список путей, которые будут проигнорированы при проверке
    excludePaths: [
        'node_modules/**',
        'libs/**'
    ],

    // список подключаемых плагинов, плагины подключаются
    // относительно расположения конфигурационного файла
    plugins: {
        '<имя_плагина>': false, // плагин не будет подключен

        '<имя_плагина>': true, // обычное подключение плагина

        '<имя_плагина>': { // подключение плагина с конфигом
            // конфиг

            // список путей, которые будут проигнорированы плагином при проверке
            excludePaths: [
                'some.blocks/some-block/**',
                'some.blocks/another-block/_some-mod/*',
                'some.blocks/yet-another-block/yet-another-block.deps.js'
            ],

            techs: { // набор технологий, которые необходимо проверять плагином
                '*': false,
                'js|deps.js': true,
                'bemhtml.js': { // отдельный конфиг для технологии `bemhtml.js`
                    // конфиг
                }
            }

            // конфиг
        }
    }
};

Замечание! Конфиг для плагина может содержать не только зарезервированные поля excludePaths и techs, их наличие определяется реализацией плагина.

Написание плагинов

JS-файл следующего формата:

module.exports = {
    /**
     * Предопределенный конфиг для плагина,
     * данный конфиг будет объединен с пользовательским конфигом
     * @returns {Object}
     */
    configure: function() {
        return {
            // конфиг
        }
    },

    /**
     * @param {Entity[]} entities
     * @param {Config} config
     */
    forEntities: function(entities, config) {
        // Использование этой функции будет полезно,
        // если для реализации проверки необходимо знание
        // о всех БЭМ-сущностях проекта
    },

    /**
     * @param {Entity} entity
     * @param {Config} config
     */
    forEachEntity: function(entity, config) {
        // Использование этой функции будет полезно,
        // если для реализации проверки достаточно знание
        // о каждой из БЭМ-сущностей в отдельности
    },

    /**
     * @param {Object} tech
     * @param {Entity} entity
     * @param {Config} config
     */
    forEachTech: function(tech, entity, config) {
        // Использование этой функции будет полезно,
        // если для реализации проверки достаточно знание
        // о каждой из технологий БЭМ-сущностей в отдельности
    }
};

Замечание! Реализуемый плагин может содержать как одну из функций forEntities, forEachEntity, forEachTech, так и все три, при этом функция configure не является обязательной.

Entity

БЭМ-сущность проверяемого проекта (блок, элемент, модификатор).

Entity.prototype.getTechs
@returns {Object[]} - список технологий, в которых реализована данная БЭМ-сущность

Entity.prototype.getTechByName
@param {String} – имя технологии (css, js и т.д.)
@returns {Object} – технология БЭМ-сущности

Entity.prototype.addError
@param {Object} - объект, описывающий ошибку:

  • msg {String} – сообщение об ошибке
  • tech {String} – имя технологии, в которой найдена ошибка
  • [value] {String|Object} – значение ошибки

Config

Конфиг плагина.

Config.prototype.getConfig
@returns {Object} – полный конфиг для плагина

Config.prototype.getTechConfig
@param {String} – имя технологии (css, js и т.д.)
@returns {Object} – конфиг для технологии

Config.prototype.isExcludedPath
@param {String} – путь до технологии БЭМ-сущности
@returns {Boolean}

Примеры плагинов

bemhint's People

Contributors

egavr avatar

Watchers

hsalkaline avatar James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.