ruby-lsp 0.4.2 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +29 -116
  3. data/VERSION +1 -1
  4. data/exe/ruby-lsp +10 -1
  5. data/lib/rubocop/cop/ruby_lsp/use_language_server_aliases.rb +62 -0
  6. data/lib/ruby_lsp/check_docs.rb +112 -0
  7. data/lib/ruby_lsp/document.rb +87 -8
  8. data/lib/ruby_lsp/event_emitter.rb +120 -0
  9. data/lib/ruby_lsp/executor.rb +191 -44
  10. data/lib/ruby_lsp/extension.rb +104 -0
  11. data/lib/ruby_lsp/internal.rb +4 -0
  12. data/lib/ruby_lsp/listener.rb +42 -0
  13. data/lib/ruby_lsp/requests/base_request.rb +2 -90
  14. data/lib/ruby_lsp/requests/code_action_resolve.rb +47 -20
  15. data/lib/ruby_lsp/requests/code_actions.rb +6 -5
  16. data/lib/ruby_lsp/requests/code_lens.rb +151 -0
  17. data/lib/ruby_lsp/requests/diagnostics.rb +5 -5
  18. data/lib/ruby_lsp/requests/document_highlight.rb +8 -10
  19. data/lib/ruby_lsp/requests/document_link.rb +17 -15
  20. data/lib/ruby_lsp/requests/document_symbol.rb +63 -40
  21. data/lib/ruby_lsp/requests/folding_ranges.rb +14 -10
  22. data/lib/ruby_lsp/requests/formatting.rb +15 -15
  23. data/lib/ruby_lsp/requests/hover.rb +45 -34
  24. data/lib/ruby_lsp/requests/inlay_hints.rb +6 -5
  25. data/lib/ruby_lsp/requests/on_type_formatting.rb +5 -1
  26. data/lib/ruby_lsp/requests/path_completion.rb +21 -51
  27. data/lib/ruby_lsp/requests/selection_ranges.rb +4 -4
  28. data/lib/ruby_lsp/requests/semantic_highlighting.rb +30 -16
  29. data/lib/ruby_lsp/requests/support/common.rb +91 -0
  30. data/lib/ruby_lsp/requests/support/highlight_target.rb +5 -4
  31. data/lib/ruby_lsp/requests/support/rails_document_client.rb +7 -6
  32. data/lib/ruby_lsp/requests/support/rubocop_diagnostics_runner.rb +0 -1
  33. data/lib/ruby_lsp/requests/support/rubocop_formatting_runner.rb +0 -1
  34. data/lib/ruby_lsp/requests/support/selection_range.rb +1 -1
  35. data/lib/ruby_lsp/requests/support/semantic_token_encoder.rb +2 -2
  36. data/lib/ruby_lsp/requests/support/sorbet.rb +5 -15
  37. data/lib/ruby_lsp/requests/support/syntax_tree_formatting_runner.rb +42 -0
  38. data/lib/ruby_lsp/requests.rb +17 -14
  39. data/lib/ruby_lsp/server.rb +45 -9
  40. data/lib/ruby_lsp/store.rb +11 -11
  41. data/lib/ruby_lsp/utils.rb +9 -8
  42. metadata +13 -5
@@ -67,12 +67,13 @@ module RubyLsp
67
67
  return unless RAILTIES_VERSION
68
68
 
69
69
  warn("Fetching Rails Documents...")
70
- # If the version's doc is not found, e.g. Rails main, it'll be redirected
71
- # In this case, we just fetch the latest doc
72
- response = if Gem::Version.new(RAILTIES_VERSION).prerelease?
73
- Net::HTTP.get_response(URI("#{RAILS_DOC_HOST}/js/search_index.js"))
74
- else
75
- Net::HTTP.get_response(URI("#{RAILS_DOC_HOST}/v#{RAILTIES_VERSION}/js/search_index.js"))
70
+
71
+ response = Net::HTTP.get_response(URI("#{RAILS_DOC_HOST}/v#{RAILTIES_VERSION}/js/search_index.js"))
72
+
73
+ if response.code == "302"
74
+ # If the version's doc is not found, e.g. Rails main, it'll be redirected
75
+ # In this case, we just fetch the latest doc
76
+ response = Net::HTTP.get_response(URI("#{RAILS_DOC_HOST}/js/search_index.js"))
76
77
  end
