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.
Files changed (238) hide show
  1. checksums.yaml +4 -4
  2. data/.gitattributes +2 -0
  3. data/.github/workflows/linting.yml +127 -0
  4. data/.github/workflows/plugins.yml +185 -6
  5. data/.github/workflows/rspec.yml +55 -5
  6. data/.github/workflows/typecheck.yml +8 -3
  7. data/.gitignore +8 -0
  8. data/.overcommit.yml +72 -0
  9. data/.rspec +1 -0
  10. data/.rubocop.yml +66 -0
  11. data/.rubocop_todo.yml +1279 -0
  12. data/.yardopts +1 -0
  13. data/CHANGELOG.md +143 -0
  14. data/README.md +20 -6
  15. data/Rakefile +125 -13
  16. data/bin/solargraph +3 -0
  17. data/lib/solargraph/api_map/cache.rb +110 -109
  18. data/lib/solargraph/api_map/constants.rb +279 -0
  19. data/lib/solargraph/api_map/index.rb +193 -167
  20. data/lib/solargraph/api_map/source_to_yard.rb +97 -88
  21. data/lib/solargraph/api_map/store.rb +384 -241
  22. data/lib/solargraph/api_map.rb +945 -875
  23. data/lib/solargraph/bench.rb +45 -28
  24. data/lib/solargraph/complex_type/type_methods.rb +228 -217
  25. data/lib/solargraph/complex_type/unique_type.rb +482 -386
  26. data/lib/solargraph/complex_type.rb +444 -394
  27. data/lib/solargraph/convention/active_support_concern.rb +111 -0
  28. data/lib/solargraph/convention/base.rb +20 -3
  29. data/lib/solargraph/convention/data_definition/data_assignment_node.rb +61 -0
  30. data/lib/solargraph/convention/data_definition/data_definition_node.rb +91 -0
  31. data/lib/solargraph/convention/data_definition.rb +105 -0
  32. data/lib/solargraph/convention/gemfile.rb +15 -15
  33. data/lib/solargraph/convention/gemspec.rb +23 -22
  34. data/lib/solargraph/convention/rakefile.rb +17 -17
  35. data/lib/solargraph/convention/struct_definition/struct_assignment_node.rb +61 -0
  36. data/lib/solargraph/convention/struct_definition/struct_definition_node.rb +102 -0
  37. data/lib/solargraph/convention/struct_definition.rb +164 -0
  38. data/lib/solargraph/convention.rb +78 -47
  39. data/lib/solargraph/converters/dd.rb +17 -17
  40. data/lib/solargraph/converters/dl.rb +15 -15
  41. data/lib/solargraph/converters/dt.rb +15 -15
  42. data/lib/solargraph/converters/misc.rb +1 -1
  43. data/lib/solargraph/diagnostics/require_not_found.rb +53 -53
  44. data/lib/solargraph/diagnostics/rubocop.rb +118 -113
  45. data/lib/solargraph/diagnostics/rubocop_helpers.rb +68 -66
  46. data/lib/solargraph/diagnostics/type_check.rb +55 -55
  47. data/lib/solargraph/diagnostics/update_errors.rb +41 -41
  48. data/lib/solargraph/doc_map.rb +439 -188
  49. data/lib/solargraph/environ.rb +9 -2
  50. data/lib/solargraph/equality.rb +34 -33
  51. data/lib/solargraph/gem_pins.rb +98 -72
  52. data/lib/solargraph/language_server/error_codes.rb +20 -20
  53. data/lib/solargraph/language_server/host/diagnoser.rb +89 -89
  54. data/lib/solargraph/language_server/host/dispatch.rb +130 -128
  55. data/lib/solargraph/language_server/host/message_worker.rb +112 -106
  56. data/lib/solargraph/language_server/host/sources.rb +99 -99
  57. data/lib/solargraph/language_server/host.rb +878 -861
  58. data/lib/solargraph/language_server/message/base.rb +97 -96
  59. data/lib/solargraph/language_server/message/client/register_capability.rb +15 -15
  60. data/lib/solargraph/language_server/message/completion_item/resolve.rb +60 -60
  61. data/lib/solargraph/language_server/message/extended/check_gem_version.rb +114 -112
  62. data/lib/solargraph/language_server/message/extended/document.rb +23 -20
  63. data/lib/solargraph/language_server/message/extended/document_gems.rb +32 -32
  64. data/lib/solargraph/language_server/message/extended/download_core.rb +19 -19
  65. data/lib/solargraph/language_server/message/extended/search.rb +20 -20
  66. data/lib/solargraph/language_server/message/initialize.rb +191 -191
  67. data/lib/solargraph/language_server/message/text_document/completion.rb +56 -56
  68. data/lib/solargraph/language_server/message/text_document/definition.rb +40 -38
  69. data/lib/solargraph/language_server/message/text_document/document_highlight.rb +16 -16
  70. data/lib/solargraph/language_server/message/text_document/document_symbol.rb +26 -26
  71. data/lib/solargraph/language_server/message/text_document/formatting.rb +148 -131
  72. data/lib/solargraph/language_server/message/text_document/hover.rb +58 -58
  73. data/lib/solargraph/language_server/message/text_document/prepare_rename.rb +11 -11
  74. data/lib/solargraph/language_server/message/text_document/references.rb +16 -16
  75. data/lib/solargraph/language_server/message/text_document/rename.rb +19 -19
  76. data/lib/solargraph/language_server/message/text_document/signature_help.rb +24 -24
  77. data/lib/solargraph/language_server/message/text_document/type_definition.rb +25 -24
  78. data/lib/solargraph/language_server/message/workspace/did_change_configuration.rb +35 -35
  79. data/lib/solargraph/language_server/message/workspace/did_change_watched_files.rb +40 -40
  80. data/lib/solargraph/language_server/message/workspace/did_change_workspace_folders.rb +26 -24
  81. data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +23 -23
  82. data/lib/solargraph/language_server/message.rb +94 -94
  83. data/lib/solargraph/language_server/progress.rb +8 -0
  84. data/lib/solargraph/language_server/request.rb +27 -24
  85. data/lib/solargraph/language_server/transport/data_reader.rb +74 -74
  86. data/lib/solargraph/language_server/uri_helpers.rb +49 -49
  87. data/lib/solargraph/library.rb +683 -662
  88. data/lib/solargraph/location.rb +82 -58
  89. data/lib/solargraph/logging.rb +37 -27
  90. data/lib/solargraph/page.rb +92 -89
  91. data/lib/solargraph/parser/comment_ripper.rb +69 -56
  92. data/lib/solargraph/parser/flow_sensitive_typing.rb +255 -0
  93. data/lib/solargraph/parser/node_processor/base.rb +92 -87
  94. data/lib/solargraph/parser/node_processor.rb +62 -45
  95. data/lib/solargraph/parser/parser_gem/class_methods.rb +149 -157
  96. data/lib/solargraph/parser/parser_gem/flawed_builder.rb +19 -18
  97. data/lib/solargraph/parser/parser_gem/node_chainer.rb +166 -164
  98. data/lib/solargraph/parser/parser_gem/node_methods.rb +486 -495
  99. data/lib/solargraph/parser/parser_gem/node_processors/alias_node.rb +2 -1
  100. data/lib/solargraph/parser/parser_gem/node_processors/and_node.rb +22 -0
  101. data/lib/solargraph/parser/parser_gem/node_processors/args_node.rb +59 -57
  102. data/lib/solargraph/parser/parser_gem/node_processors/begin_node.rb +15 -15
  103. data/lib/solargraph/parser/parser_gem/node_processors/block_node.rb +46 -43
  104. data/lib/solargraph/parser/parser_gem/node_processors/casgn_node.rb +2 -1
  105. data/lib/solargraph/parser/parser_gem/node_processors/cvasgn_node.rb +2 -1
  106. data/lib/solargraph/parser/parser_gem/node_processors/def_node.rb +53 -50
  107. data/lib/solargraph/parser/parser_gem/node_processors/defs_node.rb +37 -36
  108. data/lib/solargraph/parser/parser_gem/node_processors/gvasgn_node.rb +2 -1
  109. data/lib/solargraph/parser/parser_gem/node_processors/if_node.rb +23 -0
  110. data/lib/solargraph/parser/parser_gem/node_processors/ivasgn_node.rb +40 -38
  111. data/lib/solargraph/parser/parser_gem/node_processors/lvasgn_node.rb +29 -28
  112. data/lib/solargraph/parser/parser_gem/node_processors/masgn_node.rb +59 -53
  113. data/lib/solargraph/parser/parser_gem/node_processors/namespace_node.rb +8 -7
  114. data/lib/solargraph/parser/parser_gem/node_processors/opasgn_node.rb +98 -0
  115. data/lib/solargraph/parser/parser_gem/node_processors/orasgn_node.rb +17 -16
  116. data/lib/solargraph/parser/parser_gem/node_processors/resbody_node.rb +38 -36
  117. data/lib/solargraph/parser/parser_gem/node_processors/sclass_node.rb +52 -42
  118. data/lib/solargraph/parser/parser_gem/node_processors/send_node.rb +291 -259
  119. data/lib/solargraph/parser/parser_gem/node_processors/sym_node.rb +3 -1
  120. data/lib/solargraph/parser/parser_gem/node_processors/until_node.rb +29 -0
  121. data/lib/solargraph/parser/parser_gem/node_processors/while_node.rb +29 -0
  122. data/lib/solargraph/parser/parser_gem/node_processors.rb +70 -56
  123. data/lib/solargraph/parser/parser_gem.rb +12 -12
  124. data/lib/solargraph/parser/region.rb +69 -66
  125. data/lib/solargraph/parser/snippet.rb +17 -15
  126. data/lib/solargraph/parser.rb +23 -22
  127. data/lib/solargraph/pin/base.rb +729 -378
  128. data/lib/solargraph/pin/base_variable.rb +126 -118
  129. data/lib/solargraph/pin/block.rb +104 -101
  130. data/lib/solargraph/pin/breakable.rb +9 -0
  131. data/lib/solargraph/pin/callable.rb +231 -147
  132. data/lib/solargraph/pin/closure.rb +72 -57
  133. data/lib/solargraph/pin/common.rb +79 -70
  134. data/lib/solargraph/pin/constant.rb +45 -43
  135. data/lib/solargraph/pin/conversions.rb +123 -123
  136. data/lib/solargraph/pin/delegated_method.rb +120 -101
  137. data/lib/solargraph/pin/documenting.rb +114 -98
  138. data/lib/solargraph/pin/instance_variable.rb +34 -34
  139. data/lib/solargraph/pin/keyword.rb +20 -15
  140. data/lib/solargraph/pin/local_variable.rb +75 -67
  141. data/lib/solargraph/pin/method.rb +672 -527
  142. data/lib/solargraph/pin/method_alias.rb +34 -31
  143. data/lib/solargraph/pin/namespace.rb +115 -107
  144. data/lib/solargraph/pin/parameter.rb +275 -212
  145. data/lib/solargraph/pin/proxy_type.rb +39 -29
  146. data/lib/solargraph/pin/reference/override.rb +47 -29
  147. data/lib/solargraph/pin/reference/require.rb +2 -2
  148. data/lib/solargraph/pin/reference/superclass.rb +15 -10
  149. data/lib/solargraph/pin/reference.rb +39 -22
  150. data/lib/solargraph/pin/search.rb +61 -56
  151. data/lib/solargraph/pin/signature.rb +61 -17
  152. data/lib/solargraph/pin/singleton.rb +1 -1
  153. data/lib/solargraph/pin/symbol.rb +53 -47
  154. data/lib/solargraph/pin/until.rb +18 -0
  155. data/lib/solargraph/pin/while.rb +18 -0
  156. data/lib/solargraph/pin.rb +44 -41
  157. data/lib/solargraph/pin_cache.rb +245 -0
  158. data/lib/solargraph/position.rb +132 -107
  159. data/lib/solargraph/range.rb +112 -98
  160. data/lib/solargraph/rbs_map/conversions.rb +823 -646
  161. data/lib/solargraph/rbs_map/core_fills.rb +84 -50
  162. data/lib/solargraph/rbs_map/core_map.rb +58 -28
  163. data/lib/solargraph/rbs_map/stdlib_map.rb +43 -33
  164. data/lib/solargraph/rbs_map.rb +163 -93
  165. data/lib/solargraph/server_methods.rb +16 -16
  166. data/lib/solargraph/shell.rb +363 -269
  167. data/lib/solargraph/source/chain/array.rb +37 -33
  168. data/lib/solargraph/source/chain/block_symbol.rb +1 -1
  169. data/lib/solargraph/source/chain/block_variable.rb +1 -1
  170. data/lib/solargraph/source/chain/call.rb +337 -303
  171. data/lib/solargraph/source/chain/class_variable.rb +13 -13
  172. data/lib/solargraph/source/chain/constant.rb +26 -89
  173. data/lib/solargraph/source/chain/global_variable.rb +13 -13
  174. data/lib/solargraph/source/chain/hash.rb +34 -33
  175. data/lib/solargraph/source/chain/head.rb +1 -1
  176. data/lib/solargraph/source/chain/if.rb +28 -28
  177. data/lib/solargraph/source/chain/instance_variable.rb +13 -13
  178. data/lib/solargraph/source/chain/link.rb +109 -98
  179. data/lib/solargraph/source/chain/literal.rb +48 -28
  180. data/lib/solargraph/source/chain/or.rb +23 -23
  181. data/lib/solargraph/source/chain/q_call.rb +11 -11
  182. data/lib/solargraph/source/chain/variable.rb +13 -13
  183. data/lib/solargraph/source/chain/z_super.rb +30 -30
  184. data/lib/solargraph/source/chain.rb +291 -252
  185. data/lib/solargraph/source/change.rb +82 -82
  186. data/lib/solargraph/source/cursor.rb +166 -167
  187. data/lib/solargraph/source/encoding_fixes.rb +23 -23
  188. data/lib/solargraph/source/source_chainer.rb +194 -194
  189. data/lib/solargraph/source/updater.rb +55 -55
  190. data/lib/solargraph/source.rb +498 -495
  191. data/lib/solargraph/source_map/clip.rb +226 -232
  192. data/lib/solargraph/source_map/data.rb +34 -30
  193. data/lib/solargraph/source_map/mapper.rb +259 -255
  194. data/lib/solargraph/source_map.rb +212 -217
  195. data/lib/solargraph/type_checker/checks.rb +124 -120
  196. data/lib/solargraph/type_checker/param_def.rb +37 -35
  197. data/lib/solargraph/type_checker/problem.rb +32 -32
  198. data/lib/solargraph/type_checker/rules.rb +84 -62
  199. data/lib/solargraph/type_checker.rb +814 -672
  200. data/lib/solargraph/version.rb +5 -5
  201. data/lib/solargraph/views/_method.erb +10 -10
  202. data/lib/solargraph/views/_namespace.erb +3 -3
  203. data/lib/solargraph/views/document.erb +10 -10
  204. data/lib/solargraph/workspace/config.rb +255 -239
  205. data/lib/solargraph/workspace/require_paths.rb +97 -0
  206. data/lib/solargraph/workspace.rb +220 -239
  207. data/lib/solargraph/yard_map/helpers.rb +44 -16
  208. data/lib/solargraph/yard_map/mapper/to_constant.rb +7 -5
  209. data/lib/solargraph/yard_map/mapper/to_method.rb +130 -94
  210. data/lib/solargraph/yard_map/mapper/to_namespace.rb +31 -28
  211. data/lib/solargraph/yard_map/mapper.rb +79 -78
  212. data/lib/solargraph/yard_map/to_method.rb +89 -86
  213. data/lib/solargraph/yard_tags.rb +20 -20
  214. data/lib/solargraph/yardoc.rb +87 -52
  215. data/lib/solargraph.rb +105 -72
  216. data/rbs/fills/bundler/0/bundler.rbs +4271 -0
  217. data/rbs/fills/open3/0/open3.rbs +172 -0
  218. data/rbs/fills/rubygems/0/basic_specification.rbs +326 -0
  219. data/rbs/fills/rubygems/0/errors.rbs +364 -0
  220. data/rbs/fills/rubygems/0/spec_fetcher.rbs +107 -0
  221. data/rbs/fills/rubygems/0/specification.rbs +1753 -0
  222. data/rbs/fills/tuple/tuple.rbs +149 -0
  223. data/rbs/shims/ast/0/node.rbs +5 -0
  224. data/rbs/shims/ast/2.4/.rbs_meta.yaml +9 -0
  225. data/rbs/shims/ast/2.4/ast.rbs +73 -0
  226. data/rbs/shims/parser/3.2.0.1/builders/default.rbs +195 -0
  227. data/rbs/shims/parser/3.2.0.1/manifest.yaml +7 -0
  228. data/rbs/shims/parser/3.2.0.1/parser.rbs +201 -0
  229. data/rbs/shims/parser/3.2.0.1/polyfill.rbs +4 -0
  230. data/rbs/shims/thor/1.2.0.1/.rbs_meta.yaml +9 -0
  231. data/rbs/shims/thor/1.2.0.1/manifest.yaml +7 -0
  232. data/rbs/shims/thor/1.2.0.1/thor.rbs +17 -0
  233. data/rbs_collection.yaml +19 -0
  234. data/solargraph.gemspec +27 -5
  235. metadata +215 -18
  236. data/lib/.rubocop.yml +0 -22
  237. data/lib/solargraph/cache.rb +0 -77
  238. 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
