solargraph 0.44.2 → 0.46.0

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 (246) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/rspec.yml +41 -0
  3. data/.gitignore +9 -9
  4. data/.rspec +2 -2
  5. data/.travis.yml +19 -19
  6. data/CHANGELOG.md +1115 -1088
  7. data/Gemfile +0 -0
  8. data/LICENSE +0 -0
  9. data/README.md +128 -120
  10. data/Rakefile +0 -0
  11. data/SPONSORS.md +18 -15
  12. data/bin/solargraph +0 -0
  13. data/lib/solargraph/api_map/bundler_methods.rb +22 -22
  14. data/lib/solargraph/api_map/cache.rb +70 -70
  15. data/lib/solargraph/api_map/source_to_yard.rb +81 -81
  16. data/lib/solargraph/api_map/store.rb +256 -256
  17. data/lib/solargraph/api_map.rb +686 -681
  18. data/lib/solargraph/bench.rb +27 -27
  19. data/lib/solargraph/compat.rb +37 -37
  20. data/lib/solargraph/complex_type/type_methods.rb +130 -130
  21. data/lib/solargraph/complex_type/unique_type.rb +75 -75
  22. data/lib/solargraph/complex_type.rb +221 -221
  23. data/lib/solargraph/convention/base.rb +33 -33
  24. data/lib/solargraph/convention/gemfile.rb +15 -15
  25. data/lib/solargraph/convention/gemspec.rb +22 -22
  26. data/lib/solargraph/convention/rspec.rb +30 -21
  27. data/lib/solargraph/convention.rb +47 -47
  28. data/lib/solargraph/converters/dd.rb +12 -12
  29. data/lib/solargraph/converters/dl.rb +12 -12
  30. data/lib/solargraph/converters/dt.rb +12 -12
  31. data/lib/solargraph/converters/misc.rb +1 -1
  32. data/lib/solargraph/diagnostics/base.rb +29 -29
  33. data/lib/solargraph/diagnostics/require_not_found.rb +53 -37
  34. data/lib/solargraph/diagnostics/rubocop.rb +98 -98
  35. data/lib/solargraph/diagnostics/rubocop_helpers.rb +63 -63
  36. data/lib/solargraph/diagnostics/severities.rb +15 -15
  37. data/lib/solargraph/diagnostics/type_check.rb +54 -54
  38. data/lib/solargraph/diagnostics/update_errors.rb +41 -41
  39. data/lib/solargraph/diagnostics.rb +55 -55
  40. data/lib/solargraph/documentor.rb +76 -76
  41. data/lib/solargraph/environ.rb +45 -45
  42. data/lib/solargraph/language_server/completion_item_kinds.rb +35 -35
  43. data/lib/solargraph/language_server/error_codes.rb +20 -20
  44. data/lib/solargraph/language_server/host/cataloger.rb +56 -56
  45. data/lib/solargraph/language_server/host/diagnoser.rb +89 -89
  46. data/lib/solargraph/language_server/host/dispatch.rb +111 -111
  47. data/lib/solargraph/language_server/host/message_worker.rb +59 -59
  48. data/lib/solargraph/language_server/host/sources.rb +156 -156
  49. data/lib/solargraph/language_server/host.rb +865 -865
  50. data/lib/solargraph/language_server/message/base.rb +89 -89
  51. data/lib/solargraph/language_server/message/cancel_request.rb +13 -13
  52. data/lib/solargraph/language_server/message/client/register_capability.rb +15 -15
  53. data/lib/solargraph/language_server/message/client.rb +11 -11
  54. data/lib/solargraph/language_server/message/completion_item/resolve.rb +58 -58
  55. data/lib/solargraph/language_server/message/completion_item.rb +11 -11
  56. data/lib/solargraph/language_server/message/exit_notification.rb +13 -13
  57. data/lib/solargraph/language_server/message/extended/check_gem_version.rb +100 -100
  58. data/lib/solargraph/language_server/message/extended/document.rb +20 -20
  59. data/lib/solargraph/language_server/message/extended/document_gems.rb +32 -32
  60. data/lib/solargraph/language_server/message/extended/download_core.rb +23 -23
  61. data/lib/solargraph/language_server/message/extended/environment.rb +25 -25
  62. data/lib/solargraph/language_server/message/extended/search.rb +20 -20
  63. data/lib/solargraph/language_server/message/extended.rb +21 -21
  64. data/lib/solargraph/language_server/message/initialize.rb +162 -162
  65. data/lib/solargraph/language_server/message/initialized.rb +27 -27
  66. data/lib/solargraph/language_server/message/method_not_found.rb +16 -16
  67. data/lib/solargraph/language_server/message/method_not_implemented.rb +14 -14
  68. data/lib/solargraph/language_server/message/shutdown.rb +13 -13
  69. data/lib/solargraph/language_server/message/text_document/base.rb +19 -19
  70. data/lib/solargraph/language_server/message/text_document/code_action.rb +17 -17
  71. data/lib/solargraph/language_server/message/text_document/completion.rb +59 -59
  72. data/lib/solargraph/language_server/message/text_document/definition.rb +38 -38
  73. data/lib/solargraph/language_server/message/text_document/did_change.rb +15 -15
  74. data/lib/solargraph/language_server/message/text_document/did_close.rb +15 -15
  75. data/lib/solargraph/language_server/message/text_document/did_open.rb +15 -15
  76. data/lib/solargraph/language_server/message/text_document/did_save.rb +17 -17
  77. data/lib/solargraph/language_server/message/text_document/document_highlight.rb +16 -16
  78. data/lib/solargraph/language_server/message/text_document/document_symbol.rb +23 -23
  79. data/lib/solargraph/language_server/message/text_document/folding_range.rb +26 -26
  80. data/lib/solargraph/language_server/message/text_document/formatting.rb +126 -126
  81. data/lib/solargraph/language_server/message/text_document/hover.rb +54 -44
  82. data/lib/solargraph/language_server/message/text_document/on_type_formatting.rb +34 -34
  83. data/lib/solargraph/language_server/message/text_document/prepare_rename.rb +11 -11
  84. data/lib/solargraph/language_server/message/text_document/references.rb +16 -16
  85. data/lib/solargraph/language_server/message/text_document/rename.rb +19 -19
  86. data/lib/solargraph/language_server/message/text_document/signature_help.rb +29 -29
  87. data/lib/solargraph/language_server/message/text_document.rb +28 -28
  88. data/lib/solargraph/language_server/message/workspace/did_change_configuration.rb +30 -30
  89. data/lib/solargraph/language_server/message/workspace/did_change_watched_files.rb +33 -33
  90. data/lib/solargraph/language_server/message/workspace/did_change_workspace_folders.rb +24 -24
  91. data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +23 -23
  92. data/lib/solargraph/language_server/message/workspace.rb +14 -14
  93. data/lib/solargraph/language_server/message.rb +93 -93
  94. data/lib/solargraph/language_server/message_types.rb +14 -14
  95. data/lib/solargraph/language_server/request.rb +24 -24
  96. data/lib/solargraph/language_server/symbol_kinds.rb +36 -36
  97. data/lib/solargraph/language_server/transport/adapter.rb +53 -53
  98. data/lib/solargraph/language_server/transport/data_reader.rb +72 -72
  99. data/lib/solargraph/language_server/transport.rb +13 -13
  100. data/lib/solargraph/language_server/uri_helpers.rb +49 -49
  101. data/lib/solargraph/language_server.rb +19 -19
  102. data/lib/solargraph/library.rb +546 -546
  103. data/lib/solargraph/location.rb +37 -37
  104. data/lib/solargraph/logging.rb +27 -27
  105. data/lib/solargraph/page.rb +83 -83
  106. data/lib/solargraph/parser/comment_ripper.rb +52 -52
  107. data/lib/solargraph/parser/legacy/class_methods.rb +135 -140
  108. data/lib/solargraph/parser/legacy/flawed_builder.rb +16 -16
  109. data/lib/solargraph/parser/legacy/node_chainer.rb +148 -148
  110. data/lib/solargraph/parser/legacy/node_methods.rb +325 -325
  111. data/lib/solargraph/parser/legacy/node_processors/alias_node.rb +23 -23
  112. data/lib/solargraph/parser/legacy/node_processors/args_node.rb +35 -35
  113. data/lib/solargraph/parser/legacy/node_processors/begin_node.rb +15 -15
  114. data/lib/solargraph/parser/legacy/node_processors/block_node.rb +42 -42
  115. data/lib/solargraph/parser/legacy/node_processors/casgn_node.rb +25 -25
  116. data/lib/solargraph/parser/legacy/node_processors/cvasgn_node.rb +23 -23
  117. data/lib/solargraph/parser/legacy/node_processors/def_node.rb +63 -63
  118. data/lib/solargraph/parser/legacy/node_processors/defs_node.rb +36 -36
  119. data/lib/solargraph/parser/legacy/node_processors/gvasgn_node.rb +23 -23
  120. data/lib/solargraph/parser/legacy/node_processors/ivasgn_node.rb +38 -38
  121. data/lib/solargraph/parser/legacy/node_processors/lvasgn_node.rb +28 -28
  122. data/lib/solargraph/parser/legacy/node_processors/namespace_node.rb +39 -39
  123. data/lib/solargraph/parser/legacy/node_processors/orasgn_node.rb +16 -16
  124. data/lib/solargraph/parser/legacy/node_processors/resbody_node.rb +36 -36
  125. data/lib/solargraph/parser/legacy/node_processors/sclass_node.rb +21 -21
  126. data/lib/solargraph/parser/legacy/node_processors/send_node.rb +257 -257
  127. data/lib/solargraph/parser/legacy/node_processors/sym_node.rb +18 -18
  128. data/lib/solargraph/parser/legacy/node_processors.rb +54 -54
  129. data/lib/solargraph/parser/legacy.rb +12 -12
  130. data/lib/solargraph/parser/node_methods.rb +43 -43
  131. data/lib/solargraph/parser/node_processor/base.rb +77 -77
  132. data/lib/solargraph/parser/node_processor.rb +43 -43
  133. data/lib/solargraph/parser/region.rb +66 -66
  134. data/lib/solargraph/parser/rubyvm/class_methods.rb +144 -155
  135. data/lib/solargraph/parser/rubyvm/node_chainer.rb +160 -160
  136. data/lib/solargraph/parser/rubyvm/node_methods.rb +315 -315
  137. data/lib/solargraph/parser/rubyvm/node_processors/alias_node.rb +23 -23
  138. data/lib/solargraph/parser/rubyvm/node_processors/args_node.rb +85 -85
  139. data/lib/solargraph/parser/rubyvm/node_processors/begin_node.rb +15 -15
  140. data/lib/solargraph/parser/rubyvm/node_processors/block_node.rb +42 -42
  141. data/lib/solargraph/parser/rubyvm/node_processors/casgn_node.rb +22 -22
  142. data/lib/solargraph/parser/rubyvm/node_processors/cvasgn_node.rb +23 -23
  143. data/lib/solargraph/parser/rubyvm/node_processors/def_node.rb +63 -64
  144. data/lib/solargraph/parser/rubyvm/node_processors/defs_node.rb +57 -57
  145. data/lib/solargraph/parser/rubyvm/node_processors/gvasgn_node.rb +23 -23
  146. data/lib/solargraph/parser/rubyvm/node_processors/ivasgn_node.rb +38 -38
  147. data/lib/solargraph/parser/rubyvm/node_processors/kw_arg_node.rb +39 -39
  148. data/lib/solargraph/parser/rubyvm/node_processors/lit_node.rb +20 -20
  149. data/lib/solargraph/parser/rubyvm/node_processors/lvasgn_node.rb +27 -27
  150. data/lib/solargraph/parser/rubyvm/node_processors/namespace_node.rb +39 -39
  151. data/lib/solargraph/parser/rubyvm/node_processors/opt_arg_node.rb +26 -26
  152. data/lib/solargraph/parser/rubyvm/node_processors/orasgn_node.rb +15 -15
  153. data/lib/solargraph/parser/rubyvm/node_processors/resbody_node.rb +45 -45
  154. data/lib/solargraph/parser/rubyvm/node_processors/sclass_node.rb +21 -21
  155. data/lib/solargraph/parser/rubyvm/node_processors/scope_node.rb +15 -15
  156. data/lib/solargraph/parser/rubyvm/node_processors/send_node.rb +277 -277
  157. data/lib/solargraph/parser/rubyvm/node_processors/sym_node.rb +18 -18
  158. data/lib/solargraph/parser/rubyvm/node_processors.rb +63 -62
  159. data/lib/solargraph/parser/rubyvm.rb +40 -40
  160. data/lib/solargraph/parser/snippet.rb +13 -13
  161. data/lib/solargraph/parser.rb +26 -26
  162. data/lib/solargraph/pin/base.rb +296 -296
  163. data/lib/solargraph/pin/base_variable.rb +84 -84
  164. data/lib/solargraph/pin/block.rb +72 -72
  165. data/lib/solargraph/pin/class_variable.rb +8 -8
  166. data/lib/solargraph/pin/closure.rb +37 -37
  167. data/lib/solargraph/pin/common.rb +70 -70
  168. data/lib/solargraph/pin/constant.rb +43 -43
  169. data/lib/solargraph/pin/conversions.rb +96 -96
  170. data/lib/solargraph/pin/documenting.rb +105 -105
  171. data/lib/solargraph/pin/duck_method.rb +16 -16
  172. data/lib/solargraph/pin/global_variable.rb +8 -8
  173. data/lib/solargraph/pin/instance_variable.rb +30 -30
  174. data/lib/solargraph/pin/keyword.rb +15 -15
  175. data/lib/solargraph/pin/keyword_param.rb +8 -8
  176. data/lib/solargraph/pin/local_variable.rb +55 -55
  177. data/lib/solargraph/pin/method.rb +245 -245
  178. data/lib/solargraph/pin/method_alias.rb +31 -31
  179. data/lib/solargraph/pin/namespace.rb +91 -91
  180. data/lib/solargraph/pin/parameter.rb +201 -206
  181. data/lib/solargraph/pin/proxy_type.rb +29 -29
  182. data/lib/solargraph/pin/reference/extend.rb +10 -10
  183. data/lib/solargraph/pin/reference/include.rb +10 -10
  184. data/lib/solargraph/pin/reference/override.rb +29 -29
  185. data/lib/solargraph/pin/reference/prepend.rb +10 -10
  186. data/lib/solargraph/pin/reference/require.rb +14 -14
  187. data/lib/solargraph/pin/reference/superclass.rb +10 -10
  188. data/lib/solargraph/pin/reference.rb +14 -14
  189. data/lib/solargraph/pin/search.rb +56 -0
  190. data/lib/solargraph/pin/singleton.rb +11 -11
  191. data/lib/solargraph/pin/symbol.rb +47 -47
  192. data/lib/solargraph/pin.rb +37 -36
  193. data/lib/solargraph/position.rb +100 -100
  194. data/lib/solargraph/range.rb +95 -95
  195. data/lib/solargraph/server_methods.rb +16 -16
  196. data/lib/solargraph/shell.rb +226 -226
  197. data/lib/solargraph/source/chain/block_variable.rb +13 -13
  198. data/lib/solargraph/source/chain/call.rb +204 -204
  199. data/lib/solargraph/source/chain/class_variable.rb +13 -13
  200. data/lib/solargraph/source/chain/constant.rb +75 -75
  201. data/lib/solargraph/source/chain/global_variable.rb +13 -13
  202. data/lib/solargraph/source/chain/hash.rb +28 -28
  203. data/lib/solargraph/source/chain/head.rb +19 -19
  204. data/lib/solargraph/source/chain/instance_variable.rb +13 -13
  205. data/lib/solargraph/source/chain/link.rb +71 -71
  206. data/lib/solargraph/source/chain/literal.rb +23 -23
  207. data/lib/solargraph/source/chain/or.rb +23 -23
  208. data/lib/solargraph/source/chain/q_call.rb +11 -11
  209. data/lib/solargraph/source/chain/variable.rb +13 -13
  210. data/lib/solargraph/source/chain/z_super.rb +30 -30
  211. data/lib/solargraph/source/chain.rb +164 -164
  212. data/lib/solargraph/source/change.rb +79 -79
  213. data/lib/solargraph/source/cursor.rb +164 -164
  214. data/lib/solargraph/source/source_chainer.rb +191 -191
  215. data/lib/solargraph/source/updater.rb +54 -54
  216. data/lib/solargraph/source.rb +522 -522
  217. data/lib/solargraph/source_map/clip.rb +224 -224
  218. data/lib/solargraph/source_map/completion.rb +23 -23
  219. data/lib/solargraph/source_map/mapper.rb +212 -212
  220. data/lib/solargraph/source_map.rb +180 -189
  221. data/lib/solargraph/type_checker/checks.rb +99 -99
  222. data/lib/solargraph/type_checker/param_def.rb +35 -35
  223. data/lib/solargraph/type_checker/problem.rb +32 -32
  224. data/lib/solargraph/type_checker/rules.rb +57 -57
  225. data/lib/solargraph/type_checker.rb +543 -510
  226. data/lib/solargraph/version.rb +5 -5
  227. data/lib/solargraph/views/environment.erb +58 -58
  228. data/lib/solargraph/workspace/config.rb +231 -231
  229. data/lib/solargraph/workspace.rb +215 -214
  230. data/lib/solargraph/yard_map/cache.rb +19 -19
  231. data/lib/solargraph/yard_map/core_docs.rb +170 -170
  232. data/lib/solargraph/yard_map/core_fills.rb +208 -203
  233. data/lib/solargraph/yard_map/core_gen.rb +76 -76
  234. data/lib/solargraph/yard_map/helpers.rb +16 -16
  235. data/lib/solargraph/yard_map/mapper/to_constant.rb +25 -25
  236. data/lib/solargraph/yard_map/mapper/to_method.rb +78 -78
  237. data/lib/solargraph/yard_map/mapper/to_namespace.rb +27 -27
  238. data/lib/solargraph/yard_map/mapper.rb +77 -77
  239. data/lib/solargraph/yard_map/rdoc_to_yard.rb +140 -140
  240. data/lib/solargraph/yard_map/stdlib_fills.rb +43 -43
  241. data/lib/solargraph/yard_map/to_method.rb +79 -79
  242. data/lib/solargraph/yard_map.rb +460 -443
  243. data/lib/solargraph.rb +69 -69
  244. data/lib/yard-solargraph.rb +33 -33
  245. data/solargraph.gemspec +0 -0
  246. metadata +14 -12
