From 80f82c86a52ff2856a146fab45d5248604e85de6 Mon Sep 17 00:00:00 2001 From: Andy Waite <13400+andyw8@users.noreply.github.com> Date: Fri, 4 Oct 2024 16:17:45 -0400 Subject: [PATCH] Enable RuboCop class structure --- .rubocop.yml | 25 +++++++++++++++++++ lib/core_ext/uri.rb | 4 +-- lib/ruby_lsp/erb_document.rb | 4 +-- .../requests/support/rubocop_runner.rb | 12 ++++----- .../response_builders/document_symbol.rb | 4 +-- lib/ruby_lsp/response_builders/hover.rb | 4 +-- .../semantic_highlighting.rb | 4 +-- .../response_builders/signature_help.rb | 4 +-- test/global_state_test.rb | 2 +- 9 files changed, 44 insertions(+), 19 deletions(-) diff --git a/.rubocop.yml b/.rubocop.yml index 6575a465f..f48b59dbf 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -58,3 +58,28 @@ Sorbet/StrictSigil: - "lib/ruby-lsp.rb" - "lib/ruby_indexer/lib/ruby_indexer/prefix_tree.rb" - "lib/ruby_lsp/load_sorbet.rb" + +Layout/ClassStructure: + Enabled: true + ExpectedOrder: + - module_inclusion + - constants + - public_attribute_macros + - public_delegate + - public_class_methods + - initializer + - public_methods + - protected_attribute_macros + - protected_methods + - private_attribute_macros + - private_delegate + - private_methods + Categories: + attribute_macros: + - attr_accessor + - attr_reader + - attr_writer + module_inclusion: + - include + - prepend + - extend diff --git a/lib/core_ext/uri.rb b/lib/core_ext/uri.rb index 42ddb1ef8..3741803fd 100644 --- a/lib/core_ext/uri.rb +++ b/lib/core_ext/uri.rb @@ -3,6 +3,8 @@ module URI class Generic + extend T::Sig + # Avoid a deprecation warning with Ruby 3.4 where the default parser was changed to RFC3986. # This condition must remain even after support for 3.4 has been dropped for users that have # `uri` in their lockfile, decoupling it from the ruby version. @@ -27,8 +29,6 @@ def from_path(path:, fragment: nil, scheme: "file") end end - extend T::Sig - sig { returns(T.nilable(String)) } def to_standardized_path parsed_path = path diff --git a/lib/ruby_lsp/erb_document.rb b/lib/ruby_lsp/erb_document.rb index 33b228a99..203944370 100644 --- a/lib/ruby_lsp/erb_document.rb +++ b/lib/ruby_lsp/erb_document.rb @@ -6,11 +6,11 @@ class ERBDocument < Document extend T::Sig extend T::Generic + ParseResultType = type_member { { fixed: Prism::ParseResult } } + sig { returns(String) } attr_reader :host_language_source - ParseResultType = type_member { { fixed: Prism::ParseResult } } - sig { params(source: String, version: Integer, uri: URI::Generic, encoding: Encoding).void } def initialize(source:, version:, uri:, encoding: Encoding::UTF_8) # This has to be initialized before calling super because we call `parse` in the parent constructor, which diff --git a/lib/ruby_lsp/requests/support/rubocop_runner.rb b/lib/ruby_lsp/requests/support/rubocop_runner.rb index 40f164b6b..cacbc3cf1 100644 --- a/lib/ruby_lsp/requests/support/rubocop_runner.rb +++ b/lib/ruby_lsp/requests/support/rubocop_runner.rb @@ -47,12 +47,6 @@ class RuboCopRunner < RuboCop::Runner class ConfigurationError < StandardError; end - sig { returns(T::Array[RuboCop::Cop::Offense]) } - attr_reader :offenses - - sig { returns(::RuboCop::Config) } - attr_reader :config_for_working_directory - DEFAULT_ARGS = T.let( [ "--stderr", # Print any output to stderr so that our stdout does not get polluted @@ -63,6 +57,12 @@ class ConfigurationError < StandardError; end T::Array[String], ) + sig { returns(T::Array[RuboCop::Cop::Offense]) } + attr_reader :offenses + + sig { returns(::RuboCop::Config) } + attr_reader :config_for_working_directory + begin RuboCop::Options.new.parse(["--raise-cop-error"]) DEFAULT_ARGS << "--raise-cop-error" diff --git a/lib/ruby_lsp/response_builders/document_symbol.rb b/lib/ruby_lsp/response_builders/document_symbol.rb index 00a1354b6..167dca70e 100644 --- a/lib/ruby_lsp/response_builders/document_symbol.rb +++ b/lib/ruby_lsp/response_builders/document_symbol.rb @@ -4,6 +4,8 @@ module RubyLsp module ResponseBuilders class DocumentSymbol < ResponseBuilder + extend T::Sig + ResponseType = type_member { { fixed: T::Array[Interface::DocumentSymbol] } } class SymbolHierarchyRoot @@ -18,8 +20,6 @@ def initialize end end - extend T::Sig - sig { void } def initialize super diff --git a/lib/ruby_lsp/response_builders/hover.rb b/lib/ruby_lsp/response_builders/hover.rb index d2809f055..8b03fe13a 100644 --- a/lib/ruby_lsp/response_builders/hover.rb +++ b/lib/ruby_lsp/response_builders/hover.rb @@ -4,11 +4,11 @@ module RubyLsp module ResponseBuilders class Hover < ResponseBuilder - ResponseType = type_member { { fixed: String } } - extend T::Sig extend T::Generic + ResponseType = type_member { { fixed: String } } + sig { void } def initialize super diff --git a/lib/ruby_lsp/response_builders/semantic_highlighting.rb b/lib/ruby_lsp/response_builders/semantic_highlighting.rb index c7354464b..f8b7fe384 100644 --- a/lib/ruby_lsp/response_builders/semantic_highlighting.rb +++ b/lib/ruby_lsp/response_builders/semantic_highlighting.rb @@ -6,6 +6,8 @@ module ResponseBuilders class SemanticHighlighting < ResponseBuilder class UndefinedTokenType < StandardError; end + extend T::Sig + TOKEN_TYPES = T.let( { namespace: 0, @@ -51,8 +53,6 @@ class UndefinedTokenType < StandardError; end T::Hash[Symbol, Integer], ) - extend T::Sig - ResponseType = type_member { { fixed: Interface::SemanticTokens } } sig { params(encoding: Encoding).void } diff --git a/lib/ruby_lsp/response_builders/signature_help.rb b/lib/ruby_lsp/response_builders/signature_help.rb index b1f9d0775..f6cdbf9de 100644 --- a/lib/ruby_lsp/response_builders/signature_help.rb +++ b/lib/ruby_lsp/response_builders/signature_help.rb @@ -4,10 +4,10 @@ module RubyLsp module ResponseBuilders class SignatureHelp < ResponseBuilder - ResponseType = type_member { { fixed: T.nilable(Interface::SignatureHelp) } } - extend T::Sig + ResponseType = type_member { { fixed: T.nilable(Interface::SignatureHelp) } } + sig { void } def initialize super diff --git a/test/global_state_test.rb b/test/global_state_test.rb index a8d69ac8e..577e11df4 100644 --- a/test/global_state_test.rb +++ b/test/global_state_test.rb @@ -229,7 +229,7 @@ def stub_direct_dependencies(dependencies) Bundler.locked_gems.stubs(dependencies: dependencies) end - BundlerSpec = Struct.new(:name) + BundlerSpec = Struct.new(:name) # rubocop:disable Layout/ClassStructure def stub_all_dependencies(*dependencies) Bundler.locked_gems.stubs(specs: dependencies.map { BundlerSpec.new(_1) }) end