【问题标题】:Can this Ruby error be caught with NeoVim/ALE/RuboCop/Syntastic?NeoVim/ALE/RuboCop/Syntastic 可以捕捉到这个 Ruby 错误吗?
【发布时间】:2019-01-20 08:41:02
【问题描述】:

我是 Ruby 新手,正在尝试使用 NeoVim/ALE,我也是新手。我来自 Perl,使用的是 syntastic 插件,我试图弄清楚如何最好地设置 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 没有发现这个错误。我打开了 syntastic,它也没有发现错误。我假设是因为它是一个运行时错误,而不是我认为的编译时错误。在脚本上运行 ruby -c 也不会产生错误。但也许我错了,没有正确使用语法检查工具。有人可以确认这确实是一个运行时错误并且在执行脚本之前不可能捕获吗?

我还有第二个问题:我需要 Ruby 的语法吗?它还能做 RuboCop 没有做的事情吗?

谢谢。

【问题讨论】:

    标签: ruby neovim rubocop linter


    【解决方案1】:

    两个工具都是正确的,因为Kernel中定义了Array()方法。

    这意味着这不是语法而是运行时错误,因为该方法至少需要一个参数。

    来自docs

    Array(arg) → arrayArray 的形式返回arg

    首先尝试在arg 上调用to_ary,然后是to_a。如果arg 没有响应to_aryto_a,则返回一个长度为1 的Array,其中包含arg

    【讨论】:

    • (尽管如果 Array 方法不存在,任何工具的行为都会有所不同——它仍然可能存在)
    • 我需要语法吗?它会做 RuboCop 没有做的事情吗?
    • syntastic 是什么意思?那是你正在使用的宝石吗?
    • 这是一个做语法检查的 vim 插件。我刚刚发现这条评论可能对我有所启发:“在具有托管运行时的语言(如 ruby​​)中,您并没有真正具有相同类型的编译时检查,一个好的 linter 更为重要。”似乎用 Ruby 捕获编译时错误更难。使用 Perl,很明显哪些错误是编译时错误,哪些是运行时错误。
    • @StevieD:如果您对检查语法感兴趣,那么是的,您将需要两者。因为 Rubocop 主要不是检查语法的工具,而是确保某些代码遵循定义的编码约定或您的团队同意的代码样式指南的工具。
    猜你喜欢
    • 2011-03-11
    • 2012-03-12
    • 1970-01-01
    • 2014-07-04
    • 2021-05-15
    • 2021-08-28
    • 2022-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多