solargraph 0.54.4 → 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/.gitattributes +2 -0
- data/.github/workflows/linting.yml +127 -0
- data/.github/workflows/plugins.yml +185 -6
- data/.github/workflows/rspec.yml +55 -5
- data/.github/workflows/typecheck.yml +8 -3
- data/.gitignore +8 -0
- data/.overcommit.yml +72 -0
- data/.rspec +1 -0
- data/.rubocop.yml +66 -0
- data/.rubocop_todo.yml +1279 -0
- data/.yardopts +1 -0
- data/CHANGELOG.md +143 -0
- data/README.md +20 -6
- data/Rakefile +125 -13
- data/bin/solargraph +3 -0
- data/lib/solargraph/api_map/cache.rb +110 -109
- data/lib/solargraph/api_map/constants.rb +279 -0
- data/lib/solargraph/api_map/index.rb +193 -167
- data/lib/solargraph/api_map/source_to_yard.rb +97 -88
- data/lib/solargraph/api_map/store.rb +384 -241
- data/lib/solargraph/api_map.rb +945 -875
- data/lib/solargraph/bench.rb +45 -28
- data/lib/solargraph/complex_type/type_methods.rb +228 -217
- data/lib/solargraph/complex_type/unique_type.rb +482 -386
- data/lib/solargraph/complex_type.rb +444 -394
- data/lib/solargraph/convention/active_support_concern.rb +111 -0
- data/lib/solargraph/convention/base.rb +20 -3
- data/lib/solargraph/convention/data_definition/data_assignment_node.rb +61 -0
- data/lib/solargraph/convention/data_definition/data_definition_node.rb +91 -0
- data/lib/solargraph/convention/data_definition.rb +105 -0
- data/lib/solargraph/convention/gemfile.rb +15 -15
- data/lib/solargraph/convention/gemspec.rb +23 -22
- data/lib/solargraph/convention/rakefile.rb +17 -17
- data/lib/solargraph/convention/struct_definition/struct_assignment_node.rb +61 -0
- data/lib/solargraph/convention/struct_definition/struct_definition_node.rb +102 -0
- data/lib/solargraph/convention/struct_definition.rb +164 -0
- data/lib/solargraph/convention.rb +78 -47
- 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 -113
- data/lib/solargraph/diagnostics/rubocop_helpers.rb +68 -66
- 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 -188
- data/lib/solargraph/environ.rb +9 -2
- data/lib/solargraph/equality.rb +34 -33
- data/lib/solargraph/gem_pins.rb +98 -72
- 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 -128
- data/lib/solargraph/language_server/host/message_worker.rb +112 -106
- data/lib/solargraph/language_server/host/sources.rb +99 -99
- data/lib/solargraph/language_server/host.rb +878 -861
- data/lib/solargraph/language_server/message/base.rb +97 -96
- 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 -112
- data/lib/solargraph/language_server/message/extended/document.rb +23 -20
- 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 -38
- 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 -131
- 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 -24
- 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 -24
- 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/progress.rb +8 -0
- data/lib/solargraph/language_server/request.rb +27 -24
- 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 -662
- data/lib/solargraph/location.rb +82 -58
- data/lib/solargraph/logging.rb +37 -27
- data/lib/solargraph/page.rb +92 -89
- data/lib/solargraph/parser/comment_ripper.rb +69 -56
- data/lib/solargraph/parser/flow_sensitive_typing.rb +255 -0
- data/lib/solargraph/parser/node_processor/base.rb +92 -87
- data/lib/solargraph/parser/node_processor.rb +62 -45
- data/lib/solargraph/parser/parser_gem/class_methods.rb +149 -157
- data/lib/solargraph/parser/parser_gem/flawed_builder.rb +19 -18
- data/lib/solargraph/parser/parser_gem/node_chainer.rb +166 -164
- data/lib/solargraph/parser/parser_gem/node_methods.rb +486 -495
- data/lib/solargraph/parser/parser_gem/node_processors/alias_node.rb +2 -1
- data/lib/solargraph/parser/parser_gem/node_processors/and_node.rb +22 -0
- data/lib/solargraph/parser/parser_gem/node_processors/args_node.rb +59 -57
- 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 -43
- data/lib/solargraph/parser/parser_gem/node_processors/casgn_node.rb +2 -1
- data/lib/solargraph/parser/parser_gem/node_processors/cvasgn_node.rb +2 -1
- data/lib/solargraph/parser/parser_gem/node_processors/def_node.rb +53 -50
- data/lib/solargraph/parser/parser_gem/node_processors/defs_node.rb +37 -36
- data/lib/solargraph/parser/parser_gem/node_processors/gvasgn_node.rb +2 -1
- data/lib/solargraph/parser/parser_gem/node_processors/if_node.rb +23 -0
- data/lib/solargraph/parser/parser_gem/node_processors/ivasgn_node.rb +40 -38
- data/lib/solargraph/parser/parser_gem/node_processors/lvasgn_node.rb +29 -28
- data/lib/solargraph/parser/parser_gem/node_processors/masgn_node.rb +59 -53
- data/lib/solargraph/parser/parser_gem/node_processors/namespace_node.rb +8 -7
- data/lib/solargraph/parser/parser_gem/node_processors/opasgn_node.rb +98 -0
- data/lib/solargraph/parser/parser_gem/node_processors/orasgn_node.rb +17 -16
- data/lib/solargraph/parser/parser_gem/node_processors/resbody_node.rb +38 -36
- data/lib/solargraph/parser/parser_gem/node_processors/sclass_node.rb +52 -42
- data/lib/solargraph/parser/parser_gem/node_processors/send_node.rb +291 -259
- data/lib/solargraph/parser/parser_gem/node_processors/sym_node.rb +3 -1
- data/lib/solargraph/parser/parser_gem/node_processors/until_node.rb +29 -0
- data/lib/solargraph/parser/parser_gem/node_processors/while_node.rb +29 -0
- data/lib/solargraph/parser/parser_gem/node_processors.rb +70 -56
- data/lib/solargraph/parser/parser_gem.rb +12 -12
- data/lib/solargraph/parser/region.rb +69 -66
- data/lib/solargraph/parser/snippet.rb +17 -15
- data/lib/solargraph/parser.rb +23 -22
- data/lib/solargraph/pin/base.rb +729 -378
- data/lib/solargraph/pin/base_variable.rb +126 -118
- data/lib/solargraph/pin/block.rb +104 -101
- data/lib/solargraph/pin/breakable.rb +9 -0
- data/lib/solargraph/pin/callable.rb +231 -147
- data/lib/solargraph/pin/closure.rb +72 -57
- data/lib/solargraph/pin/common.rb +79 -70
- data/lib/solargraph/pin/constant.rb +45 -43
- data/lib/solargraph/pin/conversions.rb +123 -123
- data/lib/solargraph/pin/delegated_method.rb +120 -101
- data/lib/solargraph/pin/documenting.rb +114 -98
- data/lib/solargraph/pin/instance_variable.rb +34 -34
- data/lib/solargraph/pin/keyword.rb +20 -15
- data/lib/solargraph/pin/local_variable.rb +75 -67
- data/lib/solargraph/pin/method.rb +672 -527
- data/lib/solargraph/pin/method_alias.rb +34 -31
- data/lib/solargraph/pin/namespace.rb +115 -107
- data/lib/solargraph/pin/parameter.rb +275 -212
- data/lib/solargraph/pin/proxy_type.rb +39 -29
- data/lib/solargraph/pin/reference/override.rb +47 -29
- data/lib/solargraph/pin/reference/require.rb +2 -2
- data/lib/solargraph/pin/reference/superclass.rb +15 -10
- data/lib/solargraph/pin/reference.rb +39 -22
- data/lib/solargraph/pin/search.rb +61 -56
- data/lib/solargraph/pin/signature.rb +61 -17
- data/lib/solargraph/pin/singleton.rb +1 -1
- data/lib/solargraph/pin/symbol.rb +53 -47
- data/lib/solargraph/pin/until.rb +18 -0
- data/lib/solargraph/pin/while.rb +18 -0
- data/lib/solargraph/pin.rb +44 -41
- data/lib/solargraph/pin_cache.rb +245 -0
- data/lib/solargraph/position.rb +132 -107
- data/lib/solargraph/range.rb +112 -98
- data/lib/solargraph/rbs_map/conversions.rb +823 -646
- data/lib/solargraph/rbs_map/core_fills.rb +84 -50
- data/lib/solargraph/rbs_map/core_map.rb +58 -28
- data/lib/solargraph/rbs_map/stdlib_map.rb +43 -33
- data/lib/solargraph/rbs_map.rb +163 -93
- data/lib/solargraph/server_methods.rb +16 -16
- data/lib/solargraph/shell.rb +363 -269
- data/lib/solargraph/source/chain/array.rb +37 -33
- data/lib/solargraph/source/chain/block_symbol.rb +1 -1
- data/lib/solargraph/source/chain/block_variable.rb +1 -1
- data/lib/solargraph/source/chain/call.rb +337 -303
- data/lib/solargraph/source/chain/class_variable.rb +13 -13
- data/lib/solargraph/source/chain/constant.rb +26 -89
- data/lib/solargraph/source/chain/global_variable.rb +13 -13
- data/lib/solargraph/source/chain/hash.rb +34 -33
- data/lib/solargraph/source/chain/head.rb +1 -1
- 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 -98
- data/lib/solargraph/source/chain/literal.rb +48 -28
- 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 -252
- data/lib/solargraph/source/change.rb +82 -82
- data/lib/solargraph/source/cursor.rb +166 -167
- data/lib/solargraph/source/encoding_fixes.rb +23 -23
- data/lib/solargraph/source/source_chainer.rb +194 -194
- data/lib/solargraph/source/updater.rb +55 -55
- data/lib/solargraph/source.rb +498 -495
- data/lib/solargraph/source_map/clip.rb +226 -232
- data/lib/solargraph/source_map/data.rb +34 -30
- data/lib/solargraph/source_map/mapper.rb +259 -255
- data/lib/solargraph/source_map.rb +212 -217
- data/lib/solargraph/type_checker/checks.rb +124 -120
- data/lib/solargraph/type_checker/param_def.rb +37 -35
- data/lib/solargraph/type_checker/problem.rb +32 -32
- data/lib/solargraph/type_checker/rules.rb +84 -62
- data/lib/solargraph/type_checker.rb +814 -672
- data/lib/solargraph/version.rb +5 -5
- data/lib/solargraph/views/_method.erb +10 -10
- data/lib/solargraph/views/_namespace.erb +3 -3
- data/lib/solargraph/views/document.erb +10 -10
- data/lib/solargraph/workspace/config.rb +255 -239
- data/lib/solargraph/workspace/require_paths.rb +97 -0
- data/lib/solargraph/workspace.rb +220 -239
- data/lib/solargraph/yard_map/helpers.rb +44 -16
- data/lib/solargraph/yard_map/mapper/to_constant.rb +7 -5
- data/lib/solargraph/yard_map/mapper/to_method.rb +130 -94
- data/lib/solargraph/yard_map/mapper/to_namespace.rb +31 -28
- data/lib/solargraph/yard_map/mapper.rb +79 -78
- data/lib/solargraph/yard_map/to_method.rb +89 -86
- data/lib/solargraph/yard_tags.rb +20 -20
- data/lib/solargraph/yardoc.rb +87 -52
- data/lib/solargraph.rb +105 -72
- data/rbs/fills/bundler/0/bundler.rbs +4271 -0
- data/rbs/fills/open3/0/open3.rbs +172 -0
- data/rbs/fills/rubygems/0/basic_specification.rbs +326 -0
- data/rbs/fills/rubygems/0/errors.rbs +364 -0
- data/rbs/fills/rubygems/0/spec_fetcher.rbs +107 -0
- data/rbs/fills/rubygems/0/specification.rbs +1753 -0
- data/rbs/fills/tuple/tuple.rbs +149 -0
- data/rbs/shims/ast/0/node.rbs +5 -0
- data/rbs/shims/ast/2.4/.rbs_meta.yaml +9 -0
- data/rbs/shims/ast/2.4/ast.rbs +73 -0
- data/rbs/shims/parser/3.2.0.1/builders/default.rbs +195 -0
- data/rbs/shims/parser/3.2.0.1/manifest.yaml +7 -0
- data/rbs/shims/parser/3.2.0.1/parser.rbs +201 -0
- data/rbs/shims/parser/3.2.0.1/polyfill.rbs +4 -0
- data/rbs/shims/thor/1.2.0.1/.rbs_meta.yaml +9 -0
- data/rbs/shims/thor/1.2.0.1/manifest.yaml +7 -0
- data/rbs/shims/thor/1.2.0.1/thor.rbs +17 -0
- data/rbs_collection.yaml +19 -0
- data/solargraph.gemspec +27 -5
- metadata +215 -18
- data/lib/.rubocop.yml +0 -22
- data/lib/solargraph/cache.rb +0 -77
- data/lib/solargraph/parser/node_methods.rb +0 -83
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Solargraph
|
|
4
|
+
module Convention
|
|
5
|
+
module StructDefinition
|
|
6
|
+
autoload :StructDefintionNode, 'solargraph/convention/struct_definition/struct_definition_node'
|
|
7
|
+
autoload :StructAssignmentNode, 'solargraph/convention/struct_definition/struct_assignment_node'
|
|
8
|
+
|
|
9
|
+
module NodeProcessors
|
|
10
|
+
class StructNode < Parser::NodeProcessor::Base
|
|
11
|
+
# @return [Boolean] continue processing the next processor of the same node.
|
|
12
|
+
def process
|
|
13
|
+
return true if struct_definition_node.nil?
|
|
14
|
+
|
|
15
|
+
loc = get_node_location(node)
|
|
16
|
+
nspin = Solargraph::Pin::Namespace.new(
|
|
17
|
+
type: :class,
|
|
18
|
+
location: loc,
|
|
19
|
+
closure: region.closure,
|
|
20
|
+
name: struct_definition_node.class_name,
|
|
21
|
+
docstring: docstring,
|
|
22
|
+
visibility: :public,
|
|
23
|
+
gates: region.closure.gates.freeze,
|
|
24
|
+
source: :struct_definition
|
|
25
|
+
)
|
|
26
|
+
pins.push nspin
|
|
27
|
+
|
|
28
|
+
# define initialize method
|
|
29
|
+
initialize_method_pin = Pin::Method.new(
|
|
30
|
+
name: 'initialize',
|
|
31
|
+
parameters: [],
|
|
32
|
+
scope: :instance,
|
|
33
|
+
location: get_node_location(node),
|
|
34
|
+
closure: nspin,
|
|
35
|
+
visibility: :private,
|
|
36
|
+
docstring: docstring,
|
|
37
|
+
source: :struct_definition
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
pins.push initialize_method_pin
|
|
41
|
+
|
|
42
|
+
struct_definition_node.attributes.map do |attribute_node, attribute_name|
|
|
43
|
+
initialize_method_pin.parameters.push(
|
|
44
|
+
Pin::Parameter.new(
|
|
45
|
+
name: attribute_name,
|
|
46
|
+
decl: struct_definition_node.keyword_init? ? :kwarg : :arg,
|
|
47
|
+
location: get_node_location(attribute_node),
|
|
48
|
+
closure: initialize_method_pin,
|
|
49
|
+
source: :struct_definition
|
|
50
|
+
)
|
|
51
|
+
)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# define attribute accessors and instance variables
|
|
55
|
+
struct_definition_node.attributes.each do |attribute_node, attribute_name|
|
|
56
|
+
[attribute_name, "#{attribute_name}="].each do |name|
|
|
57
|
+
docs = docstring.tags.find { |t| t.tag_name == 'param' && t.name == attribute_name }
|
|
58
|
+
|
|
59
|
+
attribute_type = ComplexType.parse(tag_string(docs))
|
|
60
|
+
return_type_comment = attribute_comment(docs, false)
|
|
61
|
+
param_comment = attribute_comment(docs, true)
|
|
62
|
+
|
|
63
|
+
method_pin = Pin::Method.new(
|
|
64
|
+
name: name,
|
|
65
|
+
parameters: [],
|
|
66
|
+
scope: :instance,
|
|
67
|
+
location: get_node_location(attribute_node),
|
|
68
|
+
closure: nspin,
|
|
69
|
+
docstring: YARD::Docstring.new(return_type_comment),
|
|
70
|
+
# even assignments return the value
|
|
71
|
+
comments: return_type_comment,
|
|
72
|
+
return_type: attribute_type,
|
|
73
|
+
visibility: :public,
|
|
74
|
+
source: :struct_definition
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
if name.end_with?('=')
|
|
78
|
+
method_pin.parameters << Pin::Parameter.new(
|
|
79
|
+
name: attribute_name,
|
|
80
|
+
location: get_node_location(attribute_node),
|
|
81
|
+
closure: method_pin,
|
|
82
|
+
return_type: attribute_type,
|
|
83
|
+
comments: param_comment,
|
|
84
|
+
source: :struct_definition
|
|
85
|
+
)
|
|
86
|
+
|
|
87
|
+
pins.push Pin::InstanceVariable.new(name: "@#{attribute_name}",
|
|
88
|
+
closure: method_pin,
|
|
89
|
+
location: get_node_location(attribute_node),
|
|
90
|
+
return_type: attribute_type,
|
|
91
|
+
comments: "@type [#{attribute_type.rooted_tags}]",
|
|
92
|
+
source: :struct_definition)
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
pins.push method_pin
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
process_children region.update(closure: nspin, visibility: :public)
|
|
100
|
+
false
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
private
|
|
104
|
+
|
|
105
|
+
# @return [StructDefintionNode, StructAssignmentNode, nil]
|
|
106
|
+
def struct_definition_node
|
|
107
|
+
@struct_definition_node ||= if StructDefintionNode.match?(node)
|
|
108
|
+
StructDefintionNode.new(node)
|
|
109
|
+
elsif StructAssignmentNode.match?(node)
|
|
110
|
+
StructAssignmentNode.new(node)
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
# Gets/generates the relevant docstring for this struct & it's attributes
|
|
115
|
+
# @return [YARD::Docstring]
|
|
116
|
+
def docstring
|
|
117
|
+
@docstring ||= parse_comments
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
# Parses any relevant comments for a struct int a yard docstring
|
|
121
|
+
# @return [YARD::Docstring]
|
|
122
|
+
def parse_comments
|
|
123
|
+
struct_comments = comments_for(node) || ''
|
|
124
|
+
struct_definition_node.attributes.each do |attr_node, attr_name|
|
|
125
|
+
comment = comments_for(attr_node)
|
|
126
|
+
next if comment.nil?
|
|
127
|
+
|
|
128
|
+
# We should support specific comments for an attribute, and that can be either a @return on an @param
|
|
129
|
+
# But since we merge into the struct_comments, then we should interpret either as a param
|
|
130
|
+
comment = "@param #{attr_name}#{comment[7..]}" if comment.start_with?('@return')
|
|
131
|
+
|
|
132
|
+
struct_comments += "\n#{comment}"
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
Solargraph::Source.parse_docstring(struct_comments).to_docstring
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
# @param tag [YARD::Tags::Tag, nil] The param tag for this attribute.xtract_
|
|
139
|
+
#
|
|
140
|
+
# @return [String]
|
|
141
|
+
def tag_string(tag)
|
|
142
|
+
tag&.types&.join(',') || 'undefined'
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
# @param tag [YARD::Tags::Tag, nil] The param tag for this attribute. If nil, this method is a no-op
|
|
146
|
+
# @param for_setter [Boolean] If true, will return a @param tag instead of a @return tag
|
|
147
|
+
#
|
|
148
|
+
# @return [String] The formatted comment for the attribute
|
|
149
|
+
def attribute_comment(tag, for_setter)
|
|
150
|
+
return "" if tag.nil?
|
|
151
|
+
|
|
152
|
+
suffix = "[#{tag_string(tag)}] #{tag.text}"
|
|
153
|
+
|
|
154
|
+
if for_setter
|
|
155
|
+
"@param #{tag.name} #{suffix}"
|
|
156
|
+
else
|
|
157
|
+
"@return #{suffix}"
|
|
158
|
+
end
|
|
159
|
+
end
|
|
160
|
+
end
|
|
161
|
+
end
|
|
162
|
+
end
|
|
163
|
+
end
|
|
164
|
+
end
|
|
@@ -1,47 +1,78 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
#
|
|
6
|
-
#
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
autoload :
|
|
10
|
-
autoload :
|
|
11
|
-
autoload :
|
|
12
|
-
autoload :
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
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
|
|
@@ -1,53 +1,53 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Solargraph
|
|
4
|
-
module Diagnostics
|
|
5
|
-
# RequireNotFound reports required paths that could not be resolved to
|
|
6
|
-
# either a file in the workspace or a gem.
|
|
7
|
-
#
|
|
8
|
-
class RequireNotFound < Base
|
|
9
|
-
def diagnose source, api_map
|
|
10
|
-
return [] unless source.parsed? && source.synchronized?
|
|
11
|
-
result = []
|
|
12
|
-
refs = {}
|
|
13
|
-
map = api_map.source_map(source.filename)
|
|
14
|
-
map.requires.each { |ref| refs[ref.name] = ref }
|
|
15
|
-
api_map.missing_docs.each do |r|
|
|
16
|
-
next unless refs.key?(r)
|
|
17
|
-
result.push docs_error(r, refs[r].location)
|
|
18
|
-
end
|
|
19
|
-
api_map.unresolved_requires.each do |r|
|
|
20
|
-
next unless refs.key?(r)
|
|
21
|
-
result.push require_error(r, refs[r].location)
|
|
22
|
-
end
|
|
23
|
-
result
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
private
|
|
27
|
-
|
|
28
|
-
# @param path [String]
|
|
29
|
-
# @param location [Location]
|
|
30
|
-
# @return [Hash]
|
|
31
|
-
def docs_error path, location
|
|
32
|
-
{
|
|
33
|
-
range: location.range.to_hash,
|
|
34
|
-
severity: Diagnostics::Severities::WARNING,
|
|
35
|
-
source: 'RequireNotFound',
|
|
36
|
-
message: "YARD docs not found for #{path}"
|
|
37
|
-
}
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
# @param path [String]
|
|
41
|
-
# @param location [Location]
|
|
42
|
-
# @return [Hash]
|
|
43
|
-
def require_error path, location
|
|
44
|
-
{
|
|
45
|
-
range: location.range.to_hash,
|
|
46
|
-
severity: Diagnostics::Severities::WARNING,
|
|
47
|
-
source: 'RequireNotFound',
|
|
48
|
-
message: "Required path #{path} could not be resolved."
|
|
49
|
-
}
|
|
50
|
-
end
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Solargraph
|
|
4
|
+
module Diagnostics
|
|
5
|
+
# RequireNotFound reports required paths that could not be resolved to
|
|
6
|
+
# either a file in the workspace or a gem.
|
|
7
|
+
#
|
|
8
|
+
class RequireNotFound < Base
|
|
9
|
+
def diagnose source, api_map
|
|
10
|
+
return [] unless source.parsed? && source.synchronized?
|
|
11
|
+
result = []
|
|
12
|
+
refs = {}
|
|
13
|
+
map = api_map.source_map(source.filename)
|
|
14
|
+
map.requires.each { |ref| refs[ref.name] = ref }
|
|
15
|
+
api_map.missing_docs.each do |r|
|
|
16
|
+
next unless refs.key?(r)
|
|
17
|
+
result.push docs_error(r, refs[r].location)
|
|
18
|
+
end
|
|
19
|
+
api_map.unresolved_requires.each do |r|
|
|
20
|
+
next unless refs.key?(r)
|
|
21
|
+
result.push require_error(r, refs[r].location)
|
|
22
|
+
end
|
|
23
|
+
result
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
private
|
|
27
|
+
|
|
28
|
+
# @param path [String]
|
|
29
|
+
# @param location [Location]
|
|
30
|
+
# @return [Hash]
|
|
31
|
+
def docs_error path, location
|
|
32
|
+
{
|
|
33
|
+
range: location.range.to_hash,
|
|
34
|
+
severity: Diagnostics::Severities::WARNING,
|
|
35
|
+
source: 'RequireNotFound',
|
|
36
|
+
message: "YARD docs not found for #{path}"
|
|
37
|
+
}
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# @param path [String]
|
|
41
|
+
# @param location [Location]
|
|
42
|
+
# @return [Hash]
|
|
43
|
+
def require_error path, location
|
|
44
|
+
{
|
|
45
|
+
range: location.range.to_hash,
|
|
46
|
+
severity: Diagnostics::Severities::WARNING,
|
|
47
|
+
source: 'RequireNotFound',
|
|
48
|
+
message: "Required path #{path} could not be resolved."
|
|
49
|
+
}
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|