rules: - id: rbs.no_arg pattern: regexp: arg\d+ message: | Stop using parameter names like `arg0` or `arg1` The parameter names like `arg0` or `arg1` is not informative enough. Try finding good parameter names from documents or arglists. If you cannot find a good name, just delete the name of the parameters. justification: - Documents (comments) may contain that pattern. glob: - "{core,stdlib}/**/*.rbs" fail: - "def `send`: (interned arg0, *untyped arg1) -> untyped" pass: - "def `send`: (interned, *untyped) -> untyped" - id: rbs.prefer_boolish pattern: - regexp: '\([^(]*\bbool\b[^\n]*\)' - token: "-> bool }" message: | Prefer `boolish` over `bool` for method arguments and block return values See the doc below: https://github.com/ruby/rbs/blob/78d04a2db0f1c4925d2b13c2939868edf9465d6c/docs/syntax.md#bool-or-boolish glob: - "**/*.rbs" justification: - When you strictly want `true | false`. Use `bool` in this case. pass: - "(arg: boolish)" - "{ () -> boolish }" fail: - "(arg: bool)" - "{ () -> bool }" - id: deprecate_stdlib_test pattern: token: < StdlibTest message: | StdlibTest is deprecated We recommend writing tests based on `TypeAssertions` and `#assert_send_type`. justification: - When you are updating existing tests. - When you are writing tests for callback, which cannot be done with `#assert_send_type`. glob: - "test/stdlib/**/*_test.rb" fail: - | class IntegerTest < StdlibTest target Integer def test_plus 1 + 2 end end pass: - | class IntegerTest < Test::Unit::TestCase include TypeAssertions testing "Integer" def test_plus assert_send_type "(::Integer) -> ::Integer", 1, :+, 2 end end - id: no_trailing_whitespace pattern: regexp: '[ \t]+$' message: | Trim trailing whitespaces glob: - '**/*.rb' - '**/*.rbs' - '**/*.md' justification: - Let the maintainers know if it is an autogenerated files. pass: - "Hello world" - "Hello\nworld" - "Hello\n\nworld" fail: - "Hello world " - "Hello \nworld"