solargraph 0.32.1 → 0.32.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (177) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +9 -0
  3. data/.rspec +2 -0
  4. data/.rubocop.yml +6 -0
  5. data/.travis.yml +25 -0
  6. data/EXAMPLES.md +76 -0
  7. data/Gemfile +3 -0
  8. data/LANGUAGE_SERVER.md +51 -0
  9. data/LICENSE +21 -0
  10. data/OVERVIEW.md +37 -0
  11. data/README.md +106 -0
  12. data/Rakefile +14 -0
  13. data/SERVER.md +95 -0
  14. data/bin/solargraph +0 -0
  15. data/bin/solargraph-runtime +5 -5
  16. data/lib/solargraph.rb +54 -54
  17. data/lib/solargraph/api_map.rb +659 -659
  18. data/lib/solargraph/api_map/cache.rb +49 -49
  19. data/lib/solargraph/api_map/source_to_yard.rb +67 -67
  20. data/lib/solargraph/api_map/store.rb +201 -201
  21. data/lib/solargraph/bundle.rb +24 -24
  22. data/lib/solargraph/complex_type.rb +150 -150
  23. data/lib/solargraph/complex_type/type_methods.rb +124 -124
  24. data/lib/solargraph/complex_type/unique_type.rb +44 -44
  25. data/lib/solargraph/core_fills.rb +37 -37
  26. data/lib/solargraph/diagnostics.rb +52 -52
  27. data/lib/solargraph/diagnostics/base.rb +20 -20
  28. data/lib/solargraph/diagnostics/require_not_found.rb +28 -28
  29. data/lib/solargraph/diagnostics/rubocop.rb +98 -98
  30. data/lib/solargraph/diagnostics/rubocop_helpers.rb +46 -46
  31. data/lib/solargraph/diagnostics/type_not_defined.rb +108 -108
  32. data/lib/solargraph/diagnostics/update_errors.rb +38 -38
  33. data/lib/solargraph/language_server/completion_item_kinds.rb +33 -33
  34. data/lib/solargraph/language_server/error_codes.rb +18 -18
  35. data/lib/solargraph/language_server/host.rb +684 -681
  36. data/lib/solargraph/language_server/host/cataloger.rb +54 -79
  37. data/lib/solargraph/language_server/host/diagnoser.rb +80 -80
  38. data/lib/solargraph/language_server/host/dispatch.rb +112 -113
  39. data/lib/solargraph/language_server/host/sources.rb +138 -138
  40. data/lib/solargraph/language_server/message.rb +90 -90
  41. data/lib/solargraph/language_server/message/base.rb +83 -83
  42. data/lib/solargraph/language_server/message/completion_item/resolve.rb +40 -40
  43. data/lib/solargraph/language_server/message/exit_notification.rb +11 -11
  44. data/lib/solargraph/language_server/message/extended.rb +19 -19
  45. data/lib/solargraph/language_server/message/extended/check_gem_version.rb +86 -86
  46. data/lib/solargraph/language_server/message/extended/document.rb +18 -18
  47. data/lib/solargraph/language_server/message/extended/document_gems.rb +30 -30
  48. data/lib/solargraph/language_server/message/extended/environment.rb +20 -20
  49. data/lib/solargraph/language_server/message/extended/search.rb +18 -18
  50. data/lib/solargraph/language_server/message/initialize.rb +141 -141
  51. data/lib/solargraph/language_server/message/initialized.rb +23 -23
  52. data/lib/solargraph/language_server/message/shutdown.rb +11 -11
  53. data/lib/solargraph/language_server/message/text_document.rb +25 -25
  54. data/lib/solargraph/language_server/message/text_document/completion.rb +51 -51
  55. data/lib/solargraph/language_server/message/text_document/definition.rb +18 -18
  56. data/lib/solargraph/language_server/message/text_document/did_change.rb +13 -13
  57. data/lib/solargraph/language_server/message/text_document/document_symbol.rb +21 -21
  58. data/lib/solargraph/language_server/message/text_document/folding_range.rb +24 -24
  59. data/lib/solargraph/language_server/message/text_document/formatting.rb +50 -50
  60. data/lib/solargraph/language_server/message/text_document/hover.rb +31 -31
  61. data/lib/solargraph/language_server/message/text_document/on_type_formatting.rb +32 -32
  62. data/lib/solargraph/language_server/message/text_document/prepare_rename.rb +9 -9
  63. data/lib/solargraph/language_server/message/text_document/references.rb +14 -14
  64. data/lib/solargraph/language_server/message/text_document/rename.rb +17 -17
  65. data/lib/solargraph/language_server/message/text_document/signature_help.rb +19 -19
  66. data/lib/solargraph/language_server/message/workspace.rb +12 -12
  67. data/lib/solargraph/language_server/message/workspace/did_change_configuration.rb +29 -29
  68. data/lib/solargraph/language_server/message/workspace/did_change_watched_files.rb +29 -27
  69. data/lib/solargraph/language_server/message/workspace/did_change_workspace_folders.rb +24 -24
  70. data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +21 -21
  71. data/lib/solargraph/language_server/request.rb +22 -22
  72. data/lib/solargraph/language_server/symbol_kinds.rb +34 -34
  73. data/lib/solargraph/language_server/transport.rb +11 -11
  74. data/lib/solargraph/language_server/transport/adapter.rb +60 -60
  75. data/lib/solargraph/language_server/transport/data_reader.rb +66 -66
  76. data/lib/solargraph/language_server/uri_helpers.rb +25 -25
  77. data/lib/solargraph/library.rb +421 -419
  78. data/lib/solargraph/live_map.rb +126 -126
  79. data/lib/solargraph/live_map/cache.rb +38 -38
  80. data/lib/solargraph/location.rb +31 -31
  81. data/lib/solargraph/logging.rb +25 -25
  82. data/lib/solargraph/page.rb +68 -68
  83. data/lib/solargraph/pin.rb +50 -50
  84. data/lib/solargraph/pin/attribute.rb +41 -41
  85. data/lib/solargraph/pin/base.rb +280 -280
  86. data/lib/solargraph/pin/base_method.rb +76 -76
  87. data/lib/solargraph/pin/base_variable.rb +72 -72
  88. data/lib/solargraph/pin/block.rb +32 -32
  89. data/lib/solargraph/pin/block_parameter.rb +103 -103
  90. data/lib/solargraph/pin/class_variable.rb +9 -9
  91. data/lib/solargraph/pin/constant.rb +30 -30
  92. data/lib/solargraph/pin/conversions.rb +79 -79
  93. data/lib/solargraph/pin/documenting.rb +41 -41
  94. data/lib/solargraph/pin/duck_method.rb +14 -14
  95. data/lib/solargraph/pin/global_variable.rb +9 -9
  96. data/lib/solargraph/pin/instance_variable.rb +9 -9
  97. data/lib/solargraph/pin/keyword.rb +17 -17
  98. data/lib/solargraph/pin/local_variable.rb +23 -23
  99. data/lib/solargraph/pin/localized.rb +22 -22
  100. data/lib/solargraph/pin/method.rb +126 -126
  101. data/lib/solargraph/pin/method_alias.rb +30 -30
  102. data/lib/solargraph/pin/method_parameter.rb +40 -40
  103. data/lib/solargraph/pin/namespace.rb +54 -54
  104. data/lib/solargraph/pin/plugin/method.rb +25 -25
  105. data/lib/solargraph/pin/proxy_type.rb +35 -35
  106. data/lib/solargraph/pin/reference.rb +22 -22
  107. data/lib/solargraph/pin/reference/extend.rb +11 -11
  108. data/lib/solargraph/pin/reference/include.rb +11 -11
  109. data/lib/solargraph/pin/reference/require.rb +15 -15
  110. data/lib/solargraph/pin/reference/superclass.rb +11 -11
  111. data/lib/solargraph/pin/symbol.rb +44 -44
  112. data/lib/solargraph/pin/yard_pin.rb +10 -10
  113. data/lib/solargraph/pin/yard_pin/constant.rb +14 -14
  114. data/lib/solargraph/pin/yard_pin/method.rb +35 -35
  115. data/lib/solargraph/pin/yard_pin/namespace.rb +19 -19
  116. data/lib/solargraph/pin/yard_pin/yard_mixin.rb +14 -14
  117. data/lib/solargraph/plugin.rb +8 -8
  118. data/lib/solargraph/plugin/base.rb +41 -41
  119. data/lib/solargraph/plugin/canceler.rb +11 -11
  120. data/lib/solargraph/plugin/process.rb +172 -172
  121. data/lib/solargraph/plugin/runtime.rb +134 -134
  122. data/lib/solargraph/position.rb +110 -110
  123. data/lib/solargraph/range.rb +83 -83
  124. data/lib/solargraph/server_methods.rb +14 -14
  125. data/lib/solargraph/shell.rb +102 -102
  126. data/lib/solargraph/source.rb +521 -521
  127. data/lib/solargraph/source/chain.rb +120 -120
  128. data/lib/solargraph/source/chain/call.rb +107 -107
  129. data/lib/solargraph/source/chain/class_variable.rb +11 -11
  130. data/lib/solargraph/source/chain/constant.rb +30 -30
  131. data/lib/solargraph/source/chain/global_variable.rb +11 -11
  132. data/lib/solargraph/source/chain/head.rb +33 -33
  133. data/lib/solargraph/source/chain/instance_variable.rb +11 -11
  134. data/lib/solargraph/source/chain/link.rb +33 -33
  135. data/lib/solargraph/source/chain/literal.rb +21 -21
  136. data/lib/solargraph/source/chain/variable.rb +11 -11
  137. data/lib/solargraph/source/change.rb +77 -77
  138. data/lib/solargraph/source/cursor.rb +157 -157
  139. data/lib/solargraph/source/node_chainer.rb +96 -96
  140. data/lib/solargraph/source/node_methods.rb +225 -225
  141. data/lib/solargraph/source/source_chainer.rb +183 -183
  142. data/lib/solargraph/source_map.rb +169 -169
  143. data/lib/solargraph/source_map/clip.rb +145 -145
  144. data/lib/solargraph/source_map/completion.rb +21 -21
  145. data/lib/solargraph/source_map/mapper.rb +149 -149
  146. data/lib/solargraph/source_map/node_processor.rb +78 -78
  147. data/lib/solargraph/source_map/node_processor/alias_node.rb +19 -19
  148. data/lib/solargraph/source_map/node_processor/args_node.rb +28 -28
  149. data/lib/solargraph/source_map/node_processor/base.rb +68 -68
  150. data/lib/solargraph/source_map/node_processor/begin_node.rb +11 -11
  151. data/lib/solargraph/source_map/node_processor/block_node.rb +14 -14
  152. data/lib/solargraph/source_map/node_processor/casgn_node.rb +14 -14
  153. data/lib/solargraph/source_map/node_processor/cvasgn_node.rb +14 -14
  154. data/lib/solargraph/source_map/node_processor/def_node.rb +54 -54
  155. data/lib/solargraph/source_map/node_processor/defs_node.rb +21 -21
  156. data/lib/solargraph/source_map/node_processor/gvasgn_node.rb +12 -12
  157. data/lib/solargraph/source_map/node_processor/ivasgn_node.rb +18 -18
  158. data/lib/solargraph/source_map/node_processor/lvasgn_node.rb +16 -16
  159. data/lib/solargraph/source_map/node_processor/namespace_node.rb +26 -26
  160. data/lib/solargraph/source_map/node_processor/orasgn_node.rb +12 -12
  161. data/lib/solargraph/source_map/node_processor/sclass_node.rb +11 -11
  162. data/lib/solargraph/source_map/node_processor/send_node.rb +162 -162
  163. data/lib/solargraph/source_map/node_processor/sym_node.rb +11 -11
  164. data/lib/solargraph/source_map/region.rb +58 -58
  165. data/lib/solargraph/version.rb +3 -3
  166. data/lib/solargraph/views/environment.erb +53 -53
  167. data/lib/solargraph/workspace.rb +183 -183
  168. data/lib/solargraph/workspace/config.rb +170 -170
  169. data/lib/solargraph/yard_map.rb +298 -298
  170. data/lib/solargraph/yard_map/cache.rb +17 -17
  171. data/lib/solargraph/yard_map/core_docs.rb +163 -163
  172. data/lib/solargraph/yard_map/core_gen.rb +76 -76
  173. data/lib/yard-coregen.rb +16 -16
  174. data/lib/yard-solargraph.rb +18 -18
  175. data/solargraph.gemspec +37 -0
  176. data/travis-bundler.rb +10 -0
  177. metadata +19 -6
