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"
