Google Closure Compiler напечатан на 100% - PullRequest
10 голосов
/ 20 ноября 2010

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

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

Ответы [ 4 ]

15 голосов
/ 01 февраля 2011

МОЖНО достичь 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%.

9 голосов
/ 22 февраля 2014

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

--jscomp_warning=reportUnknownTypes

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

--warning_level=VERBOSE
5 голосов
/ 20 ноября 2010

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

0 голосов
/ 06 сентября 2013

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

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

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

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

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

Но будьте осторожны, tightenTypes является экспериментальным и довольно сломанным.

...