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.
- checksums.yaml +4 -4
- data/.gitignore +9 -0
- data/.rspec +2 -0
- data/.rubocop.yml +6 -0
- data/.travis.yml +25 -0
- data/EXAMPLES.md +76 -0
- data/Gemfile +3 -0
- data/LANGUAGE_SERVER.md +51 -0
- data/LICENSE +21 -0
- data/OVERVIEW.md +37 -0
- data/README.md +106 -0
- data/Rakefile +14 -0
- data/SERVER.md +95 -0
- data/bin/solargraph +0 -0
- data/bin/solargraph-runtime +5 -5
- data/lib/solargraph.rb +54 -54
- data/lib/solargraph/api_map.rb +659 -659
- data/lib/solargraph/api_map/cache.rb +49 -49
- data/lib/solargraph/api_map/source_to_yard.rb +67 -67
- data/lib/solargraph/api_map/store.rb +201 -201
- data/lib/solargraph/bundle.rb +24 -24
- data/lib/solargraph/complex_type.rb +150 -150
- data/lib/solargraph/complex_type/type_methods.rb +124 -124
- data/lib/solargraph/complex_type/unique_type.rb +44 -44
- data/lib/solargraph/core_fills.rb +37 -37
- data/lib/solargraph/diagnostics.rb +52 -52
- data/lib/solargraph/diagnostics/base.rb +20 -20
- data/lib/solargraph/diagnostics/require_not_found.rb +28 -28
- data/lib/solargraph/diagnostics/rubocop.rb +98 -98
- data/lib/solargraph/diagnostics/rubocop_helpers.rb +46 -46
- data/lib/solargraph/diagnostics/type_not_defined.rb +108 -108
- data/lib/solargraph/diagnostics/update_errors.rb +38 -38
- data/lib/solargraph/language_server/completion_item_kinds.rb +33 -33
- data/lib/solargraph/language_server/error_codes.rb +18 -18
- data/lib/solargraph/language_server/host.rb +684 -681
- data/lib/solargraph/language_server/host/cataloger.rb +54 -79
- data/lib/solargraph/language_server/host/diagnoser.rb +80 -80
- data/lib/solargraph/language_server/host/dispatch.rb +112 -113
- data/lib/solargraph/language_server/host/sources.rb +138 -138
- data/lib/solargraph/language_server/message.rb +90 -90
- data/lib/solargraph/language_server/message/base.rb +83 -83
- data/lib/solargraph/language_server/message/completion_item/resolve.rb +40 -40
- data/lib/solargraph/language_server/message/exit_notification.rb +11 -11
- data/lib/solargraph/language_server/message/extended.rb +19 -19
- data/lib/solargraph/language_server/message/extended/check_gem_version.rb +86 -86
- data/lib/solargraph/language_server/message/extended/document.rb +18 -18
- data/lib/solargraph/language_server/message/extended/document_gems.rb +30 -30
- data/lib/solargraph/language_server/message/extended/environment.rb +20 -20
- data/lib/solargraph/language_server/message/extended/search.rb +18 -18
- data/lib/solargraph/language_server/message/initialize.rb +141 -141
- data/lib/solargraph/language_server/message/initialized.rb +23 -23
- data/lib/solargraph/language_server/message/shutdown.rb +11 -11
- data/lib/solargraph/language_server/message/text_document.rb +25 -25
- data/lib/solargraph/language_server/message/text_document/completion.rb +51 -51
- data/lib/solargraph/language_server/message/text_document/definition.rb +18 -18
- data/lib/solargraph/language_server/message/text_document/did_change.rb +13 -13
- data/lib/solargraph/language_server/message/text_document/document_symbol.rb +21 -21
- data/lib/solargraph/language_server/message/text_document/folding_range.rb +24 -24
- data/lib/solargraph/language_server/message/text_document/formatting.rb +50 -50
- data/lib/solargraph/language_server/message/text_document/hover.rb +31 -31
- data/lib/solargraph/language_server/message/text_document/on_type_formatting.rb +32 -32
- data/lib/solargraph/language_server/message/text_document/prepare_rename.rb +9 -9
- data/lib/solargraph/language_server/message/text_document/references.rb +14 -14
- data/lib/solargraph/language_server/message/text_document/rename.rb +17 -17
- data/lib/solargraph/language_server/message/text_document/signature_help.rb +19 -19
- data/lib/solargraph/language_server/message/workspace.rb +12 -12
- data/lib/solargraph/language_server/message/workspace/did_change_configuration.rb +29 -29
- data/lib/solargraph/language_server/message/workspace/did_change_watched_files.rb +29 -27
- data/lib/solargraph/language_server/message/workspace/did_change_workspace_folders.rb +24 -24
- data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +21 -21
- data/lib/solargraph/language_server/request.rb +22 -22
- data/lib/solargraph/language_server/symbol_kinds.rb +34 -34
- data/lib/solargraph/language_server/transport.rb +11 -11
- data/lib/solargraph/language_server/transport/adapter.rb +60 -60
- data/lib/solargraph/language_server/transport/data_reader.rb +66 -66
- data/lib/solargraph/language_server/uri_helpers.rb +25 -25
- data/lib/solargraph/library.rb +421 -419
- data/lib/solargraph/live_map.rb +126 -126
- data/lib/solargraph/live_map/cache.rb +38 -38
- data/lib/solargraph/location.rb +31 -31
- data/lib/solargraph/logging.rb +25 -25
- data/lib/solargraph/page.rb +68 -68
- data/lib/solargraph/pin.rb +50 -50
- data/lib/solargraph/pin/attribute.rb +41 -41
- data/lib/solargraph/pin/base.rb +280 -280
- data/lib/solargraph/pin/base_method.rb +76 -76
- data/lib/solargraph/pin/base_variable.rb +72 -72
- data/lib/solargraph/pin/block.rb +32 -32
- data/lib/solargraph/pin/block_parameter.rb +103 -103
- data/lib/solargraph/pin/class_variable.rb +9 -9
- data/lib/solargraph/pin/constant.rb +30 -30
- data/lib/solargraph/pin/conversions.rb +79 -79
- data/lib/solargraph/pin/documenting.rb +41 -41
- data/lib/solargraph/pin/duck_method.rb +14 -14
- data/lib/solargraph/pin/global_variable.rb +9 -9
- data/lib/solargraph/pin/instance_variable.rb +9 -9
- data/lib/solargraph/pin/keyword.rb +17 -17
- data/lib/solargraph/pin/local_variable.rb +23 -23
- data/lib/solargraph/pin/localized.rb +22 -22
- data/lib/solargraph/pin/method.rb +126 -126
- data/lib/solargraph/pin/method_alias.rb +30 -30
- data/lib/solargraph/pin/method_parameter.rb +40 -40
- data/lib/solargraph/pin/namespace.rb +54 -54
- data/lib/solargraph/pin/plugin/method.rb +25 -25
- data/lib/solargraph/pin/proxy_type.rb +35 -35
- data/lib/solargraph/pin/reference.rb +22 -22
- data/lib/solargraph/pin/reference/extend.rb +11 -11
- data/lib/solargraph/pin/reference/include.rb +11 -11
- data/lib/solargraph/pin/reference/require.rb +15 -15
- data/lib/solargraph/pin/reference/superclass.rb +11 -11
- data/lib/solargraph/pin/symbol.rb +44 -44
- data/lib/solargraph/pin/yard_pin.rb +10 -10
- data/lib/solargraph/pin/yard_pin/constant.rb +14 -14
- data/lib/solargraph/pin/yard_pin/method.rb +35 -35
- data/lib/solargraph/pin/yard_pin/namespace.rb +19 -19
- data/lib/solargraph/pin/yard_pin/yard_mixin.rb +14 -14
- data/lib/solargraph/plugin.rb +8 -8
- data/lib/solargraph/plugin/base.rb +41 -41
- data/lib/solargraph/plugin/canceler.rb +11 -11
- data/lib/solargraph/plugin/process.rb +172 -172
- data/lib/solargraph/plugin/runtime.rb +134 -134
- data/lib/solargraph/position.rb +110 -110
- data/lib/solargraph/range.rb +83 -83
- data/lib/solargraph/server_methods.rb +14 -14
- data/lib/solargraph/shell.rb +102 -102
- data/lib/solargraph/source.rb +521 -521
- data/lib/solargraph/source/chain.rb +120 -120
- data/lib/solargraph/source/chain/call.rb +107 -107
- data/lib/solargraph/source/chain/class_variable.rb +11 -11
- data/lib/solargraph/source/chain/constant.rb +30 -30
- data/lib/solargraph/source/chain/global_variable.rb +11 -11
- data/lib/solargraph/source/chain/head.rb +33 -33
- data/lib/solargraph/source/chain/instance_variable.rb +11 -11
- data/lib/solargraph/source/chain/link.rb +33 -33
- data/lib/solargraph/source/chain/literal.rb +21 -21
- data/lib/solargraph/source/chain/variable.rb +11 -11
- data/lib/solargraph/source/change.rb +77 -77
- data/lib/solargraph/source/cursor.rb +157 -157
- data/lib/solargraph/source/node_chainer.rb +96 -96
- data/lib/solargraph/source/node_methods.rb +225 -225
- data/lib/solargraph/source/source_chainer.rb +183 -183
- data/lib/solargraph/source_map.rb +169 -169
- data/lib/solargraph/source_map/clip.rb +145 -145
- data/lib/solargraph/source_map/completion.rb +21 -21
- data/lib/solargraph/source_map/mapper.rb +149 -149
- data/lib/solargraph/source_map/node_processor.rb +78 -78
- data/lib/solargraph/source_map/node_processor/alias_node.rb +19 -19
- data/lib/solargraph/source_map/node_processor/args_node.rb +28 -28
- data/lib/solargraph/source_map/node_processor/base.rb +68 -68
- data/lib/solargraph/source_map/node_processor/begin_node.rb +11 -11
- data/lib/solargraph/source_map/node_processor/block_node.rb +14 -14
- data/lib/solargraph/source_map/node_processor/casgn_node.rb +14 -14
- data/lib/solargraph/source_map/node_processor/cvasgn_node.rb +14 -14
- data/lib/solargraph/source_map/node_processor/def_node.rb +54 -54
- data/lib/solargraph/source_map/node_processor/defs_node.rb +21 -21
- data/lib/solargraph/source_map/node_processor/gvasgn_node.rb +12 -12
- data/lib/solargraph/source_map/node_processor/ivasgn_node.rb +18 -18
- data/lib/solargraph/source_map/node_processor/lvasgn_node.rb +16 -16
- data/lib/solargraph/source_map/node_processor/namespace_node.rb +26 -26
- data/lib/solargraph/source_map/node_processor/orasgn_node.rb +12 -12
- data/lib/solargraph/source_map/node_processor/sclass_node.rb +11 -11
- data/lib/solargraph/source_map/node_processor/send_node.rb +162 -162
- data/lib/solargraph/source_map/node_processor/sym_node.rb +11 -11
- data/lib/solargraph/source_map/region.rb +58 -58
- data/lib/solargraph/version.rb +3 -3
- data/lib/solargraph/views/environment.erb +53 -53
- data/lib/solargraph/workspace.rb +183 -183
- data/lib/solargraph/workspace/config.rb +170 -170
- data/lib/solargraph/yard_map.rb +298 -298
- data/lib/solargraph/yard_map/cache.rb +17 -17
- data/lib/solargraph/yard_map/core_docs.rb +163 -163
- data/lib/solargraph/yard_map/core_gen.rb +76 -76
- data/lib/yard-coregen.rb +16 -16
- data/lib/yard-solargraph.rb +18 -18
- data/solargraph.gemspec +37 -0
- data/travis-bundler.rb +10 -0
- 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
|