Может ли эта ошибка Ruby быть обнаружена с помощью NeoVim/ALE/RuboCop/Syntastic?

Я новичок в Ruby и немного экспериментирую с NeoVim/ALE, с которым я тоже новичок. Я прихожу из Perl с помощью синтетического плагина и пытаюсь выяснить, как лучше всего настроить NeoVim/ALE/RuboCop. Я никогда раньше не пользовался делинтером.

Моя путаница проистекает из этого кода:

#!/usr/bin/env ruby

r = Array() # Improper array initialization, should be Array.new()
puts r

При запуске я получаю:

Traceback (most recent call last):
        1: from /Users/me/ruby/workshop/dink.rb:3:in `<main>'  
/Users/me/ruby/workshop/dink.rb:3:in `Array': wrong number of arguments (given  
0, expected 1) (ArgumentError)

RuboCop не уловил эту ошибку. Я включил синтетику, и она тоже не уловила ошибку. Я предполагаю, потому что это ошибка времени выполнения, а не ошибка времени компиляции, как я и думал. Бег ruby -c на скрипте тоже не выдает ошибок. Но, возможно, я ошибаюсь и неправильно использую инструменты проверки синтаксиса. Может кто-нибудь подтвердить, что это действительно ошибка во время выполнения и что ее невозможно отследить перед выполнением сценария?

У меня также есть второй вопрос: нужен ли мне синтетический с Ruby? Делает ли он что-то еще, чего нет у RuboCop?

Благодарю.

1 ответ

Решение

Оба инструмента верны, потому что есть Array() метод, определенный в Kernel,

Это означает, что это не синтаксис, а ошибка времени выполнения, поскольку этот метод ожидает хотя бы один аргумент.

Из документов:

Array(arg) → array Возвращает arg как Array,

Сначала пытается позвонить to_ary на arg, затем to_a, Если arg не отвечает на to_ary или же to_a возвращает Array длиной 1, содержащий arg,

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