solargraph 0.58.0 → 0.59.0.dev.1

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 (166) hide show
  1. checksums.yaml +4 -4
  2. data/.envrc +3 -0
  3. data/.gitattributes +2 -0
  4. data/.github/workflows/linting.yml +4 -5
  5. data/.github/workflows/plugins.yml +40 -36
  6. data/.github/workflows/rspec.yml +45 -13
  7. data/.github/workflows/typecheck.yml +2 -2
  8. data/.rubocop_todo.yml +27 -49
  9. data/CHANGELOG.md +3 -0
  10. data/README.md +3 -3
  11. data/Rakefile +1 -0
  12. data/bin/solargraph +8 -8
  13. data/lib/solargraph/api_map/cache.rb +110 -110
  14. data/lib/solargraph/api_map/constants.rb +289 -279
  15. data/lib/solargraph/api_map/index.rb +204 -193
  16. data/lib/solargraph/api_map/source_to_yard.rb +109 -97
  17. data/lib/solargraph/api_map/store.rb +387 -384
  18. data/lib/solargraph/api_map.rb +1000 -945
  19. data/lib/solargraph/complex_type/conformance.rb +176 -0
  20. data/lib/solargraph/complex_type/type_methods.rb +242 -228
  21. data/lib/solargraph/complex_type/unique_type.rb +632 -482
  22. data/lib/solargraph/complex_type.rb +549 -444
  23. data/lib/solargraph/convention/data_definition/data_definition_node.rb +93 -91
  24. data/lib/solargraph/convention/data_definition.rb +108 -105
  25. data/lib/solargraph/convention/struct_definition/struct_assignment_node.rb +62 -61
  26. data/lib/solargraph/convention/struct_definition/struct_definition_node.rb +103 -102
  27. data/lib/solargraph/convention/struct_definition.rb +168 -164
  28. data/lib/solargraph/diagnostics/require_not_found.rb +54 -53
  29. data/lib/solargraph/diagnostics/rubocop.rb +119 -118
  30. data/lib/solargraph/diagnostics/rubocop_helpers.rb +70 -68
  31. data/lib/solargraph/diagnostics/type_check.rb +56 -55
  32. data/lib/solargraph/doc_map.rb +200 -439
  33. data/lib/solargraph/equality.rb +34 -34
  34. data/lib/solargraph/gem_pins.rb +97 -98
  35. data/lib/solargraph/language_server/host/dispatch.rb +131 -130
  36. data/lib/solargraph/language_server/host/message_worker.rb +113 -112
  37. data/lib/solargraph/language_server/host/sources.rb +100 -99
  38. data/lib/solargraph/language_server/host.rb +883 -878
  39. data/lib/solargraph/language_server/message/extended/check_gem_version.rb +109 -114
  40. data/lib/solargraph/language_server/message/extended/document.rb +24 -23
  41. data/lib/solargraph/language_server/message/text_document/completion.rb +58 -56
  42. data/lib/solargraph/language_server/message/text_document/definition.rb +42 -40
  43. data/lib/solargraph/language_server/message/text_document/document_symbol.rb +28 -26
  44. data/lib/solargraph/language_server/message/text_document/formatting.rb +150 -148
  45. data/lib/solargraph/language_server/message/text_document/hover.rb +60 -58
  46. data/lib/solargraph/language_server/message/text_document/signature_help.rb +25 -24
  47. data/lib/solargraph/language_server/message/text_document/type_definition.rb +27 -25
  48. data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +25 -23
  49. data/lib/solargraph/library.rb +729 -683
  50. data/lib/solargraph/location.rb +87 -82
  51. data/lib/solargraph/logging.rb +57 -37
  52. data/lib/solargraph/parser/comment_ripper.rb +76 -69
  53. data/lib/solargraph/parser/flow_sensitive_typing.rb +483 -255
  54. data/lib/solargraph/parser/node_processor/base.rb +122 -92
  55. data/lib/solargraph/parser/node_processor.rb +63 -62
  56. data/lib/solargraph/parser/parser_gem/class_methods.rb +167 -149
  57. data/lib/solargraph/parser/parser_gem/node_chainer.rb +191 -166
  58. data/lib/solargraph/parser/parser_gem/node_methods.rb +506 -486
  59. data/lib/solargraph/parser/parser_gem/node_processors/and_node.rb +22 -22
  60. data/lib/solargraph/parser/parser_gem/node_processors/args_node.rb +61 -59
  61. data/lib/solargraph/parser/parser_gem/node_processors/begin_node.rb +24 -15
  62. data/lib/solargraph/parser/parser_gem/node_processors/block_node.rb +46 -46
  63. data/lib/solargraph/parser/parser_gem/node_processors/def_node.rb +60 -53
  64. data/lib/solargraph/parser/parser_gem/node_processors/if_node.rb +53 -23
  65. data/lib/solargraph/parser/parser_gem/node_processors/ivasgn_node.rb +41 -40
  66. data/lib/solargraph/parser/parser_gem/node_processors/lvasgn_node.rb +30 -29
  67. data/lib/solargraph/parser/parser_gem/node_processors/masgn_node.rb +61 -59
  68. data/lib/solargraph/parser/parser_gem/node_processors/opasgn_node.rb +98 -98
  69. data/lib/solargraph/parser/parser_gem/node_processors/or_node.rb +22 -0
  70. data/lib/solargraph/parser/parser_gem/node_processors/orasgn_node.rb +17 -17
  71. data/lib/solargraph/parser/parser_gem/node_processors/resbody_node.rb +39 -38
  72. data/lib/solargraph/parser/parser_gem/node_processors/sclass_node.rb +53 -52
  73. data/lib/solargraph/parser/parser_gem/node_processors/send_node.rb +296 -291
  74. data/lib/solargraph/parser/parser_gem/node_processors/when_node.rb +23 -0
  75. data/lib/solargraph/parser/parser_gem/node_processors/while_node.rb +33 -29
  76. data/lib/solargraph/parser/parser_gem/node_processors.rb +74 -70
  77. data/lib/solargraph/parser/region.rb +75 -69
  78. data/lib/solargraph/parser/snippet.rb +17 -17
  79. data/lib/solargraph/pin/base.rb +761 -729
  80. data/lib/solargraph/pin/base_variable.rb +418 -126
  81. data/lib/solargraph/pin/block.rb +126 -104
  82. data/lib/solargraph/pin/breakable.rb +13 -9
  83. data/lib/solargraph/pin/callable.rb +278 -231
  84. data/lib/solargraph/pin/closure.rb +68 -72
  85. data/lib/solargraph/pin/common.rb +94 -79
  86. data/lib/solargraph/pin/compound_statement.rb +55 -0
  87. data/lib/solargraph/pin/conversions.rb +124 -123
  88. data/lib/solargraph/pin/delegated_method.rb +131 -120
  89. data/lib/solargraph/pin/documenting.rb +115 -114
  90. data/lib/solargraph/pin/instance_variable.rb +38 -34
  91. data/lib/solargraph/pin/keyword.rb +16 -20
  92. data/lib/solargraph/pin/local_variable.rb +31 -75
  93. data/lib/solargraph/pin/method.rb +720 -672
  94. data/lib/solargraph/pin/method_alias.rb +42 -34
  95. data/lib/solargraph/pin/namespace.rb +121 -115
  96. data/lib/solargraph/pin/parameter.rb +338 -275
  97. data/lib/solargraph/pin/proxy_type.rb +40 -39
  98. data/lib/solargraph/pin/reference/override.rb +47 -47
  99. data/lib/solargraph/pin/reference/superclass.rb +17 -15
  100. data/lib/solargraph/pin/reference.rb +41 -39
  101. data/lib/solargraph/pin/search.rb +62 -61
  102. data/lib/solargraph/pin/signature.rb +69 -61
  103. data/lib/solargraph/pin/symbol.rb +53 -53
  104. data/lib/solargraph/pin/until.rb +18 -18
  105. data/lib/solargraph/pin/while.rb +18 -18
  106. data/lib/solargraph/pin.rb +46 -44
  107. data/lib/solargraph/pin_cache.rb +665 -245
  108. data/lib/solargraph/position.rb +118 -119
  109. data/lib/solargraph/range.rb +112 -112
  110. data/lib/solargraph/rbs_map/conversions.rb +846 -823
  111. data/lib/solargraph/rbs_map/core_map.rb +65 -58
  112. data/lib/solargraph/rbs_map/stdlib_map.rb +72 -43
  113. data/lib/solargraph/rbs_map.rb +217 -163
  114. data/lib/solargraph/shell.rb +397 -352
  115. data/lib/solargraph/source/chain/call.rb +372 -337
  116. data/lib/solargraph/source/chain/constant.rb +28 -26
  117. data/lib/solargraph/source/chain/hash.rb +35 -34
  118. data/lib/solargraph/source/chain/if.rb +29 -28
  119. data/lib/solargraph/source/chain/instance_variable.rb +34 -13
  120. data/lib/solargraph/source/chain/literal.rb +53 -48
  121. data/lib/solargraph/source/chain/or.rb +31 -23
  122. data/lib/solargraph/source/chain.rb +294 -291
  123. data/lib/solargraph/source/change.rb +89 -82
  124. data/lib/solargraph/source/cursor.rb +172 -166
  125. data/lib/solargraph/source/encoding_fixes.rb +23 -23
  126. data/lib/solargraph/source/source_chainer.rb +204 -194
  127. data/lib/solargraph/source/updater.rb +59 -55
  128. data/lib/solargraph/source.rb +524 -498
  129. data/lib/solargraph/source_map/clip.rb +237 -226
  130. data/lib/solargraph/source_map/data.rb +37 -34
  131. data/lib/solargraph/source_map/mapper.rb +282 -259
  132. data/lib/solargraph/source_map.rb +220 -212
  133. data/lib/solargraph/type_checker/problem.rb +34 -32
  134. data/lib/solargraph/type_checker/rules.rb +157 -84
  135. data/lib/solargraph/type_checker.rb +895 -814
  136. data/lib/solargraph/version.rb +5 -5
  137. data/lib/solargraph/workspace/config.rb +257 -255
  138. data/lib/solargraph/workspace/gemspecs.rb +367 -0
  139. data/lib/solargraph/workspace/require_paths.rb +98 -97
  140. data/lib/solargraph/workspace.rb +362 -220
  141. data/lib/solargraph/yard_map/helpers.rb +45 -44
  142. data/lib/solargraph/yard_map/mapper/to_method.rb +134 -130
  143. data/lib/solargraph/yard_map/mapper/to_namespace.rb +32 -31
  144. data/lib/solargraph/yard_map/mapper.rb +84 -79
  145. data/lib/solargraph/yardoc.rb +97 -87
  146. data/lib/solargraph.rb +126 -105
  147. data/rbs/fills/rubygems/0/dependency.rbs +193 -0
  148. data/rbs/fills/tuple/tuple.rbs +28 -0
  149. data/rbs/shims/ast/0/node.rbs +5 -0
  150. data/rbs/shims/diff-lcs/1.5/diff-lcs.rbs +11 -0
  151. data/rbs_collection.yaml +1 -1
  152. data/solargraph.gemspec +2 -1
  153. metadata +23 -17
  154. data/lib/solargraph/type_checker/checks.rb +0 -124
  155. data/lib/solargraph/type_checker/param_def.rb +0 -37
  156. data/lib/solargraph/yard_map/to_method.rb +0 -89
  157. data/sig/shims/ast/0/node.rbs +0 -5
  158. /data/{sig → rbs}/shims/ast/2.4/.rbs_meta.yaml +0 -0
  159. /data/{sig → rbs}/shims/ast/2.4/ast.rbs +0 -0
  160. /data/{sig → rbs}/shims/parser/3.2.0.1/builders/default.rbs +0 -0
  161. /data/{sig → rbs}/shims/parser/3.2.0.1/manifest.yaml +0 -0
  162. /data/{sig → rbs}/shims/parser/3.2.0.1/parser.rbs +0 -0
  163. /data/{sig → rbs}/shims/parser/3.2.0.1/polyfill.rbs +0 -0
  164. /data/{sig → rbs}/shims/thor/1.2.0.1/.rbs_meta.yaml +0 -0
  165. /data/{sig → rbs}/shims/thor/1.2.0.1/manifest.yaml +0 -0
  166. /data/{sig → rbs}/shims/thor/1.2.0.1/thor.rbs +0 -0
