diff --git a/lib/ruby_lsp/ruby_lsp_rails/addon.rb b/lib/ruby_lsp/ruby_lsp_rails/addon.rb index 6f137c6f..0a31d353 100644 --- a/lib/ruby_lsp/ruby_lsp_rails/addon.rb +++ b/lib/ruby_lsp/ruby_lsp_rails/addon.rb @@ -32,6 +32,12 @@ def initialize @rails_runner_client = T.let(NullClient.new, RunnerClient) @global_state = T.let(nil, T.nilable(GlobalState)) @outgoing_queue = T.let(nil, T.nilable(Thread::Queue)) + @settings = T.let( + { + enablePendingMigrationsPrompt: true, + }, + T::Hash[Symbol, T.untyped], + ) @addon_mutex = T.let(Mutex.new, Mutex) @client_mutex = T.let(Mutex.new, Mutex) @client_mutex.lock @@ -58,6 +64,9 @@ def activate(global_state, outgoing_queue) @outgoing_queue = outgoing_queue @outgoing_queue << Notification.window_log_message("Activating Ruby LSP Rails add-on v#{VERSION}") + addon_settings = @global_state.settings_for_addon(name) + @settings.merge!(addon_settings) if addon_settings + register_additional_file_watchers(global_state: global_state, outgoing_queue: outgoing_queue) # Start booting the real client in a background thread. Until this completes, the client will be a NullClient @@ -258,6 +267,7 @@ def fixture_file_watcher def offer_to_run_pending_migrations return unless @outgoing_queue return unless @global_state&.client_capabilities&.window_show_message_supports_extra_properties + return unless @settings[:enablePendingMigrationsPrompt] migration_message = @rails_runner_client.pending_migrations_message return unless migration_message diff --git a/test/ruby_lsp_rails/addon_test.rb b/test/ruby_lsp_rails/addon_test.rb index 63213552..510cc22b 100644 --- a/test/ruby_lsp_rails/addon_test.rb +++ b/test/ruby_lsp_rails/addon_test.rb @@ -92,6 +92,35 @@ class AddonTest < ActiveSupport::TestCase ensure T.must(outgoing_queue).close end + + test "migration dialog respects enabled setting" do + outgoing_queue = Thread::Queue.new + global_state = GlobalState.new + global_state.apply_options({ + capabilities: { window: { showMessage: { messageActionItem: { additionalPropertiesSupport: true } } } }, + initializationOptions: { addonSettings: { "Ruby LSP Rails": { enablePendingMigrationsPrompt: false } } }, + }) + + refute(T.must(global_state.settings_for_addon("Ruby LSP Rails"))[:enablePendingMigrationsPrompt]) + + addon = Addon.new + addon.activate(global_state, outgoing_queue) + + # Wait until activation is done + Thread.new do + addon.rails_runner_client + end.join + + RunnerClient.any_instance.expects(:pending_migrations_message).never + addon.workspace_did_change_watched_files([ + { + uri: "file://#{dummy_root}/db/migrate/20210901000000_create_foos.rb", + type: RubyLsp::Constant::FileChangeType::CREATED, + }, + ]) + ensure + T.must(outgoing_queue).close + end end end end