Rubocop如何静态检查ruby语法错误?由于Ruby是一种动态语言,因此,如果您不使用Rubocop,那么在运行时只会通知您语法错误吗?即当您运行程序时,它会由于语法错误而崩溃吗?
答案 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攻击。