Чистота Анализ эквивалентно решению проблемы остановки, поэтому любой вид статического анализа, который может определить, является ли код является чистым или нечистым является невозможно в общем случае. Всегда будет бесконечно много программ, для которых оно неразрешимо независимо от того, являются ли они чистыми; некоторые из этих программ будут чистыми, некоторые нечистыми.
Теперь вы использовали термин «линтер» вместо статического анализатора (хотя, конечно, линкер - это просто статический анализатор), что, по-видимому, означает, что вы в порядке с приблизительным эвристическим результатом. У вас есть может иметь linter, который иногда говорит вам, что ваш код чист, иногда говорят вам, что ваш код нечист, и в большинстве случаев говорит вам, что он не может решить, является ли ваш код чистым или нечистым. И вы можете иметь белый список операций, которые, как известно, являются чистыми (например, добавление двух Number
с использованием оператора +
) и черный список операций, которые, как известно, являются нечистыми (например, все, что может генерировать исключение, любые типы циклов , if
, Array.prototype.forEach
) и выполните эвристическое сканирование для них.
Но в итоге результаты будут слишком ненадежными, чтобы с ними что-либо серьезное.
@VinodLouis: Насколько я знаю, JSLint не предлагает никакой возможности проверить функциональную чистоту. –
Можете ли вы описать, что вы называете «побочными эффектами в JavaScript»? – Justinas
JS построен на побочных эффектах как функция – Thomas