solargraph 0.59.0.dev.1 → 0.59.0.dev.2

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 (169) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/plugins.yml +4 -1
  3. data/.github/workflows/rspec.yml +3 -14
  4. data/.gitignore +1 -0
  5. data/.rubocop.yml +32 -5
  6. data/.rubocop_todo.yml +37 -931
  7. data/CHANGELOG.md +7 -1
  8. data/Gemfile +3 -1
  9. data/Rakefile +25 -23
  10. data/bin/solargraph +2 -1
  11. data/lib/solargraph/api_map/index.rb +5 -11
  12. data/lib/solargraph/api_map/source_to_yard.rb +9 -8
  13. data/lib/solargraph/api_map/store.rb +22 -20
  14. data/lib/solargraph/api_map.rb +50 -37
  15. data/lib/solargraph/bench.rb +44 -45
  16. data/lib/solargraph/complex_type/type_methods.rb +12 -15
  17. data/lib/solargraph/complex_type/unique_type.rb +54 -43
  18. data/lib/solargraph/complex_type.rb +69 -61
  19. data/lib/solargraph/convention/data_definition/data_assignment_node.rb +61 -61
  20. data/lib/solargraph/convention/data_definition/data_definition_node.rb +4 -4
  21. data/lib/solargraph/convention/data_definition.rb +1 -1
  22. data/lib/solargraph/convention/gemfile.rb +15 -15
  23. data/lib/solargraph/convention/gemspec.rb +23 -23
  24. data/lib/solargraph/convention/rakefile.rb +17 -17
  25. data/lib/solargraph/convention/struct_definition/struct_assignment_node.rb +1 -1
  26. data/lib/solargraph/convention/struct_definition/struct_definition_node.rb +3 -3
  27. data/lib/solargraph/convention/struct_definition.rb +3 -3
  28. data/lib/solargraph/convention.rb +78 -78
  29. data/lib/solargraph/converters/dd.rb +19 -17
  30. data/lib/solargraph/converters/dl.rb +17 -15
  31. data/lib/solargraph/converters/dt.rb +17 -15
  32. data/lib/solargraph/converters/misc.rb +3 -1
  33. data/lib/solargraph/diagnostics/rubocop.rb +10 -10
  34. data/lib/solargraph/diagnostics/rubocop_helpers.rb +3 -3
  35. data/lib/solargraph/diagnostics/type_check.rb +10 -10
  36. data/lib/solargraph/diagnostics/update_errors.rb +37 -41
  37. data/lib/solargraph/doc_map.rb +9 -10
  38. data/lib/solargraph/equality.rb +3 -3
  39. data/lib/solargraph/gem_pins.rb +7 -5
  40. data/lib/solargraph/language_server/error_codes.rb +20 -20
  41. data/lib/solargraph/language_server/host/diagnoser.rb +89 -89
  42. data/lib/solargraph/language_server/host/dispatch.rb +2 -3
  43. data/lib/solargraph/language_server/host/message_worker.rb +2 -2
  44. data/lib/solargraph/language_server/host/sources.rb +1 -1
  45. data/lib/solargraph/language_server/host.rb +24 -21
  46. data/lib/solargraph/language_server/message/base.rb +97 -97
  47. data/lib/solargraph/language_server/message/client/register_capability.rb +13 -15
  48. data/lib/solargraph/language_server/message/completion_item/resolve.rb +58 -60
  49. data/lib/solargraph/language_server/message/extended/check_gem_version.rb +10 -11
  50. data/lib/solargraph/language_server/message/extended/document_gems.rb +32 -32
  51. data/lib/solargraph/language_server/message/extended/download_core.rb +20 -19
  52. data/lib/solargraph/language_server/message/extended/search.rb +20 -20
  53. data/lib/solargraph/language_server/message/initialize.rb +197 -191
  54. data/lib/solargraph/language_server/message/text_document/completion.rb +8 -8
  55. data/lib/solargraph/language_server/message/text_document/definition.rb +41 -34
  56. data/lib/solargraph/language_server/message/text_document/document_highlight.rb +23 -16
  57. data/lib/solargraph/language_server/message/text_document/document_symbol.rb +29 -21
  58. data/lib/solargraph/language_server/message/text_document/formatting.rb +6 -6
  59. data/lib/solargraph/language_server/message/text_document/hover.rb +3 -5
  60. data/lib/solargraph/language_server/message/text_document/prepare_rename.rb +18 -11
  61. data/lib/solargraph/language_server/message/text_document/references.rb +23 -16
  62. data/lib/solargraph/language_server/message/text_document/rename.rb +26 -19
  63. data/lib/solargraph/language_server/message/text_document/signature_help.rb +2 -2
  64. data/lib/solargraph/language_server/message/text_document/type_definition.rb +25 -19
  65. data/lib/solargraph/language_server/message/workspace/did_change_configuration.rb +41 -35
  66. data/lib/solargraph/language_server/message/workspace/did_change_watched_files.rb +48 -40
  67. data/lib/solargraph/language_server/message/workspace/did_change_workspace_folders.rb +32 -26
  68. data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +27 -19
  69. data/lib/solargraph/language_server/message.rb +94 -94
  70. data/lib/solargraph/language_server/request.rb +29 -27
  71. data/lib/solargraph/language_server/transport/data_reader.rb +72 -74
  72. data/lib/solargraph/language_server/uri_helpers.rb +49 -49
  73. data/lib/solargraph/library.rb +28 -33
  74. data/lib/solargraph/location.rb +10 -12
  75. data/lib/solargraph/logging.rb +4 -4
  76. data/lib/solargraph/page.rb +92 -92
  77. data/lib/solargraph/parser/comment_ripper.rb +12 -4
  78. data/lib/solargraph/parser/flow_sensitive_typing.rb +32 -42
  79. data/lib/solargraph/parser/node_processor/base.rb +4 -4
  80. data/lib/solargraph/parser/node_processor.rb +1 -1
  81. data/lib/solargraph/parser/parser_gem/class_methods.rb +4 -4
  82. data/lib/solargraph/parser/parser_gem/flawed_builder.rb +19 -19
  83. data/lib/solargraph/parser/parser_gem/node_chainer.rb +20 -20
  84. data/lib/solargraph/parser/parser_gem/node_methods.rb +66 -65
  85. data/lib/solargraph/parser/parser_gem/node_processors/args_node.rb +12 -12
  86. data/lib/solargraph/parser/parser_gem/node_processors/block_node.rb +1 -1
  87. data/lib/solargraph/parser/parser_gem/node_processors/def_node.rb +3 -3
  88. data/lib/solargraph/parser/parser_gem/node_processors/defs_node.rb +38 -37
  89. data/lib/solargraph/parser/parser_gem/node_processors/if_node.rb +3 -3
  90. data/lib/solargraph/parser/parser_gem/node_processors/ivasgn_node.rb +2 -1
  91. data/lib/solargraph/parser/parser_gem/node_processors/opasgn_node.rb +1 -1
  92. data/lib/solargraph/parser/parser_gem/node_processors/sclass_node.rb +3 -5
  93. data/lib/solargraph/parser/parser_gem/node_processors/send_node.rb +118 -112
  94. data/lib/solargraph/parser/parser_gem/node_processors/until_node.rb +29 -29
  95. data/lib/solargraph/parser/parser_gem/node_processors/when_node.rb +1 -1
  96. data/lib/solargraph/parser/parser_gem/node_processors/while_node.rb +1 -1
  97. data/lib/solargraph/parser/parser_gem.rb +14 -12
  98. data/lib/solargraph/parser/snippet.rb +2 -0
  99. data/lib/solargraph/parser.rb +25 -23
  100. data/lib/solargraph/pin/base.rb +78 -64
  101. data/lib/solargraph/pin/base_variable.rb +28 -71
  102. data/lib/solargraph/pin/block.rb +3 -2
  103. data/lib/solargraph/pin/breakable.rb +2 -0
  104. data/lib/solargraph/pin/callable.rb +23 -26
  105. data/lib/solargraph/pin/closure.rb +5 -4
  106. data/lib/solargraph/pin/common.rb +5 -2
  107. data/lib/solargraph/pin/compound_statement.rb +3 -3
  108. data/lib/solargraph/pin/constant.rb +43 -45
  109. data/lib/solargraph/pin/conversions.rb +9 -4
  110. data/lib/solargraph/pin/delegated_method.rb +4 -4
  111. data/lib/solargraph/pin/documenting.rb +3 -2
  112. data/lib/solargraph/pin/local_variable.rb +4 -4
  113. data/lib/solargraph/pin/method.rb +71 -70
  114. data/lib/solargraph/pin/namespace.rb +13 -12
  115. data/lib/solargraph/pin/parameter.rb +28 -27
  116. data/lib/solargraph/pin/proxy_type.rb +2 -0
  117. data/lib/solargraph/pin/reference.rb +17 -0
  118. data/lib/solargraph/pin/search.rb +2 -2
  119. data/lib/solargraph/pin/signature.rb +9 -14
  120. data/lib/solargraph/pin/symbol.rb +1 -0
  121. data/lib/solargraph/pin/until.rb +1 -3
  122. data/lib/solargraph/pin/while.rb +1 -3
  123. data/lib/solargraph/pin_cache.rb +16 -19
  124. data/lib/solargraph/position.rb +35 -17
  125. data/lib/solargraph/range.rb +10 -9
  126. data/lib/solargraph/rbs_map/conversions.rb +312 -206
  127. data/lib/solargraph/rbs_map/core_fills.rb +91 -84
  128. data/lib/solargraph/rbs_map/stdlib_map.rb +0 -1
  129. data/lib/solargraph/rbs_map.rb +3 -12
  130. data/lib/solargraph/server_methods.rb +16 -16
  131. data/lib/solargraph/shell.rb +63 -53
  132. data/lib/solargraph/source/chain/array.rb +39 -37
  133. data/lib/solargraph/source/chain/call.rb +49 -44
  134. data/lib/solargraph/source/chain/class_variable.rb +13 -13
  135. data/lib/solargraph/source/chain/constant.rb +3 -1
  136. data/lib/solargraph/source/chain/global_variable.rb +13 -13
  137. data/lib/solargraph/source/chain/hash.rb +8 -6
  138. data/lib/solargraph/source/chain/if.rb +11 -10
  139. data/lib/solargraph/source/chain/instance_variable.rb +3 -1
  140. data/lib/solargraph/source/chain/link.rb +99 -109
  141. data/lib/solargraph/source/chain/literal.rb +4 -6
  142. data/lib/solargraph/source/chain/or.rb +2 -4
  143. data/lib/solargraph/source/chain/q_call.rb +13 -11
  144. data/lib/solargraph/source/chain/variable.rb +15 -13
  145. data/lib/solargraph/source/chain/z_super.rb +28 -30
  146. data/lib/solargraph/source/chain.rb +24 -16
  147. data/lib/solargraph/source/change.rb +3 -3
  148. data/lib/solargraph/source/cursor.rb +18 -18
  149. data/lib/solargraph/source/encoding_fixes.rb +6 -7
  150. data/lib/solargraph/source/source_chainer.rb +46 -32
  151. data/lib/solargraph/source/updater.rb +1 -1
  152. data/lib/solargraph/source.rb +27 -29
  153. data/lib/solargraph/source_map/clip.rb +38 -30
  154. data/lib/solargraph/source_map/mapper.rb +52 -46
  155. data/lib/solargraph/source_map.rb +8 -4
  156. data/lib/solargraph/type_checker/rules.rb +8 -8
  157. data/lib/solargraph/type_checker.rb +95 -101
  158. data/lib/solargraph/version.rb +1 -1
  159. data/lib/solargraph/workspace/config.rb +10 -9
  160. data/lib/solargraph/workspace/gemspecs.rb +1 -1
  161. data/lib/solargraph/workspace.rb +21 -44
  162. data/lib/solargraph/yard_map/helpers.rb +6 -2
  163. data/lib/solargraph/yard_map/mapper/to_method.rb +8 -6
  164. data/lib/solargraph/yard_map/mapper/to_namespace.rb +1 -1
  165. data/lib/solargraph/yard_map/mapper.rb +12 -12
  166. data/lib/solargraph/yard_tags.rb +20 -20
  167. data/lib/solargraph.rb +5 -5
  168. data/solargraph.gemspec +35 -34
  169. metadata +28 -28
