solargraph 0.58.0 → 0.59.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 (219) hide show
  1. checksums.yaml +4 -4
  2. data/.envrc +3 -0
  3. data/.gitattributes +2 -0
  4. data/.github/workflows/linting.yml +6 -5
  5. data/.github/workflows/plugins.yml +48 -35
  6. data/.github/workflows/rspec.yml +15 -28
  7. data/.github/workflows/typecheck.yml +3 -2
  8. data/.gitignore +1 -0
  9. data/.rubocop.yml +38 -6
  10. data/.rubocop_todo.yml +53 -966
  11. data/CHANGELOG.md +24 -0
  12. data/Gemfile +3 -1
  13. data/README.md +3 -3
  14. data/Rakefile +26 -23
  15. data/bin/solargraph +9 -8
  16. data/lib/solargraph/api_map/cache.rb +110 -110
  17. data/lib/solargraph/api_map/constants.rb +288 -279
  18. data/lib/solargraph/api_map/index.rb +204 -193
  19. data/lib/solargraph/api_map/source_to_yard.rb +110 -97
  20. data/lib/solargraph/api_map/store.rb +395 -384
  21. data/lib/solargraph/api_map.rb +1029 -945
  22. data/lib/solargraph/bench.rb +44 -45
  23. data/lib/solargraph/complex_type/conformance.rb +176 -0
  24. data/lib/solargraph/complex_type/type_methods.rb +240 -228
  25. data/lib/solargraph/complex_type/unique_type.rb +641 -482
  26. data/lib/solargraph/complex_type.rb +557 -444
  27. data/lib/solargraph/convention/data_definition/data_assignment_node.rb +61 -61
  28. data/lib/solargraph/convention/data_definition/data_definition_node.rb +93 -91
  29. data/lib/solargraph/convention/data_definition.rb +108 -105
  30. data/lib/solargraph/convention/gemfile.rb +15 -15
  31. data/lib/solargraph/convention/gemspec.rb +23 -23
  32. data/lib/solargraph/convention/rakefile.rb +17 -17
  33. data/lib/solargraph/convention/struct_definition/struct_assignment_node.rb +62 -61
  34. data/lib/solargraph/convention/struct_definition/struct_definition_node.rb +103 -102
  35. data/lib/solargraph/convention/struct_definition.rb +168 -164
  36. data/lib/solargraph/convention.rb +78 -78
  37. data/lib/solargraph/converters/dd.rb +19 -17
  38. data/lib/solargraph/converters/dl.rb +17 -15
  39. data/lib/solargraph/converters/dt.rb +17 -15
  40. data/lib/solargraph/converters/misc.rb +3 -1
  41. data/lib/solargraph/diagnostics/require_not_found.rb +54 -53
  42. data/lib/solargraph/diagnostics/rubocop.rb +119 -118
  43. data/lib/solargraph/diagnostics/rubocop_helpers.rb +70 -68
  44. data/lib/solargraph/diagnostics/type_check.rb +56 -55
  45. data/lib/solargraph/diagnostics/update_errors.rb +37 -41
  46. data/lib/solargraph/doc_map.rb +438 -439
  47. data/lib/solargraph/equality.rb +34 -34
  48. data/lib/solargraph/gem_pins.rb +98 -98
  49. data/lib/solargraph/language_server/error_codes.rb +20 -20
  50. data/lib/solargraph/language_server/host/diagnoser.rb +89 -89
  51. data/lib/solargraph/language_server/host/dispatch.rb +130 -130
  52. data/lib/solargraph/language_server/host/message_worker.rb +113 -112
  53. data/lib/solargraph/language_server/host/sources.rb +100 -99
  54. data/lib/solargraph/language_server/host.rb +886 -878
  55. data/lib/solargraph/language_server/message/base.rb +97 -97
  56. data/lib/solargraph/language_server/message/client/register_capability.rb +13 -15
  57. data/lib/solargraph/language_server/message/completion_item/resolve.rb +58 -60
  58. data/lib/solargraph/language_server/message/extended/check_gem_version.rb +108 -114
  59. data/lib/solargraph/language_server/message/extended/document.rb +24 -23
  60. data/lib/solargraph/language_server/message/extended/document_gems.rb +32 -32
  61. data/lib/solargraph/language_server/message/extended/download_core.rb +20 -19
  62. data/lib/solargraph/language_server/message/extended/search.rb +20 -20
  63. data/lib/solargraph/language_server/message/initialize.rb +197 -191
  64. data/lib/solargraph/language_server/message/text_document/completion.rb +58 -56
  65. data/lib/solargraph/language_server/message/text_document/definition.rb +49 -40
  66. data/lib/solargraph/language_server/message/text_document/document_highlight.rb +23 -16
  67. data/lib/solargraph/language_server/message/text_document/document_symbol.rb +36 -26
  68. data/lib/solargraph/language_server/message/text_document/formatting.rb +150 -148
  69. data/lib/solargraph/language_server/message/text_document/hover.rb +58 -58
  70. data/lib/solargraph/language_server/message/text_document/prepare_rename.rb +18 -11
  71. data/lib/solargraph/language_server/message/text_document/references.rb +23 -16
  72. data/lib/solargraph/language_server/message/text_document/rename.rb +26 -19
  73. data/lib/solargraph/language_server/message/text_document/signature_help.rb +25 -24
  74. data/lib/solargraph/language_server/message/text_document/type_definition.rb +33 -25
  75. data/lib/solargraph/language_server/message/workspace/did_change_configuration.rb +41 -35
  76. data/lib/solargraph/language_server/message/workspace/did_change_watched_files.rb +48 -40
  77. data/lib/solargraph/language_server/message/workspace/did_change_workspace_folders.rb +32 -26
  78. data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +33 -23
  79. data/lib/solargraph/language_server/message.rb +94 -94
  80. data/lib/solargraph/language_server/request.rb +29 -27
  81. data/lib/solargraph/language_server/transport/data_reader.rb +72 -74
  82. data/lib/solargraph/language_server/uri_helpers.rb +49 -49
  83. data/lib/solargraph/library.rb +702 -683
  84. data/lib/solargraph/location.rb +85 -82
  85. data/lib/solargraph/logging.rb +55 -37
  86. data/lib/solargraph/page.rb +92 -92
  87. data/lib/solargraph/parser/comment_ripper.rb +84 -69
  88. data/lib/solargraph/parser/flow_sensitive_typing.rb +471 -255
  89. data/lib/solargraph/parser/node_processor/base.rb +122 -92
  90. data/lib/solargraph/parser/node_processor.rb +63 -62
  91. data/lib/solargraph/parser/parser_gem/class_methods.rb +165 -149
  92. data/lib/solargraph/parser/parser_gem/flawed_builder.rb +19 -19
  93. data/lib/solargraph/parser/parser_gem/node_chainer.rb +191 -166
  94. data/lib/solargraph/parser/parser_gem/node_methods.rb +507 -486
  95. data/lib/solargraph/parser/parser_gem/node_processors/and_node.rb +22 -22
  96. data/lib/solargraph/parser/parser_gem/node_processors/args_node.rb +61 -59
  97. data/lib/solargraph/parser/parser_gem/node_processors/begin_node.rb +24 -15
  98. data/lib/solargraph/parser/parser_gem/node_processors/block_node.rb +45 -46
  99. data/lib/solargraph/parser/parser_gem/node_processors/def_node.rb +60 -53
  100. data/lib/solargraph/parser/parser_gem/node_processors/defs_node.rb +38 -37
  101. data/lib/solargraph/parser/parser_gem/node_processors/if_node.rb +53 -23
  102. data/lib/solargraph/parser/parser_gem/node_processors/ivasgn_node.rb +42 -40
  103. data/lib/solargraph/parser/parser_gem/node_processors/lvasgn_node.rb +30 -29
  104. data/lib/solargraph/parser/parser_gem/node_processors/masgn_node.rb +61 -59
  105. data/lib/solargraph/parser/parser_gem/node_processors/opasgn_node.rb +98 -98
  106. data/lib/solargraph/parser/parser_gem/node_processors/or_node.rb +22 -0
  107. data/lib/solargraph/parser/parser_gem/node_processors/orasgn_node.rb +17 -17
  108. data/lib/solargraph/parser/parser_gem/node_processors/resbody_node.rb +39 -38
  109. data/lib/solargraph/parser/parser_gem/node_processors/sclass_node.rb +51 -52
  110. data/lib/solargraph/parser/parser_gem/node_processors/send_node.rb +302 -291
  111. data/lib/solargraph/parser/parser_gem/node_processors/until_node.rb +29 -29
  112. data/lib/solargraph/parser/parser_gem/node_processors/when_node.rb +23 -0
  113. data/lib/solargraph/parser/parser_gem/node_processors/while_node.rb +33 -29
  114. data/lib/solargraph/parser/parser_gem/node_processors.rb +74 -70
  115. data/lib/solargraph/parser/parser_gem.rb +14 -12
  116. data/lib/solargraph/parser/region.rb +75 -69
  117. data/lib/solargraph/parser/snippet.rb +19 -17
  118. data/lib/solargraph/parser.rb +25 -23
  119. data/lib/solargraph/pin/base.rb +773 -729
  120. data/lib/solargraph/pin/base_variable.rb +375 -126
  121. data/lib/solargraph/pin/block.rb +127 -104
  122. data/lib/solargraph/pin/breakable.rb +15 -9
  123. data/lib/solargraph/pin/callable.rb +275 -231
  124. data/lib/solargraph/pin/closure.rb +69 -72
  125. data/lib/solargraph/pin/common.rb +97 -79
  126. data/lib/solargraph/pin/compound_statement.rb +55 -0
  127. data/lib/solargraph/pin/constant.rb +43 -45
  128. data/lib/solargraph/pin/conversions.rb +129 -123
  129. data/lib/solargraph/pin/delegated_method.rb +131 -120
  130. data/lib/solargraph/pin/documenting.rb +116 -114
  131. data/lib/solargraph/pin/instance_variable.rb +38 -34
  132. data/lib/solargraph/pin/keyword.rb +16 -20
  133. data/lib/solargraph/pin/local_variable.rb +31 -75
  134. data/lib/solargraph/pin/method.rb +724 -672
  135. data/lib/solargraph/pin/method_alias.rb +42 -34
  136. data/lib/solargraph/pin/namespace.rb +122 -115
  137. data/lib/solargraph/pin/parameter.rb +339 -275
  138. data/lib/solargraph/pin/proxy_type.rb +42 -39
  139. data/lib/solargraph/pin/reference/override.rb +47 -47
  140. data/lib/solargraph/pin/reference/superclass.rb +17 -15
  141. data/lib/solargraph/pin/reference/type_alias.rb +16 -0
  142. data/lib/solargraph/pin/reference.rb +59 -39
  143. data/lib/solargraph/pin/search.rb +62 -61
  144. data/lib/solargraph/pin/signature.rb +64 -61
  145. data/lib/solargraph/pin/symbol.rb +54 -53
  146. data/lib/solargraph/pin/until.rb +16 -18
  147. data/lib/solargraph/pin/while.rb +16 -18
  148. data/lib/solargraph/pin.rb +46 -44
  149. data/lib/solargraph/pin_cache.rb +248 -245
  150. data/lib/solargraph/position.rb +139 -119
  151. data/lib/solargraph/range.rb +113 -112
  152. data/lib/solargraph/rbs_map/conversions.rb +952 -823
  153. data/lib/solargraph/rbs_map/core_fills.rb +91 -84
  154. data/lib/solargraph/rbs_map/core_map.rb +65 -58
  155. data/lib/solargraph/rbs_map/stdlib_map.rb +71 -43
  156. data/lib/solargraph/rbs_map.rb +207 -163
  157. data/lib/solargraph/server_methods.rb +16 -16
  158. data/lib/solargraph/shell.rb +555 -352
  159. data/lib/solargraph/source/chain/array.rb +39 -37
  160. data/lib/solargraph/source/chain/call.rb +377 -337
  161. data/lib/solargraph/source/chain/class_variable.rb +13 -13
  162. data/lib/solargraph/source/chain/constant.rb +30 -26
  163. data/lib/solargraph/source/chain/global_variable.rb +13 -13
  164. data/lib/solargraph/source/chain/hash.rb +37 -34
  165. data/lib/solargraph/source/chain/if.rb +30 -28
  166. data/lib/solargraph/source/chain/instance_variable.rb +36 -13
  167. data/lib/solargraph/source/chain/link.rb +99 -109
  168. data/lib/solargraph/source/chain/literal.rb +51 -48
  169. data/lib/solargraph/source/chain/or.rb +29 -23
  170. data/lib/solargraph/source/chain/q_call.rb +13 -11
  171. data/lib/solargraph/source/chain/variable.rb +15 -13
  172. data/lib/solargraph/source/chain/z_super.rb +28 -30
  173. data/lib/solargraph/source/chain.rb +304 -291
  174. data/lib/solargraph/source/change.rb +89 -82
  175. data/lib/solargraph/source/cursor.rb +172 -166
  176. data/lib/solargraph/source/encoding_fixes.rb +22 -23
  177. data/lib/solargraph/source/source_chainer.rb +218 -194
  178. data/lib/solargraph/source/updater.rb +59 -55
  179. data/lib/solargraph/source.rb +522 -498
  180. data/lib/solargraph/source_map/clip.rb +245 -226
  181. data/lib/solargraph/source_map/data.rb +37 -34
  182. data/lib/solargraph/source_map/mapper.rb +286 -259
  183. data/lib/solargraph/source_map.rb +224 -212
  184. data/lib/solargraph/type_checker/problem.rb +34 -32
  185. data/lib/solargraph/type_checker/rules.rb +157 -84
  186. data/lib/solargraph/type_checker.rb +888 -814
  187. data/lib/solargraph/version.rb +5 -5
  188. data/lib/solargraph/workspace/config.rb +258 -255
  189. data/lib/solargraph/workspace/gemspecs.rb +367 -0
  190. data/lib/solargraph/workspace/require_paths.rb +98 -97
  191. data/lib/solargraph/workspace.rb +242 -220
  192. data/lib/solargraph/yard_map/helpers.rb +49 -44
  193. data/lib/solargraph/yard_map/mapper/to_method.rb +136 -130
  194. data/lib/solargraph/yard_map/mapper/to_namespace.rb +32 -31
  195. data/lib/solargraph/yard_map/mapper.rb +84 -79
  196. data/lib/solargraph/yard_map.rb +17 -18
  197. data/lib/solargraph/yard_tags.rb +20 -20
  198. data/lib/solargraph/yardoc.rb +90 -87
  199. data/lib/solargraph.rb +128 -105
  200. data/rbs/fills/rubygems/0/dependency.rbs +193 -0
  201. data/rbs/fills/tuple/tuple.rbs +28 -0
  202. data/rbs/shims/ast/0/node.rbs +5 -0
  203. data/rbs/shims/diff-lcs/1.5/diff-lcs.rbs +11 -0
  204. data/rbs_collection.yaml +1 -1
  205. data/solargraph.gemspec +37 -35
  206. metadata +52 -51
  207. data/lib/solargraph/type_checker/checks.rb +0 -124
  208. data/lib/solargraph/type_checker/param_def.rb +0 -37
  209. data/lib/solargraph/yard_map/to_method.rb +0 -89
  210. data/sig/shims/ast/0/node.rbs +0 -5
  211. /data/{sig → rbs}/shims/ast/2.4/.rbs_meta.yaml +0 -0
  212. /data/{sig → rbs}/shims/ast/2.4/ast.rbs +0 -0
  213. /data/{sig → rbs}/shims/parser/3.2.0.1/builders/default.rbs +0 -0
  214. /data/{sig → rbs}/shims/parser/3.2.0.1/manifest.yaml +0 -0
  215. /data/{sig → rbs}/shims/parser/3.2.0.1/parser.rbs +0 -0
  216. /data/{sig → rbs}/shims/parser/3.2.0.1/polyfill.rbs +0 -0
  217. /data/{sig → rbs}/shims/thor/1.2.0.1/.rbs_meta.yaml +0 -0
  218. /data/{sig → rbs}/shims/thor/1.2.0.1/manifest.yaml +0 -0
  219. /data/{sig → rbs}/shims/thor/1.2.0.1/thor.rbs +0 -0
