Skip to content

Commit 1bb9fe0

Browse files
authored
Apply formatter selected in initialization options (#1886)
1 parent 044568e commit 1bb9fe0

File tree

4 files changed

+19
-5
lines changed

4 files changed

+19
-5
lines changed

lib/ruby_lsp/global_state.rb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ class GlobalState
2121
def initialize
2222
@workspace_uri = T.let(URI::Generic.from_path(path: Dir.pwd), URI::Generic)
2323

24-
@formatter = T.let(detect_formatter, String)
24+
@formatter = T.let("auto", String)
2525
@test_library = T.let(detect_test_library, String)
2626
@typechecker = T.let(detect_typechecker, T::Boolean)
2727
@index = T.let(RubyIndexer::Index.new, RubyIndexer::Index)
@@ -42,6 +42,10 @@ def active_formatter
4242
def apply_options(options)
4343
workspace_uri = options.dig(:workspaceFolders, 0, :uri)
4444
@workspace_uri = URI(workspace_uri) if workspace_uri
45+
46+
specified_formatter = options.dig(:initializationOptions, :formatter)
47+
@formatter = specified_formatter if specified_formatter
48+
@formatter = detect_formatter if @formatter == "auto"
4549
end
4650

4751
sig { returns(String) }

lib/ruby_lsp/server.rb

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -129,8 +129,6 @@ def run_initialize(message)
129129

130130
progress = options.dig(:capabilities, :window, :workDoneProgress)
131131
@store.supports_progress = progress.nil? ? true : progress
132-
formatter = options.dig(:initializationOptions, :formatter) || "auto"
133-
134132
configured_features = options.dig(:initializationOptions, :enabledFeatures)
135133
@store.experimental_features = options.dig(:initializationOptions, :experimentalFeaturesEnabled) || false
136134

@@ -177,7 +175,7 @@ def run_initialize(message)
177175
document_link_provider: document_link_provider,
178176
folding_range_provider: folding_ranges_provider,
179177
semantic_tokens_provider: semantic_tokens_provider,
180-
document_formatting_provider: enabled_features["formatting"] && formatter != "none",
178+
document_formatting_provider: enabled_features["formatting"] && @global_state.formatter != "none",
181179
document_highlight_provider: enabled_features["documentHighlights"],
182180
code_action_provider: code_action_provider,
183181
document_on_type_formatting_provider: on_type_formatting_provider,

test/global_state_test.rb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,18 @@ def test_direct_dependency_returns_false_outside_of_bundle
5151
refute(GlobalState.new.direct_dependency?(/^ruby-lsp/))
5252
end
5353

54+
def test_apply_option_selects_formatter
55+
state = GlobalState.new
56+
state.apply_options({ initializationOptions: { formatter: "syntax_tree" } })
57+
assert_equal("syntax_tree", state.formatter)
58+
end
59+
60+
def test_applying_auto_formatter_invokes_detection
61+
state = GlobalState.new
62+
state.apply_options({ initializationOptions: { formatter: "auto" } })
63+
assert_equal("rubocop", state.formatter)
64+
end
65+
5466
private
5567

5668
def stub_dependencies(dependencies)

test/server_test.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ def test_server_info_includes_version
141141
end
142142

143143
def test_server_info_includes_formatter
144-
@server.global_state.expects(:formatter).returns("rubocop")
144+
@server.global_state.expects(:formatter).twice.returns("rubocop")
145145
capture_subprocess_io do
146146
@server.process_message({
147147
id: 1,

0 commit comments

Comments
 (0)