Как создать Clojure Lint?

Один пример общей ошибки программирования Clojure ожидает, что ленивое выражение будет оценено для побочных эффектов. На первый взгляд, было бы полезно проверить неиспользованные ленивые выражения. Какой был бы лучший подход к выявлению этих и других распространенных ошибок? Должен ли основной компилятор проверять эти ситуации или должен ли он быть областью программы lint для обнаружения? Что было бы хорошим способом начать реализацию?

Ответы

Ответ 1

Как насчет:

  • Мультиметоды без метода :default
  • Отсутствующие строки документации
  • В тех случаях, когда аргумент функции всегда один и тот же, предлагая подсказки типа по аргументам
  • Указание нескольких копий идентичных анонимных функций
  • Указание хвостовой рекурсии и предложение реструктуризации
  • Использование макроса, в котором будет достаточно функции
  • Неиспользуемые аргументы, особенно аргументы типа & rest
  • Если функция будет использовать BigNums вместо просто ints или с плавающей запятой

Не знаю, как эти проверки будут реализованы, но они наверняка спасут меня от меня много раз.

Ответ 2

Несколько идей просто для начала; он может обнаружить ленивый код, который никогда не может быть реализован, или указать области, где будет использоваться рефлексия. Хотя, вообще, clojure немного молод, как язык, чтобы выразить общий набор доказуемых ошибок?