solargraph 0.58.3 → 0.59.0.dev.1
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/.envrc +3 -0
- data/.github/workflows/linting.yml +4 -5
- data/.github/workflows/plugins.yml +41 -38
- data/.github/workflows/rspec.yml +45 -13
- data/.github/workflows/typecheck.yml +2 -2
- data/.gitignore +0 -1
- data/.rubocop_todo.yml +27 -49
- data/CHANGELOG.md +1 -10
- data/README.md +3 -3
- data/Rakefile +1 -0
- data/lib/solargraph/api_map/cache.rb +3 -3
- data/lib/solargraph/api_map/constants.rb +13 -3
- data/lib/solargraph/api_map/index.rb +22 -11
- data/lib/solargraph/api_map/source_to_yard.rb +13 -1
- data/lib/solargraph/api_map/store.rb +11 -8
- data/lib/solargraph/api_map.rb +105 -50
- data/lib/solargraph/bench.rb +45 -45
- data/lib/solargraph/complex_type/conformance.rb +176 -0
- data/lib/solargraph/complex_type/type_methods.rb +16 -2
- data/lib/solargraph/complex_type/unique_type.rb +170 -20
- data/lib/solargraph/complex_type.rb +119 -14
- data/lib/solargraph/convention/data_definition/data_assignment_node.rb +61 -61
- data/lib/solargraph/convention/data_definition/data_definition_node.rb +3 -1
- data/lib/solargraph/convention/data_definition.rb +4 -1
- 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 +1 -0
- data/lib/solargraph/convention/struct_definition/struct_definition_node.rb +1 -0
- data/lib/solargraph/convention/struct_definition.rb +5 -1
- 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 +1 -0
- data/lib/solargraph/diagnostics/rubocop.rb +1 -0
- data/lib/solargraph/diagnostics/rubocop_helpers.rb +2 -0
- data/lib/solargraph/diagnostics/type_check.rb +1 -0
- data/lib/solargraph/diagnostics/update_errors.rb +41 -41
- data/lib/solargraph/doc_map.rb +134 -373
- data/lib/solargraph/equality.rb +1 -1
- data/lib/solargraph/gem_pins.rb +14 -15
- 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 +1 -0
- data/lib/solargraph/language_server/host/message_worker.rb +2 -1
- data/lib/solargraph/language_server/host/sources.rb +1 -0
- data/lib/solargraph/language_server/host.rb +6 -1
- 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 +2 -7
- data/lib/solargraph/language_server/message/extended/document.rb +1 -0
- 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 +2 -0
- data/lib/solargraph/language_server/message/text_document/definition.rb +2 -0
- data/lib/solargraph/language_server/message/text_document/document_highlight.rb +16 -16
- data/lib/solargraph/language_server/message/text_document/document_symbol.rb +2 -0
- data/lib/solargraph/language_server/message/text_document/formatting.rb +2 -0
- data/lib/solargraph/language_server/message/text_document/hover.rb +2 -0
- 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 +1 -0
- data/lib/solargraph/language_server/message/text_document/type_definition.rb +2 -0
- 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 +2 -0
- 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 +59 -13
- data/lib/solargraph/location.rb +9 -4
- data/lib/solargraph/logging.rb +21 -1
- data/lib/solargraph/page.rb +92 -92
- data/lib/solargraph/parser/comment_ripper.rb +7 -0
- data/lib/solargraph/parser/flow_sensitive_typing.rb +330 -102
- data/lib/solargraph/parser/node_processor/base.rb +32 -2
- data/lib/solargraph/parser/node_processor.rb +7 -6
- data/lib/solargraph/parser/parser_gem/class_methods.rb +28 -10
- data/lib/solargraph/parser/parser_gem/flawed_builder.rb +19 -19
- data/lib/solargraph/parser/parser_gem/node_chainer.rb +31 -6
- data/lib/solargraph/parser/parser_gem/node_methods.rb +27 -7
- data/lib/solargraph/parser/parser_gem/node_processors/and_node.rb +4 -4
- data/lib/solargraph/parser/parser_gem/node_processors/args_node.rb +2 -0
- data/lib/solargraph/parser/parser_gem/node_processors/begin_node.rb +9 -0
- data/lib/solargraph/parser/parser_gem/node_processors/block_node.rb +11 -11
- data/lib/solargraph/parser/parser_gem/node_processors/def_node.rb +7 -0
- data/lib/solargraph/parser/parser_gem/node_processors/defs_node.rb +37 -37
- data/lib/solargraph/parser/parser_gem/node_processors/if_node.rb +36 -6
- data/lib/solargraph/parser/parser_gem/node_processors/ivasgn_node.rb +3 -2
- data/lib/solargraph/parser/parser_gem/node_processors/lvasgn_node.rb +1 -0
- data/lib/solargraph/parser/parser_gem/node_processors/masgn_node.rb +3 -1
- data/lib/solargraph/parser/parser_gem/node_processors/opasgn_node.rb +2 -2
- data/lib/solargraph/parser/parser_gem/node_processors/or_node.rb +22 -0
- data/lib/solargraph/parser/parser_gem/node_processors/orasgn_node.rb +1 -1
- data/lib/solargraph/parser/parser_gem/node_processors/resbody_node.rb +2 -1
- data/lib/solargraph/parser/parser_gem/node_processors/sclass_node.rb +1 -0
- data/lib/solargraph/parser/parser_gem/node_processors/send_node.rb +12 -7
- data/lib/solargraph/parser/parser_gem/node_processors/until_node.rb +29 -29
- data/lib/solargraph/parser/parser_gem/node_processors/when_node.rb +23 -0
- data/lib/solargraph/parser/parser_gem/node_processors/while_node.rb +5 -1
- data/lib/solargraph/parser/parser_gem/node_processors.rb +4 -0
- data/lib/solargraph/parser/parser_gem.rb +12 -12
- data/lib/solargraph/parser/region.rb +9 -3
- data/lib/solargraph/parser/snippet.rb +1 -1
- data/lib/solargraph/parser.rb +23 -23
- data/lib/solargraph/pin/base.rb +53 -21
- data/lib/solargraph/pin/base_variable.rb +312 -20
- data/lib/solargraph/pin/block.rb +26 -4
- data/lib/solargraph/pin/breakable.rb +5 -1
- data/lib/solargraph/pin/callable.rb +50 -3
- data/lib/solargraph/pin/closure.rb +2 -6
- data/lib/solargraph/pin/common.rb +20 -5
- data/lib/solargraph/pin/compound_statement.rb +55 -0
- data/lib/solargraph/pin/constant.rb +45 -45
- data/lib/solargraph/pin/conversions.rb +2 -1
- data/lib/solargraph/pin/delegated_method.rb +15 -4
- data/lib/solargraph/pin/documenting.rb +1 -0
- data/lib/solargraph/pin/instance_variable.rb +5 -1
- data/lib/solargraph/pin/keyword.rb +0 -4
- data/lib/solargraph/pin/local_variable.rb +13 -57
- data/lib/solargraph/pin/method.rb +90 -42
- data/lib/solargraph/pin/method_alias.rb +8 -0
- data/lib/solargraph/pin/namespace.rb +7 -1
- data/lib/solargraph/pin/parameter.rb +76 -13
- data/lib/solargraph/pin/proxy_type.rb +2 -1
- data/lib/solargraph/pin/reference/override.rb +1 -1
- data/lib/solargraph/pin/reference/superclass.rb +2 -0
- data/lib/solargraph/pin/reference.rb +2 -0
- data/lib/solargraph/pin/search.rb +1 -0
- data/lib/solargraph/pin/signature.rb +8 -0
- data/lib/solargraph/pin/symbol.rb +1 -1
- data/lib/solargraph/pin/until.rb +1 -1
- data/lib/solargraph/pin/while.rb +1 -1
- data/lib/solargraph/pin.rb +2 -0
- data/lib/solargraph/pin_cache.rb +477 -57
- data/lib/solargraph/position.rb +12 -26
- data/lib/solargraph/range.rb +6 -6
- data/lib/solargraph/rbs_map/conversions.rb +33 -10
- data/lib/solargraph/rbs_map/core_fills.rb +84 -84
- data/lib/solargraph/rbs_map/core_map.rb +24 -17
- data/lib/solargraph/rbs_map/stdlib_map.rb +34 -5
- data/lib/solargraph/rbs_map.rb +74 -20
- data/lib/solargraph/server_methods.rb +16 -16
- data/lib/solargraph/shell.rb +73 -39
- data/lib/solargraph/source/chain/array.rb +37 -37
- data/lib/solargraph/source/chain/call.rb +52 -17
- data/lib/solargraph/source/chain/class_variable.rb +13 -13
- data/lib/solargraph/source/chain/constant.rb +2 -0
- data/lib/solargraph/source/chain/global_variable.rb +13 -13
- data/lib/solargraph/source/chain/hash.rb +1 -0
- data/lib/solargraph/source/chain/if.rb +1 -0
- data/lib/solargraph/source/chain/instance_variable.rb +22 -1
- data/lib/solargraph/source/chain/link.rb +109 -109
- data/lib/solargraph/source/chain/literal.rb +5 -0
- data/lib/solargraph/source/chain/or.rb +9 -1
- 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 +25 -22
- data/lib/solargraph/source/change.rb +9 -2
- data/lib/solargraph/source/cursor.rb +7 -1
- data/lib/solargraph/source/source_chainer.rb +13 -3
- data/lib/solargraph/source/updater.rb +4 -0
- data/lib/solargraph/source.rb +33 -7
- data/lib/solargraph/source_map/clip.rb +13 -2
- data/lib/solargraph/source_map/data.rb +4 -1
- data/lib/solargraph/source_map/mapper.rb +24 -1
- data/lib/solargraph/source_map.rb +14 -6
- data/lib/solargraph/type_checker/problem.rb +3 -1
- data/lib/solargraph/type_checker/rules.rb +75 -2
- data/lib/solargraph/type_checker.rb +111 -30
- data/lib/solargraph/version.rb +1 -1
- data/lib/solargraph/workspace/config.rb +3 -1
- data/lib/solargraph/workspace/gemspecs.rb +367 -0
- data/lib/solargraph/workspace/require_paths.rb +1 -0
- data/lib/solargraph/workspace.rb +158 -16
- data/lib/solargraph/yard_map/helpers.rb +2 -1
- data/lib/solargraph/yard_map/mapper/to_method.rb +5 -1
- data/lib/solargraph/yard_map/mapper/to_namespace.rb +1 -0
- data/lib/solargraph/yard_map/mapper.rb +5 -0
- data/lib/solargraph/yard_tags.rb +20 -20
- data/lib/solargraph/yardoc.rb +33 -23
- data/lib/solargraph.rb +24 -3
- data/rbs/fills/rubygems/0/dependency.rbs +193 -0
- data/rbs/fills/tuple/tuple.rbs +28 -0
- data/rbs/shims/ast/0/node.rbs +1 -1
- data/rbs/shims/diff-lcs/1.5/diff-lcs.rbs +11 -0
- data/solargraph.gemspec +2 -1
- metadata +12 -7
- data/lib/solargraph/type_checker/checks.rb +0 -124
- data/lib/solargraph/type_checker/param_def.rb +0 -37
- data/lib/solargraph/yard_map/to_method.rb +0 -89
|
@@ -66,7 +66,7 @@ module Solargraph
|
|
|
66
66
|
end.compact
|
|
67
67
|
end
|
|
68
68
|
|
|
69
|
-
# @return [Parser::AST::Node]
|
|
69
|
+
# @return [Parser::AST::Node, nil]
|
|
70
70
|
def body_node
|
|
71
71
|
node.children[2]
|
|
72
72
|
end
|
|
@@ -81,8 +81,10 @@ module Solargraph
|
|
|
81
81
|
node.children[1]
|
|
82
82
|
end
|
|
83
83
|
|
|
84
|
+
# @sg-ignore Need to add nil check here
|
|
84
85
|
# @return [Array<Parser::AST::Node>]
|
|
85
86
|
def data_attribute_nodes
|
|
87
|
+
# @sg-ignore Need to add nil check here
|
|
86
88
|
data_node.children[2..-1]
|
|
87
89
|
end
|
|
88
90
|
end
|
|
@@ -17,6 +17,7 @@ module Solargraph
|
|
|
17
17
|
type: :class,
|
|
18
18
|
location: loc,
|
|
19
19
|
closure: region.closure,
|
|
20
|
+
# @sg-ignore flow sensitive typing needs to handle attrs
|
|
20
21
|
name: data_definition_node.class_name,
|
|
21
22
|
comments: comments_for(node),
|
|
22
23
|
visibility: :public,
|
|
@@ -39,6 +40,7 @@ module Solargraph
|
|
|
39
40
|
# Solargraph::SourceMap::Clip#complete_keyword_parameters does not seem to currently take into account [Pin::Method#signatures] hence we only one for :kwarg
|
|
40
41
|
pins.push initialize_method_pin
|
|
41
42
|
|
|
43
|
+
# @sg-ignore flow sensitive typing needs to handle attrs
|
|
42
44
|
data_definition_node.attributes.map do |attribute_node, attribute_name|
|
|
43
45
|
initialize_method_pin.parameters.push(
|
|
44
46
|
Pin::Parameter.new(
|
|
@@ -51,6 +53,7 @@ module Solargraph
|
|
|
51
53
|
end
|
|
52
54
|
|
|
53
55
|
# define attribute readers and instance variables
|
|
56
|
+
# @sg-ignore flow sensitive typing needs to handle attrs
|
|
54
57
|
data_definition_node.attributes.each do |attribute_node, attribute_name|
|
|
55
58
|
name = attribute_name.to_s
|
|
56
59
|
method_pin = Pin::Method.new(
|
|
@@ -78,7 +81,7 @@ module Solargraph
|
|
|
78
81
|
|
|
79
82
|
private
|
|
80
83
|
|
|
81
|
-
# @return [DataDefintionNode, nil]
|
|
84
|
+
# @return [DataDefinition::DataDefintionNode, DataDefinition::DataAssignmentNode, nil]
|
|
82
85
|
def data_definition_node
|
|
83
86
|
@data_definition_node ||= if DataDefintionNode.match?(node)
|
|
84
87
|
DataDefintionNode.new(node)
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Solargraph
|
|
4
|
-
module Convention
|
|
5
|
-
class Gemfile < Base
|
|
6
|
-
def local source_map
|
|
7
|
-
return EMPTY_ENVIRON unless File.basename(source_map.filename) == 'Gemfile'
|
|
8
|
-
@environ ||= Environ.new(
|
|
9
|
-
requires: ['bundler'],
|
|
10
|
-
domains: ['Bundler::Dsl']
|
|
11
|
-
)
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Solargraph
|
|
4
|
+
module Convention
|
|
5
|
+
class Gemfile < Base
|
|
6
|
+
def local source_map
|
|
7
|
+
return EMPTY_ENVIRON unless File.basename(source_map.filename) == 'Gemfile'
|
|
8
|
+
@environ ||= Environ.new(
|
|
9
|
+
requires: ['bundler'],
|
|
10
|
+
domains: ['Bundler::Dsl']
|
|
11
|
+
)
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Solargraph
|
|
4
|
-
module Convention
|
|
5
|
-
class Gemspec < Base
|
|
6
|
-
def local source_map
|
|
7
|
-
return Convention::Base::EMPTY_ENVIRON unless File.basename(source_map.filename).end_with?('.gemspec')
|
|
8
|
-
@environ ||= Environ.new(
|
|
9
|
-
requires: ['rubygems'],
|
|
10
|
-
pins: [
|
|
11
|
-
Solargraph::Pin::Reference::Override.from_comment(
|
|
12
|
-
'Gem::Specification.new',
|
|
13
|
-
%(
|
|
14
|
-
@yieldparam [self]
|
|
15
|
-
),
|
|
16
|
-
source: :gemspec
|
|
17
|
-
)
|
|
18
|
-
]
|
|
19
|
-
)
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Solargraph
|
|
4
|
+
module Convention
|
|
5
|
+
class Gemspec < Base
|
|
6
|
+
def local source_map
|
|
7
|
+
return Convention::Base::EMPTY_ENVIRON unless File.basename(source_map.filename).end_with?('.gemspec')
|
|
8
|
+
@environ ||= Environ.new(
|
|
9
|
+
requires: ['rubygems'],
|
|
10
|
+
pins: [
|
|
11
|
+
Solargraph::Pin::Reference::Override.from_comment(
|
|
12
|
+
'Gem::Specification.new',
|
|
13
|
+
%(
|
|
14
|
+
@yieldparam [self]
|
|
15
|
+
),
|
|
16
|
+
source: :gemspec
|
|
17
|
+
)
|
|
18
|
+
]
|
|
19
|
+
)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Solargraph
|
|
4
|
-
module Convention
|
|
5
|
-
class Rakefile < Base
|
|
6
|
-
def local source_map
|
|
7
|
-
basename = File.basename(source_map.filename)
|
|
8
|
-
return EMPTY_ENVIRON unless basename.end_with?('.rake') || basename == 'Rakefile'
|
|
9
|
-
|
|
10
|
-
@environ ||= Environ.new(
|
|
11
|
-
requires: ['rake'],
|
|
12
|
-
domains: ['Rake::DSL']
|
|
13
|
-
)
|
|
14
|
-
end
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Solargraph
|
|
4
|
+
module Convention
|
|
5
|
+
class Rakefile < Base
|
|
6
|
+
def local source_map
|
|
7
|
+
basename = File.basename(source_map.filename)
|
|
8
|
+
return EMPTY_ENVIRON unless basename.end_with?('.rake') || basename == 'Rakefile'
|
|
9
|
+
|
|
10
|
+
@environ ||= Environ.new(
|
|
11
|
+
requires: ['rake'],
|
|
12
|
+
domains: ['Rake::DSL']
|
|
13
|
+
)
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -17,6 +17,7 @@ module Solargraph
|
|
|
17
17
|
type: :class,
|
|
18
18
|
location: loc,
|
|
19
19
|
closure: region.closure,
|
|
20
|
+
# @sg-ignore flow sensitive typing needs to handle attrs
|
|
20
21
|
name: struct_definition_node.class_name,
|
|
21
22
|
docstring: docstring,
|
|
22
23
|
visibility: :public,
|
|
@@ -39,6 +40,7 @@ module Solargraph
|
|
|
39
40
|
|
|
40
41
|
pins.push initialize_method_pin
|
|
41
42
|
|
|
43
|
+
# @sg-ignore flow sensitive typing needs to handle attrs
|
|
42
44
|
struct_definition_node.attributes.map do |attribute_node, attribute_name|
|
|
43
45
|
initialize_method_pin.parameters.push(
|
|
44
46
|
Pin::Parameter.new(
|
|
@@ -52,6 +54,7 @@ module Solargraph
|
|
|
52
54
|
end
|
|
53
55
|
|
|
54
56
|
# define attribute accessors and instance variables
|
|
57
|
+
# @sg-ignore flow sensitive typing needs to handle attrs
|
|
55
58
|
struct_definition_node.attributes.each do |attribute_node, attribute_name|
|
|
56
59
|
[attribute_name, "#{attribute_name}="].each do |name|
|
|
57
60
|
docs = docstring.tags.find { |t| t.tag_name == 'param' && t.name == attribute_name }
|
|
@@ -102,7 +105,7 @@ module Solargraph
|
|
|
102
105
|
|
|
103
106
|
private
|
|
104
107
|
|
|
105
|
-
# @return [StructDefintionNode, StructAssignmentNode, nil]
|
|
108
|
+
# @return [StructDefinition::StructDefintionNode, StructDefinition::StructAssignmentNode, nil]
|
|
106
109
|
def struct_definition_node
|
|
107
110
|
@struct_definition_node ||= if StructDefintionNode.match?(node)
|
|
108
111
|
StructDefintionNode.new(node)
|
|
@@ -121,6 +124,7 @@ module Solargraph
|
|
|
121
124
|
# @return [YARD::Docstring]
|
|
122
125
|
def parse_comments
|
|
123
126
|
struct_comments = comments_for(node) || ''
|
|
127
|
+
# @sg-ignore Need to add nil check here
|
|
124
128
|
struct_definition_node.attributes.each do |attr_node, attr_name|
|
|
125
129
|
comment = comments_for(attr_node)
|
|
126
130
|
next if comment.nil?
|
|
@@ -1,78 +1,78 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Solargraph
|
|
4
|
-
# Conventions provide a way to modify an ApiMap based on expectations about
|
|
5
|
-
# one of its sources.
|
|
6
|
-
#
|
|
7
|
-
module Convention
|
|
8
|
-
autoload :Base, 'solargraph/convention/base'
|
|
9
|
-
autoload :Gemfile, 'solargraph/convention/gemfile'
|
|
10
|
-
autoload :Gemspec, 'solargraph/convention/gemspec'
|
|
11
|
-
autoload :Rakefile, 'solargraph/convention/rakefile'
|
|
12
|
-
autoload :StructDefinition, 'solargraph/convention/struct_definition'
|
|
13
|
-
autoload :DataDefinition, 'solargraph/convention/data_definition'
|
|
14
|
-
autoload :ActiveSupportConcern, 'solargraph/convention/active_support_concern'
|
|
15
|
-
|
|
16
|
-
# @type [Set<Convention::Base>]
|
|
17
|
-
@@conventions = Set.new
|
|
18
|
-
|
|
19
|
-
# @param convention [Class<Convention::Base>]
|
|
20
|
-
# @return [void]
|
|
21
|
-
def self.register convention
|
|
22
|
-
@@conventions.add convention.new
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
# @param convention [Class<Convention::Base>]
|
|
26
|
-
# @return [void]
|
|
27
|
-
def self.unregister convention
|
|
28
|
-
@@conventions.delete_if { |c| c.is_a?(convention) }
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
# @param source_map [SourceMap]
|
|
32
|
-
# @return [Environ]
|
|
33
|
-
def self.for_local(source_map)
|
|
34
|
-
result = Environ.new
|
|
35
|
-
@@conventions.each do |conv|
|
|
36
|
-
result.merge conv.local(source_map)
|
|
37
|
-
end
|
|
38
|
-
result
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
# @param doc_map [DocMap]
|
|
42
|
-
# @return [Environ]
|
|
43
|
-
def self.for_global(doc_map)
|
|
44
|
-
result = Environ.new
|
|
45
|
-
@@conventions.each do |conv|
|
|
46
|
-
result.merge conv.global(doc_map)
|
|
47
|
-
end
|
|
48
|
-
result
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
# Provides any additional method pins based on the described object.
|
|
52
|
-
#
|
|
53
|
-
# @param api_map [ApiMap]
|
|
54
|
-
# @param rooted_tag [String] A fully qualified namespace, with
|
|
55
|
-
# generic parameter values if applicable
|
|
56
|
-
# @param scope [Symbol] :class or :instance
|
|
57
|
-
# @param visibility [Array<Symbol>] :public, :protected, and/or :private
|
|
58
|
-
# @param deep [Boolean]
|
|
59
|
-
# @param skip [Set<String>]
|
|
60
|
-
# @param no_core [Boolean] Skip core classes if true
|
|
61
|
-
#
|
|
62
|
-
# @return [Environ]
|
|
63
|
-
def self.for_object api_map, rooted_tag, scope, visibility,
|
|
64
|
-
deep, skip, no_core
|
|
65
|
-
result = Environ.new
|
|
66
|
-
@@conventions.each do |conv|
|
|
67
|
-
result.merge conv.object(api_map, rooted_tag, scope, visibility,
|
|
68
|
-
deep, skip, no_core)
|
|
69
|
-
end
|
|
70
|
-
result
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
register Gemfile
|
|
74
|
-
register Gemspec
|
|
75
|
-
register Rakefile
|
|
76
|
-
register ActiveSupportConcern
|
|
77
|
-
end
|
|
78
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Solargraph
|
|
4
|
+
# Conventions provide a way to modify an ApiMap based on expectations about
|
|
5
|
+
# one of its sources.
|
|
6
|
+
#
|
|
7
|
+
module Convention
|
|
8
|
+
autoload :Base, 'solargraph/convention/base'
|
|
9
|
+
autoload :Gemfile, 'solargraph/convention/gemfile'
|
|
10
|
+
autoload :Gemspec, 'solargraph/convention/gemspec'
|
|
11
|
+
autoload :Rakefile, 'solargraph/convention/rakefile'
|
|
12
|
+
autoload :StructDefinition, 'solargraph/convention/struct_definition'
|
|
13
|
+
autoload :DataDefinition, 'solargraph/convention/data_definition'
|
|
14
|
+
autoload :ActiveSupportConcern, 'solargraph/convention/active_support_concern'
|
|
15
|
+
|
|
16
|
+
# @type [Set<Convention::Base>]
|
|
17
|
+
@@conventions = Set.new
|
|
18
|
+
|
|
19
|
+
# @param convention [Class<Convention::Base>]
|
|
20
|
+
# @return [void]
|
|
21
|
+
def self.register convention
|
|
22
|
+
@@conventions.add convention.new
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# @param convention [Class<Convention::Base>]
|
|
26
|
+
# @return [void]
|
|
27
|
+
def self.unregister convention
|
|
28
|
+
@@conventions.delete_if { |c| c.is_a?(convention) }
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# @param source_map [SourceMap]
|
|
32
|
+
# @return [Environ]
|
|
33
|
+
def self.for_local(source_map)
|
|
34
|
+
result = Environ.new
|
|
35
|
+
@@conventions.each do |conv|
|
|
36
|
+
result.merge conv.local(source_map)
|
|
37
|
+
end
|
|
38
|
+
result
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# @param doc_map [DocMap]
|
|
42
|
+
# @return [Environ]
|
|
43
|
+
def self.for_global(doc_map)
|
|
44
|
+
result = Environ.new
|
|
45
|
+
@@conventions.each do |conv|
|
|
46
|
+
result.merge conv.global(doc_map)
|
|
47
|
+
end
|
|
48
|
+
result
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# Provides any additional method pins based on the described object.
|
|
52
|
+
#
|
|
53
|
+
# @param api_map [ApiMap]
|
|
54
|
+
# @param rooted_tag [String] A fully qualified namespace, with
|
|
55
|
+
# generic parameter values if applicable
|
|
56
|
+
# @param scope [Symbol] :class or :instance
|
|
57
|
+
# @param visibility [Array<Symbol>] :public, :protected, and/or :private
|
|
58
|
+
# @param deep [Boolean]
|
|
59
|
+
# @param skip [Set<String>]
|
|
60
|
+
# @param no_core [Boolean] Skip core classes if true
|
|
61
|
+
#
|
|
62
|
+
# @return [Environ]
|
|
63
|
+
def self.for_object api_map, rooted_tag, scope, visibility,
|
|
64
|
+
deep, skip, no_core
|
|
65
|
+
result = Environ.new
|
|
66
|
+
@@conventions.each do |conv|
|
|
67
|
+
result.merge conv.object(api_map, rooted_tag, scope, visibility,
|
|
68
|
+
deep, skip, no_core)
|
|
69
|
+
end
|
|
70
|
+
result
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
register Gemfile
|
|
74
|
+
register Gemspec
|
|
75
|
+
register Rakefile
|
|
76
|
+
register ActiveSupportConcern
|
|
77
|
+
end
|
|
78
|
+
end
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
require 'nokogiri'
|
|
2
|
-
|
|
3
|
-
module ReverseMarkdown
|
|
4
|
-
module Converters
|
|
5
|
-
class Dd < Base
|
|
6
|
-
# @return [String]
|
|
7
|
-
# @param node [Nokogiri::XML::Element]
|
|
8
|
-
# @param state [Hash]
|
|
9
|
-
def convert node, state = {}
|
|
10
|
-
content = treat_children(node, state)
|
|
11
|
-
": #{content.strip}\n"
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
ReverseMarkdown::Converters.register :dd, ReverseMarkdown::Converters::Dd.new
|
|
1
|
+
require 'nokogiri'
|
|
2
|
+
|
|
3
|
+
module ReverseMarkdown
|
|
4
|
+
module Converters
|
|
5
|
+
class Dd < Base
|
|
6
|
+
# @return [String]
|
|
7
|
+
# @param node [Nokogiri::XML::Element]
|
|
8
|
+
# @param state [Hash]
|
|
9
|
+
def convert node, state = {}
|
|
10
|
+
content = treat_children(node, state)
|
|
11
|
+
": #{content.strip}\n"
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
ReverseMarkdown::Converters.register :dd, ReverseMarkdown::Converters::Dd.new
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
module ReverseMarkdown
|
|
2
|
-
module Converters
|
|
3
|
-
class Dl < Base
|
|
4
|
-
# @return [String]
|
|
5
|
-
# @param node [Nokogiri::XML::Element]
|
|
6
|
-
# @param state [Hash]
|
|
7
|
-
def convert node, state = {}
|
|
8
|
-
content = treat_children(node, state).strip
|
|
9
|
-
"\n\n#{content}\n"
|
|
10
|
-
end
|
|
11
|
-
end
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
ReverseMarkdown::Converters.register :dl, ReverseMarkdown::Converters::Dl.new
|
|
1
|
+
module ReverseMarkdown
|
|
2
|
+
module Converters
|
|
3
|
+
class Dl < Base
|
|
4
|
+
# @return [String]
|
|
5
|
+
# @param node [Nokogiri::XML::Element]
|
|
6
|
+
# @param state [Hash]
|
|
7
|
+
def convert node, state = {}
|
|
8
|
+
content = treat_children(node, state).strip
|
|
9
|
+
"\n\n#{content}\n"
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
ReverseMarkdown::Converters.register :dl, ReverseMarkdown::Converters::Dl.new
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
module ReverseMarkdown
|
|
2
|
-
module Converters
|
|
3
|
-
class Dt < Base
|
|
4
|
-
# @return [String]
|
|
5
|
-
# @param node [Nokogiri::XML::Element]
|
|
6
|
-
# @param state [Hash]
|
|
7
|
-
def convert node, state = {}
|
|
8
|
-
content = treat_children(node, state)
|
|
9
|
-
"\n#{content.strip}\n"
|
|
10
|
-
end
|
|
11
|
-
end
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
ReverseMarkdown::Converters.register :dt, ReverseMarkdown::Converters::Dt.new
|
|
1
|
+
module ReverseMarkdown
|
|
2
|
+
module Converters
|
|
3
|
+
class Dt < Base
|
|
4
|
+
# @return [String]
|
|
5
|
+
# @param node [Nokogiri::XML::Element]
|
|
6
|
+
# @param state [Hash]
|
|
7
|
+
def convert node, state = {}
|
|
8
|
+
content = treat_children(node, state)
|
|
9
|
+
"\n#{content.strip}\n"
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
ReverseMarkdown::Converters.register :dt, ReverseMarkdown::Converters::Dt.new
|
|
@@ -1 +1 @@
|
|
|
1
|
-
ReverseMarkdown::Converters.register :tt, ReverseMarkdown::Converters::Code.new
|
|
1
|
+
ReverseMarkdown::Converters.register :tt, ReverseMarkdown::Converters::Code.new
|
|
@@ -10,6 +10,7 @@ module Solargraph
|
|
|
10
10
|
return [] unless source.parsed? && source.synchronized?
|
|
11
11
|
result = []
|
|
12
12
|
refs = {}
|
|
13
|
+
# @sg-ignore Need to add nil check here
|
|
13
14
|
map = api_map.source_map(source.filename)
|
|
14
15
|
map.requires.each { |ref| refs[ref.name] = ref }
|
|
15
16
|
api_map.missing_docs.each do |r|
|
|
@@ -25,6 +25,7 @@ module Solargraph
|
|
|
25
25
|
def diagnose source, _api_map
|
|
26
26
|
@source = source
|
|
27
27
|
require_rubocop(rubocop_version)
|
|
28
|
+
# @sg-ignore Need to add nil check here
|
|
28
29
|
options, paths = generate_options(source.filename, source.code)
|
|
29
30
|
store = RuboCop::ConfigStore.new
|
|
30
31
|
runner = RuboCop::Runner.new(options, store)
|
|
@@ -18,6 +18,7 @@ module Solargraph
|
|
|
18
18
|
# @type [String]
|
|
19
19
|
gem_path = Gem::Specification.find_by_name('rubocop', version).full_gem_path
|
|
20
20
|
gem_lib_path = File.join(gem_path, 'lib')
|
|
21
|
+
# @sg-ignore Should better support meaning of '&' in RBS
|
|
21
22
|
$LOAD_PATH.unshift(gem_lib_path) unless $LOAD_PATH.include?(gem_lib_path)
|
|
22
23
|
rescue Gem::MissingSpecVersionError => e
|
|
23
24
|
# @type [Array<Gem::Specification>]
|
|
@@ -50,6 +51,7 @@ module Solargraph
|
|
|
50
51
|
# @return [String]
|
|
51
52
|
def fix_drive_letter path
|
|
52
53
|
return path unless path.match(/^[a-z]:/)
|
|
54
|
+
# @sg-ignore Need to add nil check here
|
|
53
55
|
path[0].upcase + path[1..-1]
|
|
54
56
|
end
|
|
55
57
|
|
|
@@ -11,6 +11,7 @@ module Solargraph
|
|
|
11
11
|
# return [] unless args.include?('always') || api_map.workspaced?(source.filename)
|
|
12
12
|
severity = Diagnostics::Severities::ERROR
|
|
13
13
|
level = (args.reverse.find { |a| ['normal', 'typed', 'strict', 'strong'].include?(a) }) || :normal
|
|
14
|
+
# @sg-ignore sensitive typing needs to handle || on nil types
|
|
14
15
|
checker = Solargraph::TypeChecker.new(source.filename, api_map: api_map, level: level.to_sym)
|
|
15
16
|
checker.problems
|
|
16
17
|
.sort { |a, b| a.location.range.start.line <=> b.location.range.start.line }
|
|
@@ -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
|