Сообщение от siber-biber
|
Если победите форматирование кода отпишите здесь ..мне тоже не нравится что бандл итоговый переформатируется.
|
Я не большой специалист в Cmd, но с ребятами общался на эту тему. Весь код JavaScript парсится, токенизируется лексером и превращается в AST дерево. Потом по нему проходятся оптимизатором, пылесосом и добавляют ложку дёгтя. В конечной стадии AST дерево форматируется обратно в JavaScript код. Здесь важно понимать, что текст скомпилированного кода не имеет прямого отношения к изначальному, он проходит через бинарную стадию и оригинальный исходник теряется. Поэтому форматирование неизбежно.
Цитата:
|
Еще не нравится что в код добавляются лишние semicolons в конструкции switch (...) {...} ..пришлось jshint-у сказать чтоб на такое не ругался.
Как побороть всё это я не нашел.
|
А и не найдёте. Есть несколько таких мест, в которых наш компилятор вставляет "лишние" точки с запятой. Причина проста, хотя и не очевидна: в JavaScript есть одна говнофича под названием Automatic Semicolon Injection. Это когда вы можете забыть точку с запятой в конце строки, а код вроде работает и всё какбэ хорошо.
Так вот, мне один раз пришлось потратить полдня на отлавливание очень мерзкого усатого друга, который был призван в наш мир именно через дырку в ASI на транслированном коде. В одном или двух кусках кода цикл for() был использован как инкрементальный оператор, без блока {}. Примерно вот так:
// Я не помню, что конкретно этот код делал
for (i = 0; i < 10; i++)
// Тут был комментарий
foo = bar; // пошли дальше по коду
Это каким-то образом пролетало через парсеры JavaScript в браузерах, и ошибки не вызывало. Видимо, в конце строки с for() автоматически подставлялась точка с запятой. Когда же код был транслирован, он выглядел уже по-другому:
for (i = 0; i < 10; i++) foo = bar;
Видите проблему, да? Чёртов JavaScript. Вот чтобы от таких косяков перестраховаться, принтер кода и втыкает "лишние" точки с запятой.
А вообще до меня только что дошло - зачем вы вообще гоняете JSHint на сборке? Это боевой код, как правило минимизированный. Какая разница, как он выглядит?