diff --git a/lib/syntax_tree/cli.rb b/lib/syntax_tree/cli.rb index 2484a5b7..cad4fc35 100644 --- a/lib/syntax_tree/cli.rb +++ b/lib/syntax_tree/cli.rb @@ -246,7 +246,7 @@ def run(item) #{Color.bold("stree help")} Display this help message - #{Color.bold("stree lsp [--plugins=...]")} + #{Color.bold("stree lsp [--plugins=...] [--print-width=NUMBER]")} Run syntax tree in language server mode #{Color.bold("stree version")} @@ -300,7 +300,7 @@ def run(argv) return 0 when "lsp" require "syntax_tree/language_server" - LanguageServer.new.run + LanguageServer.new(print_width: print_width).run return 0 when "version" puts SyntaxTree::VERSION diff --git a/lib/syntax_tree/language_server.rb b/lib/syntax_tree/language_server.rb index 2eb8228b..41b80af1 100644 --- a/lib/syntax_tree/language_server.rb +++ b/lib/syntax_tree/language_server.rb @@ -13,11 +13,16 @@ module SyntaxTree # stree lsp # class LanguageServer - attr_reader :input, :output + attr_reader :input, :output, :print_width - def initialize(input: $stdin, output: $stdout) + def initialize( + input: $stdin, + output: $stdout, + print_width: DEFAULT_PRINT_WIDTH + ) @input = input.binmode @output = output.binmode + @print_width = print_width end # rubocop:disable Layout/LineLength @@ -93,7 +98,7 @@ def format(source) character: 0 } }, - newText: SyntaxTree.format(source) + newText: SyntaxTree.format(source, print_width) } end diff --git a/test/language_server_test.rb b/test/language_server_test.rb index fc26054d..31062e87 100644 --- a/test/language_server_test.rb +++ b/test/language_server_test.rb @@ -120,6 +120,26 @@ def test_formatting end end + def test_formatting_print_width + contents = "#{"a" * 40} + #{"b" * 40}\n" + messages = [ + Initialize.new(1), + TextDocumentDidOpen.new("file:///path/to/file.rb", contents), + TextDocumentFormatting.new(2, "file:///path/to/file.rb"), + TextDocumentDidClose.new("file:///path/to/file.rb"), + Shutdown.new(3) + ] + + case run_server(messages, print_width: 100) + in [ + { id: 1, result: { capabilities: Hash } }, + { id: 2, result: [{ newText: new_text }] }, + { id: 3, result: {} } + ] + assert_equal(contents, new_text) + end + end + def test_inlay_hint messages = [ Initialize.new(1), @@ -234,11 +254,15 @@ def read(content) end end - def run_server(messages) + def run_server(messages, print_width: DEFAULT_PRINT_WIDTH) input = StringIO.new(messages.map { |message| write(message) }.join) output = StringIO.new - LanguageServer.new(input: input, output: output).run + LanguageServer.new( + input: input, + output: output, + print_width: print_width + ).run read(output.tap(&:rewind)) end end