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
|