solargraph 0.32.1 → 0.32.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 (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