solargraph 0.58.2 → 0.58.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 (53) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/plugins.yml +3 -2
  3. data/CHANGELOG.md +3 -0
  4. data/lib/solargraph/bench.rb +45 -45
  5. data/lib/solargraph/convention/data_definition/data_assignment_node.rb +61 -61
  6. data/lib/solargraph/convention/gemfile.rb +15 -15
  7. data/lib/solargraph/convention/gemspec.rb +23 -23
  8. data/lib/solargraph/convention/rakefile.rb +17 -17
  9. data/lib/solargraph/convention.rb +78 -78
  10. data/lib/solargraph/converters/dd.rb +17 -17
  11. data/lib/solargraph/converters/dl.rb +15 -15
  12. data/lib/solargraph/converters/dt.rb +15 -15
  13. data/lib/solargraph/converters/misc.rb +1 -1
  14. data/lib/solargraph/diagnostics/update_errors.rb +41 -41
  15. data/lib/solargraph/language_server/error_codes.rb +20 -20
  16. data/lib/solargraph/language_server/message/base.rb +97 -97
  17. data/lib/solargraph/language_server/message/client/register_capability.rb +15 -15
  18. data/lib/solargraph/language_server/message/completion_item/resolve.rb +60 -60
  19. data/lib/solargraph/language_server/message/extended/document_gems.rb +32 -32
  20. data/lib/solargraph/language_server/message/extended/download_core.rb +19 -19
  21. data/lib/solargraph/language_server/message/extended/search.rb +20 -20
  22. data/lib/solargraph/language_server/message/initialize.rb +191 -191
  23. data/lib/solargraph/language_server/message/text_document/document_highlight.rb +16 -16
  24. data/lib/solargraph/language_server/message/text_document/prepare_rename.rb +11 -11
  25. data/lib/solargraph/language_server/message/text_document/references.rb +16 -16
  26. data/lib/solargraph/language_server/message/text_document/rename.rb +19 -19
  27. data/lib/solargraph/language_server/message/workspace/did_change_configuration.rb +35 -35
  28. data/lib/solargraph/language_server/message/workspace/did_change_watched_files.rb +40 -40
  29. data/lib/solargraph/language_server/message/workspace/did_change_workspace_folders.rb +26 -26
  30. data/lib/solargraph/language_server/message.rb +94 -94
  31. data/lib/solargraph/language_server/request.rb +27 -27
  32. data/lib/solargraph/language_server/transport/data_reader.rb +74 -74
  33. data/lib/solargraph/language_server/uri_helpers.rb +49 -49
  34. data/lib/solargraph/page.rb +92 -92
  35. data/lib/solargraph/parser/parser_gem/flawed_builder.rb +19 -19
  36. data/lib/solargraph/parser/parser_gem/node_processors/defs_node.rb +37 -37
  37. data/lib/solargraph/parser/parser_gem/node_processors/until_node.rb +29 -29
  38. data/lib/solargraph/parser/parser_gem.rb +12 -12
  39. data/lib/solargraph/parser.rb +23 -23
  40. data/lib/solargraph/pin/constant.rb +45 -45
  41. data/lib/solargraph/rbs_map/core_fills.rb +84 -84
  42. data/lib/solargraph/server_methods.rb +16 -16
  43. data/lib/solargraph/shell.rb +14 -3
  44. data/lib/solargraph/source/chain/array.rb +37 -37
  45. data/lib/solargraph/source/chain/class_variable.rb +13 -13
  46. data/lib/solargraph/source/chain/global_variable.rb +13 -13
  47. data/lib/solargraph/source/chain/link.rb +109 -109
  48. data/lib/solargraph/source/chain/q_call.rb +11 -11
  49. data/lib/solargraph/source/chain/variable.rb +13 -13
  50. data/lib/solargraph/source/chain/z_super.rb +30 -30
  51. data/lib/solargraph/version.rb +1 -1
  52. data/lib/solargraph/yard_tags.rb +20 -20
  53. metadata +2 -2