@@ -17,18 +17,14 @@ module Solargraph
17
17
  # @param filename [String, nil]
18
18
  # @param range [Solargraph::Range]
19
19
  def initialize filename, range
20
- raise "Use nil to represent no-file" if filename&.empty?
20
+ raise 'Use nil to represent no-file' if filename&.empty?
21
21
 
22
22
  @filename = filename
23
23
  @range = range
24
24
  end
25
25
 
26
- protected def equality_fields
27
- [filename, range]
28
- end
29
-
30
26
  # @param other [self]
31
- def <=>(other)
27
+ def <=> other
32
28
  return nil unless other.is_a?(Location)
33
29
  if filename == other.filename
34
30
  range <=> other.range
@@ -46,10 +42,6 @@ module Solargraph
46
42
  range.contain?(location.range.start) && range.contain?(location.range.ending) && filename == location.filename
47
43
  end
48
44
 
49
- def inspect
50
- "<#{self.class.name}: filename=#{filename}, range=#{range.inspect}>"
51
- end
52
-
53
45
  def to_s
54
46
  inspect
55
47
  end
@@ -64,14 +56,14 @@ module Solargraph
64
56
 
65
57
  # @param node [Parser::AST::Node, nil]
66
58
  # @return [Location, nil]
67
- def self.from_node(node)
59
+ def self.from_node node
68
60
  return nil if node.nil? || node.loc.nil?