77
78
 
78
79
  if response.code == "200"
@@ -1,7 +1,6 @@
1
1
  # typed: strict
2
2
  # frozen_string_literal: true
3
3
 
4
- require "ruby_lsp/requests/support/rubocop_runner"
5
4
  return unless defined?(RubyLsp::Requests::Support::RuboCopRunner)
6
5
 
7
6
  require "cgi"
@@ -1,7 +1,6 @@
1
1
  # typed: strict
2
2
  # frozen_string_literal: true
3
3
 
4
- require "ruby_lsp/requests/support/rubocop_runner"
5
4
  return unless defined?(RubyLsp::Requests::Support::RuboCopRunner)
6
5
 
7
6
  require "cgi"
@@ -4,7 +4,7 @@
4
4
  module RubyLsp
5
5
  module Requests
6
6
  module Support
7
- class SelectionRange < LanguageServer::Protocol::Interface::SelectionRange
7
+ class SelectionRange < Interface::SelectionRange
8
8
  extend T::Sig
9
9
 
10
10
  sig { params(position: Document::PositionShape).returns(T::Boolean) }
@@ -16,7 +16,7 @@ module RubyLsp
16
16
  sig do
17
17
  params(
18
18
  tokens: T::Array[SemanticHighlighting::SemanticToken],
19
- ).returns(LanguageServer::Protocol::Interface::SemanticTokens)
19
+ ).returns(Interface::SemanticTokens)
20
20
  end
21
21
  def encode(tokens)
22
22
  delta = tokens
@@ -27,7 +27,7 @@ module RubyLsp
27
27
  compute_delta(token)
28
28
  end
29
29
 
30
- LanguageServer::Protocol::Interface::SemanticTokens.new(data: delta)
30
+ Interface::SemanticTokens.new(data: delta)
31
31
  end
32
32
 
33
33
  # The delta array is computed according to the LSP specification:
@@ -63,7 +63,8 @@ module RubyLsp
63
63
  when SyntaxTree::VCall
64
64
  ANNOTATIONS[node.value.value]
65
65
  when SyntaxTree::CallNode
66
- ANNOTATIONS[node.message.value]
66
+ message = node.message
67
+ ANNOTATIONS[message.value] unless message.is_a?(Symbol)
67
68
  else
68
69
  T.absurd(node)
69
70
  end
@@ -84,21 +85,10 @@ module RubyLsp
84
85
  end
85
86
 
86
87
  sig do
87
- params(node: T.nilable(T.any(
88
- SyntaxTree::VarRef,
89
- SyntaxTree::CallNode,
90
- SyntaxTree::VCall,
91
- SyntaxTree::Ident,
92
- SyntaxTree::Backtick,
93
- SyntaxTree::Const,
94
- SyntaxTree::Op,
95
- Symbol,
96
- ))).returns(T.nilable(String))
88
+ params(node: T.nilable(SyntaxTree::Node)).returns(T.nilable(String))
97
89
  end
98
90
  def node_name(node)
99
91
  case node
100
- when NilClass
101
- nil
102
92
  when SyntaxTree::VarRef
103
93
  node.value.value
104
94
  when SyntaxTree::CallNode
@@ -107,8 +97,8 @@ module RubyLsp
107
97
  node_name(node.value)
108
98
  when SyntaxTree::Ident, SyntaxTree::Backtick, SyntaxTree::Const, SyntaxTree::Op
109
99
  node.value
110
- when Symbol
111
- node.to_s
100
+ when NilClass, SyntaxTree::Node
101
+ nil
112
102
  else
113
103
  T.absurd(node)
114
104
  end