@@ -1,78 +1,78 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- class YardMap
5
- class Mapper
6
- module ToMethod
7
- extend YardMap::Helpers
8
-
9
- def self.make code_object, name = nil, scope = nil, visibility = nil, closure = nil, spec = nil
10
- closure ||= Solargraph::Pin::Namespace.new(
11
- name: code_object.namespace.to_s,
12
- gates: [code_object.namespace.to_s]
13
- )
14
- location = object_location(code_object, spec)
15
- comments = code_object.docstring ? code_object.docstring.all.to_s : ''
16
- Pin::Method.new(
17
- location: location,
18
- closure: closure,
19
- name: name || code_object.name.to_s,
20
- comments: comments,
21
- scope: scope || code_object.scope,
22
- visibility: visibility || code_object.visibility,
23
- parameters: get_parameters(code_object, location, comments),
24
- explicit: code_object.is_explicit?
25
- )
26
- end
27
-
28
- class << self
29
- private
30
-
31
- # @param code_object [YARD::CodeObjects::Base]
32
- # @return [Array<Solargraph::Pin::Parameter>]
33
- def get_parameters code_object, location, comments
34
- return [] unless code_object.is_a?(YARD::CodeObjects::MethodObject)
35
- # HACK: Skip `nil` and `self` parameters that are sometimes emitted
36
- # for methods defined in C
37
- # See https://github.com/castwide/solargraph/issues/345
38
- code_object.parameters.select { |a| a[0] && a[0] != 'self' }.map do |a|
39
- Solargraph::Pin::Parameter.new(
40
- location: location,
41
- closure: self,
42
- comments: comments,
43
- name: arg_name(a),
44
- presence: nil,
45
- decl: arg_type(a),
46
- asgn_code: a[1]
47
- )
48
- end
49
- end
50
-
51
- # @param a [Array]
52
- # @return [String]
53
- def arg_name a
54
- a[0].gsub(/[^a-z0-9_]/i, '')
55
- end
56
-
57
- # @param a [Array]
58
- # @return [::Symbol]
59
- def arg_type a
60
- if a[0].start_with?('**')
61
- :kwrestarg
62
- elsif a[0].start_with?('*')
63
- :restarg
64
- elsif a[0].start_with?('&')
65
- :blockarg
66
- elsif a[0].end_with?(':')
67
- a[1] ? :kwoptarg : :kwarg
68
- elsif a[1]
69
- :optarg
70
- else
71
- :arg
72
- end
73
- end
74
- end
75
- end
76
- end
77
- end
78
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ class YardMap
5
+ class Mapper
6
+ module ToMethod
7
+ extend YardMap::Helpers
8
+
9
+ def self.make code_object, name = nil, scope = nil, visibility = nil, closure = nil, spec = nil
10
+ closure ||= Solargraph::Pin::Namespace.new(
11
+ name: code_object.namespace.to_s,
12
+ gates: [code_object.namespace.to_s]
13
+ )
14
+ location = object_location(code_object, spec)
15
+ comments = code_object.docstring ? code_object.docstring.all.to_s : ''
16
+ Pin::Method.new(
17
+ location: location,
18
+ closure: closure,
19
+ name: name || code_object.name.to_s,
20
+ comments: comments,
21
+ scope: scope || code_object.scope,
22
+ visibility: visibility || code_object.visibility,
23
+ parameters: get_parameters(code_object, location, comments),
24
+ explicit: code_object.is_explicit?
25
+ )
26
+ end
27
+
28
+ class << self
29
+ private
30
+
31
+ # @param code_object [YARD::CodeObjects::Base]
32
+ # @return [Array<Solargraph::Pin::Parameter>]
33
+ def get_parameters code_object, location, comments
34
+ return [] unless code_object.is_a?(YARD::CodeObjects::MethodObject)
35
+ # HACK: Skip `nil` and `self` parameters that are sometimes emitted
36
+ # for methods defined in C
37
+ # See https://github.com/castwide/solargraph/issues/345
38
+ code_object.parameters.select { |a| a[0] && a[0] != 'self' }.map do |a|
39
+ Solargraph::Pin::Parameter.new(
40
+ location: location,
41
+ closure: self,
42
+ comments: comments,
43
+ name: arg_name(a),
44
+ presence: nil,
45
+ decl: arg_type(a),
46
+ asgn_code: a[1]
47
+ )
48
+ end
49
+ end
50
+
51
+ # @param a [Array]
52
+ # @return [String]
53
+ def arg_name a
54
+ a[0].gsub(/[^a-z0-9_]/i, '')
55
+ end
56
+
57
+ # @param a [Array]
58
+ # @return [::Symbol]
59
+ def arg_type a
60
+ if a[0].start_with?('**')
61
+ :kwrestarg
62
+ elsif a[0].start_with?('*')
63
+ :restarg
64
+ elsif a[0].start_with?('&')
65
+ :blockarg
66
+ elsif a[0].end_with?(':')
67
+ a[1] ? :kwoptarg : :kwarg
68
+ elsif a[1]
69
+ :optarg
70
+ else
71
+ :arg
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
78
+ end
@@ -1,27 +1,27 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- class YardMap
5
- class Mapper
6
- module ToNamespace
7
- extend YardMap::Helpers
8
-
9
- def self.make code_object, spec, closure = nil
10
- closure ||= Solargraph::Pin::Namespace.new(
11
- name: code_object.namespace.to_s,
12
- closure: Pin::ROOT_PIN,
13
- gates: [code_object.namespace.to_s]
14
- )
15
- Pin::Namespace.new(
16
- location: object_location(code_object, spec),
17
- name: code_object.name.to_s,
18
- comments: code_object.docstring ? code_object.docstring.all.to_s : '',
19
- type: code_object.is_a?(YARD::CodeObjects::ClassObject) ? :class : :module,
20
- visibility: code_object.visibility,
21
- closure: closure
22
- )
23
- end
24
- end
25
- end
26
- end
27
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ class YardMap
5
+ class Mapper
6
+ module ToNamespace
7
+ extend YardMap::Helpers
8
+
9
+ def self.make code_object, spec, closure = nil
10
+ closure ||= Solargraph::Pin::Namespace.new(
11
+ name: code_object.namespace.to_s,
12
+ closure: Pin::ROOT_PIN,
13
+ gates: [code_object.namespace.to_s]
14
+ )
15
+ Pin::Namespace.new(
16
+ location: object_location(code_object, spec),
17
+ name: code_object.name.to_s,
18
+ comments: code_object.docstring ? code_object.docstring.all.to_s : '',
19
+ type: code_object.is_a?(YARD::CodeObjects::ClassObject) ? :class : :module,
20
+ visibility: code_object.visibility,
21
+ closure: closure
22
+ )
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -1,77 +1,77 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- class YardMap
5
- class Mapper
6
- autoload :ToMethod, 'solargraph/yard_map/mapper/to_method'
7
- autoload :ToNamespace, 'solargraph/yard_map/mapper/to_namespace'
8
- autoload :ToConstant, 'solargraph/yard_map/mapper/to_constant'
9
-
10
- # @param code_objects [Array<YARD::CodeObjects::Base>]
11
- # @param spec [Gem::Specification]
12
- def initialize code_objects, spec = nil
13
- @code_objects = code_objects
14
- @spec = spec
15
- @pins = []
16
- @namespace_pins = {}
17
- end
18
-
19
- # @return [Array<Pin::Base>]
20
- def map
21
- @code_objects.each do |co|
22
- @pins.concat generate_pins co
23
- end
24
- # Some yardocs contain documentation for dependencies that can be
25
- # ignored here. The YardMap will load dependencies separately.
26
- @pins.keep_if { |pin| pin.location.nil? || File.file?(pin.location.filename) } if @spec
27
- @pins
28
- end
29
-
30
- private
31
-
32
- # @param code_object [YARD::CodeObjects::Base]
33
- # @return [Array<Pin::Base>]
34
- def generate_pins code_object
35
- result = []
36
- if code_object.is_a?(YARD::CodeObjects::NamespaceObject)
37
- nspin = ToNamespace.make(code_object, @spec, @namespace_pins[code_object.namespace.to_s])
38
- @namespace_pins[code_object.path] = nspin
39
- result.push nspin
40
- if code_object.is_a?(YARD::CodeObjects::ClassObject) and !code_object.superclass.nil?
41
- # This method of superclass detection is a bit of a hack. If
42
- # the superclass is a Proxy, it is assumed to be undefined in its
43
- # yardoc and converted to a fully qualified namespace.
44
- superclass = if code_object.superclass.is_a?(YARD::CodeObjects::Proxy)
45
- "::#{code_object.superclass}"
46
- else
47
- code_object.superclass.to_s
48
- end
49
- result.push Solargraph::Pin::Reference::Superclass.new(name: superclass, closure: nspin)
50
- end
51
- code_object.class_mixins.each do |m|
52
- result.push Solargraph::Pin::Reference::Extend.new(closure: nspin, name: m.path)
53
- end
54
- code_object.instance_mixins.each do |m|
55
- result.push Solargraph::Pin::Reference::Include.new(
56
- closure: nspin, # @todo Fix this
57
- name: m.path
58
- )
59
- end
60
- elsif code_object.is_a?(YARD::CodeObjects::MethodObject)
61
- closure = @namespace_pins[code_object.namespace.to_s]
62
- if code_object.name == :initialize && code_object.scope == :instance
63
- # @todo Check the visibility of <Class>.new
64
- result.push ToMethod.make(code_object, 'new', :class, :public, closure, @spec)
65
- result.push ToMethod.make(code_object, 'initialize', :instance, :private, closure, @spec)
66
- else
67
- result.push ToMethod.make(code_object, nil, nil, nil, closure, @spec)
68
- end
69
- elsif code_object.is_a?(YARD::CodeObjects::ConstantObject)
70
- closure = @namespace_pins[code_object.namespace]
71
- result.push ToConstant.make(code_object, closure, @spec)
72
- end
73
- result
74
- end
75
- end
76
- end
77
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ class YardMap
5
+ class Mapper
6
+ autoload :ToMethod, 'solargraph/yard_map/mapper/to_method'
7
+ autoload :ToNamespace, 'solargraph/yard_map/mapper/to_namespace'
8
+ autoload :ToConstant, 'solargraph/yard_map/mapper/to_constant'
9
+
10
+ # @param code_objects [Array<YARD::CodeObjects::Base>]
11
+ # @param spec [Gem::Specification]
12
+ def initialize code_objects, spec = nil
13
+ @code_objects = code_objects
14
+ @spec = spec
15
+ @pins = []
16
+ @namespace_pins = {}
17
+ end
18
+
19
+ # @return [Array<Pin::Base>]
20
+ def map
21
+ @code_objects.each do |co|
22
+ @pins.concat generate_pins co
23
+ end
24
+ # Some yardocs contain documentation for dependencies that can be
25
+ # ignored here. The YardMap will load dependencies separately.
26
+ @pins.keep_if { |pin| pin.location.nil? || File.file?(pin.location.filename) } if @spec
27
+ @pins
28
+ end
29
+
30
+ private
31
+
32
+ # @param code_object [YARD::CodeObjects::Base]
33
+ # @return [Array<Pin::Base>]
34
+ def generate_pins code_object
35
+ result = []
36
+ if code_object.is_a?(YARD::CodeObjects::NamespaceObject)
37
+ nspin = ToNamespace.make(code_object, @spec, @namespace_pins[code_object.namespace.to_s])
38
+ @namespace_pins[code_object.path] = nspin
39
+ result.push nspin
40
+ if code_object.is_a?(YARD::CodeObjects::ClassObject) and !code_object.superclass.nil?
41
+ # This method of superclass detection is a bit of a hack. If
42
+ # the superclass is a Proxy, it is assumed to be undefined in its
43
+ # yardoc and converted to a fully qualified namespace.
44
+ superclass = if code_object.superclass.is_a?(YARD::CodeObjects::Proxy)
45
+ "::#{code_object.superclass}"
46
+ else
47
+ code_object.superclass.to_s
48
+ end
49
+ result.push Solargraph::Pin::Reference::Superclass.new(name: superclass, closure: nspin)
50
+ end
51
+ code_object.class_mixins.each do |m|
52
+ result.push Solargraph::Pin::Reference::Extend.new(closure: nspin, name: m.path)
53
+ end
54
+ code_object.instance_mixins.each do |m|
55
+ result.push Solargraph::Pin::Reference::Include.new(
56
+ closure: nspin, # @todo Fix this
57
+ name: m.path
58
+ )
59
+ end
60
+ elsif code_object.is_a?(YARD::CodeObjects::MethodObject)
61
+ closure = @namespace_pins[code_object.namespace.to_s]
62
+ if code_object.name == :initialize && code_object.scope == :instance
63
+ # @todo Check the visibility of <Class>.new
64
+ result.push ToMethod.make(code_object, 'new', :class, :public, closure, @spec)
65
+ result.push ToMethod.make(code_object, 'initialize', :instance, :private, closure, @spec)
66
+ else
67
+ result.push ToMethod.make(code_object, nil, nil, nil, closure, @spec)
68
+ end
69
+ elsif code_object.is_a?(YARD::CodeObjects::ConstantObject)
70
+ closure = @namespace_pins[code_object.namespace]
71
+ result.push ToConstant.make(code_object, closure, @spec)
72
+ end
73
+ result
74
+ end
75
+ end
76
+ end
77
+ end
@@ -1,140 +1,140 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rdoc'
4
- require 'rdoc/rdoc'
5
- require 'tmpdir'
6
- require 'fileutils'
7
-
8
- module Solargraph
9
- class YardMap
10
- module RdocToYard
11
- extend ApiMap::SourceToYard
12
-
13
- # @param spec [Gem::Specification]
14
- # @param cache_dir [String]
15
- # @return [void]
16
- def self.run spec, cache_dir: nil
17
- Dir.mktmpdir do |tmpdir|
18
- rdir = File.join(tmpdir, 'sg_tmp_rdoc')
19
- FileUtils.cp_r Dir.glob(File.join(spec.full_gem_path, '*')), tmpdir
20
- Dir.chdir tmpdir do
21
- pins = []
22
- pins.push Solargraph::Pin::ROOT_PIN
23
- name_hash = {}
24
-
25
- argv = ['-q', '-r', '-N', '-o', rdir]
26
- spec.load_paths.each do |path|
27
- argv.concat ['-i', path]
28
- end
29
- rdoc = RDoc::RDoc.new
30
- rdoc.document argv
31
- # @type [RDoc::Store]
32
- store = rdoc.store
33
- store.path = rdir
34
- store.cache[:modules].each do |mod|
35
- # @type [RDoc::NormalClass]
36
- mod = store.find_class_or_module(mod)
37
- closure = pins.select { |pin| pin.path == mod.full_name.split('::')[0..-2].join('::') }.first || pins.first
38
- namepin = Solargraph::Pin::Namespace.new(
39
- type: (mod.module? ? :module : :class),
40
- name: mod.name,
41
- comments: commentary(mod.comment),
42
- closure: closure,
43
- location: locate(mod)
44
- )
45
- mod.parse(mod.comment_location)
46
- # @param inc [RDoc::Include]
47
- mod.includes.each do |inc|
48
- pins.push Solargraph::Pin::Reference::Include.new(
49
- location: locate(inc),
50
- name: inc.name,
51
- closure: namepin
52
- )
53
- end
54
- # @param ext [RDoc::Extend]
55
- mod.extends.each do |ext|
56
- pins.push Solargraph::Pin::Reference::Extend.new(
57
- location: locate(ext),
58
- name: ext.name,
59
- closure: namepin
60
- )
61
- end
62
- pins.push namepin
63
- name_hash[mod.full_name] = namepin
64
- # @param met [RDoc::AnyMethod]
65
- mod.each_method do |met|
66
- pin = Solargraph::SourceMap.load_string("def Object.tmp#{met.param_seq};end").first_pin('Object.tmp') || Solargraph::Pin::Method.new
67
- pins.push Solargraph::Pin::Method.new(
68
- name: met.name,
69
- closure: namepin,
70
- comments: commentary(met.comment),
71
- scope: met.type.to_sym,
72
- parameters: pin.parameters,
73
- visibility: met.visibility,
74
- location: locate(met)
75
- )
76
- end
77
- # @param const [RDoc::Constant]
78
- mod.each_constant do |const|
79
- pins.push Solargraph::Pin::Constant.new(
80
- name: const.name,
81
- closure: namepin,
82
- comments: commentary(const.comment),
83
- location: locate(const)
84
- )
85
- end
86
- end
87
- mapstore = Solargraph::ApiMap::Store.new(pins)
88
- rake_yard(mapstore)
89
- YARD::Registry.clear
90
- code_object_map.values.each do |co|
91
- YARD::Registry.register(co)
92
- end
93
- cache_dir ||= File.join(Solargraph::YardMap::CoreDocs.cache_dir, 'gems', "#{spec.name}-#{spec.version}", "yardoc")
94
- FileUtils.remove_entry_secure cache_dir if File.exist?(cache_dir)
95
- FileUtils.mkdir_p cache_dir
96
- # @todo Should merge be true?
97
- YARD::Registry.save true, cache_dir
98
- # Clear the serialized cache if it exists
99
- FileUtils.safe_unlink File.join(CoreDocs.cache_dir, 'gems', "#{spec.name}-#{spec.version}.ser")
100
- end
101
- end
102
- end
103
-
104
- def self.base_name mod
105
- mod.full_name.split('::')[0..-2].join('::')
106
- end
107
-
108
- # @param cmnt [RDoc::Comment]
109
- # @return [String]
110
- def self.commentary cmnt
111
- return cmnt if cmnt.is_a?(String)
112
- return cmnt.text if cmnt.is_a?(RDoc::Comment)
113
- result = []
114
- cmnt.parts.each do |part|
115
- result.push RDoc::Markup::ToHtml.new({}).to_html(part.text) if part.respond_to?(:text)
116
- end
117
- result.join("\n\n")
118
- end
119
-
120
- # @param obj [RDoc::Context]
121
- def self.locate obj
122
- # @todo line is always nil for some reason
123
- file, line = find_file(obj)
124
- return nil if file.nil?
125
- Location.new(
126
- file,
127
- Range.from_to(line || 1, 0, line || 1, 0)
128
- )
129
- end
130
-
131
- def self.find_file obj
132
- if obj.respond_to?(:in_files) && !obj.in_files.empty?
133
- [obj.in_files.first.to_s.sub(/^file /, ''), obj.line]
134
- else
135
- [obj.file, obj.line]
136
- end
137
- end
138
- end
139
- end
140
- end
1
+ # frozen_string_literal: true
2
+
3
+ require 'rdoc'
4
+ require 'rdoc/rdoc'
5
+ require 'tmpdir'
6
+ require 'fileutils'
7
+
8
+ module Solargraph
9
+ class YardMap
10
+ module RdocToYard
11
+ extend ApiMap::SourceToYard
12
+
13
+ # @param spec [Gem::Specification]
14
+ # @param cache_dir [String]
15
+ # @return [void]
16
+ def self.run spec, cache_dir: nil
17
+ Dir.mktmpdir do |tmpdir|
18
+ rdir = File.join(tmpdir, 'sg_tmp_rdoc')
19
+ FileUtils.cp_r Dir.glob(File.join(spec.full_gem_path, '*')), tmpdir
20
+ Dir.chdir tmpdir do
21
+ pins = []
22
+ pins.push Solargraph::Pin::ROOT_PIN
23
+ name_hash = {}
24
+
25
+ argv = ['-q', '-r', '-N', '-o', rdir]
26
+ spec.load_paths.each do |path|
27
+ argv.concat ['-i', path]
28
+ end
29
+ rdoc = RDoc::RDoc.new
30
+ rdoc.document argv
31
+ # @type [RDoc::Store]
32
+ store = rdoc.store
33
+ store.path = rdir
34
+ store.cache[:modules].each do |mod|
35
+ # @type [RDoc::NormalClass]
36
+ mod = store.find_class_or_module(mod)
37
+ closure = pins.select { |pin| pin.path == mod.full_name.split('::')[0..-2].join('::') }.first || pins.first
38
+ namepin = Solargraph::Pin::Namespace.new(
39
+ type: (mod.module? ? :module : :class),
40
+ name: mod.name,
41
+ comments: commentary(mod.comment),
42
+ closure: closure,
43
+ location: locate(mod)
44
+ )
45
+ mod.parse(mod.comment_location)
46
+ # @param inc [RDoc::Include]
47
+ mod.includes.each do |inc|
48
+ pins.push Solargraph::Pin::Reference::Include.new(
49
+ location: locate(inc),
50
+ name: inc.name,
51
+ closure: namepin
52
+ )
53
+ end
54
+ # @param ext [RDoc::Extend]
55
+ mod.extends.each do |ext|
56
+ pins.push Solargraph::Pin::Reference::Extend.new(
57
+ location: locate(ext),
58
+ name: ext.name,
59
+ closure: namepin
60
+ )
61
+ end
62
+ pins.push namepin
63
+ name_hash[mod.full_name] = namepin
64
+ # @param met [RDoc::AnyMethod]
65
+ mod.each_method do |met|
66
+ pin = Solargraph::SourceMap.load_string("def Object.tmp#{met.param_seq};end").first_pin('Object.tmp') || Solargraph::Pin::Method.new
67
+ pins.push Solargraph::Pin::Method.new(
68
+ name: met.name,
69
+ closure: namepin,
70
+ comments: commentary(met.comment),
71
+ scope: met.type.to_sym,
72
+ parameters: pin.parameters,
73
+ visibility: met.visibility,
74
+ location: locate(met)
75
+ )
76
+ end
77
+ # @param const [RDoc::Constant]
78
+ mod.each_constant do |const|
79
+ pins.push Solargraph::Pin::Constant.new(
80
+ name: const.name,
81
+ closure: namepin,
82
+ comments: commentary(const.comment),
83
+ location: locate(const)
84
+ )
85
+ end
86
+ end
87
+ mapstore = Solargraph::ApiMap::Store.new(pins)
88
+ rake_yard(mapstore)
89
+ YARD::Registry.clear
90
+ code_object_map.values.each do |co|
91
+ YARD::Registry.register(co)
92
+ end
93
+ cache_dir ||= File.join(Solargraph::YardMap::CoreDocs.cache_dir, 'gems', "#{spec.name}-#{spec.version}", "yardoc")
94
+ FileUtils.remove_entry_secure cache_dir if File.exist?(cache_dir)
95
+ FileUtils.mkdir_p cache_dir
96
+ # @todo Should merge be true?
97
+ YARD::Registry.save true, cache_dir
98
+ # Clear the serialized cache if it exists
99
+ FileUtils.safe_unlink File.join(CoreDocs.cache_dir, 'gems', "#{spec.name}-#{spec.version}.ser")
100
+ end
101
+ end
102
+ end
103
+
104
+ def self.base_name mod
105
+ mod.full_name.split('::')[0..-2].join('::')
106
+ end
107
+
108
+ # @param cmnt [RDoc::Comment]
109
+ # @return [String]
110
+ def self.commentary cmnt
111
+ return cmnt if cmnt.is_a?(String)
112
+ return cmnt.text if cmnt.is_a?(RDoc::Comment)
113
+ result = []
114
+ cmnt.parts.each do |part|
115
+ result.push RDoc::Markup::ToHtml.new({}).to_html(part.text) if part.respond_to?(:text)
116
+ end
117
+ result.join("\n\n")
118
+ end
119
+
120
+ # @param obj [RDoc::Context]
121
+ def self.locate obj
122
+ # @todo line is always nil for some reason
123
+ file, line = find_file(obj)
124
+ return nil if file.nil?
125
+ Location.new(
126
+ file,
127
+ Range.from_to(line || 1, 0, line || 1, 0)
128
+ )
129
+ end
130
+
131
+ def self.find_file obj
132
+ if obj.respond_to?(:in_files) && !obj.in_files.empty?
133
+ [obj.in_files.first.to_s.sub(/^file /, ''), obj.line]
134
+ else
135
+ [obj.file, obj.line]
136
+ end
137
+ end
138
+ end
139
+ end
140
+ end