solargraph 0.58.1 → 0.58.3
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/.github/workflows/plugins.yml +3 -2
- data/.gitignore +1 -0
- data/CHANGELOG.md +10 -1
- data/lib/solargraph/api_map/cache.rb +110 -110
- data/lib/solargraph/api_map/constants.rb +279 -279
- data/lib/solargraph/api_map/index.rb +193 -193
- data/lib/solargraph/api_map/source_to_yard.rb +97 -97
- data/lib/solargraph/api_map/store.rb +384 -384
- data/lib/solargraph/api_map.rb +945 -945
- data/lib/solargraph/bench.rb +45 -45
- data/lib/solargraph/complex_type/type_methods.rb +228 -228
- data/lib/solargraph/complex_type/unique_type.rb +482 -482
- data/lib/solargraph/complex_type.rb +444 -444
- data/lib/solargraph/convention/data_definition/data_assignment_node.rb +61 -61
- data/lib/solargraph/convention/data_definition/data_definition_node.rb +91 -91
- data/lib/solargraph/convention/data_definition.rb +105 -105
- data/lib/solargraph/convention/gemfile.rb +15 -15
- data/lib/solargraph/convention/gemspec.rb +23 -23
- data/lib/solargraph/convention/rakefile.rb +17 -17
- data/lib/solargraph/convention/struct_definition/struct_assignment_node.rb +61 -61
- data/lib/solargraph/convention/struct_definition/struct_definition_node.rb +102 -102
- data/lib/solargraph/convention/struct_definition.rb +164 -164
- data/lib/solargraph/convention.rb +78 -78
- data/lib/solargraph/converters/dd.rb +17 -17
- data/lib/solargraph/converters/dl.rb +15 -15
- data/lib/solargraph/converters/dt.rb +15 -15
- data/lib/solargraph/converters/misc.rb +1 -1
- data/lib/solargraph/diagnostics/require_not_found.rb +53 -53
- data/lib/solargraph/diagnostics/rubocop.rb +118 -118
- data/lib/solargraph/diagnostics/rubocop_helpers.rb +68 -68
- data/lib/solargraph/diagnostics/type_check.rb +55 -55
- data/lib/solargraph/diagnostics/update_errors.rb +41 -41
- data/lib/solargraph/doc_map.rb +439 -439
- data/lib/solargraph/equality.rb +34 -34
- data/lib/solargraph/gem_pins.rb +98 -98
- data/lib/solargraph/language_server/error_codes.rb +20 -20
- data/lib/solargraph/language_server/host/diagnoser.rb +89 -89
- data/lib/solargraph/language_server/host/dispatch.rb +130 -130
- data/lib/solargraph/language_server/host/message_worker.rb +112 -112
- data/lib/solargraph/language_server/host/sources.rb +99 -99
- data/lib/solargraph/language_server/host.rb +878 -878
- data/lib/solargraph/language_server/message/base.rb +97 -97
- data/lib/solargraph/language_server/message/client/register_capability.rb +15 -15
- data/lib/solargraph/language_server/message/completion_item/resolve.rb +60 -60
- data/lib/solargraph/language_server/message/extended/check_gem_version.rb +114 -114
- data/lib/solargraph/language_server/message/extended/document.rb +23 -23
- data/lib/solargraph/language_server/message/extended/document_gems.rb +32 -32
- data/lib/solargraph/language_server/message/extended/download_core.rb +19 -19
- data/lib/solargraph/language_server/message/extended/search.rb +20 -20
- data/lib/solargraph/language_server/message/initialize.rb +191 -191
- data/lib/solargraph/language_server/message/text_document/completion.rb +56 -56
- data/lib/solargraph/language_server/message/text_document/definition.rb +40 -40
- data/lib/solargraph/language_server/message/text_document/document_highlight.rb +16 -16
- data/lib/solargraph/language_server/message/text_document/document_symbol.rb +26 -26
- data/lib/solargraph/language_server/message/text_document/formatting.rb +148 -148
- data/lib/solargraph/language_server/message/text_document/hover.rb +58 -58
- data/lib/solargraph/language_server/message/text_document/prepare_rename.rb +11 -11
- data/lib/solargraph/language_server/message/text_document/references.rb +16 -16
- data/lib/solargraph/language_server/message/text_document/rename.rb +19 -19
- data/lib/solargraph/language_server/message/text_document/signature_help.rb +24 -24
- data/lib/solargraph/language_server/message/text_document/type_definition.rb +25 -25
- data/lib/solargraph/language_server/message/workspace/did_change_configuration.rb +35 -35
- data/lib/solargraph/language_server/message/workspace/did_change_watched_files.rb +40 -40
- data/lib/solargraph/language_server/message/workspace/did_change_workspace_folders.rb +26 -26
- data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +23 -23
- data/lib/solargraph/language_server/message.rb +94 -94
- data/lib/solargraph/language_server/request.rb +27 -27
- data/lib/solargraph/language_server/transport/data_reader.rb +74 -74
- data/lib/solargraph/language_server/uri_helpers.rb +49 -49
- data/lib/solargraph/library.rb +683 -683
- data/lib/solargraph/location.rb +82 -82
- data/lib/solargraph/logging.rb +37 -37
- data/lib/solargraph/page.rb +92 -92
- data/lib/solargraph/parser/comment_ripper.rb +69 -69
- data/lib/solargraph/parser/flow_sensitive_typing.rb +255 -255
- data/lib/solargraph/parser/node_processor/base.rb +92 -92
- data/lib/solargraph/parser/node_processor.rb +62 -62
- data/lib/solargraph/parser/parser_gem/class_methods.rb +149 -149
- data/lib/solargraph/parser/parser_gem/flawed_builder.rb +19 -19
- data/lib/solargraph/parser/parser_gem/node_chainer.rb +166 -166
- data/lib/solargraph/parser/parser_gem/node_methods.rb +486 -486
- data/lib/solargraph/parser/parser_gem/node_processors/and_node.rb +22 -22
- data/lib/solargraph/parser/parser_gem/node_processors/args_node.rb +59 -59
- data/lib/solargraph/parser/parser_gem/node_processors/begin_node.rb +15 -15
- data/lib/solargraph/parser/parser_gem/node_processors/block_node.rb +46 -46
- data/lib/solargraph/parser/parser_gem/node_processors/def_node.rb +53 -53
- data/lib/solargraph/parser/parser_gem/node_processors/defs_node.rb +37 -37
- data/lib/solargraph/parser/parser_gem/node_processors/if_node.rb +23 -23
- data/lib/solargraph/parser/parser_gem/node_processors/ivasgn_node.rb +40 -40
- data/lib/solargraph/parser/parser_gem/node_processors/lvasgn_node.rb +29 -29
- data/lib/solargraph/parser/parser_gem/node_processors/masgn_node.rb +59 -59
- data/lib/solargraph/parser/parser_gem/node_processors/opasgn_node.rb +98 -98
- data/lib/solargraph/parser/parser_gem/node_processors/orasgn_node.rb +17 -17
- data/lib/solargraph/parser/parser_gem/node_processors/resbody_node.rb +38 -38
- data/lib/solargraph/parser/parser_gem/node_processors/sclass_node.rb +52 -52
- data/lib/solargraph/parser/parser_gem/node_processors/send_node.rb +291 -291
- data/lib/solargraph/parser/parser_gem/node_processors/until_node.rb +29 -29
- data/lib/solargraph/parser/parser_gem/node_processors/while_node.rb +29 -29
- data/lib/solargraph/parser/parser_gem/node_processors.rb +70 -70
- data/lib/solargraph/parser/parser_gem.rb +12 -12
- data/lib/solargraph/parser/region.rb +69 -69
- data/lib/solargraph/parser/snippet.rb +17 -17
- data/lib/solargraph/parser.rb +23 -23
- data/lib/solargraph/pin/base.rb +729 -729
- data/lib/solargraph/pin/base_variable.rb +126 -126
- data/lib/solargraph/pin/block.rb +104 -104
- data/lib/solargraph/pin/breakable.rb +9 -9
- data/lib/solargraph/pin/callable.rb +231 -231
- data/lib/solargraph/pin/closure.rb +72 -72
- data/lib/solargraph/pin/common.rb +79 -79
- data/lib/solargraph/pin/constant.rb +45 -45
- data/lib/solargraph/pin/conversions.rb +123 -123
- data/lib/solargraph/pin/delegated_method.rb +120 -120
- data/lib/solargraph/pin/documenting.rb +114 -114
- data/lib/solargraph/pin/instance_variable.rb +34 -34
- data/lib/solargraph/pin/keyword.rb +20 -20
- data/lib/solargraph/pin/local_variable.rb +75 -75
- data/lib/solargraph/pin/method.rb +672 -672
- data/lib/solargraph/pin/method_alias.rb +34 -34
- data/lib/solargraph/pin/namespace.rb +115 -115
- data/lib/solargraph/pin/parameter.rb +275 -275
- data/lib/solargraph/pin/proxy_type.rb +39 -39
- data/lib/solargraph/pin/reference/override.rb +47 -47
- data/lib/solargraph/pin/reference/superclass.rb +15 -15
- data/lib/solargraph/pin/reference.rb +39 -39
- data/lib/solargraph/pin/search.rb +61 -61
- data/lib/solargraph/pin/signature.rb +61 -61
- data/lib/solargraph/pin/symbol.rb +53 -53
- data/lib/solargraph/pin/until.rb +18 -18
- data/lib/solargraph/pin/while.rb +18 -18
- data/lib/solargraph/pin.rb +44 -44
- data/lib/solargraph/pin_cache.rb +245 -245
- data/lib/solargraph/position.rb +132 -119
- data/lib/solargraph/range.rb +112 -112
- data/lib/solargraph/rbs_map/conversions.rb +823 -823
- data/lib/solargraph/rbs_map/core_fills.rb +84 -84
- data/lib/solargraph/rbs_map/core_map.rb +58 -58
- data/lib/solargraph/rbs_map/stdlib_map.rb +43 -43
- data/lib/solargraph/rbs_map.rb +163 -163
- data/lib/solargraph/server_methods.rb +16 -16
- data/lib/solargraph/shell.rb +363 -352
- data/lib/solargraph/source/chain/array.rb +37 -37
- data/lib/solargraph/source/chain/call.rb +337 -337
- data/lib/solargraph/source/chain/class_variable.rb +13 -13
- data/lib/solargraph/source/chain/constant.rb +26 -26
- data/lib/solargraph/source/chain/global_variable.rb +13 -13
- data/lib/solargraph/source/chain/hash.rb +34 -34
- data/lib/solargraph/source/chain/if.rb +28 -28
- data/lib/solargraph/source/chain/instance_variable.rb +13 -13
- data/lib/solargraph/source/chain/link.rb +109 -109
- data/lib/solargraph/source/chain/literal.rb +48 -48
- data/lib/solargraph/source/chain/or.rb +23 -23
- data/lib/solargraph/source/chain/q_call.rb +11 -11
- data/lib/solargraph/source/chain/variable.rb +13 -13
- data/lib/solargraph/source/chain/z_super.rb +30 -30
- data/lib/solargraph/source/chain.rb +291 -291
- data/lib/solargraph/source/change.rb +82 -82
- data/lib/solargraph/source/cursor.rb +166 -166
- data/lib/solargraph/source/source_chainer.rb +194 -194
- data/lib/solargraph/source/updater.rb +55 -55
- data/lib/solargraph/source.rb +498 -498
- data/lib/solargraph/source_map/clip.rb +226 -226
- data/lib/solargraph/source_map/data.rb +34 -34
- data/lib/solargraph/source_map/mapper.rb +259 -259
- data/lib/solargraph/source_map.rb +212 -212
- data/lib/solargraph/type_checker/checks.rb +124 -124
- data/lib/solargraph/type_checker/param_def.rb +37 -37
- data/lib/solargraph/type_checker/problem.rb +32 -32
- data/lib/solargraph/type_checker/rules.rb +84 -84
- data/lib/solargraph/type_checker.rb +814 -814
- data/lib/solargraph/version.rb +1 -1
- data/lib/solargraph/workspace/config.rb +255 -255
- data/lib/solargraph/workspace/require_paths.rb +97 -97
- data/lib/solargraph/workspace.rb +220 -220
- data/lib/solargraph/yard_map/helpers.rb +44 -44
- data/lib/solargraph/yard_map/mapper/to_method.rb +130 -130
- data/lib/solargraph/yard_map/mapper/to_namespace.rb +31 -31
- data/lib/solargraph/yard_map/mapper.rb +79 -79
- data/lib/solargraph/yard_map/to_method.rb +89 -89
- data/lib/solargraph/yard_tags.rb +20 -20
- data/lib/solargraph/yardoc.rb +87 -87
- data/lib/solargraph.rb +105 -105
- data/rbs_collection.yaml +1 -1
- metadata +12 -12
- /data/{sig → rbs}/shims/ast/0/node.rbs +0 -0
- /data/{sig → rbs}/shims/ast/2.4/.rbs_meta.yaml +0 -0
- /data/{sig → rbs}/shims/ast/2.4/ast.rbs +0 -0
- /data/{sig → rbs}/shims/parser/3.2.0.1/builders/default.rbs +0 -0
- /data/{sig → rbs}/shims/parser/3.2.0.1/manifest.yaml +0 -0
- /data/{sig → rbs}/shims/parser/3.2.0.1/parser.rbs +0 -0
- /data/{sig → rbs}/shims/parser/3.2.0.1/polyfill.rbs +0 -0
- /data/{sig → rbs}/shims/thor/1.2.0.1/.rbs_meta.yaml +0 -0
- /data/{sig → rbs}/shims/thor/1.2.0.1/manifest.yaml +0 -0
- /data/{sig → rbs}/shims/thor/1.2.0.1/thor.rbs +0 -0
|
@@ -1,68 +1,68 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Solargraph
|
|
4
|
-
module Diagnostics
|
|
5
|
-
# Utility methods for the RuboCop diagnostics reporter.
|
|
6
|
-
#
|
|
7
|
-
module RubocopHelpers
|
|
8
|
-
module_function
|
|
9
|
-
|
|
10
|
-
# Requires a specific version of rubocop, or the latest installed version
|
|
11
|
-
# if _version_ is `nil`.
|
|
12
|
-
#
|
|
13
|
-
# @param version [String, nil]
|
|
14
|
-
# @raise [InvalidRubocopVersionError] if _version_ is not installed
|
|
15
|
-
# @return [void]
|
|
16
|
-
def require_rubocop(version = nil)
|
|
17
|
-
begin
|
|
18
|
-
# @type [String]
|
|
19
|
-
gem_path = Gem::Specification.find_by_name('rubocop', version).full_gem_path
|
|
20
|
-
gem_lib_path = File.join(gem_path, 'lib')
|
|
21
|
-
$LOAD_PATH.unshift(gem_lib_path) unless $LOAD_PATH.include?(gem_lib_path)
|
|
22
|
-
rescue Gem::MissingSpecVersionError => e
|
|
23
|
-
# @type [Array<Gem::Specification>]
|
|
24
|
-
specs = e.specs
|
|
25
|
-
raise InvalidRubocopVersionError,
|
|
26
|
-
"could not find '#{e.name}' (#{e.requirement}) - "\
|
|
27
|
-
"did find: [#{specs.map { |s| s.version.version }.join(', ')}]"
|
|
28
|
-
end
|
|
29
|
-
require 'rubocop'
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
# Generate command-line options for the specified filename and code.
|
|
33
|
-
#
|
|
34
|
-
# @param filename [String]
|
|
35
|
-
# @param code [String]
|
|
36
|
-
# @return [Array(Array<String>, Array<String>)]
|
|
37
|
-
def generate_options filename, code
|
|
38
|
-
args = ['-f', 'j', '--force-exclusion', filename]
|
|
39
|
-
base_options = RuboCop::Options.new
|
|
40
|
-
options, paths = base_options.parse(args)
|
|
41
|
-
# @sg-ignore
|
|
42
|
-
options[:stdin] = code
|
|
43
|
-
[options, paths]
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
# RuboCop internally uses capitalized drive letters for Windows paths,
|
|
47
|
-
# so we need to convert the paths provided to the command.
|
|
48
|
-
#
|
|
49
|
-
# @param path [String]
|
|
50
|
-
# @return [String]
|
|
51
|
-
def fix_drive_letter path
|
|
52
|
-
return path unless path.match(/^[a-z]:/)
|
|
53
|
-
path[0].upcase + path[1..-1]
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
# @todo This is a smelly way to redirect output, but the RuboCop specs do
|
|
57
|
-
# the same thing.
|
|
58
|
-
# @return [String]
|
|
59
|
-
def redirect_stdout
|
|
60
|
-
redir = StringIO.new
|
|
61
|
-
$stdout = redir
|
|
62
|
-
yield if block_given?
|
|
63
|
-
$stdout = STDOUT
|
|
64
|
-
redir.string
|
|
65
|
-
end
|
|
66
|
-
end
|
|
67
|
-
end
|
|
68
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Solargraph
|
|
4
|
+
module Diagnostics
|
|
5
|
+
# Utility methods for the RuboCop diagnostics reporter.
|
|
6
|
+
#
|
|
7
|
+
module RubocopHelpers
|
|
8
|
+
module_function
|
|
9
|
+
|
|
10
|
+
# Requires a specific version of rubocop, or the latest installed version
|
|
11
|
+
# if _version_ is `nil`.
|
|
12
|
+
#
|
|
13
|
+
# @param version [String, nil]
|
|
14
|
+
# @raise [InvalidRubocopVersionError] if _version_ is not installed
|
|
15
|
+
# @return [void]
|
|
16
|
+
def require_rubocop(version = nil)
|
|
17
|
+
begin
|
|
18
|
+
# @type [String]
|
|
19
|
+
gem_path = Gem::Specification.find_by_name('rubocop', version).full_gem_path
|
|
20
|
+
gem_lib_path = File.join(gem_path, 'lib')
|
|
21
|
+
$LOAD_PATH.unshift(gem_lib_path) unless $LOAD_PATH.include?(gem_lib_path)
|
|
22
|
+
rescue Gem::MissingSpecVersionError => e
|
|
23
|
+
# @type [Array<Gem::Specification>]
|
|
24
|
+
specs = e.specs
|
|
25
|
+
raise InvalidRubocopVersionError,
|
|
26
|
+
"could not find '#{e.name}' (#{e.requirement}) - "\
|
|
27
|
+
"did find: [#{specs.map { |s| s.version.version }.join(', ')}]"
|
|
28
|
+
end
|
|
29
|
+
require 'rubocop'
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# Generate command-line options for the specified filename and code.
|
|
33
|
+
#
|
|
34
|
+
# @param filename [String]
|
|
35
|
+
# @param code [String]
|
|
36
|
+
# @return [Array(Array<String>, Array<String>)]
|
|
37
|
+
def generate_options filename, code
|
|
38
|
+
args = ['-f', 'j', '--force-exclusion', filename]
|
|
39
|
+
base_options = RuboCop::Options.new
|
|
40
|
+
options, paths = base_options.parse(args)
|
|
41
|
+
# @sg-ignore
|
|
42
|
+
options[:stdin] = code
|
|
43
|
+
[options, paths]
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# RuboCop internally uses capitalized drive letters for Windows paths,
|
|
47
|
+
# so we need to convert the paths provided to the command.
|
|
48
|
+
#
|
|
49
|
+
# @param path [String]
|
|
50
|
+
# @return [String]
|
|
51
|
+
def fix_drive_letter path
|
|
52
|
+
return path unless path.match(/^[a-z]:/)
|
|
53
|
+
path[0].upcase + path[1..-1]
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# @todo This is a smelly way to redirect output, but the RuboCop specs do
|
|
57
|
+
# the same thing.
|
|
58
|
+
# @return [String]
|
|
59
|
+
def redirect_stdout
|
|
60
|
+
redir = StringIO.new
|
|
61
|
+
$stdout = redir
|
|
62
|
+
yield if block_given?
|
|
63
|
+
$stdout = STDOUT
|
|
64
|
+
redir.string
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
@@ -1,55 +1,55 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Solargraph
|
|
4
|
-
module Diagnostics
|
|
5
|
-
# TypeCheck reports methods with undefined return types, untagged
|
|
6
|
-
# parameters, and invalid param tags.
|
|
7
|
-
#
|
|
8
|
-
class TypeCheck < Base
|
|
9
|
-
# @return [Array<Hash>]
|
|
10
|
-
def diagnose source, api_map
|
|
11
|
-
# return [] unless args.include?('always') || api_map.workspaced?(source.filename)
|
|
12
|
-
severity = Diagnostics::Severities::ERROR
|
|
13
|
-
level = (args.reverse.find { |a| ['normal', 'typed', 'strict', 'strong'].include?(a) }) || :normal
|
|
14
|
-
checker = Solargraph::TypeChecker.new(source.filename, api_map: api_map, level: level.to_sym)
|
|
15
|
-
checker.problems
|
|
16
|
-
.sort { |a, b| a.location.range.start.line <=> b.location.range.start.line }
|
|
17
|
-
.map do |problem|
|
|
18
|
-
{
|
|
19
|
-
range: extract_first_line(problem.location, source),
|
|
20
|
-
severity: severity,
|
|
21
|
-
source: 'Typecheck',
|
|
22
|
-
message: problem.message
|
|
23
|
-
}
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
private
|
|
28
|
-
|
|
29
|
-
# @param location [Location]
|
|
30
|
-
# @param source [Source]
|
|
31
|
-
# @return [Hash]
|
|
32
|
-
def extract_first_line location, source
|
|
33
|
-
return location.range.to_hash if location.range.start.line == location.range.ending.line
|
|
34
|
-
{
|
|
35
|
-
start: {
|
|
36
|
-
line: location.range.start.line,
|
|
37
|
-
character: location.range.start.character
|
|
38
|
-
},
|
|
39
|
-
end: {
|
|
40
|
-
line: location.range.start.line,
|
|
41
|
-
character: last_character(location.range.start, source)
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
# @param position [Solargraph::Position]
|
|
47
|
-
# @param source [Solargraph::Source]
|
|
48
|
-
# @return [Integer]
|
|
49
|
-
def last_character position, source
|
|
50
|
-
cursor = Position.to_offset(source.code, position)
|
|
51
|
-
source.code.index(/[\r\n]/, cursor) || source.code.length
|
|
52
|
-
end
|
|
53
|
-
end
|
|
54
|
-
end
|
|
55
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Solargraph
|
|
4
|
+
module Diagnostics
|
|
5
|
+
# TypeCheck reports methods with undefined return types, untagged
|
|
6
|
+
# parameters, and invalid param tags.
|
|
7
|
+
#
|
|
8
|
+
class TypeCheck < Base
|
|
9
|
+
# @return [Array<Hash>]
|
|
10
|
+
def diagnose source, api_map
|
|
11
|
+
# return [] unless args.include?('always') || api_map.workspaced?(source.filename)
|
|
12
|
+
severity = Diagnostics::Severities::ERROR
|
|
13
|
+
level = (args.reverse.find { |a| ['normal', 'typed', 'strict', 'strong'].include?(a) }) || :normal
|
|
14
|
+
checker = Solargraph::TypeChecker.new(source.filename, api_map: api_map, level: level.to_sym)
|
|
15
|
+
checker.problems
|
|
16
|
+
.sort { |a, b| a.location.range.start.line <=> b.location.range.start.line }
|
|
17
|
+
.map do |problem|
|
|
18
|
+
{
|
|
19
|
+
range: extract_first_line(problem.location, source),
|
|
20
|
+
severity: severity,
|
|
21
|
+
source: 'Typecheck',
|
|
22
|
+
message: problem.message
|
|
23
|
+
}
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
private
|
|
28
|
+
|
|
29
|
+
# @param location [Location]
|
|
30
|
+
# @param source [Source]
|
|
31
|
+
# @return [Hash]
|
|
32
|
+
def extract_first_line location, source
|
|
33
|
+
return location.range.to_hash if location.range.start.line == location.range.ending.line
|
|
34
|
+
{
|
|
35
|
+
start: {
|
|
36
|
+
line: location.range.start.line,
|
|
37
|
+
character: location.range.start.character
|
|
38
|
+
},
|
|
39
|
+
end: {
|
|
40
|
+
line: location.range.start.line,
|
|
41
|
+
character: last_character(location.range.start, source)
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# @param position [Solargraph::Position]
|
|
47
|
+
# @param source [Solargraph::Source]
|
|
48
|
+
# @return [Integer]
|
|
49
|
+
def last_character position, source
|
|
50
|
+
cursor = Position.to_offset(source.code, position)
|
|
51
|
+
source.code.index(/[\r\n]/, cursor) || source.code.length
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
@@ -1,41 +1,41 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Solargraph
|
|
4
|
-
module Diagnostics
|
|
5
|
-
class UpdateErrors < Base
|
|
6
|
-
def diagnose source, api_map
|
|
7
|
-
result = []
|
|
8
|
-
combine_ranges(source.code, source.error_ranges).each do |range|
|
|
9
|
-
result.push(
|
|
10
|
-
range: range.to_hash,
|
|
11
|
-
severity: Diagnostics::Severities::ERROR,
|
|
12
|
-
source: 'Solargraph',
|
|
13
|
-
message: 'Syntax error'
|
|
14
|
-
)
|
|
15
|
-
end
|
|
16
|
-
result
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
private
|
|
20
|
-
|
|
21
|
-
# Combine an array of ranges by their starting lines.
|
|
22
|
-
#
|
|
23
|
-
# @param code [String]
|
|
24
|
-
# @param ranges [Array<Range>]
|
|
25
|
-
# @return [Array<Range>]
|
|
26
|
-
def combine_ranges code, ranges
|
|
27
|
-
result = []
|
|
28
|
-
lines = []
|
|
29
|
-
ranges.sort{|a, b| a.start.line <=> b.start.line}.each do |rng|
|
|
30
|
-
next if rng.nil? || lines.include?(rng.start.line)
|
|
31
|
-
lines.push rng.start.line
|
|
32
|
-
next if rng.start.line >= code.lines.length
|
|
33
|
-
scol = code.lines[rng.start.line].index(/[^\s]/) || 0
|
|
34
|
-
ecol = code.lines[rng.start.line].length
|
|
35
|
-
result.push Range.from_to(rng.start.line, scol, rng.start.line, ecol)
|
|
36
|
-
end
|
|
37
|
-
result
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Solargraph
|
|
4
|
+
module Diagnostics
|
|
5
|
+
class UpdateErrors < Base
|
|
6
|
+
def diagnose source, api_map
|
|
7
|
+
result = []
|
|
8
|
+
combine_ranges(source.code, source.error_ranges).each do |range|
|
|
9
|
+
result.push(
|
|
10
|
+
range: range.to_hash,
|
|
11
|
+
severity: Diagnostics::Severities::ERROR,
|
|
12
|
+
source: 'Solargraph',
|
|
13
|
+
message: 'Syntax error'
|
|
14
|
+
)
|
|
15
|
+
end
|
|
16
|
+
result
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
private
|
|
20
|
+
|
|
21
|
+
# Combine an array of ranges by their starting lines.
|
|
22
|
+
#
|
|
23
|
+
# @param code [String]
|
|
24
|
+
# @param ranges [Array<Range>]
|
|
25
|
+
# @return [Array<Range>]
|
|
26
|
+
def combine_ranges code, ranges
|
|
27
|
+
result = []
|
|
28
|
+
lines = []
|
|
29
|
+
ranges.sort{|a, b| a.start.line <=> b.start.line}.each do |rng|
|
|
30
|
+
next if rng.nil? || lines.include?(rng.start.line)
|
|
31
|
+
lines.push rng.start.line
|
|
32
|
+
next if rng.start.line >= code.lines.length
|
|
33
|
+
scol = code.lines[rng.start.line].index(/[^\s]/) || 0
|
|
34
|
+
ecol = code.lines[rng.start.line].length
|
|
35
|
+
result.push Range.from_to(rng.start.line, scol, rng.start.line, ecol)
|
|
36
|
+
end
|
|
37
|
+
result
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|