Может ли эта ошибка 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
,