69
61
  filename = node.loc.expression.source_buffer.name
70
62
  # @sg-ignore flow sensitive typing needs to create separate ranges for postfix if
71
63
  filename = nil if filename.empty?
72
64
  range = Range.from_node(node)
73
65
  # @sg-ignore Need to add nil check here
74
- self.new(filename, range)
66
+ new(filename, range)
75
67
  end
76
68
 
77
69
  # @param other [BasicObject]
@@ -83,5 +75,11 @@ module Solargraph
83
75
  def inspect
84
76
  "#<#{self.class} #{filename}, #{range.inspect}>"
85
77
  end
78
+
79
+ protected
80
+
81
+ def equality_fields
82
+ [filename, range]
83
+ end
86
84
  end
87
85
  end
@@ -10,7 +10,7 @@ module Solargraph
10
10
  'warn' => Logger::WARN,
11
11
  'info' => Logger::INFO,
12
12
  'debug' => Logger::DEBUG
13
- }
13
+ }.freeze
14
14
  configured_level = ENV.fetch('SOLARGRAPH_LOG', nil)
15
15
  level = if LOG_LEVELS.keys.include?(configured_level)
16
16
  LOG_LEVELS.fetch(configured_level)
@@ -21,9 +21,9 @@ module Solargraph
21
21
  end