@@ -0,0 +1,42 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ require "syntax_tree/cli"
5
+ require "singleton"
6
+
7
+ module RubyLsp
8
+ module Requests
9
+ module Support
10
+ # :nodoc:
11
+ class SyntaxTreeFormattingRunner
12
+ extend T::Sig
13
+ include Singleton
14
+
15
+ sig { void }
16
+ def initialize
17
+ @options =
18
+ T.let(
19
+ begin
20
+ opts = SyntaxTree::CLI::Options.new
21
+ opts.parse(SyntaxTree::CLI::ConfigFile.new.arguments)
22
+ opts
23
+ end,
24
+ SyntaxTree::CLI::Options,
25
+ )
26
+ end
27
+
28
+ sig { params(uri: String, document: Document).returns(T.nilable(String)) }
29
+ def run(uri, document)
30
+ relative_path = Pathname.new(URI(uri).path).relative_path_from(T.must(WORKSPACE_URI.path))
31
+ return if @options.ignore_files.any? { |pattern| File.fnmatch(pattern, relative_path) }
32
+
33
+ SyntaxTree.format(
34
+ document.source,
35
+ @options.print_width,
36
+ options: @options.formatter_options,
37
+ )
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -4,20 +4,21 @@
4
4
  module RubyLsp
5
5
  # Supported features
6
6
  #
7
- # - {RubyLsp::Requests::DocumentSymbol}
8
- # - {RubyLsp::Requests::DocumentLink}
9
- # - {RubyLsp::Requests::Hover}
10
- # - {RubyLsp::Requests::FoldingRanges}
11
- # - {RubyLsp::Requests::SelectionRanges}
12
- # - {RubyLsp::Requests::SemanticHighlighting}
13
- # - {RubyLsp::Requests::Formatting}
14
- # - {RubyLsp::Requests::OnTypeFormatting}
15
- # - {RubyLsp::Requests::Diagnostics}
16
- # - {RubyLsp::Requests::CodeActions}
17
- # - {RubyLsp::Requests::CodeActionResolve}
18
- # - {RubyLsp::Requests::DocumentHighlight}
19
- # - {RubyLsp::Requests::InlayHints}
20
- # - {RubyLsp::Requests::PathCompletion}
7
+ # - [DocumentSymbol](rdoc-ref:RubyLsp::Requests::DocumentSymbol)
8
+ # - [DocumentLink](rdoc-ref:RubyLsp::Requests::DocumentLink)
9
+ # - [Hover](rdoc-ref:RubyLsp::Requests::Hover)
10
+ # - [FoldingRange](rdoc-ref:RubyLsp::Requests::FoldingRanges)
11
+ # - [SelectionRange](rdoc-ref:RubyLsp::Requests::SelectionRanges)
12
+ # - [SemanticHighlighting](rdoc-ref:RubyLsp::Requests::SemanticHighlighting)
13
+ # - [Formatting](rdoc-ref:RubyLsp::Requests::Formatting)
14
+ # - [OnTypeFormatting](rdoc-ref:RubyLsp::Requests::OnTypeFormatting)
15
+ # - [Diagnostic](rdoc-ref:RubyLsp::Requests::Diagnostics)
16
+ # - [CodeAction](rdoc-ref:RubyLsp::Requests::CodeActions)
17
+ # - [CodeActionResolve](rdoc-ref:RubyLsp::Requests::CodeActionResolve)
18
+ # - [DocumentHighlight](rdoc-ref:RubyLsp::Requests::DocumentHighlight)
19
+ # - [InlayHint](rdoc-ref:RubyLsp::Requests::InlayHints)
20
+ # - [PathCompletion](rdoc-ref:RubyLsp::Requests::PathCompletion)
21
+ # - [CodeLens](rdoc-ref:RubyLsp::Requests::CodeLens)
21
22
 
22
23
  module Requests
23
24
  autoload :BaseRequest, "ruby_lsp/requests/base_request"
@@ -35,6 +36,7 @@ module RubyLsp
35
36
  autoload :DocumentHighlight, "ruby_lsp/requests/document_highlight"
36
37
  autoload :InlayHints, "ruby_lsp/requests/inlay_hints"
37
38
  autoload :PathCompletion, "ruby_lsp/requests/path_completion"
39
+ autoload :CodeLens, "ruby_lsp/requests/code_lens"
38
40
 
39
41
  # :nodoc:
40
42
  module Support
@@ -46,6 +48,7 @@ module RubyLsp
46
48
  autoload :HighlightTarget, "ruby_lsp/requests/support/highlight_target"
47
49
  autoload :RailsDocumentClient, "ruby_lsp/requests/support/rails_document_client"
48
50
  autoload :PrefixTree, "ruby_lsp/requests/support/prefix_tree"
