首页 > 解决方案 > Rubocop 如何静态检查 ruby​​ 语法错误

问题描述

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

标签: rubyrubocop

解决方案


你甚至不需要像 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)

推荐阅读