From 15db8bc16784a51c4f0b67e11890d876567ecbd9 Mon Sep 17 00:00:00 2001 From: Vinicius Stock Date: Wed, 19 Jun 2024 16:07:09 -0400 Subject: [PATCH] Move experimental features into global state --- lib/ruby_lsp/global_state.rb | 5 ++++- lib/ruby_lsp/server.rb | 1 - lib/ruby_lsp/store.rb | 4 ---- test/global_state_test.rb | 11 +++++++++++ 4 files changed, 15 insertions(+), 6 deletions(-) diff --git a/lib/ruby_lsp/global_state.rb b/lib/ruby_lsp/global_state.rb index 9ca549f54..3b3bbac98 100644 --- a/lib/ruby_lsp/global_state.rb +++ b/lib/ruby_lsp/global_state.rb @@ -21,7 +21,7 @@ class GlobalState attr_reader :encoding sig { returns(T::Boolean) } - attr_reader :supports_watching_files + attr_reader :supports_watching_files, :experimental_features sig { returns(TypeInferrer) } attr_reader :type_inferrer @@ -39,6 +39,7 @@ def initialize @type_inferrer = T.let(TypeInferrer.new(@index), TypeInferrer) @supported_formatters = T.let({}, T::Hash[String, Requests::Support::Formatter]) @supports_watching_files = T.let(false, T::Boolean) + @experimental_features = T.let(false, T::Boolean) end sig { params(identifier: String, instance: Requests::Support::Formatter).void } @@ -87,6 +88,8 @@ def apply_options(options) if file_watching_caps&.dig(:dynamicRegistration) && file_watching_caps&.dig(:relativePatternSupport) @supports_watching_files = true end + + @experimental_features = options.dig(:initializationOptions, :experimentalFeaturesEnabled) || false end sig { returns(String) } diff --git a/lib/ruby_lsp/server.rb b/lib/ruby_lsp/server.rb index 08278da89..0b3ea35d9 100644 --- a/lib/ruby_lsp/server.rb +++ b/lib/ruby_lsp/server.rb @@ -137,7 +137,6 @@ def run_initialize(message) progress = options.dig(:capabilities, :window, :workDoneProgress) @store.supports_progress = progress.nil? ? true : progress configured_features = options.dig(:initializationOptions, :enabledFeatures) - @store.experimental_features = options.dig(:initializationOptions, :experimentalFeaturesEnabled) || false configured_hints = options.dig(:initializationOptions, :featuresConfiguration, :inlayHint) T.must(@store.features_configuration.dig(:inlayHint)).configuration.merge!(configured_hints) if configured_hints diff --git a/lib/ruby_lsp/store.rb b/lib/ruby_lsp/store.rb index 0186c8cc7..d1fcff11c 100644 --- a/lib/ruby_lsp/store.rb +++ b/lib/ruby_lsp/store.rb @@ -8,9 +8,6 @@ class Store sig { returns(T::Boolean) } attr_accessor :supports_progress - sig { returns(T::Boolean) } - attr_accessor :experimental_features - sig { returns(T::Hash[Symbol, RequestConfig]) } attr_accessor :features_configuration @@ -21,7 +18,6 @@ class Store def initialize @state = T.let({}, T::Hash[String, Document]) @supports_progress = T.let(true, T::Boolean) - @experimental_features = T.let(false, T::Boolean) @features_configuration = T.let( { inlayHint: RequestConfig.new({ diff --git a/test/global_state_test.rb b/test/global_state_test.rb index bbbb0fbad..9fcc57de6 100644 --- a/test/global_state_test.rb +++ b/test/global_state_test.rb @@ -176,6 +176,17 @@ def test_specifying_empty_linters assert_empty(state.instance_variable_get(:@linters)) end + def test_apply_options_sets_experimental_features + state = GlobalState.new + refute_predicate(state, :experimental_features) + + state.apply_options({ + initializationOptions: { experimentalFeaturesEnabled: true }, + }) + + assert_predicate(state, :experimental_features) + end + private def stub_direct_dependencies(dependencies)