22
22
  DEFAULT_LOG_LEVEL
23
23
  end
24
- @@logger = Logger.new(STDERR, level: level)
24
+ @@logger = Logger.new($stderr, level: level)
25
25
  # @sg-ignore Fix cvar issue
26
- @@logger.formatter = proc do |severity, datetime, progname, msg|
26
+ @@logger.formatter = proc do |severity, _datetime, _progname, msg|
27
27
  "[#{severity}] #{msg}\n"
28
28
  end
29
29
 
@@ -45,7 +45,7 @@ module Solargraph
45
45
  @@logger
46
46
  else
47
47
  new_log_level = LOG_LEVELS[log_level.to_s]
48
- logger = Logger.new(STDERR, level: new_log_level)
48
+ logger = Logger.new($stderr, level: new_log_level)
49
49
 
50
50
  # @sg-ignore Wrong argument type for Logger#formatter=: arg_0
51
51
  # expected nil, received Logger::_Formatter, nil
@@ -1,92 +1,92 @@
1
- # frozen_string_literal: true
2
-
3
- require 'ostruct'
4
- require 'tilt'
5
- require 'yard'
6
- require 'cgi'
7
-
8
- module Solargraph
9
- class Page
10
- # @todo This method directive is necessary because OpenStruct.new confuses
11
- # the typechecker.
12
- # @!method self.new(locals, render_method)
13
- # @param locals[Hash]
14
- # @param render_method [Proc]
15
- # @return [Binder]
16
- class Binder < OpenStruct
17
- # @param locals [Hash]
18
- # @param render_method [Proc]
19
- def initialize locals, render_method
20
- super(locals)
21
- define_singleton_method :render do |template, layout: false, locals: {}|
22
- render_method.call(template, layout: layout, locals: locals)
23
- end
24
- define_singleton_method :erb do |template, layout: false, locals: {}|
25
- render_method.call(template, layout: layout, locals: locals)
26
- end
27
- end
28
-
29
- # @param text [String]
30
- # @return [String]
31
- def htmlify text
32
- # @type [String]
33
- YARD::Templates::Helpers::Markup::RDocMarkup.new(text).to_html
34
- end
35
-
36
- # @param text [String]
37
- # @return [String]
38
- def escape text
39
- CGI.escapeHTML(text)
40
- end
41
-
42
- # @param code [String]
43
- # @return [String]
44
- def ruby_to_html code
45
- code
46
- end
47
- end
48
- private_constant :Binder
49
-
50
- # @param directory [String]
51
- def initialize directory = VIEWS_PATH
52
- directory = VIEWS_PATH if directory.nil? or !File.directory?(directory)
53
- directories = [directory]
54
- directories.push VIEWS_PATH if directory != VIEWS_PATH
55
- # @type [Proc]
56
- # @param template [String]
57
- # @param layout [Boolean]
58
- # @param locals [Hash]
59
- @render_method = proc { |template, layout: false, locals: {}|
60
- binder = Binder.new(locals, @render_method)
61
- if layout
62
- Tilt::ERBTemplate.new(Page.select_template(directories, 'layout')).render(binder) do
63
- Tilt::ERBTemplate.new(Page.select_template(directories, template)).render(binder)
64
- end
65
- else
66
- Tilt::ERBTemplate.new(Page.select_template(directories, template)).render(binder)
67
- end
68
- }
69
- end
70
-
71
- # @param template [String]
72
- # @param layout [Boolean]
73
- # @param locals [Hash]
74
- # @sg-ignore
75
- # @return [String]
76
- def render template, layout: true, locals: {}
77
- # @type [String]
78
- @render_method.call(template, layout: layout, locals: locals)
79
- end
80
-
81
- # @param directories [Array<String>]
82
- # @param name [String]
83
- # @return [String]
84
- def self.select_template directories, name
85
- directories.each do |dir|
86
- path = File.join(dir, "#{name}.erb")
87
- return path if File.file?(path)
88
- end
89
- raise FileNotFoundError, "Template not found: #{name}"
90
- end
91
- end
92
- end
1
+ # frozen_string_literal: true
2
+
3
+ require 'ostruct'
4
+ require 'tilt'
5
+ require 'yard'
6
+ require 'cgi'
7
+
8
+ module Solargraph
9
+ class Page
10
+ # @todo This method directive is necessary because OpenStruct.new confuses
11
+ # the typechecker.
12
+ # @!method self.new(locals, render_method)
13
+ # @param locals[Hash]
14
+ # @param render_method [Proc]
15
+ # @return [Binder]
16
+ class Binder < OpenStruct
17
+ # @param locals [Hash]
18
+ # @param render_method [Proc]
19
+ def initialize locals, render_method
20
+ super(locals)
21
+ define_singleton_method :render do |template, layout: false, locals: {}|
22
+ render_method.call(template, layout: layout, locals: locals)
23
+ end
24
+ define_singleton_method :erb do |template, layout: false, locals: {}|
25
+ render_method.call(template, layout: layout, locals: locals)
26
+ end
27
+ end
28
+
29
+ # @param text [String]
30
+ # @return [String]
31
+ def htmlify text
32
+ # @type [String]
33
+ YARD::Templates::Helpers::Markup::RDocMarkup.new(text).to_html
34
+ end
35
+
36
+ # @param text [String]
37
+ # @return [String]
38
+ def escape text
39
+ CGI.escapeHTML(text)
40
+ end
41
+
42
+ # @param code [String]
43
+ # @return [String]
44
+ def ruby_to_html code
45
+ code
46
+ end
47
+ end
48
+ private_constant :Binder
49
+
50
+ # @param directory [String]
51
+ def initialize directory = VIEWS_PATH
52
+ directory = VIEWS_PATH if directory.nil? || !File.directory?(directory)
53
+ directories = [directory]
54
+ directories.push VIEWS_PATH if directory != VIEWS_PATH
55
+ # @type [Proc]
56
+ # @param template [String]
57
+ # @param layout [Boolean]
58
+ # @param locals [Hash]
59
+ @render_method = proc { |template, layout: false, locals: {}|
60
+ binder = Binder.new(locals, @render_method)
61
+ if layout
62
+ Tilt::ERBTemplate.new(Page.select_template(directories, 'layout')).render(binder) do
63
+ Tilt::ERBTemplate.new(Page.select_template(directories, template)).render(binder)
64
+ end
65
+ else
66
+ Tilt::ERBTemplate.new(Page.select_template(directories, template)).render(binder)
67
+ end
68
+ }
69
+ end
70
+
71
+ # @param template [String]
72
+ # @param layout [Boolean]
73
+ # @param locals [Hash]
74
+ # @sg-ignore
75
+ # @return [String]
76
+ def render template, layout: true, locals: {}
77
+ # @type [String]
78
+ @render_method.call(template, layout: layout, locals: locals)
79
+ end
80
+
81
+ # @param directories [Array<String>]
82
+ # @param name [String]
83
+ # @return [String]
84
+ def self.select_template directories, name
85
+ directories.each do |dir|
86
+ path = File.join(dir, "#{name}.erb")
87
+ return path if File.file?(path)
88
+ end
89
+ raise FileNotFoundError, "Template not found: #{name}"
90
+ end
91
+ end
92
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'ripper'
2
4
 