@@ -1,46 +1,46 @@
1
- module Solargraph
2
- module Diagnostics
3
- module RubocopHelpers
4
- module_function
5
-
6
- # Generate command-line options for the specified filename and code.
7
- #
8
- # @param filename [String]
9
- # @param code [String]
10
- # @return [Array(Array<String>, Array<String>)]
11
- def generate_options filename, code
12
- args = ['-f', 'j']
13
- rubocop_file = find_rubocop_file(filename)
14
- args.push('-c', fix_drive_letter(rubocop_file)) unless rubocop_file.nil?
15
- args.push filename
16
- options, paths = RuboCop::Options.new.parse(args)
17
- options[:stdin] = code
18
- [options, paths]
19
- end
20
-
21
- # Find a RuboCop configuration file in a file's directory tree.
22
- #
23
- # @param filename [String]
24
- # @return [String, nil]
25
- def find_rubocop_file filename
26
- dir = File.dirname(filename)
27
- until File.dirname(dir) == dir
28
- here = File.join(dir, '.rubocop.yml')
29
- return here if File.exist?(here)
30
- dir = File.dirname(dir)
31
- end
32
- nil
33
- end
34
-
35
- # RuboCop internally uses capitalized drive letters for Windows paths,
36
- # so we need to convert the paths provided to the command.
37
- #
38
- # @param path [String]
39
- # @return [String]
40
- def fix_drive_letter path
41
- return path unless path.match(/^[a-z]:/)
42
- path[0].upcase + path[1..-1]
43
- end
44
- end
45
- end
46
- end
1
+ module Solargraph
2
+ module Diagnostics
3
+ module RubocopHelpers
4
+ module_function
5
+
6
+ # Generate command-line options for the specified filename and code.
7
+ #
8
+ # @param filename [String]
9
+ # @param code [String]
10
+ # @return [Array(Array<String>, Array<String>)]
11
+ def generate_options filename, code
12
+ args = ['-f', 'j']
13
+ rubocop_file = find_rubocop_file(filename)
14
+ args.push('-c', fix_drive_letter(rubocop_file)) unless rubocop_file.nil?
15
+ args.push filename
16
+ options, paths = RuboCop::Options.new.parse(args)
17
+ options[:stdin] = code
18
+ [options, paths]
19
+ end
20
+
21
+ # Find a RuboCop configuration file in a file's directory tree.
22
+ #
23
+ # @param filename [String]
24
+ # @return [String, nil]
25
+ def find_rubocop_file filename
26
+ dir = File.dirname(filename)
27
+ until File.dirname(dir) == dir
28
+ here = File.join(dir, '.rubocop.yml')
29
+ return here if File.exist?(here)
30
+ dir = File.dirname(dir)
31
+ end
32
+ nil
33
+ end
34
+
35
+ # RuboCop internally uses capitalized drive letters for Windows paths,
36
+ # so we need to convert the paths provided to the command.
37
+ #
38
+ # @param path [String]
39
+ # @return [String]
40
+ def fix_drive_letter path
41
+ return path unless path.match(/^[a-z]:/)
42
+ path[0].upcase + path[1..-1]
43
+ end
44
+ end
45
+ end
46
+ end
@@ -1,108 +1,108 @@
1
- module Solargraph
2
- module Diagnostics
3
- # TypeNotDefined reports methods with undefined return types, untagged
4
- # parameters, and invalid param tags.
5
- #
6
- class TypeNotDefined < Base
7
- def diagnose source, api_map
8
- result = []
9
- api_map.document_symbols(source.filename).each do |pin|
10
- next unless pin.kind == Pin::METHOD or pin.kind == Pin::ATTRIBUTE
11
- result.concat check_return_type(pin, api_map, source)
12
- result.concat check_param_types(pin, api_map, source)
13
- result.concat check_param_tags(pin, api_map, source)
14
- end
15
- result
16
- end
17
-
18
- private
19
-
20
- def check_return_type pin, api_map, source
21
- return [] if (pin.name == 'initialize' && pin.scope == :instance) || (pin.name == 'new' && pin.scope == :class)
22
- result = []
23
- unless defined_return_type?(pin, api_map)
24
- result.push(
25
- range: extract_first_line(pin, source),
26
- severity: Diagnostics::Severities::WARNING,
27
- source: 'Solargraph',
28
- message: "Method `#{pin.name}` has undefined return type."
29
- )
30
- end
31
- result
32
- end
33
-
34
- def check_param_types pin, api_map, source
35
- return [] if pin.name == 'new' and pin.scope == :class
36
- result = []
37
- pin.parameter_names.each do |par|
38
- next if defined_param_type?(pin, par, api_map)
39
- result.push(
40
- range: extract_first_line(pin, source),
41
- severity: Diagnostics::Severities::WARNING,
42
- source: 'Solargraph',
43
- message: "Method `#{pin.name}` has undefined param `#{par}`."
44
- )
45
- end
46
- result
47
- end
48
-
49
- def check_param_tags pin, api_map, source
50
- result = []
51
- pin.docstring.tags(:param).each do |par|
52
- next if pin.parameter_names.include?(par.name)
53
- result.push(
54
- range: extract_first_line(pin, source),
55
- severity: Diagnostics::Severities::WARNING,
56
- source: 'Solargraph',
57
- message: "Method `#{pin.name}` has mistagged param `#{par.name}`."
58
- )
59
- end
60
- result
61
- end
62
-
63
- def extract_first_line pin, source
64
- {
65
- start: {
66
- line: pin.location.range.start.line,
67
- character: pin.location.range.start.character
68
- },
69
- end: {
70
- line: pin.location.range.start.line,
71
- character: last_character(pin.location.range.start, source)
72
- }
73
- }
74
- end
75
-
76
- def defined_return_type? pin, api_map
77
- return true unless pin.return_complex_type.undefined?
78
- matches = api_map.get_method_stack(pin.namespace, pin.name, scope: pin.scope)
79
- matches.shift
80
- matches.any?{|m| !m.return_complex_type.undefined?}
81
- end
82
-
83
- def defined_param_type? pin, param, api_map
84
- return true if param_in_docstring?(param, pin.docstring)
85
- matches = api_map.get_method_stack(pin.namespace, pin.name, scope: pin.scope)
86
- matches.shift
87
- matches.each do |m|
88
- next unless pin.parameter_names == m.parameter_names
89
- return true if param_in_docstring?(param, m.docstring)
90
- end
91
- false
92
- end
93
-
94
- def param_in_docstring? param, docstring
95
- tags = docstring.tags(:param)
96
- tags.any?{|t| t.name == param}
97
- end
98
-
99
- # @param position [Solargraph::Position]
100
- # @param source [Solargraph::Source]
101
- # @return [Integer]
102
- def last_character position, source
103
- cursor = Position.to_offset(source.code, position)
104
- source.code.index(/[\r\n]/, cursor) || source.code.length
105
- end
106
- end
107
- end
108
- end
1
+ module Solargraph
2
+ module Diagnostics
3
+ # TypeNotDefined reports methods with undefined return types, untagged
4
+ # parameters, and invalid param tags.
5
+ #
6
+ class TypeNotDefined < Base
7
+ def diagnose source, api_map
8
+ result = []
9
+ api_map.document_symbols(source.filename).each do |pin|
10
+ next unless pin.kind == Pin::METHOD or pin.kind == Pin::ATTRIBUTE
11
+ result.concat check_return_type(pin, api_map, source)
12
+ result.concat check_param_types(pin, api_map, source)
13
+ result.concat check_param_tags(pin, api_map, source)
14
+ end
15
+ result
16
+ end
17
+
18
+ private
19
+
20
+ def check_return_type pin, api_map, source
21
+ return [] if (pin.name == 'initialize' && pin.scope == :instance) || (pin.name == 'new' && pin.scope == :class)
22
+ result = []
23
+ unless defined_return_type?(pin, api_map)
24
+ result.push(
25
+ range: extract_first_line(pin, source),
26
+ severity: Diagnostics::Severities::WARNING,
27
+ source: 'Solargraph',
28
+ message: "Method `#{pin.name}` has undefined return type."
29
+ )
30
+ end
31
+ result
32
+ end
33
+
34
+ def check_param_types pin, api_map, source
35
+ return [] if pin.name == 'new' and pin.scope == :class
36
+ result = []
37
+ pin.parameter_names.each do |par|
38
+ next if defined_param_type?(pin, par, api_map)
39
+ result.push(
40
+ range: extract_first_line(pin, source),
41
+ severity: Diagnostics::Severities::WARNING,
42
+ source: 'Solargraph',
43
+ message: "Method `#{pin.name}` has undefined param `#{par}`."
44
+ )
45
+ end
46
+ result
47
+ end
48
+
49
+ def check_param_tags pin, api_map, source
50
+ result = []
51
+ pin.docstring.tags(:param).each do |par|
52
+ next if pin.parameter_names.include?(par.name)
53
+ result.push(
54
+ range: extract_first_line(pin, source),
55
+ severity: Diagnostics::Severities::WARNING,
56
+ source: 'Solargraph',
57
+ message: "Method `#{pin.name}` has mistagged param `#{par.name}`."
58
+ )
59
+ end
60
+ result
61
+ end
62
+
63
+ def extract_first_line pin, source
64
+ {
65
+ start: {
66
+ line: pin.location.range.start.line,
67
+ character: pin.location.range.start.character
68
+ },
69
+ end: {
70
+ line: pin.location.range.start.line,
71
+ character: last_character(pin.location.range.start, source)
72
+ }
73
+ }
74
+ end
75
+
76
+ def defined_return_type? pin, api_map
77
+ return true unless pin.return_complex_type.undefined?
78
+ matches = api_map.get_method_stack(pin.namespace, pin.name, scope: pin.scope)
79
+ matches.shift
80
+ matches.any?{|m| !m.return_complex_type.undefined?}
81
+ end
82
+
83
+ def defined_param_type? pin, param, api_map
84
+ return true if param_in_docstring?(param, pin.docstring)
85
+ matches = api_map.get_method_stack(pin.namespace, pin.name, scope: pin.scope)
86
+ matches.shift
87
+ matches.each do |m|
88
+ next unless pin.parameter_names == m.parameter_names
89
+ return true if param_in_docstring?(param, m.docstring)
90
+ end
91
+ false
92
+ end
93
+
94
+ def param_in_docstring? param, docstring
95
+ tags = docstring.tags(:param)
96
+ tags.any?{|t| t.name == param}
97
+ end
98
+
99
+ # @param position [Solargraph::Position]
100
+ # @param source [Solargraph::Source]
101
+ # @return [Integer]
102
+ def last_character position, source
103
+ cursor = Position.to_offset(source.code, position)
104
+ source.code.index(/[\r\n]/, cursor) || source.code.length
105
+ end
106
+ end
107
+ end
108
+ end
@@ -1,38 +1,38 @@
1
- module Solargraph
2
- module Diagnostics
3
- class UpdateErrors < Base
4
- def diagnose source, api_map
5
- result = []
6
- combine_ranges(source.code, source.error_ranges).each do |range|
7
- result.push(
8
- range: range.to_hash,
9
- severity: Diagnostics::Severities::ERROR,
10
- source: 'Solargraph',
11
- message: 'Syntax error'
12
- )
13
- end
14
- result
15
- end
16
-
17
- private
18
-
19
- # Combine an array of ranges by their starting lines.
20
- #
21
- # @param ranges [Array<Range>]
22
- # @return [Array<Range>]
23
- def combine_ranges code, ranges
24
- result = []
25
- lines = []
26
- ranges.sort{|a, b| a.start.line <=> b.start.line}.each do |rng|
27
- next if rng.nil? || lines.include?(rng.start.line)
28
- lines.push rng.start.line
29
- next if rng.start.line >= code.lines.length
30
- scol = code.lines[rng.start.line].index(/[^\s]/) || 0
31
- ecol = code.lines[rng.start.line].length
32
- result.push Range.from_to(rng.start.line, scol, rng.start.line, ecol)
33
- end
34
- result
35
- end
36
- end
37
- end
38
- end
1
+ module Solargraph
2
+ module Diagnostics
3
+ class UpdateErrors < Base
4
+ def diagnose source, api_map
5
+ result = []
6
+ combine_ranges(source.code, source.error_ranges).each do |range|
7
+ result.push(
8
+ range: range.to_hash,
9
+ severity: Diagnostics::Severities::ERROR,
10
+ source: 'Solargraph',
11
+ message: 'Syntax error'
12
+ )
13
+ end
14
+ result
15
+ end
16
+
17
+ private
18
+
19
+ # Combine an array of ranges by their starting lines.
20
+ #
21
+ # @param ranges [Array<Range>]
22
+ # @return [Array<Range>]
23
+ def combine_ranges code, ranges
24
+ result = []
25
+ lines = []
26
+ ranges.sort{|a, b| a.start.line <=> b.start.line}.each do |rng|
27
+ next if rng.nil? || lines.include?(rng.start.line)
28
+ lines.push rng.start.line
29
+ next if rng.start.line >= code.lines.length
30
+ scol = code.lines[rng.start.line].index(/[^\s]/) || 0
31
+ ecol = code.lines[rng.start.line].length
32
+ result.push Range.from_to(rng.start.line, scol, rng.start.line, ecol)
33
+ end
34
+ result
35
+ end
36
+ end
37
+ end
38
+ end
@@ -1,33 +1,33 @@
1
- module Solargraph
2
- module LanguageServer
3
- # The CompletionItemKind constants for the language server protocol.
4
- #
5
- module CompletionItemKinds
6
- TEXT = 1
7
- METHOD = 2
8
- FUNCTION = 3
9
- CONSTRUCTOR = 4
10
- FIELD = 5
11
- VARIABLE = 6
12
- CLASS = 7
13
- INTERFACE = 8
14
- MODULE = 9
15
- PROPERTY = 10
16
- UNIT = 11
17
- VALUE = 12
18
- ENUM = 13
19
- KEYWORD = 14
20
- SNIPPET = 15
21
- COLOR = 16
22
- FILE = 17
23
- REFERENCE = 18
24
- FOLDER = 19
25
- ENUM_MEMBER = 20
26
- CONSTANT = 21
27
- STRUCT = 22
28
- EVENT = 23
29
- OPERATOR = 24
30
- TYPE_PARAMETER = 25
31
- end
32
- end
33
- end
1
+ module Solargraph
2
+ module LanguageServer
3
+ # The CompletionItemKind constants for the language server protocol.
4
+ #
5
+ module CompletionItemKinds
6
+ TEXT = 1
7
+ METHOD = 2
8
+ FUNCTION = 3
9
+ CONSTRUCTOR = 4
10
+ FIELD = 5
11
+ VARIABLE = 6
12
+ CLASS = 7
13
+ INTERFACE = 8
14
+ MODULE = 9
15
+ PROPERTY = 10
16
+ UNIT = 11
17
+ VALUE = 12
18
+ ENUM = 13
19
+ KEYWORD = 14
20
+ SNIPPET = 15
21
+ COLOR = 16
22
+ FILE = 17
23
+ REFERENCE = 18
24
+ FOLDER = 19
25
+ ENUM_MEMBER = 20
26
+ CONSTANT = 21
27
+ STRUCT = 22
28
+ EVENT = 23
29
+ OPERATOR = 24
30
+ TYPE_PARAMETER = 25
31
+ end
32
+ end
33
+ end