@@ -1,148 +1,150 @@
1
- # frozen_string_literal: true
2
-
3
- require 'securerandom'
4
- require 'tmpdir'
5
-
6
- module Solargraph
7
- module LanguageServer
8
- module Message
9
- module TextDocument
10
- class Formatting < Base
11
- include Solargraph::Diagnostics::RubocopHelpers
12
-
13
- def process
14
- file_uri = params['textDocument']['uri']
15
- config = config_for(file_uri)
16
- original = host.read_text(file_uri)
17
- args = cli_args(file_uri, config)
18
-
19
- require_rubocop(config['version'])
20
- options, paths = ::RuboCop::Options.new.parse(args)
21
- # @sg-ignore Unresolved call to []=
22
- options[:stdin] = original
23
-
24
- # Ensure only one instance of RuboCop::Runner is running at
25
- # a time - it uses 'chdir' to read config files with ERB,
26
- # which can conflict with other chdirs.
27
- corrections = Solargraph::CHDIR_MUTEX.synchronize do
28
- redirect_stdout do
29
- ::RuboCop::Runner.new(options, ::RuboCop::ConfigStore.new).run(paths)
30
- end
31
- end
32
- # @sg-ignore Unresolved call to []=
33
- result = options[:stdin]
34
-
35
- log_corrections(corrections)
36
-
37
- format original, result
38
- rescue ::RuboCop::ValidationError, ::RuboCop::ConfigNotFoundError => e
39
- set_error(Solargraph::LanguageServer::ErrorCodes::INTERNAL_ERROR, "[#{e.class}] #{e.message}")
40
- end
41
-
42
- private
43
-
44
- # @param corrections [String]
45
- # @return [void]
46
- def log_corrections(corrections)
47
- corrections = corrections&.strip
48
- return if corrections&.empty?
49
-
50
- Solargraph.logger.info('Formatting result:')
51
- corrections.each_line do |line|
52
- next if line.strip.empty?
53
- Solargraph.logger.info(line.strip)
54
- end
55
- end
56
-
57
- # @param file_uri [String]
58
- # @return [Hash{String => undefined}]
59
- def config_for(file_uri)
60
- conf = host.formatter_config(file_uri)
61
- return {} unless conf.is_a?(Hash)
62
-
63
- conf['rubocop'] || {}
64
- end
65
-
66
- # @param file_uri [String]
67
- # @param config [Hash{String => String}]
68
- # @return [Array<String>]
69
- def cli_args file_uri, config
70
- file = UriHelpers.uri_to_file(file_uri)
71
- args = [
72
- config['cops'] == 'all' ? '-A' : '-a',
73
- '--cache', 'false',
74
- '--format', formatter_class(config).name,
75
- ]
76
-
77
- ['except', 'only'].each do |arg|
78
- cops = cop_list(config[arg])
79
- args += ["--#{arg}", cops] if cops
80
- end
81
-
82
- args += config['extra_args'] if config['extra_args']
83
- args + [file]
84
- end
85
-
86
- # @param config [Hash{String => String}]
87
- # @sg-ignore
88
- # @return [Class<RuboCop::Formatter::BaseFormatter>]
89
- def formatter_class(config)
90
- if self.class.const_defined?('BlankRubocopFormatter')
91
- # @sg-ignore
92
- BlankRubocopFormatter
93
- else
94
- require_rubocop(config['version'])
95
- klass = Class.new(::RuboCop::Formatter::BaseFormatter)
96
- self.class.const_set 'BlankRubocopFormatter', klass
97
- end
98
- end
99
-
100
- # @param value [Array, String]
101
- # @return [String, nil]
102
- def cop_list(value)
103
- # @type [String]
104
- value = value.join(',') if value.respond_to?(:join)
105
- return nil if value == '' || !value.is_a?(String)
106
- value
107
- end
108
-
109
- # @param original [String]
110
- # @param result [String]
111
- # @return [void]
112
- def format original, result
113
- ending = if original.end_with?("\n")
114
- {
115
- line: original.lines.length,
116
- character: 0
117
- }
118
- elsif original.lines.empty?
119
- {
120
- line: 0,
121
- character: 0
122
- }
123
- else
124
- {
125
- line: original.lines.length - 1,
126
- character: original.lines.last.length
127
- }
128
- end
129
- set_result(
130
- [
131
- {
132
- range: {
133
- start: {
134
- line: 0,
135
- character: 0
136
- },
137
- end: ending
138
- },
139
- newText: result
140
- }
141
- ]
142
- )
143
- end
144
- end
145
- end
146
- end
147
- end
148
- end
1
+ # frozen_string_literal: true
2
+
3
+ require 'securerandom'
4
+ require 'tmpdir'
5
+
6
+ module Solargraph
7
+ module LanguageServer
8
+ module Message
9
+ module TextDocument
10
+ class Formatting < Base
11
+ include Solargraph::Diagnostics::RubocopHelpers
12
+
13
+ def process
14
+ file_uri = params['textDocument']['uri']
15
+ config = config_for(file_uri)
16
+ original = host.read_text(file_uri)
17
+ args = cli_args(file_uri, config)
18
+
19
+ require_rubocop(config['version'])
20
+ options, paths = ::RuboCop::Options.new.parse(args)
21
+ # @sg-ignore Unresolved call to []=
22
+ options[:stdin] = original
23
+
24
+ # Ensure only one instance of RuboCop::Runner is running at
25
+ # a time - it uses 'chdir' to read config files with ERB,
26
+ # which can conflict with other chdirs.
27
+ corrections = Solargraph::CHDIR_MUTEX.synchronize do
28
+ redirect_stdout do
29
+ ::RuboCop::Runner.new(options, ::RuboCop::ConfigStore.new).run(paths)
30
+ end
31
+ end
32
+ # @sg-ignore Unresolved call to []=
33
+ result = options[:stdin]
34
+
35
+ log_corrections(corrections)
36
+
37
+ format original, result
38
+ rescue ::RuboCop::ValidationError, ::RuboCop::ConfigNotFoundError => e
39
+ set_error(Solargraph::LanguageServer::ErrorCodes::INTERNAL_ERROR, "[#{e.class}] #{e.message}")
40
+ end
41
+
42
+ private
43
+
44
+ # @param corrections [String]
45
+ # @return [void]
46
+ def log_corrections(corrections)
47
+ corrections = corrections&.strip
48
+ return if corrections&.empty?
49
+
50
+ Solargraph.logger.info('Formatting result:')
51
+ corrections.each_line do |line|
52
+ next if line.strip.empty?
53
+ Solargraph.logger.info(line.strip)
54
+ end
55
+ end
56
+
57
+ # @param file_uri [String]
58
+ # @return [Hash{String => undefined}]
59
+ def config_for(file_uri)
60
+ conf = host.formatter_config(file_uri)
61
+ return {} unless conf.is_a?(Hash)
62
+
63
+ conf['rubocop'] || {}
64
+ end
65
+
66
+ # @param file_uri [String]
67
+ # @param config [Hash{String => String}]
68
+ # @return [Array<String>]
69
+ def cli_args file_uri, config
70
+ file = UriHelpers.uri_to_file(file_uri)
71
+ args = [
72
+ config['cops'] == 'all' ? '-A' : '-a',
73
+ '--cache', 'false',
74
+ '--format', formatter_class(config).name,
75
+ ]
76
+
77
+ ['except', 'only'].each do |arg|
78
+ cops = cop_list(config[arg])
79
+ args += ["--#{arg}", cops] if cops
80
+ end
81
+
82
+ args += config['extra_args'] if config['extra_args']
83
+ args + [file]
84
+ end
85
+
86
+ # @param config [Hash{String => String}]
87
+ # @sg-ignore
88
+ # @return [Class<RuboCop::Formatter::BaseFormatter>]
89
+ def formatter_class(config)
90
+ if self.class.const_defined?('BlankRubocopFormatter')
91
+ # @sg-ignore
92
+ BlankRubocopFormatter
93
+ else
94
+ require_rubocop(config['version'])
95
+ klass = Class.new(::RuboCop::Formatter::BaseFormatter)
96
+ self.class.const_set 'BlankRubocopFormatter', klass
97
+ end
98
+ end
99
+
100
+ # @param value [Array, String]
101
+ #
102
+ # @return [String, nil]
103
+ def cop_list(value)
104
+ # @type [String]
105
+ # @sg-ignore Translate to something flow sensitive typing understands
106
+ value = value.join(',') if value.respond_to?(:join)
107
+ return nil if value == '' || !value.is_a?(String)
108
+ value
109
+ end
110
+
111
+ # @param original [String]
112
+ # @param result [String]
113
+ # @return [void]
114
+ def format original, result
115
+ ending = if original.end_with?("\n")
116
+ {
117
+ line: original.lines.length,
118
+ character: 0
119
+ }
120
+ elsif original.lines.empty?
121
+ {
122
+ line: 0,
123
+ character: 0
124
+ }
125
+ else
126
+ {
127
+ line: original.lines.length - 1,
128
+ character: original.lines.last.length
129
+ }
130
+ end
131
+ set_result(
132
+ [
133
+ {
134
+ range: {
135
+ start: {
136
+ line: 0,
137
+ character: 0
138
+ },
139
+ end: ending
140
+ },
141
+ newText: result
142
+ }
143
+ ]
144
+ )
145
+ end
146
+ end
147
+ end
148
+ end
149
+ end
150
+ end
@@ -1,58 +1,60 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module LanguageServer
5
- module Message
6
- module TextDocument
7
- class Hover < Base
8
- def process
9
- line = params['position']['line']
10
- col = params['position']['character']
11
- contents = []
12
- suggestions = host.definitions_at(params['textDocument']['uri'], line, col)
13
- last_link = nil
14
- suggestions.each do |pin|
15
- parts = []
16
- this_link = host.options['enablePages'] ? pin.link_documentation : pin.text_documentation
17
- if !this_link.nil? && this_link != last_link
18
- parts.push this_link
19
- end
20
- parts.push "`#{pin.detail}`" unless pin.is_a?(Pin::Namespace) || pin.detail.nil?
21
- parts.push pin.documentation unless pin.documentation.nil? || pin.documentation.empty?
22
- unless parts.empty?
23
- data = parts.join("\n\n")
24
- next if contents.last&.end_with?(data)
25
- contents.push data
26
- end
27
- last_link = this_link unless this_link.nil?
28
- end
29
- set_result(
30
- contents_or_nil(contents)
31
- )
32
- rescue FileNotFoundError => e
33
- Logging.logger.warn "[#{e.class}] #{e.message}"
34
- Logging.logger.warn e.backtrace.join("\n")
35
- set_result nil
36
- end
37
-
38
- private
39
-
40
- # @param contents [Array<String>]
41
- # @return [Hash{Symbol => Hash{Symbol => String}}, nil]
42
- def contents_or_nil contents
43
- stripped = contents
44
- .map(&:strip)
45
- .reject { |c| c.empty? }
46
- return nil if stripped.empty?
47
- {
48
- contents: {
49
- kind: 'markdown',
50
- value: stripped.join("\n\n")
51
- }
52
- }
53
- end
54
- end
55
- end
56
- end
57
- end
58
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module LanguageServer
5
+ module Message
6
+ module TextDocument
7
+ class Hover < Base
8
+ def process
9
+ line = params['position']['line']
10
+ col = params['position']['character']
11
+ contents = []
12
+ suggestions = host.definitions_at(params['textDocument']['uri'], line, col)
13
+ last_link = nil
14
+ # @sg-ignore Need to add nil check here
15
+ suggestions.each do |pin|
16
+ parts = []
17
+ this_link = host.options['enablePages'] ? pin.link_documentation : pin.text_documentation
18
+ if !this_link.nil? && this_link != last_link
19
+ parts.push this_link
20
+ end
21
+ parts.push "`#{pin.detail}`" unless pin.is_a?(Pin::Namespace) || pin.detail.nil?
22
+ parts.push pin.documentation unless pin.documentation.nil? || pin.documentation.empty?
23
+ unless parts.empty?
24
+ data = parts.join("\n\n")
25
+ next if contents.last&.end_with?(data)
26
+ contents.push data
27
+ end
28
+ last_link = this_link unless this_link.nil?
29
+ end
30
+ set_result(
31
+ contents_or_nil(contents)
32
+ )
33
+ rescue FileNotFoundError => e
34
+ Logging.logger.warn "[#{e.class}] #{e.message}"
35
+ # @sg-ignore Need to add nil check here
36
+ Logging.logger.warn e.backtrace.join("\n")
37
+ set_result nil
38
+ end
39
+
40
+ private
41
+
42
+ # @param contents [Array<String>]
43
+ # @return [Hash{Symbol => Hash{Symbol => String}}, nil]
44
+ def contents_or_nil contents
45
+ stripped = contents
46
+ .map(&:strip)
47
+ .reject { |c| c.empty? }
48
+ return nil if stripped.empty?
49
+ {
50
+ contents: {
51
+ kind: 'markdown',
52
+ value: stripped.join("\n\n")
53
+ }
54
+ }
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
@@ -1,24 +1,25 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module LanguageServer
5
- module Message
6
- module TextDocument
7
- class SignatureHelp < TextDocument::Base
8
- def process
9
- line = params['position']['line']
10
- col = params['position']['character']
11
- suggestions = host.signatures_at(params['textDocument']['uri'], line, col)
12
- set_result({
13
- signatures: suggestions.flat_map { |pin| pin.signature_help }
14
- })
15
- rescue FileNotFoundError => e
16
- Logging.logger.warn "[#{e.class}] #{e.message}"
17
- Logging.logger.warn e.backtrace.join("\n")
18
- set_result nil
19
- end
20
- end
21
- end
22
- end
23
- end
24
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module LanguageServer
5
+ module Message
6
+ module TextDocument
7
+ class SignatureHelp < TextDocument::Base
8
+ def process
9
+ line = params['position']['line']
10
+ col = params['position']['character']
11
+ suggestions = host.signatures_at(params['textDocument']['uri'], line, col)
12
+ set_result({
13
+ signatures: suggestions.flat_map { |pin| pin.signature_help }
14
+ })
15
+ rescue FileNotFoundError => e
16
+ Logging.logger.warn "[#{e.class}] #{e.message}"
17
+ # @sg-ignore Need to add nil check here
18
+ Logging.logger.warn e.backtrace.join("\n")
19
+ set_result nil
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -1,25 +1,27 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph::LanguageServer::Message::TextDocument
4
- class TypeDefinition < Base
5
- def process
6
- @line = params['position']['line']
7
- @column = params['position']['character']
8
- set_result(code_location || [])
9
- end
10
-
11
- private
12
-
13
- # @return [Array<Hash>, nil]
14
- def code_location
15
- suggestions = host.type_definitions_at(params['textDocument']['uri'], @line, @column)
16
- return nil if suggestions.empty?
17
- suggestions.reject { |pin| pin.best_location.nil? || pin.best_location.filename.nil? }.map do |pin|
18
- {
19
- uri: file_to_uri(pin.best_location.filename),
20
- range: pin.best_location.range.to_hash
21
- }
22
- end
23
- end
24
- end
25
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph::LanguageServer::Message::TextDocument
4
+ class TypeDefinition < Base
5
+ def process
6
+ @line = params['position']['line']
7
+ @column = params['position']['character']
8
+ set_result(code_location || [])
9
+ end
10
+
11
+ private
12
+
13
+ # @return [Array<Hash>, nil]
14
+ def code_location
15
+ suggestions = host.type_definitions_at(params['textDocument']['uri'], @line, @column)
16
+ # @sg-ignore Need to add nil check here
17
+ return nil if suggestions.empty?
18
+ # @sg-ignore Need to add nil check here
19
+ suggestions.reject { |pin| pin.best_location.nil? || pin.best_location.filename.nil? }.map do |pin|
20
+ {
21
+ uri: file_to_uri(pin.best_location.filename),
22
+ range: pin.best_location.range.to_hash
23
+ }
24
+ end
25
+ end
26
+ end
27
+ end
@@ -1,23 +1,25 @@
1
- # frozen_string_literal: true
2
-
3
- class Solargraph::LanguageServer::Message::Workspace::WorkspaceSymbol < Solargraph::LanguageServer::Message::Base
4
- include Solargraph::LanguageServer::UriHelpers
5
-
6
- def process
7
- pins = host.query_symbols(params['query'])
8
- info = pins.map do |pin|
9
- uri = file_to_uri(pin.best_location.filename)
10
- {
11
- name: pin.path,
12
- containerName: pin.namespace,
13
- kind: pin.symbol_kind,
14
- location: {
15
- uri: uri,
16
- range: pin.best_location.range.to_hash
17
- },
18
- deprecated: pin.deprecated?
19
- }
20
- end
21
- set_result info
22
- end
23
- end
1
+ # frozen_string_literal: true
2
+
3
+ class Solargraph::LanguageServer::Message::Workspace::WorkspaceSymbol < Solargraph::LanguageServer::Message::Base
4
+ include Solargraph::LanguageServer::UriHelpers
5
+
6
+ def process
7
+ pins = host.query_symbols(params['query'])
8
+ info = pins.map do |pin|
9
+ # @sg-ignore Need to add nil check here
10
+ uri = file_to_uri(pin.best_location.filename)
11
+ {
12
+ name: pin.path,
13
+ containerName: pin.namespace,
14
+ kind: pin.symbol_kind,
15
+ location: {
16
+ uri: uri,
17
+ # @sg-ignore Need to add nil check here
18
+ range: pin.best_location.range.to_hash
19
+ },
20
+ deprecated: pin.deprecated?
21
+ }
22
+ end
23
+ set_result info
24
+ end
25
+ end