- module Solargraph
5
- # Conventions provide a way to modify an ApiMap based on expectations about
6
- # one of its sources.
7
- #
8
- module Convention
9
- autoload :Base, 'solargraph/convention/base'
10
- autoload :Gemfile, 'solargraph/convention/gemfile'
11
- autoload :Gemspec, 'solargraph/convention/gemspec'
12
- autoload :Rakefile, 'solargraph/convention/rakefile'
13
-
14
- # @type [Set<Convention::Base>]
15
- @@conventions = Set.new
16
-
17
- # @param convention [Class<Convention::Base>]
18
- # @return [void]
19
- def self.register convention
20
- @@conventions.add convention.new
21
- end
22
-
23
- # @param source_map [SourceMap]
24
- # @return [Environ]
25
- def self.for_local(source_map)
26
- result = Environ.new
27
- @@conventions.each do |conv|
28
- result.merge conv.local(source_map)
29
- end
30
- result
31
- end
32
-
33
- # @param yard_map [YardMap]
34
- # @return [Environ]
35
- def self.for_global(yard_map)
36
- result = Environ.new
37
- @@conventions.each do |conv|
38
- result.merge conv.global(yard_map)
39
- end
40
- result
41
- end
42
-
43
- register Gemfile
44
- register Gemspec
45
- register Rakefile
46
- end
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