3
5
  module Solargraph
@@ -26,19 +28,25 @@ module Solargraph
26
28
  # @sg-ignore Need to add nil check here
27
29
  if @buffer_lines[result[2][0]][0..result[2][1]].strip =~ /^#/
28
30
  chomped = result[1].chomp
29
- if result[2][0] == 0 && chomped.encode('UTF-8', 'binary', invalid: :replace, undef: :replace, replace: '').match(/^#\s*frozen_string_literal:/)
31
+ if result[2][0].zero? && chomped.encode('UTF-8', 'binary', invalid: :replace, undef: :replace,
32
+ replace: '').match(/^#\s*frozen_string_literal:/)
30
33
  chomped = '#'
31
34
  end
32
- @comments[result[2][0]] = Snippet.new(Range.from_to(result[2][0], result[2][1], result[2][0], result[2][1] + chomped.length), chomped)
35
+ @comments[result[2][0]] =
36
+ Snippet.new(Range.from_to(result[2][0], result[2][1], result[2][0], result[2][1] + chomped.length), chomped)
33
37
  end
34
38
  result
35
39
  end
36
40
 
37
41
  # @param result [Array(Symbol, String, Array([Integer, nil], [Integer, nil]))]
38
42
  # @return [void]
39
- def create_snippet(result)
43
+ def create_snippet result
40
44
  chomped = result[1].chomp
41
- @comments[result[2][0]] = Snippet.new(Range.from_to(result[2][0] || 0, result[2][1] || 0, result[2][0] || 0, (result[2][1] || 0) + chomped.length), chomped)
45
+ @comments[result[2][0]] =
46
+ Snippet.new(
47
+ Range.from_to(result[2][0] || 0, result[2][1] || 0, result[2][0] || 0,
48
+ (result[2][1] || 0) + chomped.length), chomped
49
+ )
42
50
  end
43
51
 
44
52
  # @sg-ignore @override is adding, not overriding
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Solargraph
2
4
  module Parser
3
5
  class FlowSensitiveTyping
@@ -7,7 +9,7 @@ module Solargraph
7
9
  # @param ivars [Array<Solargraph::Pin::InstanceVariable>]
8
10
  # @param enclosing_breakable_pin [Solargraph::Pin::Breakable, nil]
9
11
  # @param enclosing_compound_statement_pin [Solargraph::Pin::CompoundStatement, nil]
10
- def initialize(locals, ivars, enclosing_breakable_pin, enclosing_compound_statement_pin)
12
+ def initialize locals, ivars, enclosing_breakable_pin, enclosing_compound_statement_pin
11
13
  @locals = locals
12
14
  @ivars = ivars
13
15
  @enclosing_breakable_pin = enclosing_breakable_pin
@@ -19,7 +21,7 @@ module Solargraph
19
21
  # @param false_ranges [Array<Range>]
20
22
  #
21
23
  # @return [void]
22
- def process_and(and_node, true_ranges = [], false_ranges = [])
24
+ def process_and and_node, true_ranges = [], false_ranges = []
23
25
  return unless and_node.type == :and
24
26
 
25
27
  # @type [Parser::AST::Node]
@@ -45,7 +47,7 @@ module Solargraph
45
47
  # @param false_ranges [Array<Range>]
46
48
  #
47
49
  # @return [void]
48
- def process_or(or_node, true_ranges = [], false_ranges = [])
50
+ def process_or or_node, true_ranges = [], false_ranges = []
49
51
  return unless or_node.type == :or
50
52
 
51
53
  # @type [Parser::AST::Node]
@@ -74,7 +76,7 @@ module Solargraph
74
76
  # @param false_presences [Array<Range>]
75
77
  #
76
78
  # @return [void]
77
- def process_calls(node, true_presences, false_presences)
79
+ def process_calls node, true_presences, false_presences
78
80
  return unless node.type == :send
79
81
 
80
82
  process_isa(node, true_presences, false_presences)
@@ -87,7 +89,7 @@ module Solargraph
87
89
  # @param false_ranges [Array<Range>]
88
90
  #
89
91
  # @return [void]
90
- def process_if(if_node, true_ranges = [], false_ranges = [])
92
+ def process_if if_node, true_ranges = [], false_ranges = []
91
93
  return if if_node.type != :if
92
94
 
93
95
  #
@@ -111,13 +113,9 @@ module Solargraph
111
113
  rest_of_breakable_body = Range.new(get_node_end_position(if_node),
112
114
  get_node_end_position(enclosing_breakable_pin.node))
113
115
 
114
- if always_breaks?(then_clause)
115
- false_ranges << rest_of_breakable_body
116
- end
116
+ false_ranges << rest_of_breakable_body if always_breaks?(then_clause)
117
117
 
118
- if always_breaks?(else_clause)
119
- true_ranges << rest_of_breakable_body
120
- end
118
+ true_ranges << rest_of_breakable_body if always_breaks?(else_clause)
121
119
  end
122
120
 
123
121
  unless enclosing_compound_statement_pin.node.nil?
@@ -129,13 +127,9 @@ module Solargraph
129
127
  # statement, we can assume things about the rest of the
130
128
  # compound statement
131
129
  #
132
- if always_leaves_compound_statement?(then_clause)
133
- false_ranges << rest_of_returnable_body
134
- end
130
+ false_ranges << rest_of_returnable_body if always_leaves_compound_statement?(then_clause)
135
131
 
136
- if always_leaves_compound_statement?(else_clause)
137
- true_ranges << rest_of_returnable_body
138
- end
132
+ true_ranges << rest_of_returnable_body if always_leaves_compound_statement?(else_clause)
139
133
  end
140
134
 
141
135
  unless then_clause.nil?
@@ -166,7 +160,7 @@ module Solargraph
166
160
  # @param false_ranges [Array<Range>]
167
161
  #
168
162
  # @return [void]
169
- def process_while(while_node, true_ranges = [], false_ranges = [])
163
+ def process_while while_node, true_ranges = [], false_ranges = []
170
164
  return if while_node.type != :while
171
165
 
172
166
  #
@@ -210,7 +204,7 @@ module Solargraph
210
204
  # @param downcast_not_type [ComplexType, nil]
211
205
  #
212
206
  # @return [void]
213
- def add_downcast_var(pin, presence:, downcast_type:, downcast_not_type:)
207
+ def add_downcast_var pin, presence:, downcast_type:, downcast_not_type:
214
208
  new_pin = pin.downcast(exclude_return_type: downcast_not_type,
215
209
  intersection_return_type: downcast_type,
216
210
  source: :flow_sensitive_typing,
@@ -228,7 +222,7 @@ module Solargraph
228
222
  # @param presences [Array<Range>]
229
223
  #
230
224
  # @return [void]
231
- def process_facts(facts_by_pin, presences)
225
+ def process_facts facts_by_pin, presences
232
226
  #
233
227
  # Add specialized vars for the rest of the block
234
228
  #
@@ -251,7 +245,7 @@ module Solargraph
251
245
  # @param false_ranges [Array<Range>]
252
246
  #
253
247
  # @return [void]
254
- def process_expression(expression_node, true_ranges, false_ranges)
248
+ def process_expression expression_node, true_ranges, false_ranges
255
249
  process_calls(expression_node, true_ranges, false_ranges)
256
250
  process_and(expression_node, true_ranges, false_ranges)
257
251
  process_or(expression_node, true_ranges, false_ranges)
@@ -263,7 +257,7 @@ module Solargraph
263
257
  # @return [Array(String, String), nil] Tuple of rgument to
264
258
  # function, then receiver of function if it's a variable,
265
259
  # otherwise nil if no simple variable receiver
266
- def parse_call(call_node, method_name)
260
+ def parse_call call_node, method_name
267
261
  return unless call_node&.type == :send && call_node.children[1] == method_name
268
262
  # Check if conditional node follows this pattern:
269
263
  # s(:send,
@@ -282,7 +276,7 @@ module Solargraph
282
276
  # or like this:
283
277
  # (lvar :repr)
284
278
  # @sg-ignore Need to look at Tuple#include? handling
285
- variable_name = call_receiver.children[0].to_s if [:lvar, :ivar].include?(call_receiver&.type)
279
+ variable_name = call_receiver.children[0].to_s if %i[lvar ivar].include?(call_receiver&.type)
286
280
  return unless variable_name
287
281
 
288
282
  [call_arg, variable_name]
@@ -290,7 +284,7 @@ module Solargraph
290
284
 
291
285
  # @param isa_node [Parser::AST::Node]
292
286
  # @return [Array(String, String), nil]
293
- def parse_isa(isa_node)
287
+ def parse_isa isa_node
294
288
  call_type_name, variable_name = parse_call(isa_node, :is_a?)
295
289
 
296
290
  return unless call_type_name
@@ -304,7 +298,7 @@ module Solargraph
304
298
  # @sg-ignore Solargraph::Parser::FlowSensitiveTyping#find_var
305
299
  # return type could not be inferred
306
300
  # @return [Solargraph::Pin::LocalVariable, Solargraph::Pin::InstanceVariable, nil]
307
- def find_var(variable_name, position)
301
+ def find_var variable_name, position
308
302
  if variable_name.start_with?('@')
309
303
  # @sg-ignore flow sensitive typing needs to handle attrs
310
304
  ivars.find { |ivar| ivar.name == variable_name && (!ivar.presence || ivar.presence.include?(position)) }
@@ -319,7 +313,7 @@ module Solargraph
319
313
  # @param false_presences [Array<Range>]
320
314
  #
321
315
  # @return [void]
322
- def process_isa(isa_node, true_presences, false_presences)
316
+ def process_isa isa_node, true_presences, false_presences
323
317
  isa_type_name, variable_name = parse_isa(isa_node)
324
318
  return if variable_name.nil? || variable_name.empty?
325
319
  # @sg-ignore Need to add nil check here
@@ -343,7 +337,7 @@ module Solargraph
343
337
 
344
338
  # @param nilp_node [Parser::AST::Node]
345
339
  # @return [Array(String, String), nil]
346
- def parse_nilp(nilp_node)
340
+ def parse_nilp nilp_node
347
341
  parse_call(nilp_node, :nil?)
348
342
  end
349
343
 
@@ -352,7 +346,7 @@ module Solargraph
352
346
  # @param false_presences [Array<Range>]
353
347
  #
354
348
  # @return [void]
355
- def process_nilp(nilp_node, true_presences, false_presences)
349
+ def process_nilp nilp_node, true_presences, false_presences
356
350
  nilp_arg, variable_name = parse_nilp(nilp_node)
357
351
  return if variable_name.nil? || variable_name.empty?
358
352
  # if .nil? got an argument, move on, this isn't the situation
@@ -380,7 +374,7 @@ module Solargraph
380
374
 
381
375
  # @param bang_node [Parser::AST::Node]
382
376
  # @return [Array(String, String), nil]
383
- def parse_bang(bang_node)
377
+ def parse_bang bang_node
384
378
  parse_call(bang_node, :!)
385
379
  end
386
380
 
@@ -389,7 +383,7 @@ module Solargraph
389
383
  # @param false_presences [Array<Range>]
390
384
  #
391
385
  # @return [void]
392
- def process_bang(bang_node, true_presences, false_presences)
386
+ def process_bang bang_node, true_presences, false_presences
393
387
  # pry(main)> require 'parser/current'; Parser::CurrentRuby.parse("!2")
394
388
  # => s(:send,
395
389
  # s(:int, 2), :!)
@@ -405,7 +399,7 @@ module Solargraph
405
399
  # @param var_node [Parser::AST::Node]
406
400
  #
407
401
  # @return [String, nil] Variable name referenced
408
- def parse_variable(var_node)
402
+ def parse_variable var_node
409
403
  return if var_node.children.length != 1
410
404
 
411
405
  var_node.children[0]&.to_s
@@ -415,8 +409,8 @@ module Solargraph
415
409
  # @param node [Parser::AST::Node]
416
410
  # @param true_presences [Array<Range>]
417
411
  # @param false_presences [Array<Range>]
418
- def process_variable(node, true_presences, false_presences)
419
- return unless [:lvar, :ivar, :cvar, :gvar].include?(node.type)
412
+ def process_variable node, true_presences, false_presences
413
+ return unless %i[lvar ivar cvar gvar].include?(node.type)
420
414
 
421
415
  variable_name = parse_variable(node)
422
416
  return if variable_name.nil?
@@ -443,7 +437,7 @@ module Solargraph
443
437
  # @param node [Parser::AST::Node]
444
438
  #
445
439
  # @return [String, nil]
446
- def type_name(node)
440
+ def type_name node
447
441
  # e.g.,
448
442
  # s(:const, nil, :Baz)
449
443
  return unless node&.type == :const
@@ -462,22 +456,18 @@ module Solargraph
462
456
 
463
457
  # @param clause_node [Parser::AST::Node, nil]
464
458
  # @sg-ignore need boolish support for ? methods
465
- def always_breaks?(clause_node)
459
+ def always_breaks? clause_node
466
460
  clause_node&.type == :break
467
461
  end
468
462
 
469
463
  # @param clause_node [Parser::AST::Node, nil]
470
- def always_leaves_compound_statement?(clause_node)
464
+ def always_leaves_compound_statement? clause_node
471
465
  # https://docs.ruby-lang.org/en/2.2.0/keywords_rdoc.html
472
466
  # @sg-ignore Need to look at Tuple#include? handling
473
- [:return, :raise, :next, :redo, :retry].include?(clause_node&.type)
467
+ %i[return raise next redo retry].include?(clause_node&.type)
474
468
  end
475
469
 
476
- attr_reader :locals
477
-
478
- attr_reader :ivars
479
-
480
- attr_reader :enclosing_breakable_pin, :enclosing_compound_statement_pin
470
+ attr_reader :locals, :ivars, :enclosing_breakable_pin, :enclosing_compound_statement_pin
481
471
  end
482
472
  end
483
473
  end
@@ -58,13 +58,13 @@ module Solargraph
58
58
  # @sg-ignore downcast output of Enumerable#select
59
59
  # @return [Solargraph::Pin::Breakable, nil]
60
60
  def enclosing_breakable_pin
61
- pins.select{|pin| pin.is_a?(Pin::Breakable) && pin.location&.range&.contain?(position)}.last
61
+ pins.select { |pin| pin.is_a?(Pin::Breakable) && pin.location&.range&.contain?(position) }.last
62
62
  end
63
63
 
64
64
  # @todo downcast output of Enumerable#select
65
65
  # @return [Solargraph::Pin::CompoundStatement, nil]
66
66
  def enclosing_compound_statement_pin
67
- pins.select{|pin| pin.is_a?(Pin::CompoundStatement) && pin.location&.range&.contain?(position)}.last
67
+ pins.select { |pin| pin.is_a?(Pin::CompoundStatement) && pin.location&.range&.contain?(position) }.last
68
68
  end
69
69
 
70
70
  # @param subregion [Region]
@@ -80,14 +80,14 @@ module Solargraph
80
80
 
81
81
  # @param node [Parser::AST::Node]
82
82
  # @return [Solargraph::Location]
83
- def get_node_location(node)
83
+ def get_node_location node
84
84
  range = Parser.node_range(node)
85
85
  Location.new(region.filename, range)
86
86
  end
87
87
 
88
88
  # @param node [Parser::AST::Node]
89
89
  # @return [String, nil]
90
- def comments_for(node)
90
+ def comments_for node
91
91
  region.source.comments_for(node)
92
92
  end
93
93
 
@@ -43,7 +43,7 @@ module Solargraph
43
43
  pins.push Pin::Namespace.new(
44
44
  location: region.source.location,
45
45
  name: '',
46
- source: :parser,
46
+ source: :parser
47
47
  )
48
48
  end
49
49
  return [pins, locals, ivars] unless Parser.is_ast_node?(node)
@@ -54,7 +54,7 @@ module Solargraph
54
54
  # @param name [String]
55
55
  # @return [Array<Location>]
56
56
  def references source, name
57
- if name.end_with?("=")
57
+ if name.end_with?('=')
58
58
  reg = /#{Regexp.escape name[0..-2]}\s*=/
59
59
  # @param code [String]
60
60
  # @param offset [Integer]
@@ -98,17 +98,17 @@ module Solargraph
98
98
 
99
99
  # @return [Source::Chain]
100
100
  def chain *args
101
- NodeChainer.chain *args
101
+ NodeChainer.chain(*args)
102
102
  end
103
103
 
104
104
  # @return [Source::Chain]
105
105
  def chain_string *args
106
- NodeChainer.load_string *args
106
+ NodeChainer.load_string(*args)
107
107
  end
108
108
 
109
109
  # @return [Array(Array<Pin::Base>, Array<Pin::Base>)]
110
110
  def process_node *args
111
- Solargraph::Parser::NodeProcessor.process *args
111
+ Solargraph::Parser::NodeProcessor.process(*args)
112
112
  end
113
113
 
114
114
  # @param node [Parser::AST::Node, nil]
@@ -1,19 +1,19 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module Parser
5
- module ParserGem
6
- # A custom builder for source parsers that ignores character encoding
7
- # issues in literal strings.
8
- #
9
- class FlawedBuilder < ::Parser::Builders::Default
10
- # @param token [::Parser::AST::Node]
11
- # @return [String]
12
- # @sg-ignore
13
- def string_value(token)
14
- value(token)
15
- end
16
- end
17
- end
18
- end
19
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Parser
5
+ module ParserGem
6
+ # A custom builder for source parsers that ignores character encoding
7
+ # issues in literal strings.
8
+ #
9
+ class FlawedBuilder < ::Parser::Builders::Default
10
+ # @param token [::Parser::AST::Node]
11
+ # @return [String]
12
+ # @sg-ignore
13
+ def string_value token
14
+ value(token)
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end