File: use_language_server_aliases_test.rb

package info (click to toggle)
ruby-ruby-lsp 0.26.7-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 27,676 kB
  • sloc: ruby: 35,294; javascript: 29; sh: 7; makefile: 4
file content (134 lines) | stat: -rw-r--r-- 5,169 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
# typed: true
# frozen_string_literal: true

require "test_helper"

require "rubocop-minitest"
require "rubocop/minitest/assert_offense"

class UseLanguageServerAliasesTest < Minitest::Test
  include RuboCop::Minitest::AssertOffense

  def setup
    # Reload because Rubocop is unloaded by test/requests/formatting_test.rb
    # assert_offense calls RuboCop::RSpec::ExpectOffense::AnnotatedSource
    require "rubocop/rspec/expect_offense"

    @cop = ::RuboCop::Cop::RubyLsp::UseLanguageServerAliases.new
  end

  def test_registers_offense_when_using_interface_within_ruby_lsp
    assert_offense(<<~RUBY)
      module RubyLsp
        sig { override.returns(T.all(T::Array[LanguageServer::Protocol::Interface::FoldingRange], Object)) }
                                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ RubyLsp/UseLanguageServerAliases: Use constant alias `Interface`.
      end
    RUBY

    assert_correction(<<~RUBY)
      module RubyLsp
        sig { override.returns(T.all(T::Array[Interface::FoldingRange], Object)) }
      end
    RUBY
  end

  def test_does_not_register_offense_when_using_interface_outside_ruby_lsp
    assert_no_offenses(<<~RUBY)
      sig { override.returns(T.all(T::Array[LanguageServer::Protocol::Interface::FoldingRange], Object)) }
    RUBY
  end

  def test_registers_offense_when_using_transport_within_ruby_lsp
    assert_offense(<<~RUBY)
      module RubyLsp
        sig { override.returns(T.all(T::Array[LanguageServer::Protocol::Transport::FoldingRange], Object)) }
                                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ RubyLsp/UseLanguageServerAliases: Use constant alias `Transport`.
      end
    RUBY

    assert_correction(<<~RUBY)
      module RubyLsp
        sig { override.returns(T.all(T::Array[Transport::FoldingRange], Object)) }
      end
    RUBY
  end

  def test_does_not_register_offense_when_using_transport_outside_ruby_lsp
    assert_no_offenses(<<~RUBY)
      sig { override.returns(T.all(T::Array[LanguageServer::Protocol::Transport::FoldingRange], Object)) }
    RUBY
  end

  def test_registers_offense_when_using_constant_within_ruby_lsp
    assert_offense(<<~RUBY)
      module RubyLsp
        sig { override.returns(T.all(T::Array[LanguageServer::Protocol::Constant::FoldingRange], Object)) }
                                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ RubyLsp/UseLanguageServerAliases: Use constant alias `Constant`.
      end
    RUBY

    assert_correction(<<~RUBY)
      module RubyLsp
        sig { override.returns(T.all(T::Array[Constant::FoldingRange], Object)) }
      end
    RUBY
  end

  def test_does_not_register_offense_when_using_constant_outside_ruby_lsp
    assert_no_offenses(<<~RUBY)
      sig { override.returns(T.all(T::Array[LanguageServer::Protocol::Constant::FoldingRange], Object)) }
    RUBY
  end

  def test_registers_multiple_offenses
    assert_offense(<<~RUBY)
      module RubyLsp
        sig { override.returns(T.all(T::Array[LanguageServer::Protocol::Interface::FoldingRange], Object)) }
                                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ RubyLsp/UseLanguageServerAliases: Use constant alias `Interface`.
        sig { override.returns(T.all(T::Array[LanguageServer::Protocol::Transport::FoldingRange], Object)) }
                                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ RubyLsp/UseLanguageServerAliases: Use constant alias `Transport`.
        sig { override.returns(T.all(T::Array[LanguageServer::Protocol::Constant::FoldingRange], Object)) }
                                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ RubyLsp/UseLanguageServerAliases: Use constant alias `Constant`.
      end
    RUBY

    assert_correction(<<~RUBY)
      module RubyLsp
        sig { override.returns(T.all(T::Array[Interface::FoldingRange], Object)) }
        sig { override.returns(T.all(T::Array[Transport::FoldingRange], Object)) }
        sig { override.returns(T.all(T::Array[Constant::FoldingRange], Object)) }
      end
    RUBY
  end

  def test_does_not_register_offense
    assert_no_offenses(<<~RUBY)
      module RubyLsp
        Protocol = LanguageServer::Protocol
      end
    RUBY
  end

  def test_registers_the_correct_offense
    assert_offense(<<~RUBY)
      module RubyLsp
        sig { override.returns(T.all(T::Array[LanguageServer::Protocol::Interface::FoldingRange], Object)) }
                                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ RubyLsp/UseLanguageServerAliases: Use constant alias `Interface`.
      end
      sig { override.returns(T.all(T::Array[LanguageServer::Protocol::Transport::FoldingRange], Object)) }
    RUBY

    assert_correction(<<~RUBY)
      module RubyLsp
        sig { override.returns(T.all(T::Array[Interface::FoldingRange], Object)) }
      end
      sig { override.returns(T.all(T::Array[LanguageServer::Protocol::Transport::FoldingRange], Object)) }
    RUBY
  end

  def test_does_not_register_offense_when_using_unaliased_constant
    assert_no_offenses(<<~RUBY)
      sig { override.returns(T.all(T::Array[LanguageServer::Protocol::NewConst], Object)) }
    RUBY
  end
end