Rubocop如何静态检查Ruby语法错误

时间:2019-05-12 04:52:52

标签: ruby rubocop

Rubocop如何静态检查ruby语法错误?由于Ruby是一种动态语言,因此,如果您不使用Rubocop,那么在运行时只会通知您语法错误吗?即当您运行程序时,它会由于语法错误而崩溃吗?

2 个答案:

答案 0 :(得分:3)

您甚至不需要像Rubocop这样的工具。 Ruby本身无需执行代码即可检查语法:

$ ruby --help
Usage: ruby [switches] [--] [programfile] [arguments]
[...]
-c              check syntax only
[...]

让我们检查是否发现语法错误:

$ ruby -c -e "def; end"
-e:1: syntax error, unexpected ';'

Ruby首先读取并解析源​​代码,然后在后续步骤中执行。如果解析的第一步已经由于代码没有意义而失败了,那么无论如何都将无法执行。不是执行发现语法错误,而是代码的解析。

但是,当然会有Ruby找不到的错误,但是其他编程语言在编译代码时会检测到。例如TypeError

$ ruby -c -e "[1,2][:bar]"
Syntax OK

语法很好,但是此代码确实有效吗?

$ ruby -e "[1,2][:bar]"
Traceback (most recent call last):
-e:1:in `<main>': no implicit conversion of Symbol into Integer (TypeError)

答案 1 :(得分:0)

RuboCop使用parser宝石。 gem在解析时遇到语法错误时会提供一些诊断信息。 RuboCop只需将解析错误重新打包在Lint/Syntax cop内,并使用诊断信息创建带有良好错误消息的RuboCop攻击。