Google Closure Compiler напечатан на 100%

Как я могу сделать так, чтобы мое приложение было напечатано на 100% относительно компилятора Google Closure?

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

4 ответа

Решение

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

  1. Скачать текущие источники:

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

  2. Отредактируйте src/com/google/javascript/jscomp/CompilerOptions.java и измените строку reportUnknownTypes = CheckLevel.OFF в reportUnknownTypes = CheckLevel.WARNING

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

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

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

--jscomp_warning=reportUnknownTypes

Вам также нужно будет повысить уровень предупреждения.

--warning_level=VERBOSE

Я попытался скомпилировать 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 не является статически типизированным языком. Закрытие пытается принести некоторые преимущества статически типизированных языков в JavaScript. И это хорошо. Но это не значит, что вы должны нести бремя языков такого типа.

РЕДАКТИРОВАТЬ:

Я попытался скомпилировать пустой файл, и результат составил 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%. Просто введите столько текста, сколько вам нужно, чтобы вам было комфортно с вашим собственным кодом.

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

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

  1. скачать источник git clone https://code.google.com/p/closure-compiler/ и перейти к closure-compiler

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

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

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

Другие вопросы по тегам