Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Как бы скоро не пришлось писать на Dart, TypeScript ... (https://javascript.ru/forum/offtopic/42980-kak-skoro-ne-prishlos-pisat-na-dart-typescript.html)

monolithed 17.11.2013 20:32

Цитата:

Сообщение от kobezzza
GCC понимает эти анотации и использует их чтобы генерировать как можно более оптимальный и эффективный код

Я его еще использую как статический анализатор, т.е. если функция ожидат принять строку, а передается число, то выдается ошибка.

Цитата:

Сообщение от Gozar
В Erlang нельзя изменять значение переменной, не ясно какое отношение это имеет к типам?

Ну это так к слову :)

kobezzza 17.11.2013 21:24

Цитата:

Сообщение от monolithed (Сообщение 281563)
Я его еще использую как статический анализатор, т.е. если функция ожидат принять строку, а передается число, то выдается ошибка.

У меня это вебшторм делает:)

nerv_ 17.11.2013 22:13

Цитата:

Сообщение от Gozar
Не пора закончить этот затянувшийся разговор про ангуляр?

может быть :D

kobezzza, спасибо за ссылку.

Цитата:

Сообщение от monolithed
Я его еще использую как статический анализатор, т.е. если функция ожидат принять строку, а передается число, то выдается ошибка.

Цитата:

Сообщение от kobezzza
У меня это вебшторм делает

а можно напримере? Вот я по ссылке, кот. ты выше привел копирую кусок кода
/**
 * A shape.
 * @interface
 */
function Shape() {};
Shape.prototype.draw = function() {};

и делаю так
var obj = new Shape();
*!*
obj.paint();
*/!*

и хочу, чтобы в строчке отмеченной красным мне IDEшка ошибку бросала (не запуская код, разумеется). Это возможно?

kobezzza 17.11.2013 22:28

Цитата:

Сообщение от nerv_ (Сообщение 281574)
может быть :D

kobezzza, спасибо за ссылку.



а можно напримере? Вот я по ссылке, кот. ты выше привел копирую кусок кода
/**
 * A shape.
 * @interface
 */
function Shape() {};
Shape.prototype.draw = function() {};

и делаю так
var obj = new Shape();
*!*
obj.paint();
*/!*

и хочу, чтобы в строчке отмеченной красным мне IDEшка ошибку бросала (не запуская код, разумеется). Это возможно?

Разумеется.


Используя JSDoc ты получаешь полноценную поддержку IDE, как скажем при использовании Java.

monolithed 18.11.2013 00:08

Цитата:

Сообщение от kobezzza
У меня это вебшторм делает

В большом проекте это не вариант, да и не заставишь всех перейти на какой-то редактор.
Да я и сам часто пишу код в vim'e :)

Цитата:

Сообщение от nerv_
а можно напримере?

// ==ClosureCompiler==
// @compilation_level ADVANCED_OPTIMIZATIONS
// @output_file_name default.js
// ==/ClosureCompiler==

/** @param {string} string */
function hello(string) {
    return string
}

hello(1);

Будет получено предупреждение:
Number of warnings: 1

JSC_TYPE_MISMATCH: actual parameter 1 of hello does not match formal parameter
found   : number
required: string at line 6 character 6
hello(1);

В моем случае будет ошибка, а не ворнинг и коммит не пройдет .

Протестить можно тут http://closure-compiler.appspot.com/
Список опций тут http://code.google.com/p/closure-compiler/wiki/Warnings

Мой конфиг:

#! /usr/bin/env sh

# Google closure compiler
# [url]http://code.google.com/p/closure-compiler/wiki/Warnings[/url]

# --compilation_level
# WHITESPACE_ONLY | SIMPLE_OPTIMIZATIONS | ADVANCED_OPTIMIZATIONS

# --compilation_level
# QUIET | DEFAULT | VERBOSE


timestamp=debug # `date +%s`

compiler=../tools/google/closure-compiler/build/compiler.jar
output=../cache/static/__init__

java -jar ${compiler} \
	--js="${output}.js" \
	--externs=../trunk/__slot__.js \
	--js_output_file="${output}.${timestamp}.js" \
	--create_source_map="${output}.${timestamp}.json" \
	--warning_level=QUIET \
	--summary_detail_level=3 \
	--charset=UTF-8 \
	--language_in=ECMASCRIPT5_STRICT \
	--compilation_level=SIMPLE_OPTIMIZATIONS \
	--formatting=SINGLE_QUOTES \
	--jscomp_error=ambiguousFunctionDecl \
	--jscomp_error=checkDebuggerStatement \
	--jscomp_error=checkRegExp \
	--jscomp_error=checkVars \
	--jscomp_error=const \
	--jscomp_error=constantProperty \
	--jscomp_error=es5Strict \
	--jscomp_error=internetExplorerChecks \
	--jscomp_error=invalidCasts \
	--jscomp_error=missingProperties \
	--jscomp_error=suspiciousCode \
	--jscomp_warning=undefinedNames \
	--jscomp_error=undefinedVars \
	--jscomp_warning=uselessCode \
	--jscomp_warning=externsValidation \
	--jscomp_warning=duplicate \
	--jscomp_warning=deprecated \
	--jscomp_warning=accessControls \
	--jscomp_warning=visibility \
	--jscomp_warning=checkTypes \
	--jscomp_warning=fileoverviewTags \
	--jscomp_warning=nonStandardJsDocs \
	--jscomp_warning=strictModuleDepCheck \
	--jscomp_warning=unknownDefines \
#	--jscomp_warning=globalThis \
#	--source_map_format=DEFAULT \
#	--use_types_for_optimization \
#	--create_name_map_files=true \
#	--print_ast \
#	--print_pass_graph \
#	--print_tree \

kobezzza 18.11.2013 08:29

Цитата:

Сообщение от monolithed (Сообщение 281580)
В большом проекте это не вариант, да и не заставишь всех перейти на какой-то редактор.
Да я и сам часто пишу код в vim'e :)

Ну выбор редактора - это личное дело каждого:) Но так или иначе у меня также проводится анализ на этапе сборки и выкладки: jshint (пробовал также Closure Linter, но он какой то кривой) + gcc.


Цитата:

Сообщение от monolithed (Сообщение 281580)
В моем случае будет ошибка, а не ворнинг и коммит не пройдет.

Ну кстати в WebStorm когда делаешь комит, то он ещё раз алертом выводит о всех варнингах и ошибках, а также комментариев todo. Ну и конечно бывает, когда варнинг сделан осмысленно:)


nerv_ 20.11.2013 15:29

kobezzza, monolithed, :thanks:

x-yuri 20.11.2013 21:49

Цитата:

Сообщение от Gozar
Не пора закончить этот затянувшийся разговор про ангуляр?

Цитата:

Сообщение от nerv_
может быть

вы обсуждали angularjs без меня? Я требую продолжения :)

nerv_ 20.11.2013 23:04

x-yuri, целая ветка форума есть под него :)

x-yuri 20.11.2013 23:36

Целая ветка форума это конечно круто, но зачем она мне, если вы и так уже все тут собрались :) ну или почти все...

p.s. пишу из убунты, если что :)


Часовой пояс GMT +3, время: 11:25.