51
+ autoload :Common, "ruby_lsp/requests/support/common"
49
52
  end
50
53
  end
51
54
  end
@@ -2,9 +2,11 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  module RubyLsp
5
+ # rubocop:disable RubyLsp/UseLanguageServerAliases
5
6
  Interface = LanguageServer::Protocol::Interface
6
7
  Constant = LanguageServer::Protocol::Constant
7
8
  Transport = LanguageServer::Protocol::Transport
9
+ # rubocop:enable RubyLsp/UseLanguageServerAliases
8
10
 
9
11
  class Server
10
12
  extend T::Sig
@@ -22,6 +24,32 @@ module RubyLsp
22
24
  @mutex = T.let(Mutex.new, Mutex)
23
25
  @worker = T.let(new_worker, Thread)
24
26
 
27
+ # The messages queue includes requests and notifications to be sent to the client
28
+ @message_queue = T.let(Thread::Queue.new, Thread::Queue)
29
+
30
+ # Create a thread to watch the messages queue and send them to the client
31
+ @message_dispatcher = T.let(
32
+ Thread.new do
33
+ current_request_id = 1
34
+
35
+ loop do
36
+ message = @message_queue.pop
37
+ break if message.nil?
38
+
39
+ @mutex.synchronize do
40
+ case message
41
+ when Notification
42
+ @writer.write(method: message.message, params: message.params)
43
+ when Request
44
+ @writer.write(id: current_request_id, method: message.message, params: message.params)
45
+ current_request_id += 1
46
+ end
47
+ end
48
+ end
49
+ end,
50
+ Thread,
51
+ )
52
+
25
53
  Thread.main.priority = 1
26
54
  end
27
55
 
@@ -34,7 +62,7 @@ module RubyLsp
34
62
  @reader.read do |request|
35
63
  case request[:method]
36
64
  when "initialize", "initialized", "textDocument/didOpen", "textDocument/didClose", "textDocument/didChange"
37
- result = Executor.new(@store).execute(request)
65
+ result = Executor.new(@store, @message_queue).execute(request)
38
66
  finalize_request(result, request)
39
67
  when "$/cancelRequest"
40
68
  # Cancel the job if it's still in the queue
@@ -42,6 +70,7 @@ module RubyLsp
42
70
  when "shutdown"
43
71
  warn("Shutting down Ruby LSP...")
44
72
 
73
+ @message_queue.close
45
74
  # Close the queue so that we can no longer receive items
46
75
  @job_queue.close
47
76
  # Clear any remaining jobs so that the thread can terminate
@@ -49,9 +78,10 @@ module RubyLsp
49
78
  @jobs.clear
50
79
  # Wait until the thread is finished
51
80
  @worker.join
81
+ @message_dispatcher.join
52
82
  @store.clear
53
83
 
54
- finalize_request(Result.new(response: nil, notifications: []), request)
84
+ finalize_request(Result.new(response: nil), request)
55
85
  when "exit"
56
86
  # We return zero if shutdown has already been received or one otherwise as per the recommendation in the spec
57
87
  # https://microsoft.github.io/language-server-protocol/specification/#exit
@@ -62,8 +92,17 @@ module RubyLsp
62
92
  # Default case: push the request to the queue to be executed by the worker
63
93
  job = Job.new(request: request, cancelled: false)
64
94
 
65
- # Remember a handle to the job, so that we can cancel it
66
- @mutex.synchronize { @jobs[request[:id]] = job }
95
+ @mutex.synchronize do
96
+ # Remember a handle to the job, so that we can cancel it
97
+ @jobs[request[:id]] = job
98
+
99
+ # We must parse the document under a mutex lock or else we might switch threads and accept text edits in the
100
+ # source. Altering the source reference during parsing will put the parser in an invalid internal state,
101
+ # since it started parsing with one source but then it changed in the middle
102
+ uri = request.dig(:params, :textDocument, :uri)
103
+ @store.get(uri).parse if uri
104
+ end
105
+
67
106
  @job_queue << job
68
107
  end
69
108
  end
@@ -85,9 +124,9 @@ module RubyLsp
85
124
 
86
125
  result = if job.cancelled
87
126
  # We need to return nil to the client even if the request was cancelled
88
- Result.new(response: nil, notifications: [])
127
+ Result.new(response: nil)
89
128
  else