@@ -1,130 +1,136 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- class YardMap
5
- class Mapper
6
- module ToMethod
7
- extend YardMap::Helpers
8
-
9
- VISIBILITY_OVERRIDE = {
10
- # YARD pays attention to 'private' statements prior to class methods but shouldn't
11
- ["Rails::Engine", :class, "find_root_with_flag"] => :public
12
- }
13
-
14
- # @param code_object [YARD::CodeObjects::MethodObject]
15
- # @param name [String, nil]
16
- # @param scope [Symbol, nil]
17
- # @param visibility [Symbol, nil]
18
- # @param closure [Solargraph::Pin::Namespace, nil]
19
- # @param spec [Gem::Specification, nil]
20
- # @return [Solargraph::Pin::Method]
21
- def self.make code_object, name = nil, scope = nil, visibility = nil, closure = nil, spec = nil
22
- closure ||= create_closure_namespace_for(code_object, spec)
23
- location = object_location(code_object, spec)
24
- name ||= code_object.name.to_s
25
- return_type = ComplexType::SELF if name == 'new'
26
- comments = code_object.docstring ? code_object.docstring.all.to_s : ''
27
- final_scope = scope || code_object.scope
28
- override_key = [closure.path, final_scope, name]
29
- final_visibility = VISIBILITY_OVERRIDE[override_key]
30
- final_visibility ||= VISIBILITY_OVERRIDE[[closure.path, final_scope]]
31
- final_visibility ||= :private if closure.path == 'Kernel' && Kernel.private_instance_methods(false).include?(name.to_sym)
32
- final_visibility ||= visibility
33
- final_visibility ||= :private if code_object.module_function? && final_scope == :instance
34
- final_visibility ||= :public if code_object.module_function? && final_scope == :class
35
- final_visibility ||= code_object.visibility
36
- if code_object.is_alias?
37
- origin_code_object = code_object.namespace.aliases[code_object]
38
- pin = Pin::MethodAlias.new(
39
- name: name,
40
- location: location,
41
- original: origin_code_object.name.to_s,
42
- closure: closure,
43
- comments: comments,
44
- scope: final_scope,
45
- visibility: final_visibility,
46
- explicit: code_object.is_explicit?,
47
- return_type: return_type,
48
- parameters: [],
49
- source: :yardoc,
50
- )
51
- else
52
- pin = Pin::Method.new(
53
- location: location,
54
- closure: closure,
55
- name: name,
56
- comments: comments,
57
- scope: final_scope,
58
- visibility: final_visibility,
59
- # @todo Might need to convert overloads to signatures
60
- explicit: code_object.is_explicit?,
61
- return_type: return_type,
62
- attribute: code_object.is_attribute?,
63
- parameters: [],
64
- source: :yardoc,
65
- )
66
- pin.parameters.concat get_parameters(code_object, location, comments, pin)
67
- pin.parameters.freeze
68
- end
69
- logger.debug { "ToMethod.make: Just created method pin: #{pin.inspect}" }
70
- pin
71
- end
72
-
73
- class << self
74
- include Logging
75
-
76
- private
77
-
78
- # @param code_object [YARD::CodeObjects::Base]
79
- # @param location [Location],
80
- # @param comments [String]
81
- # @param pin [Pin::Base]
82
- # @return [Array<Solargraph::Pin::Parameter>]
83
- def get_parameters code_object, location, comments, pin
84
- return [] unless code_object.is_a?(YARD::CodeObjects::MethodObject)
85
- # HACK: Skip `nil` and `self` parameters that are sometimes emitted
86
- # for methods defined in C
87
- # See https://github.com/castwide/solargraph/issues/345
88
- # @sg-ignore https://github.com/castwide/solargraph/pull/1114
89
- code_object.parameters.select { |a| a[0] && a[0] != 'self' }.map do |a|
90
- Solargraph::Pin::Parameter.new(
91
- location: location,
92
- closure: pin,
93
- comments: comments,
94
- name: arg_name(a),
95
- presence: nil,
96
- decl: arg_type(a),
97
- asgn_code: a[1],
98
- source: :yardoc,
99
- )
100
- end
101
- end
102
-
103
- # @param a [Array<String>]
104
- # @return [String]
105
- def arg_name a
106
- a[0].gsub(/[^a-z0-9_]/i, '')
107
- end
108
-
109
- # @param a [Array]
110
- # @return [::Symbol]
111
- def arg_type a
112
- if a[0].start_with?('**')
113
- :kwrestarg
114
- elsif a[0].start_with?('*')
115
- :restarg
116
- elsif a[0].start_with?('&')
117
- :blockarg
118
- elsif a[0].end_with?(':')
119
- a[1] ? :kwoptarg : :kwarg
120
- elsif a[1]
121
- :optarg
122
- else
123
- :arg
124
- end
125
- end
126
- end
127
- end
128
- end
129
- end
130
- 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
+ # @type [Hash{Array<String, Symbol, String> => Symbol}]
10
+ VISIBILITY_OVERRIDE = {
11
+ # YARD pays attention to 'private' statements prior to class methods but shouldn't
12
+ ['Rails::Engine', :class, 'find_root_with_flag'] => :public
13
+ }.freeze
14
+
15
+ # @param code_object [YARD::CodeObjects::MethodObject]
16
+ # @param name [String, nil]
17
+ # @param scope [Symbol, nil]
18
+ # @param visibility [Symbol, nil]
19
+ # @param closure [Solargraph::Pin::Namespace, nil]
20
+ # @param spec [Gem::Specification, nil]
21
+ # @return [Solargraph::Pin::Method]
22
+ def self.make code_object, name = nil, scope = nil, visibility = nil, closure = nil, spec = nil
23
+ closure ||= create_closure_namespace_for(code_object, spec)
24
+ location = object_location(code_object, spec)
25
+ name ||= code_object.name.to_s
26
+ return_type = ComplexType::SELF if name == 'new'
27
+ comments = code_object.docstring ? code_object.docstring.all.to_s : ''
28
+ final_scope = scope || code_object.scope
29
+ # @sg-ignore Need to add nil check here
30
+ override_key = [closure.path, final_scope, name]
31
+ final_visibility = VISIBILITY_OVERRIDE[override_key]
32
+ # @sg-ignore Need to add nil check here
33
+ final_visibility ||= VISIBILITY_OVERRIDE[[closure.path, final_scope]]
34
+ # @sg-ignore Need to add nil check here
35
+ if closure.path == 'Kernel' && Kernel.private_instance_methods(false).include?(name.to_sym)
36
+ final_visibility ||= :private
37
+ end
38
+ final_visibility ||= visibility
39
+ final_visibility ||= :private if code_object.module_function? && final_scope == :instance
40
+ final_visibility ||= :public if code_object.module_function? && final_scope == :class
41
+ final_visibility ||= code_object.visibility
42
+ if code_object.is_alias?
43
+ origin_code_object = code_object.namespace.aliases[code_object]
44
+ pin = Pin::MethodAlias.new(
45
+ name: name,
46
+ location: location,
47
+ original: origin_code_object.name.to_s,
48
+ closure: closure,
49
+ comments: comments,
50
+ scope: final_scope,
51
+ visibility: final_visibility,
52
+ explicit: code_object.is_explicit?,
53
+ return_type: return_type,
54
+ parameters: [],
55
+ source: :yardoc
56
+ )
57
+ else
58
+ # @sg-ignore Need to add nil check here
59
+ pin = Pin::Method.new(
60
+ location: location,
61
+ closure: closure,
62
+ name: name,
63
+ comments: comments,
64
+ scope: final_scope,
65
+ visibility: final_visibility,
66
+ # @todo Might need to convert overloads to signatures
67
+ explicit: code_object.is_explicit?,
68
+ return_type: return_type,
69
+ attribute: code_object.is_attribute?,
70
+ parameters: [],
71
+ source: :yardoc
72
+ )
73
+ pin.parameters.concat get_parameters(code_object, location, comments, pin)
74
+ pin.parameters.freeze
75
+ end
76
+ logger.debug { "ToMethod.make: Just created method pin: #{pin.inspect}" }
77
+ pin
78
+ end
79
+
80
+ class << self
81
+ include Logging
82
+
83
+ private
84
+
85
+ # @param code_object [YARD::CodeObjects::Base]
86
+ # @param location [Location],
87
+ # @param comments [String]
88
+ # @param pin [Pin::Base]
89
+ # @return [Array<Solargraph::Pin::Parameter>]
90
+ def get_parameters code_object, location, comments, pin
91
+ return [] unless code_object.is_a?(YARD::CodeObjects::MethodObject)
92
+ # HACK: Skip `nil` and `self` parameters that are sometimes emitted
93
+ # for methods defined in C
94
+ # See https://github.com/castwide/solargraph/issues/345
95
+ code_object.parameters.select { |a| a[0] && a[0] != 'self' }.map do |a|
96
+ Solargraph::Pin::Parameter.new(
97
+ location: location,
98
+ closure: pin,
99
+ comments: comments,
100
+ name: arg_name(a),
101
+ presence: nil,
102
+ decl: arg_type(a),
103
+ asgn_code: a[1],
104
+ source: :yardoc
105
+ )
106
+ end
107
+ end
108
+
109
+ # @param a [Array<String>]
110
+ # @return [String]
111
+ def arg_name a
112
+ a[0].gsub(/[^a-z0-9_]/i, '')
113
+ end
114
+
115
+ # @param a [Array]
116
+ # @return [::Symbol]
117
+ def arg_type a
118
+ if a[0].start_with?('**')
119
+ :kwrestarg
120
+ elsif a[0].start_with?('*')
121
+ :restarg
122
+ elsif a[0].start_with?('&')
123
+ :blockarg
124
+ elsif a[0].end_with?(':')
125
+ a[1] ? :kwoptarg : :kwarg
126
+ elsif a[1]
127
+ :optarg
128
+ else
129
+ :arg
130
+ end
131
+ end
132
+ end
133
+ end
134
+ end
135
+ end
136
+ end
@@ -1,31 +1,32 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- class YardMap
5
- class Mapper
6
- module ToNamespace
7
- extend YardMap::Helpers
8
-
9
- # @param code_object [YARD::CodeObjects::NamespaceObject]
10
- # @param spec [Gem::Specification, nil]
11
- # @param closure [Pin::Closure, nil]
12
- # @return [Pin::Namespace]
13
- def self.make code_object, spec, closure = nil
14
- closure ||= create_closure_namespace_for(code_object, spec)
15
- location = object_location(code_object, spec)
16
-
17
- Pin::Namespace.new(
18
- location: location,
19
- name: code_object.name.to_s,
20
- comments: code_object.docstring ? code_object.docstring.all.to_s : '',
21
- type: code_object.is_a?(YARD::CodeObjects::ClassObject) ? :class : :module,
22
- visibility: code_object.visibility,
23
- closure: closure,
24
- gates: closure.gates,
25
- source: :yardoc,
26
- )
27
- end
28
- end
29
- end
30
- end
31
- 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
+ # @param code_object [YARD::CodeObjects::NamespaceObject]
10
+ # @param spec [Gem::Specification, nil]
11
+ # @param closure [Pin::Closure, nil]
12
+ # @return [Pin::Namespace]
13
+ def self.make code_object, spec, closure = nil
14
+ closure ||= create_closure_namespace_for(code_object, spec)
15
+ location = object_location(code_object, spec)
16
+
17
+ Pin::Namespace.new(
18
+ location: location,
19
+ name: code_object.name.to_s,
20
+ comments: code_object.docstring ? code_object.docstring.all.to_s : '',
21
+ type: code_object.is_a?(YARD::CodeObjects::ClassObject) ? :class : :module,
22
+ visibility: code_object.visibility,
23
+ closure: closure,
24
+ # @sg-ignore need to add a nil check here
25
+ gates: closure.gates,
26
+ source: :yardoc
27
+ )
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -1,79 +1,84 @@
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, nil]
12
- def initialize code_objects, spec = nil
13
- @code_objects = code_objects
14
- @spec = spec
15
- # @type [Array<Solargraph::Pin::Base>]
16
- @pins = []
17
- @namespace_pins = {}
18
- end
19
-
20
- # @return [Array<Pin::Base>]
21
- def map
22
- @code_objects.each do |co|
23
- @pins.concat generate_pins co
24
- end
25
- # Some yardocs contain documentation for dependencies that can be
26
- # ignored here. The YardMap will load dependencies separately.
27
- @pins.keep_if { |pin| pin.location.nil? || File.file?(pin.location.filename) } if @spec
28
- @pins
29
- end
30
-
31
- private
32
-
33
- # @param code_object [YARD::CodeObjects::Base]
34
- # @return [Array<Pin::Base>]
35
- def generate_pins code_object
36
- result = []
37
- if code_object.is_a?(YARD::CodeObjects::NamespaceObject)
38
- nspin = ToNamespace.make(code_object, @spec, @namespace_pins[code_object.namespace.to_s])
39
- @namespace_pins[code_object.path] = nspin
40
- result.push nspin
41
- if code_object.is_a?(YARD::CodeObjects::ClassObject) and !code_object.superclass.nil?
42
- # This method of superclass detection is a bit of a hack. If
43
- # the superclass is a Proxy, it is assumed to be undefined in its
44
- # yardoc and converted to a fully qualified namespace.
45
- superclass = if code_object.superclass.is_a?(YARD::CodeObjects::Proxy)
46
- "::#{code_object.superclass}"
47
- else
48
- code_object.superclass.to_s
49
- end
50
- result.push Solargraph::Pin::Reference::Superclass.new(name: superclass, closure: nspin, source: :yard_map)
51
- end
52
- code_object.class_mixins.each do |m|
53
- result.push Solargraph::Pin::Reference::Extend.new(closure: nspin, name: m.path, source: :yard_map)
54
- end
55
- code_object.instance_mixins.each do |m|
56
- result.push Solargraph::Pin::Reference::Include.new(
57
- closure: nspin, # @todo Fix this
58
- name: m.path,
59
- source: :yard_map
60
- )
61
- end
62
- elsif code_object.is_a?(YARD::CodeObjects::MethodObject)
63
- closure = @namespace_pins[code_object.namespace.to_s]
64
- if code_object.name == :initialize && code_object.scope == :instance
65
- # @todo Check the visibility of <Class>.new
66
- result.push ToMethod.make(code_object, 'new', :class, :public, closure, @spec)
67
- result.push ToMethod.make(code_object, 'initialize', :instance, :private, closure, @spec)
68
- else
69
- result.push ToMethod.make(code_object, nil, nil, nil, closure, @spec)
70
- end
71
- elsif code_object.is_a?(YARD::CodeObjects::ConstantObject)
72
- closure = @namespace_pins[code_object.namespace]
73
- result.push ToConstant.make(code_object, closure, @spec)
74
- end
75
- result
76
- end
77
- end
78
- end
79
- 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, nil]
12
+ def initialize code_objects, spec = nil
13
+ @code_objects = code_objects
14
+ @spec = spec
15
+ # @type [Array<Solargraph::Pin::Base>]
16
+ @pins = []
17
+ @namespace_pins = {}
18
+ end
19
+
20
+ # @return [Array<Pin::Base>]
21
+ def map
22
+ @code_objects.each do |co|
23
+ @pins.concat generate_pins co
24
+ end
25
+ # Some yardocs contain documentation for dependencies that can be
26
+ # ignored here. The YardMap will load dependencies separately.
27
+ # @sg-ignore Need to add nil check here
28
+ @pins.keep_if { |pin| pin.location.nil? || File.file?(pin.location.filename) } if @spec
29
+ @pins
30
+ end
31
+
32
+ private
33
+
34
+ # @param code_object [YARD::CodeObjects::Base]
35
+ # @return [Array<Pin::Base>]
36
+ def generate_pins code_object
37
+ result = []
38
+ case code_object
39
+ when YARD::CodeObjects::NamespaceObject
40
+ nspin = ToNamespace.make(code_object, @spec, @namespace_pins[code_object.namespace.to_s])
41
+ @namespace_pins[code_object.path] = nspin
42
+ result.push nspin
43
+ if code_object.is_a?(YARD::CodeObjects::ClassObject) && !code_object.superclass.nil?
44
+ # This method of superclass detection is a bit of a hack. If
45
+ # the superclass is a Proxy, it is assumed to be undefined in its
46
+ # yardoc and converted to a fully qualified namespace.
47
+ superclass = if code_object.superclass.is_a?(YARD::CodeObjects::Proxy)
48
+ "::#{code_object.superclass}"
49
+ else
50
+ code_object.superclass.to_s
51
+ end
52
+ result.push Solargraph::Pin::Reference::Superclass.new(name: superclass, closure: nspin, source: :yard_map)
53
+ end
54
+ # @sg-ignore flow sensitive typing ought to be able to handle 'when ClassName'
55
+ code_object.class_mixins.each do |m|
56
+ result.push Solargraph::Pin::Reference::Extend.new(closure: nspin, name: m.path, source: :yard_map)
57
+ end
58
+ # @sg-ignore flow sensitive typing ought to be able to handle 'when ClassName'
59
+ code_object.instance_mixins.each do |m|
60
+ result.push Solargraph::Pin::Reference::Include.new(
61
+ closure: nspin, # @todo Fix this
62
+ name: m.path,
63
+ source: :yard_map
64
+ )
65
+ end
66
+ when YARD::CodeObjects::MethodObject
67
+ closure = @namespace_pins[code_object.namespace.to_s]
68
+ # @sg-ignore flow sensitive typing ought to be able to handle 'when ClassName'
69
+ if code_object.name == :initialize && code_object.scope == :instance
70
+ # @todo Check the visibility of <Class>.new
71
+ result.push ToMethod.make(code_object, 'new', :class, :public, closure, @spec)
72
+ result.push ToMethod.make(code_object, 'initialize', :instance, :private, closure, @spec)
73
+ else
74
+ result.push ToMethod.make(code_object, nil, nil, nil, closure, @spec)
75
+ end
76
+ when YARD::CodeObjects::ConstantObject
77
+ closure = @namespace_pins[code_object.namespace]
78
+ result.push ToConstant.make(code_object, closure, @spec)
79
+ end
80
+ result
81
+ end
82
+ end
83
+ end
84
+ end
@@ -1,18 +1,17 @@
1
- # frozen_string_literal: true
2
-
3
- require 'yard'
4
- require 'solargraph/yard_tags'
5
-
6
- module Solargraph
7
- # The YardMap provides access to YARD documentation for the Ruby core, the
8
- # stdlib, and gems.
9
- #
10
- class YardMap
11
- class NoYardocError < StandardError; end
12
-
13
- autoload :Cache, 'solargraph/yard_map/cache'
14
- autoload :Mapper, 'solargraph/yard_map/mapper'
15
- autoload :Helpers, 'solargraph/yard_map/helpers'
16
- autoload :ToMethod, 'solargraph/yard_map/to_method'
17
- end
18
- end
1
+ # frozen_string_literal: true
2
+
3
+ require 'yard'
4
+ require 'solargraph/yard_tags'
5
+
6
+ module Solargraph
7
+ # The YardMap provides access to YARD documentation for the Ruby core, the
8
+ # stdlib, and gems.
9
+ #
10
+ class YardMap
11
+ class NoYardocError < StandardError; end
12
+
13
+ autoload :Cache, 'solargraph/yard_map/cache'
14
+ autoload :Mapper, 'solargraph/yard_map/mapper'
15
+ autoload :Helpers, 'solargraph/yard_map/helpers'
16
+ end
17
+ end
@@ -1,20 +1,20 @@
1
- # frozen_string_literal: true
2
-
3
- require 'yard'
4
-
5
- # Change YARD log IO to avoid sending unexpected messages to STDOUT
6
- YARD::Logger.instance.io = File.new(File::NULL, 'w')
7
-
8
- module Solargraph
9
- # A placeholder for the @!domain directive. It doesn't need to do anything
10
- # for yardocs. It's only used for Solargraph API maps.
11
- class DomainDirective < YARD::Tags::Directive
12
- def call; end
13
- end
14
- end
15
-
16
- # Define a @type tag for documenting variables
17
- YARD::Tags::Library.define_tag("Type", :type, :with_types_and_name)
18
-
19
- # Define an @!override directive for overriding method tags
20
- YARD::Tags::Library.define_directive("override", :with_name, Solargraph::DomainDirective)
1
+ # frozen_string_literal: true
2
+
3
+ require 'yard'
4
+
5
+ # Change YARD log IO to avoid sending unexpected messages to STDOUT
6
+ YARD::Logger.instance.io = File.new(File::NULL, 'w')
7
+
8
+ module Solargraph
9
+ # A placeholder for the @!domain directive. It doesn't need to do anything
10
+ # for yardocs. It's only used for Solargraph API maps.
11
+ class DomainDirective < YARD::Tags::Directive
12
+ def call; end
13
+ end
14
+ end
15
+
16
+ # Define a @type tag for documenting variables
17
+ YARD::Tags::Library.define_tag('Type', :type, :with_types_and_name)
18
+
19
+ # Define an @!override directive for overriding method tags
20
+ YARD::Tags::Library.define_directive('override', :with_name, Solargraph::DomainDirective)