solargraph 0.46.0 → 0.47.2

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 -41
  3. data/.gitignore +9 -9
  4. data/.rspec +2 -2
  5. data/.travis.yml +19 -19
  6. data/CHANGELOG.md +1130 -1115
  7. data/Gemfile +0 -0
  8. data/LICENSE +0 -0
  9. data/README.md +128 -128
  10. data/Rakefile +0 -0
  11. data/SPONSORS.md +17 -18
  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 -686
  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 +225 -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 -30
  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 -53
  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 +56 -54
  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 -135
  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 -144
  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 -63
  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 -63
  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 +73 -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 -201
  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 -56
  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 -37
  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 +239 -212
  220. data/lib/solargraph/source_map.rb +180 -180
  221. data/lib/solargraph/type_checker/checks.rb +112 -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 -543
  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 -215
  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 -208
  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 -460
  243. data/lib/solargraph.rb +69 -69
  244. data/lib/yard-solargraph.rb +33 -33
  245. data/solargraph.gemspec +0 -0
  246. metadata +12 -12
@@ -1,37 +1,37 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- # A section of text identified by its filename and range.
5
- #
6
- class Location
7
- # @return [String]
8
- attr_reader :filename
9
-
10
- # @return [Solargraph::Range]
11
- attr_reader :range
12
-
13
- # @param filename [String]
14
- # @param range [Solargraph::Range]
15
- def initialize filename, range
16
- @filename = filename
17
- @range = range
18
- end
19
-
20
- # @return [Hash]
21
- def to_hash
22
- {
23
- filename: filename,
24
- range: range.to_hash
25
- }
26
- end
27
-
28
- def == other
29
- return false unless other.is_a?(Location)
30
- filename == other.filename and range == other.range
31
- end
32
-
33
- def inspect
34
- "#<#{self.class} #{filename}, #{range.inspect}>"
35
- end
36
- end
37
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ # A section of text identified by its filename and range.
5
+ #
6
+ class Location
7
+ # @return [String]
8
+ attr_reader :filename
9
+
10
+ # @return [Solargraph::Range]
11
+ attr_reader :range
12
+
13
+ # @param filename [String]
14
+ # @param range [Solargraph::Range]
15
+ def initialize filename, range
16
+ @filename = filename
17
+ @range = range
18
+ end
19
+
20
+ # @return [Hash]
21
+ def to_hash
22
+ {
23
+ filename: filename,
24
+ range: range.to_hash
25
+ }
26
+ end
27
+
28
+ def == other
29
+ return false unless other.is_a?(Location)
30
+ filename == other.filename and range == other.range
31
+ end
32
+
33
+ def inspect
34
+ "#<#{self.class} #{filename}, #{range.inspect}>"
35
+ end
36
+ end
37
+ end
@@ -1,27 +1,27 @@
1
- # frozen_string_literal: true
2
-
3
- require 'logger'
4
-
5
- module Solargraph
6
- module Logging
7
- DEFAULT_LOG_LEVEL = Logger::WARN
8
-
9
- LOG_LEVELS = {
10
- 'warn' => Logger::WARN,
11
- 'info' => Logger::INFO,
12
- 'debug' => Logger::DEBUG
13
- }
14
-
15
- @@logger = Logger.new(STDERR, level: DEFAULT_LOG_LEVEL)
16
- @@logger.formatter = proc do |severity, datetime, progname, msg|
17
- "[#{severity}] #{msg}\n"
18
- end
19
-
20
- module_function
21
-
22
- # @return [Logger]
23
- def logger
24
- @@logger
25
- end
26
- end
27
- end
1
+ # frozen_string_literal: true
2
+
3
+ require 'logger'
4
+
5
+ module Solargraph
6
+ module Logging
7
+ DEFAULT_LOG_LEVEL = Logger::WARN
8
+
9
+ LOG_LEVELS = {
10
+ 'warn' => Logger::WARN,
11
+ 'info' => Logger::INFO,
12
+ 'debug' => Logger::DEBUG
13
+ }
14
+
15
+ @@logger = Logger.new(STDERR, level: DEFAULT_LOG_LEVEL)
16
+ @@logger.formatter = proc do |severity, datetime, progname, msg|
17
+ "[#{severity}] #{msg}\n"
18
+ end
19
+
20
+ module_function
21
+
22
+ # @return [Logger]
23
+ def logger
24
+ @@logger
25
+ end
26
+ end
27
+ end
@@ -1,83 +1,83 @@
1
- # frozen_string_literal: true
2
-
3
- require 'ostruct'
4
- require 'tilt'
5
- require 'yard'
6
- require 'cgi'
7
-
8
- module Solargraph
9
- class Page
10
- class Binder < OpenStruct
11
- # @param locals [Hash]
12
- # @param render_method [Proc]
13
- def initialize locals, render_method
14
- super(locals)
15
- define_singleton_method :render do |template, layout: false, locals: {}|
16
- render_method.call(template, layout: layout, locals: locals)
17
- end
18
- define_singleton_method :erb do |template, layout: false, locals: {}|
19
- render_method.call(template, layout: layout, locals: locals)
20
- end
21
- end
22
-
23
- # @param text [String]
24
- # @return [String]
25
- def htmlify text
26
- YARD::Templates::Helpers::Markup::RDocMarkup.new(text).to_html
27
- end
28
-
29
- # @param text [String]
30
- # @return [String]
31
- def escape text
32
- CGI.escapeHTML(text)
33
- end
34
-
35
- # @param code [String]
36
- # @return [String]
37
- def ruby_to_html code
38
- code
39
- end
40
- end
41
- private_constant :Binder
42
-
43
- # @param directory [String]
44
- def initialize directory = VIEWS_PATH
45
- directory = VIEWS_PATH if directory.nil? or !File.directory?(directory)
46
- directories = [directory]
47
- directories.push VIEWS_PATH if directory != VIEWS_PATH
48
- # @type [Proc]
49
- # @param template [String]
50
- # @param layout [Boolean]
51
- # @param locals [Hash]
52
- @render_method = proc { |template, layout: false, locals: {}|
53
- binder = Binder.new(locals, @render_method)
54
- if layout
55
- Tilt::ERBTemplate.new(Page.select_template(directories, 'layout')).render(binder) do
56
- Tilt::ERBTemplate.new(Page.select_template(directories, template)).render(binder)
57
- end
58
- else
59
- Tilt::ERBTemplate.new(Page.select_template(directories, template)).render(binder)
60
- end
61
- }
62
- end
63
-
64
- # @param template [String]
65
- # @param layout [Boolean]
66
- # @param locals [Hash]
67
- # @return [String]
68
- def render template, layout: true, locals: {}
69
- @render_method.call(template, layout: layout, locals: locals)
70
- end
71
-
72
- # @param directories [Array<String>]
73
- # @param name [String]
74
- # @return [String]
75
- def self.select_template directories, name
76
- directories.each do |dir|
77
- path = File.join(dir, "#{name}.erb")
78
- return path if File.file?(path)
79
- end
80
- raise FileNotFoundError, "Template not found: #{name}"
81
- end
82
- end
83
- end
1
+ # frozen_string_literal: true
2
+
3
+ require 'ostruct'
4
+ require 'tilt'
5
+ require 'yard'
6
+ require 'cgi'
7
+
8
+ module Solargraph
9
+ class Page
10
+ class Binder < OpenStruct
11
+ # @param locals [Hash]
12
+ # @param render_method [Proc]
13
+ def initialize locals, render_method
14
+ super(locals)
15
+ define_singleton_method :render do |template, layout: false, locals: {}|
16
+ render_method.call(template, layout: layout, locals: locals)
17
+ end
18
+ define_singleton_method :erb do |template, layout: false, locals: {}|
19
+ render_method.call(template, layout: layout, locals: locals)
20
+ end
21
+ end
22
+
23
+ # @param text [String]
24
+ # @return [String]
25
+ def htmlify text
26
+ YARD::Templates::Helpers::Markup::RDocMarkup.new(text).to_html
27
+ end
28
+
29
+ # @param text [String]
30
+ # @return [String]
31
+ def escape text
32
+ CGI.escapeHTML(text)
33
+ end
34
+
35
+ # @param code [String]
36
+ # @return [String]
37
+ def ruby_to_html code
38
+ code
39
+ end
40
+ end
41
+ private_constant :Binder
42
+
43
+ # @param directory [String]
44
+ def initialize directory = VIEWS_PATH
45
+ directory = VIEWS_PATH if directory.nil? or !File.directory?(directory)
46
+ directories = [directory]
47
+ directories.push VIEWS_PATH if directory != VIEWS_PATH
48
+ # @type [Proc]
49
+ # @param template [String]
50
+ # @param layout [Boolean]
51
+ # @param locals [Hash]
52
+ @render_method = proc { |template, layout: false, locals: {}|
53
+ binder = Binder.new(locals, @render_method)
54
+ if layout
55
+ Tilt::ERBTemplate.new(Page.select_template(directories, 'layout')).render(binder) do
56
+ Tilt::ERBTemplate.new(Page.select_template(directories, template)).render(binder)
57
+ end
58
+ else
59
+ Tilt::ERBTemplate.new(Page.select_template(directories, template)).render(binder)
60
+ end
61
+ }
62
+ end
63
+
64
+ # @param template [String]
65
+ # @param layout [Boolean]
66
+ # @param locals [Hash]
67
+ # @return [String]
68
+ def render template, layout: true, locals: {}
69
+ @render_method.call(template, layout: layout, locals: locals)
70
+ end
71
+
72
+ # @param directories [Array<String>]
73
+ # @param name [String]
74
+ # @return [String]
75
+ def self.select_template directories, name
76
+ directories.each do |dir|
77
+ path = File.join(dir, "#{name}.erb")
78
+ return path if File.file?(path)
79
+ end
80
+ raise FileNotFoundError, "Template not found: #{name}"
81
+ end
82
+ end
83
+ end
@@ -1,52 +1,52 @@
1
- require 'ripper'
2
-
3
- module Solargraph
4
- module Parser
5
- class CommentRipper < Ripper::SexpBuilderPP
6
- def initialize src, filename = '(ripper)', lineno = 0
7
- super
8
- @buffer = src
9
- @buffer_lines = @buffer.lines
10
- end
11
-
12
- def on_comment *args
13
- result = super
14
- if @buffer_lines[result[2][0]][0..result[2][1]].strip =~ /^#/
15
- chomped = result[1].chomp
16
- if result[2][0] == 0 && chomped.encode('UTF-8', 'binary', invalid: :replace, undef: :replace, replace: '').match(/^#\s*frozen_string_literal:/)
17
- chomped = '#'
18
- end
19
- @comments[result[2][0]] = Snippet.new(Range.from_to(result[2][0], result[2][1], result[2][0], result[2][1] + chomped.length), chomped)
20
- end
21
- result
22
- end
23
-
24
- def on_embdoc_beg *args
25
- result = super
26
- chomped = result[1].chomp
27
- @comments[result[2][0]] = Snippet.new(Range.from_to(result[2][0], result[2][1], result[2][0], result[2][1] + chomped.length), chomped)
28
- result
29
- end
30
-
31
- def on_embdoc *args
32
- result = super
33
- chomped = result[1].chomp
34
- @comments[result[2][0]] = Snippet.new(Range.from_to(result[2][0], result[2][1], result[2][0], result[2][1] + chomped.length), chomped)
35
- result
36
- end
37
-
38
- def on_embdoc_end *args
39
- result = super
40
- chomped = result[1].chomp
41
- @comments[result[2][0]] = Snippet.new(Range.from_to(result[2][0], result[2][1], result[2][0], result[2][1] + chomped.length), chomped)
42
- result
43
- end
44
-
45
- def parse
46
- @comments = {}
47
- super
48
- @comments
49
- end
50
- end
51
- end
52
- end
1
+ require 'ripper'
2
+
3
+ module Solargraph
4
+ module Parser
5
+ class CommentRipper < Ripper::SexpBuilderPP
6
+ def initialize src, filename = '(ripper)', lineno = 0
7
+ super
8
+ @buffer = src
9
+ @buffer_lines = @buffer.lines
10
+ end
11
+
12
+ def on_comment *args
13
+ result = super
14
+ if @buffer_lines[result[2][0]][0..result[2][1]].strip =~ /^#/
15
+ chomped = result[1].chomp
16
+ if result[2][0] == 0 && chomped.encode('UTF-8', 'binary', invalid: :replace, undef: :replace, replace: '').match(/^#\s*frozen_string_literal:/)
17
+ chomped = '#'
18
+ end
19
+ @comments[result[2][0]] = Snippet.new(Range.from_to(result[2][0], result[2][1], result[2][0], result[2][1] + chomped.length), chomped)
20
+ end
21
+ result
22
+ end
23
+
24
+ def on_embdoc_beg *args
25
+ result = super
26
+ chomped = result[1].chomp
27
+ @comments[result[2][0]] = Snippet.new(Range.from_to(result[2][0], result[2][1], result[2][0], result[2][1] + chomped.length), chomped)
28
+ result
29
+ end
30
+
31
+ def on_embdoc *args
32
+ result = super
33
+ chomped = result[1].chomp
34
+ @comments[result[2][0]] = Snippet.new(Range.from_to(result[2][0], result[2][1], result[2][0], result[2][1] + chomped.length), chomped)
35
+ result
36
+ end
37
+
38
+ def on_embdoc_end *args
39
+ result = super
40
+ chomped = result[1].chomp
41
+ @comments[result[2][0]] = Snippet.new(Range.from_to(result[2][0], result[2][1], result[2][0], result[2][1] + chomped.length), chomped)
42
+ result
43
+ end
44
+
45
+ def parse
46
+ @comments = {}
47
+ super
48
+ @comments
49
+ end
50
+ end
51
+ end
52
+ end
@@ -1,135 +1,135 @@
1
- require 'parser/current'
2
-
3
- module Solargraph
4
- module Parser
5
- module Legacy
6
- module ClassMethods
7
- # @param code [String]
8
- # @param filename [String]
9
- # @return [Array(Parser::AST::Node, Array<Parser::Source::Comment>)]
10
- def parse_with_comments code, filename = nil
11
- buffer = ::Parser::Source::Buffer.new(filename, 0)
12
- buffer.source = code
13
- node = parser.parse(buffer)
14
- comments = CommentRipper.new(code, filename, 0).parse
15
- [node, comments]
16
- rescue ::Parser::SyntaxError => e
17
- raise Parser::SyntaxError, e.message
18
- end
19
-
20
- # @param code [String]
21
- # @param filename [String, nil]
22
- # @param line [Integer]
23
- # @return [Parser::AST::Node]
24
- def parse code, filename = nil, line = 0
25
- buffer = ::Parser::Source::Buffer.new(filename, line)
26
- buffer.source = code
27
- parser.parse(buffer)
28
- rescue ::Parser::SyntaxError => e
29
- raise Parser::SyntaxError, e.message
30
- end
31
-
32
- # @return [Parser::Base]
33
- def parser
34
- # @todo Consider setting an instance variable. We might not need to
35
- # recreate the parser every time we use it.
36
- parser = ::Parser::CurrentRuby.new(FlawedBuilder.new)
37
- parser.diagnostics.all_errors_are_fatal = true
38
- parser.diagnostics.ignore_warnings = true
39
- parser
40
- end
41
-
42
- def map source
43
- NodeProcessor.process(source.node, Region.new(source: source))
44
- end
45
-
46
- def returns_from node
47
- NodeMethods.returns_from(node)
48
- end
49
-
50
- def references source, name
51
- if name.end_with?("=")
52
- reg = /#{Regexp.escape name[0..-2]}\s*=/
53
- extract_offset = ->(code, offset) { reg.match(code, offset).offset(0) }
54
- else
55
- extract_offset = ->(code, offset) { [soff = code.index(name, offset), soff + name.length] }
56
- end
57
- inner_node_references(name, source.node).map do |n|
58
- rng = Range.from_node(n)
59
- offset = Position.to_offset(source.code, rng.start)
60
- soff, eoff = extract_offset[source.code, offset]
61
- Location.new(
62
- source.filename,
63
- Range.new(
64
- Position.from_offset(source.code, soff),
65
- Position.from_offset(source.code, eoff)
66
- )
67
- )
68
- end
69
- end
70
-
71
- # @param name [String]
72
- # @param top [AST::Node]
73
- # @return [Array<AST::Node>]
74
- def inner_node_references name, top
75
- result = []
76
- if top.is_a?(AST::Node) && top.to_s.include?(":#{name}")
77
- result.push top if top.children.any? { |c| c.to_s == name }
78
- top.children.each { |c| result.concat inner_node_references(name, c) }
79
- end
80
- result
81
- end
82
-
83
- def chain *args
84
- NodeChainer.chain *args
85
- end
86
-
87
- def chain_string *args
88
- NodeChainer.load_string *args
89
- end
90
-
91
- def process_node *args
92
- Solargraph::Parser::NodeProcessor.process *args
93
- end
94
-
95
- def infer_literal_node_type node
96
- NodeMethods.infer_literal_node_type node
97
- end
98
-
99
- def version
100
- parser.version
101
- end
102
-
103
- def is_ast_node? node
104
- node.is_a?(::Parser::AST::Node)
105
- end
106
-
107
- def node_range node
108
- st = Position.new(node.loc.line, node.loc.column)
109
- en = Position.new(node.loc.last_line, node.loc.last_column)
110
- Range.new(st, en)
111
- end
112
-
113
- def string_ranges node
114
- return [] unless is_ast_node?(node)
115
- result = []
116
- if node.type == :str
117
- result.push Range.from_node(node)
118
- end
119
- node.children.each do |child|
120
- result.concat string_ranges(child)
121
- end
122
- if node.type == :dstr && node.children.last.nil?
123
- last = node.children[-2]
124
- unless last.nil?
125
- rng = Range.from_node(last)
126
- pos = Position.new(rng.ending.line, rng.ending.column - 1)
127
- result.push Range.new(pos, pos)
128
- end
129
- end
130
- result
131
- end
132
- end
133
- end
134
- end
135
- end
1
+ require 'parser/current'
2
+
3
+ module Solargraph
4
+ module Parser
5
+ module Legacy
6
+ module ClassMethods
7
+ # @param code [String]
8
+ # @param filename [String]
9
+ # @return [Array(Parser::AST::Node, Array<Parser::Source::Comment>)]
10
+ def parse_with_comments code, filename = nil
11
+ buffer = ::Parser::Source::Buffer.new(filename, 0)
12
+ buffer.source = code
13
+ node = parser.parse(buffer)
14
+ comments = CommentRipper.new(code, filename, 0).parse
15
+ [node, comments]
16
+ rescue ::Parser::SyntaxError => e
17
+ raise Parser::SyntaxError, e.message
18
+ end
19
+
20
+ # @param code [String]
21
+ # @param filename [String, nil]
22
+ # @param line [Integer]
23
+ # @return [Parser::AST::Node]
24
+ def parse code, filename = nil, line = 0
25
+ buffer = ::Parser::Source::Buffer.new(filename, line)
26
+ buffer.source = code
27
+ parser.parse(buffer)
28
+ rescue ::Parser::SyntaxError => e
29
+ raise Parser::SyntaxError, e.message
30
+ end
31
+
32
+ # @return [Parser::Base]
33
+ def parser
34
+ # @todo Consider setting an instance variable. We might not need to
35
+ # recreate the parser every time we use it.
36
+ parser = ::Parser::CurrentRuby.new(FlawedBuilder.new)
37
+ parser.diagnostics.all_errors_are_fatal = true
38
+ parser.diagnostics.ignore_warnings = true
39
+ parser
40
+ end
41
+
42
+ def map source
43
+ NodeProcessor.process(source.node, Region.new(source: source))
44
+ end
45
+
46
+ def returns_from node
47
+ NodeMethods.returns_from(node)
48
+ end
49
+
50
+ def references source, name
51
+ if name.end_with?("=")
52
+ reg = /#{Regexp.escape name[0..-2]}\s*=/
53
+ extract_offset = ->(code, offset) { reg.match(code, offset).offset(0) }
54
+ else
55
+ extract_offset = ->(code, offset) { [soff = code.index(name, offset), soff + name.length] }
56
+ end
57
+ inner_node_references(name, source.node).map do |n|
58
+ rng = Range.from_node(n)
59
+ offset = Position.to_offset(source.code, rng.start)
60
+ soff, eoff = extract_offset[source.code, offset]
61
+ Location.new(
62
+ source.filename,
63
+ Range.new(
64
+ Position.from_offset(source.code, soff),
65
+ Position.from_offset(source.code, eoff)
66
+ )
67
+ )
68
+ end
69
+ end
70
+
71
+ # @param name [String]
72
+ # @param top [AST::Node]
73
+ # @return [Array<AST::Node>]
74
+ def inner_node_references name, top
75
+ result = []
76
+ if top.is_a?(AST::Node) && top.to_s.include?(":#{name}")
77
+ result.push top if top.children.any? { |c| c.to_s == name }
78
+ top.children.each { |c| result.concat inner_node_references(name, c) }
79
+ end
80
+ result
81
+ end
82
+
83
+ def chain *args
84
+ NodeChainer.chain *args
85
+ end
86
+
87
+ def chain_string *args
88
+ NodeChainer.load_string *args
89
+ end
90
+
91
+ def process_node *args
92
+ Solargraph::Parser::NodeProcessor.process *args
93
+ end
94
+
95
+ def infer_literal_node_type node
96
+ NodeMethods.infer_literal_node_type node
97
+ end
98
+
99
+ def version
100
+ parser.version
101
+ end
102
+
103
+ def is_ast_node? node
104
+ node.is_a?(::Parser::AST::Node)
105
+ end
106
+
107
+ def node_range node
108
+ st = Position.new(node.loc.line, node.loc.column)
109
+ en = Position.new(node.loc.last_line, node.loc.last_column)
110
+ Range.new(st, en)
111
+ end
112
+
113
+ def string_ranges node
114
+ return [] unless is_ast_node?(node)
115
+ result = []
116
+ if node.type == :str
117
+ result.push Range.from_node(node)
118
+ end
119
+ node.children.each do |child|
120
+ result.concat string_ranges(child)
121
+ end
122
+ if node.type == :dstr && node.children.last.nil?
123
+ last = node.children[-2]
124
+ unless last.nil?
125
+ rng = Range.from_node(last)
126
+ pos = Position.new(rng.ending.line, rng.ending.column - 1)
127
+ result.push Range.new(pos, pos)
128
+ end
129
+ end
130
+ result
131
+ end
132
+ end
133
+ end
134
+ end
135
+ end