Войти с помощью github
Форум /

Наверное все кто используют IDE, а не emacs сталкивались с проблемой, что IDE совсем не понимает BEM блоки. Это все связано с особенностями реализации наследования внутри bem-core - inherit.

При помощи JSDoc я всячески стараюсь объяснить IDE что же такое BEM-block. Но, увы 100% результат пока не достиг, имеются недостатки. Вот пример того как я описываю блоки:

/**
 * @module myBlock
 */
modules.define('myBlock', ['i-bem__dom'], function(provide, BEMDOM) {

/**
 * @augments BEM
 * @bem
 */
var myBlock = BEMDOM.decl(this.name, /** @lends myBlock.prototype */ {
    onSetMod: {
        js: {
            /**
             * @constructs
             */
            inited: function() { /* some code goes here */ }
        }
    }
}, /** @lends myBlock */ {
    live: function() {
        this.liveBindTo('some-elem', 'click', this.prototype._onSomeElemClick);
    }
});

provide(myBlock);

});

Подробнее:

  • имена классов и модулей не должны содержать тире, хоть BEM и предлагает нам называть блоки через тире, то JSDoc в именах классов тире не понимает, и напроч забивает на весь последующий код.
  • результат выполнения BEMDOM.decl надо класть в переменную, если сразу положить в provide работать не будет.

В целом данная схема оформления позволяет комфортно работать с прототипной частью блока, что касается live, там я пока не нашел решения.

Я не нашел никакого способа объяснить IDE, что эта часть наследуется от BEMDOM и BEM одновременно, но только от их статической части. Кажется к такому JSDoc не готов. В связи с чем у меня IDE не понимает что this.prototype, это прототип нашего же блока.

Сам я недавно стал заморачиваться с JSDoc и еще многого про него не знаю. Если у вас есть идеи как усовершенствовать описание блоков буду рад любой информации/критике