ruby-lsp 0.17.17 → 0.18.3

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 (59) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +4 -110
  3. data/VERSION +1 -1
  4. data/exe/ruby-lsp +5 -11
  5. data/lib/ruby_indexer/lib/ruby_indexer/declaration_listener.rb +14 -6
  6. data/lib/ruby_indexer/lib/ruby_indexer/entry.rb +162 -27
  7. data/lib/ruby_indexer/lib/ruby_indexer/index.rb +110 -8
  8. data/lib/ruby_indexer/lib/ruby_indexer/rbs_indexer.rb +2 -2
  9. data/lib/ruby_indexer/test/classes_and_modules_test.rb +24 -10
  10. data/lib/ruby_indexer/test/constant_test.rb +4 -4
  11. data/lib/ruby_indexer/test/enhancements_test.rb +2 -2
  12. data/lib/ruby_indexer/test/index_test.rb +68 -0
  13. data/lib/ruby_indexer/test/method_test.rb +257 -2
  14. data/lib/ruby_indexer/test/rbs_indexer_test.rb +1 -1
  15. data/lib/ruby_lsp/base_server.rb +21 -1
  16. data/lib/ruby_lsp/document.rb +5 -3
  17. data/lib/ruby_lsp/erb_document.rb +29 -10
  18. data/lib/ruby_lsp/global_state.rb +4 -3
  19. data/lib/ruby_lsp/internal.rb +40 -2
  20. data/lib/ruby_lsp/listeners/code_lens.rb +34 -5
  21. data/lib/ruby_lsp/listeners/completion.rb +20 -6
  22. data/lib/ruby_lsp/listeners/inlay_hints.rb +1 -16
  23. data/lib/ruby_lsp/listeners/signature_help.rb +55 -24
  24. data/lib/ruby_lsp/rbs_document.rb +5 -4
  25. data/lib/ruby_lsp/requests/code_action_resolve.rb +0 -15
  26. data/lib/ruby_lsp/requests/code_actions.rb +0 -10
  27. data/lib/ruby_lsp/requests/code_lens.rb +1 -11
  28. data/lib/ruby_lsp/requests/completion.rb +3 -20
  29. data/lib/ruby_lsp/requests/completion_resolve.rb +2 -10
  30. data/lib/ruby_lsp/requests/definition.rb +6 -20
  31. data/lib/ruby_lsp/requests/diagnostics.rb +0 -10
  32. data/lib/ruby_lsp/requests/document_highlight.rb +7 -14
  33. data/lib/ruby_lsp/requests/document_link.rb +0 -10
  34. data/lib/ruby_lsp/requests/document_symbol.rb +0 -17
  35. data/lib/ruby_lsp/requests/folding_ranges.rb +0 -10
  36. data/lib/ruby_lsp/requests/formatting.rb +0 -16
  37. data/lib/ruby_lsp/requests/hover.rb +9 -9
  38. data/lib/ruby_lsp/requests/inlay_hints.rb +2 -35
  39. data/lib/ruby_lsp/requests/on_type_formatting.rb +0 -10
  40. data/lib/ruby_lsp/requests/prepare_type_hierarchy.rb +0 -11
  41. data/lib/ruby_lsp/requests/request.rb +17 -1
  42. data/lib/ruby_lsp/requests/selection_ranges.rb +0 -10
  43. data/lib/ruby_lsp/requests/semantic_highlighting.rb +1 -23
  44. data/lib/ruby_lsp/requests/show_syntax_tree.rb +0 -11
  45. data/lib/ruby_lsp/requests/signature_help.rb +5 -20
  46. data/lib/ruby_lsp/requests/support/common.rb +1 -1
  47. data/lib/ruby_lsp/requests/support/rubocop_formatter.rb +2 -0
  48. data/lib/ruby_lsp/requests/support/rubocop_runner.rb +2 -0
  49. data/lib/ruby_lsp/requests/type_hierarchy_supertypes.rb +0 -11
  50. data/lib/ruby_lsp/requests/workspace_symbol.rb +0 -12
  51. data/lib/ruby_lsp/ruby_document.rb +4 -3
  52. data/lib/ruby_lsp/server.rb +45 -11
  53. data/lib/ruby_lsp/setup_bundler.rb +33 -15
  54. data/lib/ruby_lsp/type_inferrer.rb +8 -10
  55. data/lib/ruby_lsp/utils.rb +11 -1
  56. metadata +3 -6
  57. data/lib/ruby_lsp/check_docs.rb +0 -130
  58. data/lib/ruby_lsp/requests.rb +0 -64
  59. data/lib/ruby_lsp/response_builders.rb +0 -13
