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,203 +1,208 @@
1
- module Solargraph
2
- class YardMap
3
- module CoreFills
4
- Override = Pin::Reference::Override
5
-
6
- KEYWORDS = [
7
- '__ENCODING__', '__LINE__', '__FILE__', 'BEGIN', 'END', 'alias', 'and',
8
- 'begin', 'break', 'case', 'class', 'def', 'defined?', 'do', 'else',
9
- 'elsif', 'end', 'ensure', 'false', 'for', 'if', 'in', 'module', 'next',
10
- 'nil', 'not', 'or', 'redo', 'rescue', 'retry', 'return', 'self', 'super',
11
- 'then', 'true', 'undef', 'unless', 'until', 'when', 'while', 'yield'
12
- ].map { |k| Pin::Keyword.new(k) }
13
-
14
- methods_with_yieldparam_subtypes = %w[
15
- Array#each Array#map Array#map! Array#any? Array#all? Array#index
16
- Array#keep_if Array#delete_if
17
- Enumerable#each_entry Enumerable#map Enumerable#any? Enumerable#all?
18
- Enumerable#select Enumerable#reject
19
- Set#each
20
- ]
21
-
22
- OVERRIDES = [
23
- Override.method_return('Array#concat', 'Array'),
24
- Override.method_return('Array#keep_if', 'self'),
25
- Override.method_return('Array#delete_if', 'self'),
26
- Override.from_comment('Array#map', %(
27
- @overload map(&block)
28
- @return [Array]
29
- @overload map()
30
- @return [Enumerator]
31
- )),
32
- Override.from_comment('Array#reject', %(
33
- @overload reject(&block)
34
- @return [self]
35
- @overload reject()
36
- @return [Enumerator]
37
- )),
38
- Override.method_return('Array#reverse', 'self', delete: ['overload']),
39
- Override.from_comment('Array#select', %(
40
- @overload select(&block)
41
- @return [self]
42
- @overload select()
43
- @return [Enumerator]
44
- )),
45
- Override.from_comment('Array#[]', %(
46
- @overload [](range)
47
- @param range [Range]
48
- @return [self]
49
- @overload [](num1, num2)
50
- @param num1 [Integer]
51
- @param num2 [Integer]
52
- @return [self]
53
- @overload [](num)
54
- @param num [Integer]
55
- @return_single_parameter
56
- @return_single_parameter
57
- )),
58
- Override.from_comment('Array#first', %(
59
- @overload first(num)
60
- @param num [Integer]
61
- @return [self]
62
- @return_single_parameter
63
- )),
64
- Override.from_comment('Array#last', %(
65
- @overload last(num)
66
- @param num [Integer]
67
- @return [self]
68
- @return_single_parameter
69
- )),
70
- Override.method_return('Array#map', 'Array'),
71
- Override.method_return('Array#uniq', 'self'),
72
- Override.method_return('Array#zip', 'Array, nil'),
73
-
74
- Override.from_comment('BasicObject#==', %(
75
- @param other [BasicObject]
76
- @return [Boolean]
77
- )),
78
- Override.method_return('BasicObject#initialize', 'void'),
79
-
80
- Override.method_return('Class#new', 'self'),
81
- Override.method_return('Class.new', 'Class<Object>'),
82
- Override.method_return('Class#allocate', 'self'),
83
- Override.method_return('Class.allocate', 'Class<Object>'),
84
-
85
- Override.from_comment('Enumerable#detect', %(
86
- @overload detect(&block)
87
- @return_single_parameter
88
- @overload detect()
89
- @return [Enumerator]
90
- )),
91
- Override.from_comment('Enumerable#find', %(
92
- @overload find(&block)
93
- @return_single_parameter
94
- @overload find()
95
- @return [Enumerator]
96
- )),
97
- Override.method_return('Enumerable#select', 'self'),
98
-
99
- Override.method_return('File.absolute_path', 'String'),
100
- Override.method_return('File.basename', 'String'),
101
- Override.method_return('File.dirname', 'String'),
102
- Override.method_return('File.extname', 'String'),
103
- Override.method_return('File.join', 'String'),
104
-
105
- Override.from_comment('Float#+', %(
106
- @param y [Numeric]
107
- @return [Numeric]
108
- )),
109
-
110
- Override.from_comment('Hash#[]', %(
111
- @return_value_parameter
112
- )),
113
-
114
- # @todo This override isn't robust enough. It needs to allow for
115
- # parameterized Hash types, e.g., [Hash{Symbol => String}].
116
- Override.from_comment('Hash#[]=', %(
117
- @param_tuple
118
- )),
119
-
120
- Override.method_return('Hash#merge', 'Hash'),
121
-
122
- Override.from_comment('Integer#+', %(
123
- @param y [Numeric]
124
- @return [Numeric]
125
- )),
126
- Override.from_comment('Integer#times', %(
127
- @overload times(&block)
128
- @return [Integer]
129
- @overload times()
130
- @return [Enumerator]
131
- )),
132
-
133
- Override.method_return('Kernel#puts', 'nil'),
134
-
135
- Override.from_comment('Numeric#+', %(
136
- @param y [Numeric]
137
- @return [Numeric]
138
- )),
139
-
140
- Override.method_return('Object#!', 'Boolean'),
141
- Override.method_return('Object#clone', 'self', delete: [:overload]),
142
- Override.method_return('Object#dup', 'self', delete: [:overload]),
143
- Override.method_return('Object#freeze', 'self', delete: [:overload]),
144
- Override.method_return('Object#inspect', 'String'),
145
- Override.method_return('Object#taint', 'self'),
146
- Override.method_return('Object#to_s', 'String'),
147
- Override.method_return('Object#untaint', 'self'),
148
- Override.from_comment('Object#tap', %(
149
- @return [self]
150
- @yieldparam [self]
151
- )),
152
-
153
- Override.from_comment('STDERR', %(
154
- @type [IO]
155
- )),
156
-
157
- Override.from_comment('STDIN', %(
158
- @type [IO]
159
- )),
160
-
161
- Override.from_comment('STDOUT', %(
162
- @type [IO]
163
- )),
164
-
165
- Override.method_return('String#freeze', 'self'),
166
- Override.method_return('String#split', 'Array<String>'),
167
- Override.method_return('String#lines', 'Array<String>'),
168
- Override.from_comment('String#each_line', %(
169
- @yieldparam [String]
170
- )),
171
- Override.from_comment('String.new', %(
172
- @overload new(*)
173
- @return [self]
174
- ))
175
- ].concat(
176
- methods_with_yieldparam_subtypes.map do |path|
177
- Override.from_comment(path, %(
178
- @yieldparam_single_parameter
179
- ))
180
- end
181
- )
182
-
183
- PINS = [
184
- Pin::Reference::Superclass.new(closure: Pin::Namespace.new(name: 'File'), name: 'IO'),
185
- Pin::Reference::Superclass.new(closure: Pin::Namespace.new(name: 'Integer'), name: 'Numeric'),
186
- Pin::Reference::Superclass.new(closure: Pin::Namespace.new(name: 'Float'), name: 'Numeric')
187
- ].concat(
188
- # HACK: Add Errno exception classes
189
- begin
190
- errno = Solargraph::Pin::Namespace.new(name: 'Errno')
191
- result = []
192
- Errno.constants.each do |const|
193
- result.push Solargraph::Pin::Namespace.new(type: :class, name: const.to_s, closure: errno)
194
- result.push Solargraph::Pin::Reference::Superclass.new(closure: result.last, name: 'SystemCallError')
195
- end
196
- result
197
- end
198
- )
199
-
200
- ALL = KEYWORDS + PINS + OVERRIDES
201
- end
202
- end
203
- end
1
+ module Solargraph
2
+ class YardMap
3
+ module CoreFills
4
+ Override = Pin::Reference::Override
5
+
6
+ KEYWORDS = [
7
+ '__ENCODING__', '__LINE__', '__FILE__', 'BEGIN', 'END', 'alias', 'and',
8
+ 'begin', 'break', 'case', 'class', 'def', 'defined?', 'do', 'else',
9
+ 'elsif', 'end', 'ensure', 'false', 'for', 'if', 'in', 'module', 'next',
10
+ 'nil', 'not', 'or', 'redo', 'rescue', 'retry', 'return', 'self', 'super',
11
+ 'then', 'true', 'undef', 'unless', 'until', 'when', 'while', 'yield'
12
+ ].map { |k| Pin::Keyword.new(k) }
13
+
14
+ methods_with_yieldparam_subtypes = %w[
15
+ Array#each Array#map Array#map! Array#any? Array#all? Array#index
16
+ Array#keep_if Array#delete_if
17
+ Enumerable#each_entry Enumerable#map Enumerable#any? Enumerable#all?
18
+ Enumerable#select Enumerable#reject
19
+ Set#each
20
+ ]
21
+
22
+ OVERRIDES = [
23
+ Override.method_return('Array#concat', 'Array'),
24
+ Override.method_return('Array#keep_if', 'self'),
25
+ Override.method_return('Array#delete_if', 'self'),
26
+ Override.from_comment('Array#map', %(
27
+ @overload map(&block)
28
+ @return [Array]
29
+ @overload map()
30
+ @return [Enumerator]
31
+ )),
32
+ Override.from_comment('Array#reject', %(
33
+ @overload reject(&block)
34
+ @return [self]
35
+ @overload reject()
36
+ @return [Enumerator]
37
+ )),
38
+ Override.method_return('Array#reverse', 'self', delete: ['overload']),
39
+ Override.from_comment('Array#select', %(
40
+ @overload select(&block)
41
+ @return [self]
42
+ @overload select()
43
+ @return [Enumerator]
44
+ )),
45
+ Override.from_comment('Array#[]', %(
46
+ @overload [](range)
47
+ @param range [Range]
48
+ @return [self]
49
+ @overload [](num1, num2)
50
+ @param num1 [Integer]
51
+ @param num2 [Integer]
52
+ @return [self]
53
+ @overload [](num)
54
+ @param num [Integer]
55
+ @return_single_parameter
56
+ @return_single_parameter
57
+ )),
58
+ Override.from_comment('Array#first', %(
59
+ @overload first(num)
60
+ @param num [Integer]
61
+ @return [self]
62
+ @return_single_parameter
63
+ )),
64
+ Override.from_comment('Array#last', %(
65
+ @overload last(num)
66
+ @param num [Integer]
67
+ @return [self]
68
+ @return_single_parameter
69
+ )),
70
+ Override.method_return('Array#map', 'Array'),
71
+ Override.method_return('Array#uniq', 'self'),
72
+ Override.method_return('Array#zip', 'Array, nil'),
73
+
74
+ Override.from_comment('BasicObject#==', %(
75
+ @param other [BasicObject]
76
+ @return [Boolean]
77
+ )),
78
+ Override.method_return('BasicObject#initialize', 'void'),
79
+
80
+ Override.method_return('Class#new', 'self'),
81
+ Override.method_return('Class.new', 'Class<Object>'),
82
+ Override.method_return('Class#allocate', 'self'),
83
+ Override.method_return('Class.allocate', 'Class<Object>'),
84
+
85
+ Override.from_comment('Enumerable#detect', %(
86
+ @overload detect(&block)
87
+ @return_single_parameter
88
+ @overload detect()
89
+ @return [Enumerator]
90
+ )),
91
+ Override.from_comment('Enumerable#find', %(
92
+ @overload find(&block)
93
+ @return_single_parameter
94
+ @overload find()
95
+ @return [Enumerator]
96
+ )),
97
+ Override.method_return('Enumerable#select', 'self'),
98
+
99
+ Override.method_return('File.absolute_path', 'String'),
100
+ Override.method_return('File.basename', 'String'),
101
+ Override.method_return('File.dirname', 'String'),
102
+ Override.method_return('File.extname', 'String'),
103
+ Override.method_return('File.join', 'String'),
104
+ Override.method_return('File.open', 'File'),
105
+
106
+ Override.from_comment('Float#+', %(
107
+ @param y [Numeric]
108
+ @return [Numeric]
109
+ )),
110
+
111
+ Override.from_comment('Hash#[]', %(
112
+ @return_value_parameter
113
+ )),
114
+ # @todo This override isn't robust enough. It needs to allow for
115
+ # parameterized Hash types, e.g., [Hash{Symbol => String}].
116
+ Override.from_comment('Hash#[]=', %(
117
+ @param_tuple
118
+ )),
119
+ Override.method_return('Hash#merge', 'Hash'),
120
+ Override.from_comment('Hash#store', %{
121
+ @overload store(key, value)
122
+ }),
123
+
124
+ Override.from_comment('Integer#+', %(
125
+ @param y [Numeric]
126
+ @return [Numeric]
127
+ )),
128
+ Override.from_comment('Integer#times', %(
129
+ @overload times(&block)
130
+ @return [Integer]
131
+ @overload times()
132
+ @return [Enumerator]
133
+ )),
134
+
135
+ Override.method_return('Kernel#puts', 'nil'),
136
+
137
+ Override.from_comment('Numeric#+', %(
138
+ @param y [Numeric]
139
+ @return [Numeric]
140
+ )),
141
+
142
+ Override.method_return('Object#!', 'Boolean'),
143
+ Override.method_return('Object#clone', 'self', delete: [:overload]),
144
+ Override.method_return('Object#dup', 'self', delete: [:overload]),
145
+ Override.method_return('Object#freeze', 'self', delete: [:overload]),
146
+ Override.method_return('Object#inspect', 'String'),
147
+ Override.method_return('Object#taint', 'self'),
148
+ Override.method_return('Object#to_s', 'String'),
149
+ Override.method_return('Object#untaint', 'self'),
150
+ Override.from_comment('Object#tap', %(
151
+ @return [self]
152
+ @yieldparam [self]
153
+ )),
154
+
155
+ Override.from_comment('STDERR', %(
156
+ @type [IO]
157
+ )),
158
+
159
+ Override.from_comment('STDIN', %(
160
+ @type [IO]
161
+ )),
162
+
163
+ Override.from_comment('STDOUT', %(
164
+ @type [IO]
165
+ )),
166
+
167
+ Override.method_return('String#freeze', 'self'),
168
+ Override.method_return('String#split', 'Array<String>'),
169
+ Override.method_return('String#lines', 'Array<String>'),
170
+ Override.from_comment('String#each_line', %(
171
+ @yieldparam [String]
172
+ )),
173
+ Override.from_comment('String.new', %(
174
+ @overload new(*)
175
+ @return [self]
176
+ ))
177
+ ].concat(
178
+ methods_with_yieldparam_subtypes.map do |path|
179
+ Override.from_comment(path, %(
180
+ @yieldparam_single_parameter
181
+ ))
182
+ end
183
+ )
184
+
185
+ PINS = [
186
+ # HACK: Extending Hash is not accurate to the implementation, but
187
+ # accurate enough to the behavior
188
+ Pin::Reference::Extend.new(closure: Pin::Namespace.new(name: 'ENV'), name: 'Hash'),
189
+ Pin::Reference::Superclass.new(closure: Pin::Namespace.new(name: 'File'), name: 'IO'),
190
+ Pin::Reference::Superclass.new(closure: Pin::Namespace.new(name: 'Integer'), name: 'Numeric'),
191
+ Pin::Reference::Superclass.new(closure: Pin::Namespace.new(name: 'Float'), name: 'Numeric')
192
+ ].concat(
193
+ # HACK: Add Errno exception classes
194
+ begin
195
+ errno = Solargraph::Pin::Namespace.new(name: 'Errno')
196
+ result = []
197
+ Errno.constants.each do |const|
198
+ result.push Solargraph::Pin::Namespace.new(type: :class, name: const.to_s, closure: errno)
199
+ result.push Solargraph::Pin::Reference::Superclass.new(closure: result.last, name: 'SystemCallError')
200
+ end
201
+ result
202
+ end
203
+ )
204
+
205
+ ALL = KEYWORDS + PINS + OVERRIDES
206
+ end
207
+ end
208
+ end
@@ -1,76 +1,76 @@
1
- # frozen_string_literal: true
2
-
3
- require 'fileutils'
4
- require 'tmpdir'
5
- require 'pathname'
6
- require 'rubygems/package'
7
- require 'shellwords'
8
-
9
- module Solargraph
10
- class YardMap
11
- # Tools for generating core documentation.
12
- #
13
- module CoreGen
14
- class << self
15
- # Generate documentation from the specified Ruby source directory.
16
- #
17
- # @param ruby_dir [String] The Ruby source directory
18
- # @param dest_dir [String] The destination directory for the yardocs
19
- # @return [void]
20
- def generate_docs ruby_dir, dest_dir
21
- path_name = Pathname.new(Dir.pwd).join(dest_dir).to_s
22
- FileUtils.mkdir_p path_name
23
- Dir.chdir(ruby_dir) do
24
- `yardoc -b "#{File.join(path_name, 'yardoc')}" -n *.c`
25
- raise 'An error occurred generating the core yardoc.' unless $?.success?
26
- `yardoc -b "#{File.join(path_name, 'yardoc-stdlib')}" -n lib ext`
27
- raise 'An error occurred generating the stdlib yardoc.' unless $?.success?
28
- end
29
- end
30
-
31
- # Generate a gzip of documentation from the specified Ruby source
32
- # directory.
33
- #
34
- # This method is designed to generate the directory architecture that
35
- # YardMap core docs expect.
36
- #
37
- # @param ruby_dir [String] The Ruby source directory
38
- # @param ver_name [String, nil] The version name
39
- # @param dest_dir [String] The destination directory
40
- # @return [void]
41
- def generate_gzip ruby_dir, ver_name = nil, dest_dir = Dir.pwd
42
- Dir.mktmpdir do |tmp|
43
- base_name = ver_name || begin
44
- match = ruby_dir.match(/\d+\.\d+\.\d+$/)
45
- raise "Unable to determine version name from #{ruby_dir}" if match.nil?
46
- match[0]
47
- end
48
- path_name = Pathname.new(tmp).join(base_name).to_s
49
- generate_docs ruby_dir, path_name
50
- gzip path_name, Pathname.new(dest_dir).join("#{base_name}.tar.gz").to_s
51
- end
52
- end
53
-
54
- private
55
-
56
- # @param dir [String] The directory to compress
57
- # @param dst [String] The destination file
58
- def gzip dir, dst
59
- File.open(dst, 'wb') do |file|
60
- Zlib::GzipWriter.wrap(file) do |gzip|
61
- Gem::Package::TarWriter.new(gzip) do |tar|
62
- Dir["#{dir}/**/*"].each do |filename|
63
- next if File.directory?(filename)
64
- relname = File.join(File.basename(dir), filename[dir.length+1..-1])
65
- tar.add_file_simple(relname, 0o644, File.size(filename)) do |io|
66
- io.write File.read_binary(filename)
67
- end
68
- end
69
- end
70
- end
71
- end
72
- end
73
- end
74
- end
75
- end
76
- end
1
+ # frozen_string_literal: true
2
+
3
+ require 'fileutils'
4
+ require 'tmpdir'
5
+ require 'pathname'
6
+ require 'rubygems/package'
7
+ require 'shellwords'
8
+
9
+ module Solargraph
10
+ class YardMap
11
+ # Tools for generating core documentation.
12
+ #
13
+ module CoreGen
14
+ class << self
15
+ # Generate documentation from the specified Ruby source directory.
16
+ #
17
+ # @param ruby_dir [String] The Ruby source directory
18
+ # @param dest_dir [String] The destination directory for the yardocs
19
+ # @return [void]
20
+ def generate_docs ruby_dir, dest_dir
21
+ path_name = Pathname.new(Dir.pwd).join(dest_dir).to_s
22
+ FileUtils.mkdir_p path_name
23
+ Dir.chdir(ruby_dir) do
24
+ `yardoc -b "#{File.join(path_name, 'yardoc')}" -n *.c`
25
+ raise 'An error occurred generating the core yardoc.' unless $?.success?
26
+ `yardoc -b "#{File.join(path_name, 'yardoc-stdlib')}" -n lib ext`
27
+ raise 'An error occurred generating the stdlib yardoc.' unless $?.success?
28
+ end
29
+ end
30
+
31
+ # Generate a gzip of documentation from the specified Ruby source
32
+ # directory.
33
+ #
34
+ # This method is designed to generate the directory architecture that
35
+ # YardMap core docs expect.
36
+ #
37
+ # @param ruby_dir [String] The Ruby source directory
38
+ # @param ver_name [String, nil] The version name
39
+ # @param dest_dir [String] The destination directory
40
+ # @return [void]
41
+ def generate_gzip ruby_dir, ver_name = nil, dest_dir = Dir.pwd
42
+ Dir.mktmpdir do |tmp|
43
+ base_name = ver_name || begin
44
+ match = ruby_dir.match(/\d+\.\d+\.\d+$/)
45
+ raise "Unable to determine version name from #{ruby_dir}" if match.nil?
46
+ match[0]
47
+ end
48
+ path_name = Pathname.new(tmp).join(base_name).to_s
49
+ generate_docs ruby_dir, path_name
50
+ gzip path_name, Pathname.new(dest_dir).join("#{base_name}.tar.gz").to_s
51
+ end
52
+ end
53
+
54
+ private
55
+
56
+ # @param dir [String] The directory to compress
57
+ # @param dst [String] The destination file
58
+ def gzip dir, dst
59
+ File.open(dst, 'wb') do |file|
60
+ Zlib::GzipWriter.wrap(file) do |gzip|
61
+ Gem::Package::TarWriter.new(gzip) do |tar|
62
+ Dir["#{dir}/**/*"].each do |filename|
63
+ next if File.directory?(filename)
64
+ relname = File.join(File.basename(dir), filename[dir.length+1..-1])
65
+ tar.add_file_simple(relname, 0o644, File.size(filename)) do |io|
66
+ io.write File.read_binary(filename)
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
@@ -1,16 +1,16 @@
1
- module Solargraph
2
- class YardMap
3
- module Helpers
4
- module_function
5
-
6
- # @param code_object [YARD::CodeObjects::Base]
7
- # @param spec [Gem::Specification]
8
- # @return [Solargraph::Location, nil]
9
- def object_location code_object, spec
10
- return nil if spec.nil? || code_object.nil? || code_object.file.nil? || code_object.line.nil?
11
- file = File.join(spec.full_gem_path, code_object.file)
12
- Solargraph::Location.new(file, Solargraph::Range.from_to(code_object.line - 1, 0, code_object.line - 1, 0))
13
- end
14
- end
15
- end
16
- end
1
+ module Solargraph
2
+ class YardMap
3
+ module Helpers
4
+ module_function
5
+
6
+ # @param code_object [YARD::CodeObjects::Base]
7
+ # @param spec [Gem::Specification]
8
+ # @return [Solargraph::Location, nil]
9
+ def object_location code_object, spec
10
+ return nil if spec.nil? || code_object.nil? || code_object.file.nil? || code_object.line.nil?
11
+ file = File.join(spec.full_gem_path, code_object.file)
12
+ Solargraph::Location.new(file, Solargraph::Range.from_to(code_object.line - 1, 0, code_object.line - 1, 0))
13
+ end
14
+ end
15
+ end
16
+ end
@@ -1,25 +1,25 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- class YardMap
5
- class Mapper
6
- module ToConstant
7
- extend YardMap::Helpers
8
-
9
- def self.make code_object, 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
- Pin::Constant.new(
15
- location: object_location(code_object, spec),
16
- closure: closure,
17
- name: code_object.name.to_s,
18
- comments: code_object.docstring ? code_object.docstring.all.to_s : '',
19
- visibility: code_object.visibility
20
- )
21
- end
22
- end
23
- end
24
- end
25
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ class YardMap
5
+ class Mapper
6
+ module ToConstant
7
+ extend YardMap::Helpers
8
+
9
+ def self.make code_object, 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
+ Pin::Constant.new(
15
+ location: object_location(code_object, spec),
16
+ closure: closure,
17
+ name: code_object.name.to_s,
18
+ comments: code_object.docstring ? code_object.docstring.all.to_s : '',
19
+ visibility: code_object.visibility
20
+ )
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end