@@ -1,41 +1,41 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module Diagnostics
5
- class UpdateErrors < Base
6
- def diagnose source, api_map
7
- result = []
8
- combine_ranges(source.code, source.error_ranges).each do |range|
9
- result.push(
10
- range: range.to_hash,
11
- severity: Diagnostics::Severities::ERROR,
12
- source: 'Solargraph',
13
- message: 'Syntax error'
14
- )
15
- end
16
- result
17
- end
18
-
19
- private
20
-
21
- # Combine an array of ranges by their starting lines.
22
- #
23
- # @param code [String]
24
- # @param ranges [Array<Range>]
25
- # @return [Array<Range>]
26
- def combine_ranges code, ranges
27
- result = []
28
- lines = []
29
- ranges.sort{|a, b| a.start.line <=> b.start.line}.each do |rng|
30
- next if rng.nil? || lines.include?(rng.start.line)
31
- lines.push rng.start.line
32
- next if rng.start.line >= code.lines.length
33
- scol = code.lines[rng.start.line].index(/[^\s]/) || 0
34
- ecol = code.lines[rng.start.line].length
35
- result.push Range.from_to(rng.start.line, scol, rng.start.line, ecol)
36
- end
37
- result
38
- end
39
- end
40
- end
41
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Diagnostics
5
+ class UpdateErrors < Base
6
+ def diagnose source, api_map
7
+ result = []
8
+ combine_ranges(source.code, source.error_ranges).each do |range|
9
+ result.push(
10
+ range: range.to_hash,
11
+ severity: Diagnostics::Severities::ERROR,
12
+ source: 'Solargraph',
13
+ message: 'Syntax error'
14
+ )
15
+ end
16
+ result
17
+ end
18
+
19
+ private
20
+
21
+ # Combine an array of ranges by their starting lines.
22
+ #
23
+ # @param code [String]
24
+ # @param ranges [Array<Range>]
25
+ # @return [Array<Range>]
26
+ def combine_ranges code, ranges
27
+ result = []
28
+ lines = []
29
+ ranges.sort{|a, b| a.start.line <=> b.start.line}.each do |rng|
30
+ next if rng.nil? || lines.include?(rng.start.line)
31
+ lines.push rng.start.line
32
+ next if rng.start.line >= code.lines.length
33
+ scol = code.lines[rng.start.line].index(/[^\s]/) || 0
34
+ ecol = code.lines[rng.start.line].length
35
+ result.push Range.from_to(rng.start.line, scol, rng.start.line, ecol)
36
+ end
37
+ result
38
+ end
39
+ end
40
+ end
41
+ end
@@ -1,20 +1,20 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module LanguageServer
5
- # The ErrorCode constants for the language server protocol.
6
- #
7
- module ErrorCodes
8
- PARSE_ERROR = -32700
9
- INVALID_REQUEST = -32600
10
- METHOD_NOT_FOUND = -32601
11
- INVALID_PARAMS = -32602
12
- INTERNAL_ERROR = -32603
13
- SERVER_ERROR_START = -32099
14
- SERVER_ERROR_END = -32000
15
- SERVER_NOT_INITIALIZED = -32002
16
- UNKNOWN_ERROR_CODE = -32001
17
- REQUEST_CANCELLED = -32800
18
- end
19
- end
20
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module LanguageServer
5
+ # The ErrorCode constants for the language server protocol.
6
+ #
7
+ module ErrorCodes
8
+ PARSE_ERROR = -32700
9
+ INVALID_REQUEST = -32600
10
+ METHOD_NOT_FOUND = -32601
11
+ INVALID_PARAMS = -32602
12
+ INTERNAL_ERROR = -32603
13
+ SERVER_ERROR_START = -32099
14
+ SERVER_ERROR_END = -32000
15
+ SERVER_NOT_INITIALIZED = -32002
16
+ UNKNOWN_ERROR_CODE = -32001
17
+ REQUEST_CANCELLED = -32800
18
+ end
19
+ end
20
+ end
@@ -1,97 +1,97 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module LanguageServer
5
- module Message
6
- class Base
7
- # @return [Solargraph::LanguageServer::Host]
8
- attr_reader :host
9
-
10
- # @return [Integer]
11
- attr_reader :id
12
-
13
- # @return [Hash]
14
- attr_reader :request
15
-
16
- # @return [String]
17
- attr_reader :method
18
-
19
- # @return [Hash{String => undefined}]
20
- attr_reader :params
21
-
22
- # @return [Hash, Array, nil]
23
- attr_reader :result
24
-
25
- # @return [Hash, nil]
26
- attr_reader :error
27
-
28
- # @param host [Solargraph::LanguageServer::Host]
29
- # @param request [Hash]
30
- def initialize host, request
31
- @host = host
32
- @id = request['id'].freeze
33
- @request = request.freeze
34
- @method = request['method'].freeze
35
- @params = (request['params'] || {}).freeze
36
- post_initialize
37
- end
38
-
39
- # @return [void]
40
- def post_initialize; end
41
-
42
- # @return [void]
43
- def process; end
44
-
45
- # @param data [Hash, Array, nil]
46
- # @return [void]
47
- def set_result data
48
- @result = data
49
- end
50
-
51
- # @param code [Integer] See Solargraph::LanguageServer::ErrorCodes
52
- # @param message [String]
53
- # @return [void]
54
- def set_error code, message
55
- @error = {
56
- code: code,
57
- message: message
58
- }
59
- end
60
-
61
- # @return [void]
62
- def send_response
63
- return if id.nil?
64
-
65
- accept_or_cancel
66
- response = {
67
- jsonrpc: '2.0',
68
- id: id
69
- }
70
- response[:result] = result unless result.nil?
71
- response[:error] = error unless error.nil?
72
- response[:result] = nil if result.nil? and error.nil?
73
- json = response.to_json
74
- envelope = "Content-Length: #{json.bytesize}\r\n\r\n#{json}"
75
- Solargraph.logger.debug envelope
76
- host.queue envelope
77
- host.clear id
78
- end
79
-
80
- private
81
-
82
- # @return [void]
83
- def accept_or_cancel
84
- if host.cancel?(id)
85
- # https://microsoft.github.io/language-server-protocol/specifications/specification-current/#cancelRequest
86
- # cancel should send response RequestCancelled
87
- Solargraph::Logging.logger.info "Cancelled response to ##{id} #{method}"
88
- set_result nil
89
- set_error ErrorCodes::REQUEST_CANCELLED, 'Cancelled by client'
90
- else
91
- Solargraph::Logging.logger.info "Sending response to ##{id} #{method}"
92
- end
93
- end
94
- end
95
- end
96
- end
97
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module LanguageServer
5
+ module Message
6
+ class Base
7
+ # @return [Solargraph::LanguageServer::Host]
8
+ attr_reader :host
9
+
10
+ # @return [Integer]
11
+ attr_reader :id
12
+
13
+ # @return [Hash]
14
+ attr_reader :request
15
+
16
+ # @return [String]
17
+ attr_reader :method
18
+
19
+ # @return [Hash{String => undefined}]
20
+ attr_reader :params
21
+
22
+ # @return [Hash, Array, nil]
23
+ attr_reader :result
24
+
25
+ # @return [Hash, nil]
26
+ attr_reader :error
27
+
28
+ # @param host [Solargraph::LanguageServer::Host]
29
+ # @param request [Hash]
30
+ def initialize host, request
31
+ @host = host
32
+ @id = request['id'].freeze
33
+ @request = request.freeze
34
+ @method = request['method'].freeze
35
+ @params = (request['params'] || {}).freeze
36
+ post_initialize
37
+ end
38
+
39
+ # @return [void]
40
+ def post_initialize; end
41
+
42
+ # @return [void]
43
+ def process; end
44
+
45
+ # @param data [Hash, Array, nil]
46
+ # @return [void]
47
+ def set_result data
48
+ @result = data
49
+ end
50
+
51
+ # @param code [Integer] See Solargraph::LanguageServer::ErrorCodes
52
+ # @param message [String]
53
+ # @return [void]
54
+ def set_error code, message
55
+ @error = {
56
+ code: code,
57
+ message: message
58
+ }
59
+ end
60
+
61
+ # @return [void]
62
+ def send_response
63
+ return if id.nil?
64
+
65
+ accept_or_cancel
66
+ response = {
67
+ jsonrpc: '2.0',
68
+ id: id
69
+ }
70
+ response[:result] = result unless result.nil?
71
+ response[:error] = error unless error.nil?
72
+ response[:result] = nil if result.nil? and error.nil?
73
+ json = response.to_json
74
+ envelope = "Content-Length: #{json.bytesize}\r\n\r\n#{json}"
75
+ Solargraph.logger.debug envelope
76
+ host.queue envelope
77
+ host.clear id
78
+ end
79
+
80
+ private
81
+
82
+ # @return [void]
83
+ def accept_or_cancel
84
+ if host.cancel?(id)
85
+ # https://microsoft.github.io/language-server-protocol/specifications/specification-current/#cancelRequest
86
+ # cancel should send response RequestCancelled
87
+ Solargraph::Logging.logger.info "Cancelled response to ##{id} #{method}"
88
+ set_result nil
89
+ set_error ErrorCodes::REQUEST_CANCELLED, 'Cancelled by client'
90
+ else
91
+ Solargraph::Logging.logger.info "Sending response to ##{id} #{method}"
92
+ end
93
+ end
94
+ end
95
+ end
96
+ end
97
+ end
@@ -1,15 +1,15 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module LanguageServer
5
- module Message
6
- module Client
7
- class RegisterCapability < Solargraph::LanguageServer::Message::Base
8
- def process
9
-
10
- end
11
- end
12
- end
13
- end
14
- end
15
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module LanguageServer
5
+ module Message
6
+ module Client
7
+ class RegisterCapability < Solargraph::LanguageServer::Message::Base
8
+ def process
9
+
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -1,60 +1,60 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module LanguageServer
5
- module Message
6
- module CompletionItem
7
- # completionItem/resolve message handler
8
- #
9
- class Resolve < Base
10
- def process
11
- pins = host.locate_pins(params)
12
- set_result merge(pins)
13
- end
14
-
15
- private
16
-
17
- # @param pins [Array<Pin::Base>]
18
- # @return [Hash]
19
- def merge pins
20
- return params if pins.empty?
21
- docs = pins
22
- .reject { |pin| pin.documentation.empty? && pin.return_type.undefined? }
23
- result = params
24
- .transform_keys(&:to_sym)
25
- .merge(pins.first.resolve_completion_item)
26
- .merge(documentation: markup_content(join_docs(docs)))
27
- result[:detail] = pins.first.detail
28
- result
29
- end
30
-
31
- # @param text [String]
32
- # @return [Hash{Symbol => String}, nil]
33
- def markup_content text
34
- return nil if text.strip.empty?
35
- {
36
- kind: 'markdown',
37
- value: text
38
- }
39
- end
40
-
41
- # @param pins [Array<Pin::Base>]
42
- # @return [String]
43
- def join_docs pins
44
- result = []
45
- last_link = nil
46
- pins.each_with_index do |pin|
47
- this_link = host.options['enablePages'] ? pin.link_documentation : pin.text_documentation
48
- if this_link && this_link != last_link && this_link != 'undefined'
49
- result.push this_link
50
- end
51
- result.push pin.documentation unless result.last && result.last.end_with?(pin.documentation)
52
- last_link = this_link
53
- end
54
- result.join("\n\n")
55
- end
56
- end
57
- end
58
- end
59
- end
60
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module LanguageServer
5
+ module Message
6
+ module CompletionItem
7
+ # completionItem/resolve message handler
8
+ #
9
+ class Resolve < Base
10
+ def process
11
+ pins = host.locate_pins(params)
12
+ set_result merge(pins)
13
+ end
14
+
15
+ private
16
+
17
+ # @param pins [Array<Pin::Base>]
18
+ # @return [Hash]
19
+ def merge pins
20
+ return params if pins.empty?
21
+ docs = pins
22
+ .reject { |pin| pin.documentation.empty? && pin.return_type.undefined? }
23
+ result = params
24
+ .transform_keys(&:to_sym)
25
+ .merge(pins.first.resolve_completion_item)
26
+ .merge(documentation: markup_content(join_docs(docs)))
27
+ result[:detail] = pins.first.detail
28
+ result
29
+ end
30
+
31
+ # @param text [String]
32
+ # @return [Hash{Symbol => String}, nil]
33
+ def markup_content text
34
+ return nil if text.strip.empty?
35
+ {
36
+ kind: 'markdown',
37
+ value: text
38
+ }
39
+ end
40
+
41
+ # @param pins [Array<Pin::Base>]
42
+ # @return [String]
43
+ def join_docs pins
44
+ result = []
45
+ last_link = nil
46
+ pins.each_with_index do |pin|
47
+ this_link = host.options['enablePages'] ? pin.link_documentation : pin.text_documentation
48
+ if this_link && this_link != last_link && this_link != 'undefined'
49
+ result.push this_link
50
+ end
51
+ result.push pin.documentation unless result.last && result.last.end_with?(pin.documentation)
52
+ last_link = this_link
53
+ end
54
+ result.join("\n\n")
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
@@ -1,32 +1,32 @@
1
- # frozen_string_literal: true
2
-
3
- require 'open3'
4
-
5
- module Solargraph
6
- module LanguageServer
7
- module Message
8
- module Extended
9
- # Update YARD documentation for installed gems. If the `rebuild`
10
- # parameter is true, rebuild existing yardocs.
11
- #
12
- class DocumentGems < Base
13
- def process
14
- cmd = [host.command_path, 'gems']
15
- cmd.push '--rebuild' if params['rebuild']
16
- o, s = Open3.capture2(*cmd)
17
- if s != 0
18
- host.show_message "An error occurred while building gem documentation.", LanguageServer::MessageTypes::ERROR
19
- set_result({
20
- status: 'err'
21
- })
22
- else
23
- set_result({
24
- status: 'ok'
25
- })
26
- end
27
- end
28
- end
29
- end
30
- end
31
- end
32
- end
1
+ # frozen_string_literal: true
2
+
3
+ require 'open3'
4
+
5
+ module Solargraph
6
+ module LanguageServer
7
+ module Message
8
+ module Extended
9
+ # Update YARD documentation for installed gems. If the `rebuild`
10
+ # parameter is true, rebuild existing yardocs.
11
+ #
12
+ class DocumentGems < Base
13
+ def process
14
+ cmd = [host.command_path, 'gems']
15
+ cmd.push '--rebuild' if params['rebuild']
16
+ o, s = Open3.capture2(*cmd)
17
+ if s != 0
18
+ host.show_message "An error occurred while building gem documentation.", LanguageServer::MessageTypes::ERROR
19
+ set_result({
20
+ status: 'err'
21
+ })
22
+ else
23
+ set_result({
24
+ status: 'ok'
25
+ })
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -1,19 +1,19 @@
1
- # frozen_string_literal: true
2
-
3
- require 'open3'
4
-
5
- module Solargraph
6
- module LanguageServer
7
- module Message
8
- module Extended
9
- # Update core Ruby documentation.
10
- #
11
- class DownloadCore < Base
12
- def process
13
- host.show_message "Downloading cores is deprecated. Solargraph currently uses RBS for core and stdlib documentation", LanguageServer::MessageTypes::INFO
14
- end
15
- end
16
- end
17
- end
18
- end
19
- end
1
+ # frozen_string_literal: true
2
+
3
+ require 'open3'
4
+
5
+ module Solargraph
6
+ module LanguageServer
7
+ module Message
8
+ module Extended
9
+ # Update core Ruby documentation.
10
+ #
11
+ class DownloadCore < Base
12
+ def process
13
+ host.show_message "Downloading cores is deprecated. Solargraph currently uses RBS for core and stdlib documentation", LanguageServer::MessageTypes::INFO
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -1,20 +1,20 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module LanguageServer
5
- module Message
6
- module Extended
7
- class Search < Base
8
- def process
9
- results = host.search(params['query'])
10
- page = Solargraph::Page.new(host.options['viewsPath'])
11
- content = page.render('search', layout: true, locals: {query: params['query'], results: results})
12
- set_result(
13
- content: content
14
- )
15
- end
16
- end
17
- end
18
- end
19
- end
20
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module LanguageServer
5
+ module Message
6
+ module Extended
7
+ class Search < Base
8
+ def process
9
+ results = host.search(params['query'])
10
+ page = Solargraph::Page.new(host.options['viewsPath'])
11
+ content = page.render('search', layout: true, locals: {query: params['query'], results: results})
12
+ set_result(
13
+ content: content
14
+ )
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end