@@ -5,27 +5,8 @@ require "ruby_lsp/listeners/completion"
5
5
 
6
6
  module RubyLsp
7
7
  module Requests
8
- # ![Completion demo](../../completion.gif)
9
- #
10
8
  # The [completion](https://microsoft.github.io/language-server-protocol/specification#textDocument_completion)
11
9
  # suggests possible completions according to what the developer is typing.
12
- #
13
- # Currently supported targets:
14
- #
15
- # - Classes
16
- # - Modules
17
- # - Constants
18
- # - Require paths
19
- # - Methods invoked on self only
20
- # - Instance variables
21
- #
22
- # # Example
23
- #
24
- # ```ruby
25
- # require "ruby_lsp/requests" # --> completion: suggests `base_request`, `code_actions`, ...
26
- #
27
- # RubyLsp::Requests:: # --> completion: suggests `Completion`, `Hover`, ...
28
- # ```
29
10
  class Completion < Request
30
11
  extend T::Sig
31
12
 
@@ -36,7 +17,7 @@ module RubyLsp
36
17
  def provider
37
18
  Interface::CompletionOptions.new(
38
19
  resolve_provider: true,
39
- trigger_characters: ["/", "\"", "'", ":", "@", "."],
20
+ trigger_characters: ["/", "\"", "'", ":", "@", ".", "=", "<"],
40
21
  completion_item: {
41
22
  labelDetailsSupport: true,
42
23
  },
@@ -60,6 +41,8 @@ module RubyLsp
60
41
  # Completion always receives the position immediately after the character that was just typed. Here we adjust it
61
42
  # back by 1, so that we find the right node
62
43
  char_position = document.create_scanner.find_char_position(params[:position]) - 1
44
+ delegate_request_if_needed!(global_state, document, char_position)
45
+
63
46
  node_context = RubyDocument.locate(
64
47
  document.parse_result.value,
65
48
  char_position,
@@ -3,8 +3,6 @@
3
3
 
4
4
  module RubyLsp
5
5
  module Requests
6
- # ![Completion resolve demo](../../completion_resolve.gif)
7
- #
8
6
  # The [completionItem/resolve](https://microsoft.github.io/language-server-protocol/specification#completionItem_resolve)
9
7
  # request provides additional information about the currently selected completion. Specifically, the `labelDetails`
10
8
  # and `documentation` fields are provided, which are omitted from the completion items returned by
@@ -15,12 +13,6 @@ module RubyLsp
15
13
  #
16
14
  # At most 10 definitions are included, to ensure low latency during request processing and rendering the completion
17
15
  # item.
18
- #
19
- # # Example
20
- #
21
- # ```ruby
22
- # A # -> as the user cycles through completion items, the documentation will be resolved and displayed
23
- # ```
24
16
  class CompletionResolve < Request
25
17
  extend T::Sig
26
18
  include Requests::Support::Common
@@ -54,8 +46,8 @@ module RubyLsp
54
46
 
55
47
  if owner_name
56
48
  entries = entries.select do |entry|
57
- (entry.is_a?(RubyIndexer::Entry::Member) || entry.is_a?(RubyIndexer::Entry::InstanceVariable)) &&
58
- entry.owner&.name == owner_name
49
+ (entry.is_a?(RubyIndexer::Entry::Member) || entry.is_a?(RubyIndexer::Entry::InstanceVariable) ||
50
+ entry.is_a?(RubyIndexer::Entry::MethodAlias)) && entry.owner&.name == owner_name
59
51
  end
60
52
  end
61
53
 
@@ -5,27 +5,9 @@ require "ruby_lsp/listeners/definition"
5
5
 
6
6
  module RubyLsp
7
7
  module Requests
8
- # ![Definition demo](../../definition.gif)
9
- #
10
8
  # The [definition
11
9
  # request](https://microsoft.github.io/language-server-protocol/specification#textDocument_definition) jumps to the
12
10
  # definition of the symbol under the cursor.
13
- #
14
- # Currently supported targets:
15
- #
16
- # - Classes
17
- # - Modules
18
- # - Constants
19
- # - Require paths
20
- # - Methods invoked on self only and on receivers where the type is unknown
21
- # - Instance variables
22
- #
23
- # # Example
24
- #
25
- # ```ruby
26
- # require "some_gem/file" # <- Request go to definition on this string will take you to the file
27
- # Product.new # <- Request go to definition on this class name will take you to its declaration.
28
- # ```
29
11
  class Definition < Request
30
12
  extend T::Sig
31
13
  extend T::Generic
@@ -53,8 +35,12 @@ module RubyLsp
53
35
  )
54
36
  @dispatcher = dispatcher
55
37
 
56
- node_context = document.locate_node(
57
- position,
38
+ char_position = document.create_scanner.find_char_position(position)
39
+ delegate_request_if_needed!(global_state, document, char_position)
40
+
41
+ node_context = RubyDocument.locate(
42
+ document.parse_result.value,
43
+ char_position,
58
44
  node_types: [
59
45
  Prism::CallNode,
60
46
  Prism::ConstantReadNode,
@@ -3,19 +3,9 @@
3
3
 
4
4
  module RubyLsp
5
5
  module Requests
6
- # ![Diagnostics demo](../../diagnostics.gif)
7
- #
8
6
  # The
9
7
  # [diagnostics](https://microsoft.github.io/language-server-protocol/specification#textDocument_publishDiagnostics)
10
8
  # request informs the editor of RuboCop offenses for a given file.
11
- #
12
- # # Example
13
- #
14
- # ```ruby
15
- # def say_hello
16
- # puts "Hello" # --> diagnostics: incorrect indentation
17
- # end
18
- # ```
19
9
  class Diagnostics < Request
20
10
  extend T::Sig
21
11
 
@@ -5,8 +5,6 @@ require "ruby_lsp/listeners/document_highlight"
5
5
 
6
6
  module RubyLsp
7
7
  module Requests
8
- # ![Document highlight demo](../../document_highlight.gif)
9
- #
10
8
  # The [document highlight](https://microsoft.github.io/language-server-protocol/specification#textDocument_documentHighlight)
11
9
  # informs the editor all relevant elements of the currently pointed item for highlighting. For example, when
12
10
  # the cursor is on the `F` of the constant `FOO`, the editor should identify other occurrences of `FOO`
@@ -14,29 +12,24 @@ module RubyLsp
14
12
  #
15
13
  # For writable elements like constants or variables, their read/write occurrences should be highlighted differently.
16
14
  # This is achieved by sending different "kind" attributes to the editor (2 for read and 3 for write).
17
- #
18
- # # Example
19
- #
20
- # ```ruby
21
- # FOO = 1 # should be highlighted as "write"
22
- #
23
- # def foo
24
- # FOO # should be highlighted as "read"
25
- # end
26
- # ```
27
15
  class DocumentHighlight < Request
28
16
  extend T::Sig
29
17
 
30
18
  sig do
31
19
  params(
20
+ global_state: GlobalState,
32
21
  document: T.any(RubyDocument, ERBDocument),
33
22
  position: T::Hash[Symbol, T.untyped],
34
23
  dispatcher: Prism::Dispatcher,
35
24
  ).void
36
25
  end
37
- def initialize(document, position, dispatcher)
26
+ def initialize(global_state, document, position, dispatcher)
38
27
  super()
39
- node_context = document.locate_node(position)
28
+ char_position = document.create_scanner.find_char_position(position)
29
+ delegate_request_if_needed!(global_state, document, char_position)
30
+
31
+ node_context = RubyDocument.locate(document.parse_result.value, char_position)
32
+
40
33
  @response_builder = T.let(
41
34
  ResponseBuilders::CollectionResponseBuilder[Interface::DocumentHighlight].new,
42
35
  ResponseBuilders::CollectionResponseBuilder[Interface::DocumentHighlight],
@@ -5,19 +5,9 @@ require "ruby_lsp/listeners/document_link"
5
5
 
6
6
  module RubyLsp
7
7
  module Requests
8
- # ![Document link demo](../../document_link.gif)
9
- #
10
8
  # The [document link](https://microsoft.github.io/language-server-protocol/specification#textDocument_documentLink)
11
9
  # makes `# source://PATH_TO_FILE#line` comments in a Ruby/RBI file clickable if the file exists.
12
10
  # When the user clicks the link, it'll open that location.
13
- #
14
- # # Example
15
- #
16
- # ```ruby
17
- # # source://syntax_tree/3.2.1/lib/syntax_tree.rb#51 <- it will be clickable and will take the user to that location
18
- # def format(source, maxwidth = T.unsafe(nil))
19
- # end
20
- # ```
21
11
  class DocumentLink < Request
22
12
  extend T::Sig
23
13
 
@@ -5,29 +5,12 @@ require "ruby_lsp/listeners/document_symbol"
5
5
 
6
6
  module RubyLsp
7
7
  module Requests
8
- # ![Document symbol demo](../../document_symbol.gif)
9
- #
10
8
  # The [document
11
9
  # symbol](https://microsoft.github.io/language-server-protocol/specification#textDocument_documentSymbol) request
12
10
  # informs the editor of all the important symbols, such as classes, variables, and methods, defined in a file. With
13
11
  # this information, the editor can populate breadcrumbs, file outline and allow for fuzzy symbol searches.
14
12
  #
15
13
  # In VS Code, fuzzy symbol search can be accessed by opening the command palette and inserting an `@` symbol.
16
- #
17
- # # Example
18
- #
19
- # ```ruby
20
- # class Person # --> document symbol: class
21
- # attr_reader :age # --> document symbol: field
22
- #
23
- # def initialize
24
- # @age = 0 # --> document symbol: variable
25
- # end
26
- #
27
- # def age # --> document symbol: method
28
- # end
29
- # end
30
- # ```
31
14
  class DocumentSymbol < Request
32
15
  extend T::Sig
33
16
 
@@ -5,18 +5,8 @@ require "ruby_lsp/listeners/folding_ranges"
5
5
 
6
6
  module RubyLsp
7
7
  module Requests
8
- # ![Folding ranges demo](../../folding_ranges.gif)
9
- #
10
8
  # The [folding ranges](https://microsoft.github.io/language-server-protocol/specification#textDocument_foldingRange)
11
9
  # request informs the editor of the ranges where and how code can be folded.
12
- #
13
- # # Example
14
- #
15
- # ```ruby
16
- # def say_hello # <-- folding range start
17
- # puts "Hello"
18
- # end # <-- folding range end
19
- # ```
20
10
  class FoldingRanges < Request
21
11
  extend T::Sig
22
12
 
@@ -3,25 +3,9 @@
3
3
 
4
4
  module RubyLsp
5
5
  module Requests
6
- # ![Formatting symbol demo](../../formatting.gif)
7
- #
8
6
  # The [formatting](https://microsoft.github.io/language-server-protocol/specification#textDocument_formatting)
9
7
  # request uses RuboCop to fix auto-correctable offenses in the document. This requires enabling format on save and
10
8
  # registering the ruby-lsp as the Ruby formatter.
11
- #
12
- # The `rubyLsp.formatter` setting specifies which formatter to use.
13
- # If set to `auto` then it behaves as follows:
14
- # * It will use RuboCop if it is part of the bundle.
15
- # * If RuboCop is not available, and `syntax_tree` is a direct dependency, it will use that.
16
- # * Otherwise, no formatting will be applied.
17
- #
18
- # # Example
19
- #
20
- # ```ruby
21
- # def say_hello
22
- # puts "Hello" # --> formatting: fixes the indentation on save
23
- # end
24
- # ```
25
9
  class Formatting < Request
26
10
  extend T::Sig
27
11
 
@@ -5,16 +5,8 @@ require "ruby_lsp/listeners/hover"
5
5
 
6
6
  module RubyLsp
7
7
  module Requests
8
- # ![Hover demo](../../hover.gif)
9
- #
10
8
  # The [hover request](https://microsoft.github.io/language-server-protocol/specification#textDocument_hover)
11
9
  # displays the documentation for the symbol currently under the cursor.
12
- #
13
- # # Example
14
- #
15
- # ```ruby
16
- # String # -> Hovering over the class reference will show all declaration locations and the documentation
17
- # ```
18
10
  class Hover < Request
19
11
  extend T::Sig
20
12
  extend T::Generic
@@ -41,7 +33,15 @@ module RubyLsp
41
33
  end
42
34
  def initialize(document, global_state, position, dispatcher, sorbet_level)
43
35
  super()
44
- node_context = document.locate_node(position, node_types: Listeners::Hover::ALLOWED_TARGETS)
36
+
37
+ char_position = document.create_scanner.find_char_position(position)
38
+ delegate_request_if_needed!(global_state, document, char_position)
39
+
40
+ node_context = RubyDocument.locate(
41
+ document.parse_result.value,
42
+ char_position,
43
+ node_types: Listeners::Hover::ALLOWED_TARGETS,
44
+ )
45
45
  target = node_context.node
46
46
  parent = node_context.parent
47
47
 
@@ -5,39 +5,9 @@ require "ruby_lsp/listeners/inlay_hints"
5
5
 
6
6
  module RubyLsp
7
7
  module Requests
8
- # ![Inlay hint demo](../../inlay_hints.gif)
9
- #
10
8
  # [Inlay hints](https://microsoft.github.io/language-server-protocol/specification#textDocument_inlayHint)
11
9
  # are labels added directly in the code that explicitly show the user something that might
12
10
  # otherwise just be implied.
13
- #
14
- # # Configuration
15
- #
16
- # To enable rescue hints, set `rubyLsp.featuresConfiguration.inlayHint.implicitRescue` to `true`.
17
- #
18
- # To enable hash value hints, set `rubyLsp.featuresConfiguration.inlayHint.implicitHashValue` to `true`.
19
- #
20
- # To enable all hints, set `rubyLsp.featuresConfiguration.inlayHint.enableAll` to `true`.
21
- #
22
- # # Example
23
- #
24
- # ```ruby
25
- # begin
26
- # puts "do something that might raise"
27
- # rescue # Label "StandardError" goes here as a bare rescue implies rescuing StandardError
28
- # puts "handle some rescue"
29
- # end
30
- # ```
31
- #
32
- # # Example
33
- #
34
- # ```ruby
35
- # var = "foo"
36
- # {
37
- # var: var, # Label "var" goes here in cases where the value is omitted
38
- # a: "hello",
39
- # }
40
- # ```
41
11
  class InlayHints < Request
42
12
  extend T::Sig
43
13
 
@@ -53,21 +23,18 @@ module RubyLsp
53
23
  sig do
54
24
  params(
55
25
  document: T.any(RubyDocument, ERBDocument),
56
- range: T::Hash[Symbol, T.untyped],
57
26
  hints_configuration: RequestConfig,
58
27
  dispatcher: Prism::Dispatcher,
59
28
  ).void
60
29
  end
61
- def initialize(document, range, hints_configuration, dispatcher)
30
+ def initialize(document, hints_configuration, dispatcher)
62
31
  super()
63
- start_line = range.dig(:start, :line)
64
- end_line = range.dig(:end, :line)
65
32
 
66
33
  @response_builder = T.let(
67
34
  ResponseBuilders::CollectionResponseBuilder[Interface::InlayHint].new,
68
35
  ResponseBuilders::CollectionResponseBuilder[Interface::InlayHint],
69
36
  )
70
- Listeners::InlayHints.new(@response_builder, start_line..end_line, hints_configuration, dispatcher)
37
+ Listeners::InlayHints.new(@response_builder, hints_configuration, dispatcher)
71
38
  end
72
39
 
73
40
  sig { override.returns(T::Array[Interface::InlayHint]) }
@@ -3,18 +3,8 @@
3
3
 
4
4
  module RubyLsp
5
5
  module Requests
6
- # ![On type formatting demo](../../on_type_formatting.gif)
7
- #
8
6
  # The [on type formatting](https://microsoft.github.io/language-server-protocol/specification#textDocument_onTypeFormatting)
9
7
  # request formats code as the user is typing. For example, automatically adding `end` to class definitions.
10
- #
11
- # # Example
12
- #
13
- # ```ruby
14
- # class Foo # <-- upon adding a line break, on type formatting is triggered
15
- # # <-- cursor ends up here
16
- # end # <-- end is automatically added
17
- # ```
18
8
  class OnTypeFormatting < Request
19
9
  extend T::Sig
20
10
 
@@ -3,22 +3,11 @@
3
3
 
4
4
  module RubyLsp
5
5
  module Requests
6
- # ![Prepare type hierarchy demo](../../prepare_type_hierarchy.gif)
7
- #
8
6
  # The [prepare type hierarchy
9
7
  # request](https://microsoft.github.io/language-server-protocol/specification#textDocument_prepareTypeHierarchy)
10
8
  # displays the list of ancestors (supertypes) and descendants (subtypes) for the selected type.
11
9
  #
12
10
  # Currently only supports supertypes due to a limitation of the index.
13
- #
14
- # # Example
15
- #
16
- # ```ruby
17
- # class Foo; end
18
- # class Bar < Foo; end
19
- #
20
- # puts Bar # <-- right click on `Bar` and select "Show Type Hierarchy"
21
- # ```
22
11
  class PrepareTypeHierarchy < Request
23
12
  extend T::Sig
24
13
 
@@ -3,7 +3,6 @@
3
3
 
4
4
  module RubyLsp
5
5
  module Requests
6
- # :nodoc:
7
6
  class Request
8
7
  extend T::Sig
9
8
  extend T::Generic
@@ -17,6 +16,23 @@ module RubyLsp
17
16
 
18
17
  private
19
18
 
19
+ # Signals to the client that the request should be delegated to the language server server for the host language
20
+ # in ERB files
21
+ sig do
22
+ params(
23
+ global_state: GlobalState,
24
+ document: Document[T.untyped],
25
+ char_position: Integer,
26
+ ).void
27
+ end
28
+ def delegate_request_if_needed!(global_state, document, char_position)
29
+ if global_state.supports_request_delegation &&
30
+ document.is_a?(ERBDocument) &&
31
+ document.inside_host_language?(char_position)
32
+ raise DelegateRequestError
33
+ end
34
+ end
35
+
20
36
  # Checks if a location covers a position
21
37
  sig { params(location: Prism::Location, position: T.untyped).returns(T::Boolean) }
22
38
  def cover?(location, position)
@@ -3,8 +3,6 @@
3
3
 
4
4
  module RubyLsp
5
5
  module Requests
6
- # ![Selection ranges demo](../../selection_ranges.gif)
7
- #
8
6
  # The [selection ranges](https://microsoft.github.io/language-server-protocol/specification#textDocument_selectionRange)
9
7
  # request informs the editor of ranges that the user may want to select based on the location(s)
10
8
  # of their cursor(s).
@@ -12,14 +10,6 @@ module RubyLsp
12
10
  # Trigger this request with: Ctrl + Shift + -> or Ctrl + Shift + <-
13
11
  #
14
12
  # Note that if using VSCode Neovim, you will need to be in Insert mode for this to work correctly.
15
- #
16
- # # Example
17
- #
18
- # ```ruby
19
- # def foo # --> The next selection range encompasses the entire method definition.
20
- # puts "Hello, world!" # --> Cursor is on this line
21
- # end
22
- # ```
23
13
  class SelectionRanges < Request
24
14
  extend T::Sig
25
15
  include Support::Common
@@ -5,31 +5,9 @@ require "ruby_lsp/listeners/semantic_highlighting"
5
5
 
6
6
  module RubyLsp
7
7
  module Requests
8
- # ![Semantic highlighting demo](../../semantic_highlighting.gif)
9
- #
10
8
  # The [semantic
11
9
  # highlighting](https://microsoft.github.io/language-server-protocol/specification#textDocument_semanticTokens)
12
10
  # request informs the editor of the correct token types to provide consistent and accurate highlighting for themes.
13
- #
14
- # # Example
15
- #
16
- # ```ruby
17
- # def foo
18
- # var = 1 # --> semantic highlighting: local variable
19
- # some_invocation # --> semantic highlighting: method invocation
20
- # var # --> semantic highlighting: local variable
21
- # end
22
- #
23
- # # Strategy
24
- #
25
- # To maximize editor performance, the Ruby LSP will return the minimum number of semantic tokens, since applying
26
- # them is an expensive operation for the client. This means that the server only returns tokens for ambiguous pieces
27
- # of syntax, such as method invocations with no receivers or parenthesis (which can be confused with local
28
- # variables).
29
- #
30
- # Offloading as much handling as possible to Text Mate grammars or equivalent will guarantee responsiveness in the
31
- # editor and allow for a much smoother experience.
32
- # ```
33
11
  class SemanticHighlighting < Request
34
12
  extend T::Sig
35
13
 
@@ -39,7 +17,7 @@ module RubyLsp
39
17
  sig { returns(Interface::SemanticTokensRegistrationOptions) }
40
18
  def provider
41
19
  Interface::SemanticTokensRegistrationOptions.new(
42
- document_selector: [{ language: "ruby" }],
20
+ document_selector: [{ language: "ruby" }, { language: "erb" }],
43
21
  legend: Interface::SemanticTokensLegend.new(
44
22
  token_types: ResponseBuilders::SemanticHighlighting::TOKEN_TYPES.keys,
45
23
  token_modifiers: ResponseBuilders::SemanticHighlighting::TOKEN_MODIFIERS.keys,
@@ -3,20 +3,9 @@
3
3
 
4
4
  module RubyLsp
5
5
  module Requests
6
- # ![Show syntax tree demo](../../show_syntax_tree.gif)
7
- #
8
6
  # Show syntax tree is a custom [LSP
9
7
  # request](https://microsoft.github.io/language-server-protocol/specification#requestMessage) that displays the AST
10
8
  # for the current document or for the current selection in a new tab.
11
- #
12
- # # Example
13
- #
14
- # ```ruby
15
- # # Executing the Ruby LSP: Show syntax tree command will display the AST for the document
16
- # 1 + 1
17
- # # (program (statements ((binary (int "1") + (int "1")))))
18
- # ```
19
- #
20
9
  class ShowSyntaxTree < Request
21
10
  extend T::Sig
22
11
 
@@ -5,25 +5,9 @@ require "ruby_lsp/listeners/signature_help"
5
5
 
6
6
  module RubyLsp
7
7
  module Requests
8
- # ![Signature help demo](../../signature_help.gif)
9
- #
10
8
  # The [signature help
11
9
  # request](https://microsoft.github.io/language-server-protocol/specification#textDocument_signatureHelp) displays
12
10
  # information about the parameters of a method as you type an invocation.
13
- #
14
- # Currently only supports methods invoked directly on `self` without taking inheritance into account.
15
- #
16
- # # Example
17
- #
18
- # ```ruby
19
- # class Foo
20
- # def bar(a, b, c)
21
- # end
22
- #
23
- # def baz
24
- # bar( # -> Signature help will show the parameters of `bar`
25
- # end
26
- # ```
27
11
  class SignatureHelp < Request
28
12
  extend T::Sig
29
13
 
@@ -51,10 +35,11 @@ module RubyLsp
51
35
  end
52
36
  def initialize(document, global_state, position, context, dispatcher, sorbet_level) # rubocop:disable Metrics/ParameterLists
53
37
  super()
54
- node_context = document.locate_node(
55
- { line: position[:line], character: position[:character] },
56
- node_types: [Prism::CallNode],
57
- )
38
+
39
+ char_position = document.create_scanner.find_char_position(position)
40
+ delegate_request_if_needed!(global_state, document, char_position)
41
+
42
+ node_context = RubyDocument.locate(document.parse_result.value, char_position, node_types: [Prism::CallNode])
58
43
 
59
44
  target = adjust_for_nested_target(node_context.node, node_context.parent, position)
60
45
 
@@ -99,7 +99,7 @@ module RubyLsp
99
99
  )
100
100
 
101
101
  definitions << "[#{entry.file_name}](#{uri})"
102
- content << "\n\n#{entry.comments.join("\n")}" unless entry.comments.empty?
102
+ content << "\n\n#{entry.comments}" unless entry.comments.empty?
103
103
  end
104
104
 
105
105
  additional_entries_text = if max_entries && entries.length > max_entries
@@ -3,6 +3,8 @@
3
3
 
4
4
  return unless defined?(RubyLsp::Requests::Support::RuboCopRunner)
5
5
 
6
+ require "ruby_lsp/requests/support/rubocop_diagnostic"
7
+
6
8
  module RubyLsp
7
9
  module Requests
8
10
  module Support
@@ -80,7 +80,9 @@ module RubyLsp
80
80
 
81
81
  args += DEFAULT_ARGS
82
82
  rubocop_options = ::RuboCop::Options.new.parse(args).first
83
+
83
84
  config_store = ::RuboCop::ConfigStore.new
85
+ config_store.options_config = rubocop_options[:config] if rubocop_options[:config]
84
86
  @config_for_working_directory = T.let(config_store.for_pwd, ::RuboCop::Config)
85
87
 
86
88
  super(rubocop_options, config_store)
@@ -3,20 +3,9 @@
3
3
 
4
4
  module RubyLsp
5
5
  module Requests
6
- # ![Type hierarchy supertypes demo](../../type_hierarchy_supertypes.gif)
7
- #
8
6
  # The [type hierarchy supertypes
9
7
  # request](https://microsoft.github.io/language-server-protocol/specification#typeHierarchy_supertypes)
10
8
  # displays the list of ancestors (supertypes) for the selected type.
11
- #
12
- # # Example
13
- #
14
- # ```ruby
15
- # class Foo; end
16
- # class Bar < Foo; end
17
- #
18
- # puts Bar # <-- right click on `Bar` and select "Show Type Hierarchy"
19
- # ```
20
9
  class TypeHierarchySupertypes < Request
21
10
  extend T::Sig
22
11
 
@@ -3,21 +3,9 @@
3
3
 
4
4
  module RubyLsp
5
5
  module Requests
6
- # ![Workspace symbol demo](../../workspace_symbol.gif)
7
- #
8
6
  # The [workspace symbol](https://microsoft.github.io/language-server-protocol/specification#workspace_symbol)
9
7
  # request allows fuzzy searching declarations in the entire project. On VS Code, use CTRL/CMD + T to search for
10
8
  # symbols.
11
- #
12
- # # Example
13
- #
14
- # ```ruby
15
- # # Searching for `Floo` will fuzzy match and return all declarations according to the query, including this `Foo`
16
- # class
17
- # class Foo
18
- # end
19
- # ```
20
- #
21
9
  class WorkspaceSymbol < Request
22
10
  extend T::Sig
23
11
  include Support::Common