90
- Executor.new(@store).execute(request)
129
+ Executor.new(@store, @message_queue).execute(request)
91
130
  end
92
131
 
93
132
  finalize_request(result, request)
@@ -102,9 +141,6 @@ module RubyLsp
102
141
  error = result.error
103
142
  response = result.response
104
143
 
105
- # If the response include any notifications, go through them and publish each one
106
- result.notifications.each { |n| @writer.write(method: n.message, params: n.params) }
107
-
108
144
  if error
109
145
  @writer.write(
110
146
  id: request[:id],
@@ -9,8 +9,8 @@ module RubyLsp
9
9
  class Store
10
10
  extend T::Sig
11
11
 
12
- sig { params(encoding: String).void }
13
- attr_writer :encoding
12
+ sig { returns(String) }
13
+ attr_accessor :encoding
14
14
 
15
15
  sig { returns(String) }
16
16
  attr_accessor :formatter
@@ -18,7 +18,7 @@ module RubyLsp
18
18
  sig { void }
19
19
  def initialize
20
20
  @state = T.let({}, T::Hash[String, Document])
21
- @encoding = T.let("utf-8", String)
21
+ @encoding = T.let(Constant::PositionEncodingKind::UTF8, String)
22
22
  @formatter = T.let("auto", String)
23
23
  end
24
24
 
@@ -27,19 +27,19 @@ module RubyLsp
27
27
  document = @state[uri]
28
28
  return document unless document.nil?
29
29
 
30
- set(uri, File.binread(CGI.unescape(URI.parse(uri).path)))
30
+ set(uri: uri, source: File.binread(CGI.unescape(URI.parse(uri).path)), version: 0)
31
31
  T.must(@state[uri])
32
32
  end
33
33
 
34
- sig { params(uri: String, content: String).void }
35
- def set(uri, content)
36
- document = Document.new(content, @encoding)
34
+ sig { params(uri: String, source: String, version: Integer).void }
35
+ def set(uri:, source:, version:)
36
+ document = Document.new(source: source, version: version, uri: uri, encoding: @encoding)
37
37
  @state[uri] = document
38
38
  end
39
39
 
40
- sig { params(uri: String, edits: T::Array[Document::EditShape]).void }
41
- def push_edits(uri, edits)
42
- T.must(@state[uri]).push_edits(edits)
40
+ sig { params(uri: String, edits: T::Array[Document::EditShape], version: Integer).void }
41
+ def push_edits(uri:, edits:, version:)
42
+ T.must(@state[uri]).push_edits(edits, version: version)
43
43
  end
44
44
 
45
45
  sig { void }
@@ -61,7 +61,7 @@ module RubyLsp
61
61
  type_parameters(:T)
62
62
  .params(
63
63
  uri: String,
64
- request_name: Symbol,
64
+ request_name: String,
65
65
  block: T.proc.params(document: Document).returns(T.type_parameter(:T)),
66
66
  ).returns(T.type_parameter(:T))
67
67
  end
@@ -6,11 +6,14 @@ module RubyLsp
6
6
  VOID = T.let(Object.new.freeze, Object)
7
7
 
8
8
  # This freeze is not redundant since the interpolated string is mutable
9
- WORKSPACE_URI = T.let("file://#{Dir.pwd}".freeze, String) # rubocop:disable Style/RedundantFreeze
9
+ WORKSPACE_URI = T.let(URI("file://#{Dir.pwd}".freeze), URI::Generic) # rubocop:disable Style/RedundantFreeze
10
10
 
11
11
  # A notification to be sent to the client
12
- class Notification
12
+ class Message
13
13
  extend T::Sig
14
+ extend T::Helpers
15
+
16
+ abstract!
14
17
 
15
18
  sig { returns(String) }
16
19
  attr_reader :message
@@ -25,6 +28,9 @@ module RubyLsp
25
28
  end
26
29
  end
27
30
 
31
+ class Notification < Message; end
32
+ class Request < Message; end
33
+
28
34
  # The final result of running a request before its IO is finalized
29
35
  class Result
30
36
  extend T::Sig
@@ -32,9 +38,6 @@ module RubyLsp
32
38
  sig { returns(T.untyped) }
33
39
  attr_reader :response
34
40
 
35
- sig { returns(T::Array[Notification]) }
36
- attr_reader :notifications
37
-
38
41
  sig { returns(T.nilable(Exception)) }
39
42
  attr_reader :error
40
43
 
@@ -44,14 +47,12 @@ module RubyLsp
44
47
  sig do
45
48
  params(
46
49
  response: T.untyped,
47
- notifications: T::Array[Notification],
48
50
  error: T.nilable(Exception),
49
51
  request_time: T.nilable(Float),
50
52
  ).void
51
53
  end
52
- def initialize(response:, notifications:, error: nil, request_time: nil)
54
+ def initialize(response:, error: nil, request_time: nil)
53
55
  @response = response
54
- @notifications = notifications
55
56
  @error = error
56
57
  @request_time = request_time
57
58
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-lsp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.2
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shopify
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-03-20 00:00:00.000000000 Z
11
+ date: 2023-05-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: language_server-protocol
@@ -44,7 +44,7 @@ dependencies:
44
44
  requirements:
45
45
  - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: 6.0.2
47
+ version: 6.1.1
48
48
  - - "<"
49
49
  - !ruby/object:Gem::Version
50
50
  version: '7'
@@ -54,7 +54,7 @@ dependencies:
54
54
  requirements:
55
55
  - - ">="
56
56
  - !ruby/object:Gem::Version
57
- version: 6.0.2
57
+ version: 6.1.1
58
58
  - - "<"
59
59
  - !ruby/object:Gem::Version
60
60
  version: '7'
@@ -70,14 +70,20 @@ files:
70
70
  - README.md
71
71
  - VERSION
72
72
  - exe/ruby-lsp
73
+ - lib/rubocop/cop/ruby_lsp/use_language_server_aliases.rb
73
74
  - lib/ruby-lsp.rb
75
+ - lib/ruby_lsp/check_docs.rb
74
76
  - lib/ruby_lsp/document.rb
77
+ - lib/ruby_lsp/event_emitter.rb
75
78
  - lib/ruby_lsp/executor.rb
79
+ - lib/ruby_lsp/extension.rb
76
80
  - lib/ruby_lsp/internal.rb
81
+ - lib/ruby_lsp/listener.rb
77
82
  - lib/ruby_lsp/requests.rb
78
83
  - lib/ruby_lsp/requests/base_request.rb
79
84
  - lib/ruby_lsp/requests/code_action_resolve.rb
80
85
  - lib/ruby_lsp/requests/code_actions.rb
86
+ - lib/ruby_lsp/requests/code_lens.rb
81
87
  - lib/ruby_lsp/requests/diagnostics.rb
82
88
  - lib/ruby_lsp/requests/document_highlight.rb
83
89
  - lib/ruby_lsp/requests/document_link.rb
@@ -91,6 +97,7 @@ files:
91
97
  - lib/ruby_lsp/requests/selection_ranges.rb
92
98
  - lib/ruby_lsp/requests/semantic_highlighting.rb
93
99
  - lib/ruby_lsp/requests/support/annotation.rb
100
+ - lib/ruby_lsp/requests/support/common.rb
94
101
  - lib/ruby_lsp/requests/support/highlight_target.rb
95
102
  - lib/ruby_lsp/requests/support/prefix_tree.rb
96
103
  - lib/ruby_lsp/requests/support/rails_document_client.rb
@@ -102,6 +109,7 @@ files:
102
109
  - lib/ruby_lsp/requests/support/semantic_token_encoder.rb
103
110
  - lib/ruby_lsp/requests/support/sorbet.rb
104
111
  - lib/ruby_lsp/requests/support/source_uri.rb
112
+ - lib/ruby_lsp/requests/support/syntax_tree_formatting_runner.rb
105
113
  - lib/ruby_lsp/server.rb
106
114
  - lib/ruby_lsp/store.rb
107
115
  - lib/ruby_lsp/utils.rb
@@ -125,7 +133,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
125
133
  - !ruby/object:Gem::Version
126
134
  version: '0'
127
135
  requirements: []
128
- rubygems_version: 3.3.3
136
+ rubygems_version: 3.4.12
129
137
  signing_key:
130
138
  specification_version: 4
131
139
  summary: An opinionated language server for Ruby