Компилятор Google Closure 100% напечатан

Как я могу получить свое приложение на 100% в отношении компилятора google закрытия?

Я уже отметил все комментарии jsdoc. Можно ли даже получить 100? Я на 64,6%

Ответ 1

Достичь 100%. Мои собственные проекты набираются на 100%. Компилятор замыкания может выводить предупреждения о выражениях с неизвестными типами. К сожалению, для включения этой функции нет опции командной строки. Вы должны изменить исходный код, чтобы включить его:

  • Загрузите текущие источники:

    git clone https://code.google.com/p/closure-compiler/

  • Измените src/com/google/javascript/jscomp/CompilerOptions.java и измените строку reportUnknownTypes = CheckLevel.OFF на reportUnknownTypes = CheckLevel.WARNING

  • Скомпилируйте компилятор замыкания, просто позвонив ant в корневой каталог. Измененный файл компилятора .jar теперь находится в каталоге сборки.

Когда вы используете этот модифицированный компилятор на своих сценариях, он выплескивает множество предупреждений обо всех выражениях, для которых компилятор не мог определить тип. Когда вы исправляете все эти предупреждения в своем коде, он набирается на 100%.

Ответ 2

Я пробовал компиляцию goog.net.XhrIo в качестве теста:

goog.require('goog.Uri.QueryData');
goog.require('goog.debug.ErrorHandler');
goog.require('goog.net.XhrIo');

goog.net.XhrIo;

когда я скомпилирую это, у меня есть этот результат:

20-nov-2010 1:12:21 com.google.javascript.jscomp.LoggerErrorManager printSummary
WARNING: 0 error(s), 1 warning(s), 91,5% typed
JSC_USELESS_CODE. Suspicious code. This code lacks side-effects. Is there a bug? at test.js line 5 : 0

Кажется, что сама библиотека закрытия не набирается на 100%, и я не думаю, что цель состоит в достижении 100%. Javascript не является статически типизированным языком. Closure пытается принести некоторые преимущества статически типизированных языков в javascript. И это хорошо. Но это не означает, что вы должны принести бремя этого типа языков.

EDIT:

Я попытался скомпилировать пустой файл, и результат был 90.4%. Я думаю, это означает, что base.js со всеми примитивными функциями не набирается на 100%. Поэтому я сделал еще несколько экспериментов и выяснил, что, когда я также добавляю информацию о типе во все мои локальные переменные, процент увеличивается. Я не думаю, что нужно поместить информацию о типе во все ваши локальные переменные. Я имею в виду представить это:

/** @type {number} */
var i = 0;
for(i = 0; i < 10; i++) {
  // do something
}

Это не может быть целью компиляции с компилятором закрытия. Это подтверждается тем фактом, что компиляция base.js не приводит к 100%. Я пытаюсь сохранить это число от 85% до 95% в моем развитии. В зависимости от вашего времени, стиль программирования и приложение, над которым вы работаете, могут варьироваться от курса. Лучшим ориентиром является стремление сохранить постоянную процентную ставку на протяжении всей разработки вашего приложения, будь то 60% или 90%. Просто сделайте столько, сколько нужно, чтобы у вас было комфортно с вашим собственным кодом.

Ответ 3

У компилятора есть флаг, который вы можете установить для того, чтобы неизвестные типы выдавали предупреждение.

--jscomp_warning=reportUnknownTypes

Вам также необходимо увеличить уровень предупреждения.

--warning_level=VERBOSE

Ответ 4

Все кредиты идут на @kayahr, но с тех пор прошло время. Я хотел бы предоставить обновление его ответа, которое основано на старой версии компилятора.

Вам необходимо перекомпилировать источник с принудительной проверкой типов. Для этого:

  • загрузите источник git clone https://code.google.com/p/closure-compiler/ и перейдите к closure-compiler

  • Измените src/com/google/javascript/jscomp/CompilerOptions.java и установите checkTypes в true. Вы также можете играть со всеми видами переменных компиляции и оптимизации.

  • Скомпилируйте код, запустив ant

Остерегайтесь, tightenTypes является экспериментальным и довольно сломанным.