jimeh-solargraph 0.40.4.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.
- checksums.yaml +7 -0
- data/.github/workflows/ci.yml +54 -0
- data/.gitignore +9 -0
- data/.rspec +2 -0
- data/.travis.yml +24 -0
- data/.yardopts +2 -0
- data/CHANGELOG.md +1003 -0
- data/Gemfile +7 -0
- data/LICENSE +21 -0
- data/README.md +123 -0
- data/Rakefile +25 -0
- data/SPONSORS.md +15 -0
- data/bin/solargraph +5 -0
- data/jimeh-solargraph.gemspec +44 -0
- data/lib/.rubocop.yml +21 -0
- data/lib/solargraph.rb +67 -0
- data/lib/solargraph/api_map.rb +752 -0
- data/lib/solargraph/api_map/bundler_methods.rb +27 -0
- data/lib/solargraph/api_map/cache.rb +70 -0
- data/lib/solargraph/api_map/source_to_yard.rb +81 -0
- data/lib/solargraph/api_map/store.rb +256 -0
- data/lib/solargraph/bench.rb +30 -0
- data/lib/solargraph/compat.rb +23 -0
- data/lib/solargraph/complex_type.rb +213 -0
- data/lib/solargraph/complex_type/type_methods.rb +127 -0
- data/lib/solargraph/complex_type/unique_type.rb +75 -0
- data/lib/solargraph/convention.rb +47 -0
- data/lib/solargraph/convention/base.rb +33 -0
- data/lib/solargraph/convention/gemfile.rb +15 -0
- data/lib/solargraph/convention/gemspec.rb +22 -0
- data/lib/solargraph/convention/rspec.rb +21 -0
- data/lib/solargraph/converters/dd.rb +12 -0
- data/lib/solargraph/converters/dl.rb +12 -0
- data/lib/solargraph/converters/dt.rb +12 -0
- data/lib/solargraph/converters/misc.rb +1 -0
- data/lib/solargraph/diagnostics.rb +55 -0
- data/lib/solargraph/diagnostics/base.rb +29 -0
- data/lib/solargraph/diagnostics/require_not_found.rb +37 -0
- data/lib/solargraph/diagnostics/rubocop.rb +90 -0
- data/lib/solargraph/diagnostics/rubocop_helpers.rb +45 -0
- data/lib/solargraph/diagnostics/severities.rb +15 -0
- data/lib/solargraph/diagnostics/type_check.rb +54 -0
- data/lib/solargraph/diagnostics/update_errors.rb +41 -0
- data/lib/solargraph/documentor.rb +78 -0
- data/lib/solargraph/environ.rb +45 -0
- data/lib/solargraph/language_server.rb +19 -0
- data/lib/solargraph/language_server/completion_item_kinds.rb +35 -0
- data/lib/solargraph/language_server/error_codes.rb +20 -0
- data/lib/solargraph/language_server/host.rb +746 -0
- data/lib/solargraph/language_server/host/cataloger.rb +56 -0
- data/lib/solargraph/language_server/host/diagnoser.rb +81 -0
- data/lib/solargraph/language_server/host/dispatch.rb +112 -0
- data/lib/solargraph/language_server/host/sources.rb +156 -0
- data/lib/solargraph/language_server/message.rb +92 -0
- data/lib/solargraph/language_server/message/base.rb +85 -0
- data/lib/solargraph/language_server/message/cancel_request.rb +13 -0
- data/lib/solargraph/language_server/message/client.rb +11 -0
- data/lib/solargraph/language_server/message/client/register_capability.rb +15 -0
- data/lib/solargraph/language_server/message/completion_item.rb +11 -0
- data/lib/solargraph/language_server/message/completion_item/resolve.rb +57 -0
- data/lib/solargraph/language_server/message/exit_notification.rb +13 -0
- data/lib/solargraph/language_server/message/extended.rb +21 -0
- data/lib/solargraph/language_server/message/extended/check_gem_version.rb +100 -0
- data/lib/solargraph/language_server/message/extended/document.rb +20 -0
- data/lib/solargraph/language_server/message/extended/document_gems.rb +32 -0
- data/lib/solargraph/language_server/message/extended/download_core.rb +23 -0
- data/lib/solargraph/language_server/message/extended/environment.rb +25 -0
- data/lib/solargraph/language_server/message/extended/search.rb +20 -0
- data/lib/solargraph/language_server/message/initialize.rb +153 -0
- data/lib/solargraph/language_server/message/initialized.rb +26 -0
- data/lib/solargraph/language_server/message/method_not_found.rb +16 -0
- data/lib/solargraph/language_server/message/method_not_implemented.rb +14 -0
- data/lib/solargraph/language_server/message/shutdown.rb +13 -0
- data/lib/solargraph/language_server/message/text_document.rb +28 -0
- data/lib/solargraph/language_server/message/text_document/base.rb +19 -0
- data/lib/solargraph/language_server/message/text_document/code_action.rb +17 -0
- data/lib/solargraph/language_server/message/text_document/completion.rb +57 -0
- data/lib/solargraph/language_server/message/text_document/definition.rb +38 -0
- data/lib/solargraph/language_server/message/text_document/did_change.rb +15 -0
- data/lib/solargraph/language_server/message/text_document/did_close.rb +15 -0
- data/lib/solargraph/language_server/message/text_document/did_open.rb +15 -0
- data/lib/solargraph/language_server/message/text_document/did_save.rb +17 -0
- data/lib/solargraph/language_server/message/text_document/document_symbol.rb +23 -0
- data/lib/solargraph/language_server/message/text_document/folding_range.rb +26 -0
- data/lib/solargraph/language_server/message/text_document/formatting.rb +105 -0
- data/lib/solargraph/language_server/message/text_document/hover.rb +44 -0
- data/lib/solargraph/language_server/message/text_document/on_type_formatting.rb +34 -0
- data/lib/solargraph/language_server/message/text_document/prepare_rename.rb +11 -0
- data/lib/solargraph/language_server/message/text_document/references.rb +16 -0
- data/lib/solargraph/language_server/message/text_document/rename.rb +19 -0
- data/lib/solargraph/language_server/message/text_document/signature_help.rb +29 -0
- data/lib/solargraph/language_server/message/workspace.rb +14 -0
- data/lib/solargraph/language_server/message/workspace/did_change_configuration.rb +29 -0
- data/lib/solargraph/language_server/message/workspace/did_change_watched_files.rb +33 -0
- data/lib/solargraph/language_server/message/workspace/did_change_workspace_folders.rb +24 -0
- data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +23 -0
- data/lib/solargraph/language_server/message_types.rb +14 -0
- data/lib/solargraph/language_server/request.rb +24 -0
- data/lib/solargraph/language_server/symbol_kinds.rb +36 -0
- data/lib/solargraph/language_server/transport.rb +13 -0
- data/lib/solargraph/language_server/transport/adapter.rb +56 -0
- data/lib/solargraph/language_server/transport/data_reader.rb +72 -0
- data/lib/solargraph/language_server/uri_helpers.rb +49 -0
- data/lib/solargraph/library.rb +426 -0
- data/lib/solargraph/location.rb +37 -0
- data/lib/solargraph/logging.rb +27 -0
- data/lib/solargraph/page.rb +83 -0
- data/lib/solargraph/parser.rb +26 -0
- data/lib/solargraph/parser/comment_ripper.rb +52 -0
- data/lib/solargraph/parser/legacy.rb +12 -0
- data/lib/solargraph/parser/legacy/class_methods.rb +109 -0
- data/lib/solargraph/parser/legacy/flawed_builder.rb +16 -0
- data/lib/solargraph/parser/legacy/node_chainer.rb +118 -0
- data/lib/solargraph/parser/legacy/node_methods.rb +311 -0
- data/lib/solargraph/parser/legacy/node_processors.rb +54 -0
- data/lib/solargraph/parser/legacy/node_processors/alias_node.rb +23 -0
- data/lib/solargraph/parser/legacy/node_processors/args_node.rb +35 -0
- data/lib/solargraph/parser/legacy/node_processors/begin_node.rb +15 -0
- data/lib/solargraph/parser/legacy/node_processors/block_node.rb +22 -0
- data/lib/solargraph/parser/legacy/node_processors/casgn_node.rb +25 -0
- data/lib/solargraph/parser/legacy/node_processors/cvasgn_node.rb +23 -0
- data/lib/solargraph/parser/legacy/node_processors/def_node.rb +63 -0
- data/lib/solargraph/parser/legacy/node_processors/defs_node.rb +36 -0
- data/lib/solargraph/parser/legacy/node_processors/gvasgn_node.rb +23 -0
- data/lib/solargraph/parser/legacy/node_processors/ivasgn_node.rb +38 -0
- data/lib/solargraph/parser/legacy/node_processors/lvasgn_node.rb +28 -0
- data/lib/solargraph/parser/legacy/node_processors/namespace_node.rb +39 -0
- data/lib/solargraph/parser/legacy/node_processors/orasgn_node.rb +16 -0
- data/lib/solargraph/parser/legacy/node_processors/resbody_node.rb +36 -0
- data/lib/solargraph/parser/legacy/node_processors/sclass_node.rb +21 -0
- data/lib/solargraph/parser/legacy/node_processors/send_node.rb +257 -0
- data/lib/solargraph/parser/legacy/node_processors/sym_node.rb +18 -0
- data/lib/solargraph/parser/node_methods.rb +43 -0
- data/lib/solargraph/parser/node_processor.rb +43 -0
- data/lib/solargraph/parser/node_processor/base.rb +80 -0
- data/lib/solargraph/parser/region.rb +66 -0
- data/lib/solargraph/parser/rubyvm.rb +40 -0
- data/lib/solargraph/parser/rubyvm/class_methods.rb +150 -0
- data/lib/solargraph/parser/rubyvm/node_chainer.rb +135 -0
- data/lib/solargraph/parser/rubyvm/node_methods.rb +301 -0
- data/lib/solargraph/parser/rubyvm/node_processors.rb +62 -0
- data/lib/solargraph/parser/rubyvm/node_processors/alias_node.rb +23 -0
- data/lib/solargraph/parser/rubyvm/node_processors/args_node.rb +86 -0
- data/lib/solargraph/parser/rubyvm/node_processors/begin_node.rb +15 -0
- data/lib/solargraph/parser/rubyvm/node_processors/block_node.rb +22 -0
- data/lib/solargraph/parser/rubyvm/node_processors/casgn_node.rb +22 -0
- data/lib/solargraph/parser/rubyvm/node_processors/cvasgn_node.rb +23 -0
- data/lib/solargraph/parser/rubyvm/node_processors/def_node.rb +64 -0
- data/lib/solargraph/parser/rubyvm/node_processors/defs_node.rb +57 -0
- data/lib/solargraph/parser/rubyvm/node_processors/gvasgn_node.rb +23 -0
- data/lib/solargraph/parser/rubyvm/node_processors/ivasgn_node.rb +38 -0
- data/lib/solargraph/parser/rubyvm/node_processors/kw_arg_node.rb +39 -0
- data/lib/solargraph/parser/rubyvm/node_processors/lit_node.rb +20 -0
- data/lib/solargraph/parser/rubyvm/node_processors/lvasgn_node.rb +27 -0
- data/lib/solargraph/parser/rubyvm/node_processors/namespace_node.rb +39 -0
- data/lib/solargraph/parser/rubyvm/node_processors/opt_arg_node.rb +26 -0
- data/lib/solargraph/parser/rubyvm/node_processors/orasgn_node.rb +15 -0
- data/lib/solargraph/parser/rubyvm/node_processors/resbody_node.rb +45 -0
- data/lib/solargraph/parser/rubyvm/node_processors/sclass_node.rb +21 -0
- data/lib/solargraph/parser/rubyvm/node_processors/scope_node.rb +15 -0
- data/lib/solargraph/parser/rubyvm/node_processors/send_node.rb +277 -0
- data/lib/solargraph/parser/rubyvm/node_processors/sym_node.rb +18 -0
- data/lib/solargraph/parser/snippet.rb +13 -0
- data/lib/solargraph/pin.rb +36 -0
- data/lib/solargraph/pin/base.rb +296 -0
- data/lib/solargraph/pin/base_variable.rb +84 -0
- data/lib/solargraph/pin/block.rb +62 -0
- data/lib/solargraph/pin/class_variable.rb +8 -0
- data/lib/solargraph/pin/closure.rb +37 -0
- data/lib/solargraph/pin/common.rb +70 -0
- data/lib/solargraph/pin/constant.rb +43 -0
- data/lib/solargraph/pin/conversions.rb +96 -0
- data/lib/solargraph/pin/documenting.rb +105 -0
- data/lib/solargraph/pin/duck_method.rb +16 -0
- data/lib/solargraph/pin/global_variable.rb +8 -0
- data/lib/solargraph/pin/instance_variable.rb +30 -0
- data/lib/solargraph/pin/keyword.rb +15 -0
- data/lib/solargraph/pin/keyword_param.rb +8 -0
- data/lib/solargraph/pin/local_variable.rb +21 -0
- data/lib/solargraph/pin/localized.rb +43 -0
- data/lib/solargraph/pin/method.rb +245 -0
- data/lib/solargraph/pin/method_alias.rb +31 -0
- data/lib/solargraph/pin/namespace.rb +85 -0
- data/lib/solargraph/pin/parameter.rb +206 -0
- data/lib/solargraph/pin/proxy_type.rb +29 -0
- data/lib/solargraph/pin/reference.rb +14 -0
- data/lib/solargraph/pin/reference/extend.rb +10 -0
- data/lib/solargraph/pin/reference/include.rb +10 -0
- data/lib/solargraph/pin/reference/override.rb +29 -0
- data/lib/solargraph/pin/reference/prepend.rb +10 -0
- data/lib/solargraph/pin/reference/require.rb +14 -0
- data/lib/solargraph/pin/reference/superclass.rb +10 -0
- data/lib/solargraph/pin/singleton.rb +11 -0
- data/lib/solargraph/pin/symbol.rb +47 -0
- data/lib/solargraph/position.rb +100 -0
- data/lib/solargraph/range.rb +95 -0
- data/lib/solargraph/server_methods.rb +16 -0
- data/lib/solargraph/shell.rb +222 -0
- data/lib/solargraph/source.rb +537 -0
- data/lib/solargraph/source/chain.rb +154 -0
- data/lib/solargraph/source/chain/block_variable.rb +13 -0
- data/lib/solargraph/source/chain/call.rb +203 -0
- data/lib/solargraph/source/chain/class_variable.rb +13 -0
- data/lib/solargraph/source/chain/constant.rb +75 -0
- data/lib/solargraph/source/chain/global_variable.rb +13 -0
- data/lib/solargraph/source/chain/head.rb +35 -0
- data/lib/solargraph/source/chain/instance_variable.rb +13 -0
- data/lib/solargraph/source/chain/link.rb +67 -0
- data/lib/solargraph/source/chain/literal.rb +23 -0
- data/lib/solargraph/source/chain/or.rb +23 -0
- data/lib/solargraph/source/chain/variable.rb +13 -0
- data/lib/solargraph/source/chain/z_super.rb +30 -0
- data/lib/solargraph/source/change.rb +79 -0
- data/lib/solargraph/source/cursor.rb +164 -0
- data/lib/solargraph/source/encoding_fixes.rb +23 -0
- data/lib/solargraph/source/source_chainer.rb +190 -0
- data/lib/solargraph/source/updater.rb +54 -0
- data/lib/solargraph/source_map.rb +188 -0
- data/lib/solargraph/source_map/clip.rb +224 -0
- data/lib/solargraph/source_map/completion.rb +23 -0
- data/lib/solargraph/source_map/mapper.rb +215 -0
- data/lib/solargraph/type_checker.rb +503 -0
- data/lib/solargraph/type_checker/checks.rb +99 -0
- data/lib/solargraph/type_checker/param_def.rb +35 -0
- data/lib/solargraph/type_checker/problem.rb +32 -0
- data/lib/solargraph/type_checker/rules.rb +57 -0
- data/lib/solargraph/version.rb +5 -0
- data/lib/solargraph/views/_method.erb +62 -0
- data/lib/solargraph/views/_name_type_tag.erb +10 -0
- data/lib/solargraph/views/_namespace.erb +24 -0
- data/lib/solargraph/views/document.erb +23 -0
- data/lib/solargraph/views/environment.erb +58 -0
- data/lib/solargraph/views/layout.erb +44 -0
- data/lib/solargraph/views/search.erb +11 -0
- data/lib/solargraph/workspace.rb +209 -0
- data/lib/solargraph/workspace/config.rb +230 -0
- data/lib/solargraph/yard_map.rb +435 -0
- data/lib/solargraph/yard_map/cache.rb +19 -0
- data/lib/solargraph/yard_map/core_docs.rb +170 -0
- data/lib/solargraph/yard_map/core_fills.rb +185 -0
- data/lib/solargraph/yard_map/core_gen.rb +76 -0
- data/lib/solargraph/yard_map/helpers.rb +16 -0
- data/lib/solargraph/yard_map/mapper.rb +77 -0
- data/lib/solargraph/yard_map/mapper/to_constant.rb +25 -0
- data/lib/solargraph/yard_map/mapper/to_method.rb +78 -0
- data/lib/solargraph/yard_map/mapper/to_namespace.rb +27 -0
- data/lib/solargraph/yard_map/rdoc_to_yard.rb +140 -0
- data/lib/solargraph/yard_map/stdlib_fills.rb +43 -0
- data/lib/solargraph/yard_map/to_method.rb +79 -0
- data/lib/yard-solargraph.rb +30 -0
- data/yardoc/2.2.2.tar.gz +0 -0
- metadata +564 -0
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Solargraph
|
4
|
+
module Parser
|
5
|
+
module Legacy
|
6
|
+
module NodeProcessors
|
7
|
+
class SymNode < Parser::NodeProcessor::Base
|
8
|
+
def process
|
9
|
+
pins.push Solargraph::Pin::Symbol.new(
|
10
|
+
get_node_location(node),
|
11
|
+
":#{node.children[0]}"
|
12
|
+
)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module Solargraph
|
2
|
+
module Parser
|
3
|
+
class NodeMethods
|
4
|
+
module_function
|
5
|
+
|
6
|
+
def unpack_name node
|
7
|
+
raise NotImplementedError
|
8
|
+
end
|
9
|
+
|
10
|
+
def infer_literal_type node
|
11
|
+
raise NotImplementedError
|
12
|
+
end
|
13
|
+
|
14
|
+
def calls_from node
|
15
|
+
raise NotImplementedError
|
16
|
+
end
|
17
|
+
|
18
|
+
def returns_from node
|
19
|
+
raise NotImplementedError
|
20
|
+
end
|
21
|
+
|
22
|
+
def process node
|
23
|
+
raise NotImplementedError
|
24
|
+
end
|
25
|
+
|
26
|
+
def references node
|
27
|
+
raise NotImplementedError
|
28
|
+
end
|
29
|
+
|
30
|
+
def chain node, filename = nil, in_block = false
|
31
|
+
raise NotImplementedError
|
32
|
+
end
|
33
|
+
|
34
|
+
def node? node
|
35
|
+
raise NotImplementedError
|
36
|
+
end
|
37
|
+
|
38
|
+
def convert_hash node
|
39
|
+
raise NotImplementedError
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Solargraph
|
4
|
+
module Parser
|
5
|
+
# The processor classes used by SourceMap::Mapper to generate pins from
|
6
|
+
# parser nodes.
|
7
|
+
#
|
8
|
+
module NodeProcessor
|
9
|
+
autoload :Base, 'solargraph/parser/node_processor/base'
|
10
|
+
|
11
|
+
class << self
|
12
|
+
@@processors ||= {}
|
13
|
+
|
14
|
+
# Register a processor for a node type.
|
15
|
+
#
|
16
|
+
# @param type [Symbol]
|
17
|
+
# @param cls [Class<NodeProcessor::Base>]
|
18
|
+
# @return [Class<NodeProcessor::Base>]
|
19
|
+
def register type, cls
|
20
|
+
@@processors[type] = cls
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
# @param node [Parser::AST::Node]
|
25
|
+
# @param region [Region]
|
26
|
+
# @param pins [Array<Pin::Base>]
|
27
|
+
# @return [Array(Array<Pin::Base>, Array<Pin::Base>)]
|
28
|
+
def self.process node, region = Region.new, pins = [], locals = []
|
29
|
+
if pins.empty?
|
30
|
+
pins.push Pin::Namespace.new(
|
31
|
+
location: region.source.location,
|
32
|
+
name: ''
|
33
|
+
)
|
34
|
+
end
|
35
|
+
return [pins, locals] unless Parser.is_ast_node?(node)
|
36
|
+
klass = @@processors[node.type] || NodeProcessor::Base
|
37
|
+
processor = klass.new(node, region, pins, locals)
|
38
|
+
processor.process
|
39
|
+
[processor.pins, processor.locals]
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,80 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Solargraph
|
4
|
+
module Parser
|
5
|
+
module NodeProcessor
|
6
|
+
class Base
|
7
|
+
# @todo The base node processor should not include legacy node methods
|
8
|
+
# include Legacy::NodeMethods
|
9
|
+
|
10
|
+
# @return [Parser::AST::Node]
|
11
|
+
attr_reader :node
|
12
|
+
|
13
|
+
# @return [Region]
|
14
|
+
attr_reader :region
|
15
|
+
|
16
|
+
# @return [Array<Pin::Base>]
|
17
|
+
attr_reader :pins
|
18
|
+
|
19
|
+
# @return [Array<Pin::Base>]
|
20
|
+
attr_reader :locals
|
21
|
+
|
22
|
+
# @param node [Parser::AST::Node]
|
23
|
+
# @param region [Region]
|
24
|
+
# @param pins [Array<Pin::Base>]
|
25
|
+
def initialize node, region, pins, locals
|
26
|
+
@node = node
|
27
|
+
@region = region
|
28
|
+
@pins = pins
|
29
|
+
@locals = locals
|
30
|
+
@processed_children = false
|
31
|
+
end
|
32
|
+
|
33
|
+
# Subclasses should override this method to generate new pins.
|
34
|
+
#
|
35
|
+
# @return [void]
|
36
|
+
def process
|
37
|
+
process_children
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
# @param subregion [Region]
|
43
|
+
# @return [void]
|
44
|
+
def process_children subregion = region
|
45
|
+
return if @processed_children
|
46
|
+
@processed_children = true
|
47
|
+
node.children.each do |child|
|
48
|
+
next unless Parser.is_ast_node?(child)
|
49
|
+
NodeProcessor.process(child, subregion, pins, locals)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
# @param node [Parser::AST::Node]
|
54
|
+
# @return [Solargraph::Location]
|
55
|
+
def get_node_location(node)
|
56
|
+
range = Parser.node_range(node)
|
57
|
+
Location.new(region.filename, range)
|
58
|
+
end
|
59
|
+
|
60
|
+
def comments_for(node)
|
61
|
+
region.source.comments_for(node)
|
62
|
+
end
|
63
|
+
|
64
|
+
def named_path_pin position
|
65
|
+
pins.select{|pin| pin.is_a?(Pin::Closure) && pin.path && !pin.path.empty? && pin.location.range.contain?(position)}.last
|
66
|
+
end
|
67
|
+
|
68
|
+
# @todo Candidate for deprecation
|
69
|
+
def block_pin position
|
70
|
+
pins.select{|pin| pin.is_a?(Pin::Closure) && pin.location.range.contain?(position)}.last
|
71
|
+
end
|
72
|
+
|
73
|
+
# @todo Candidate for deprecation
|
74
|
+
def closure_pin position
|
75
|
+
pins.select{|pin| pin.is_a?(Pin::Closure) && pin.location.range.contain?(position)}.last
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Solargraph
|
4
|
+
module Parser
|
5
|
+
# Data used by the parser to track context at various locations in a
|
6
|
+
# source.
|
7
|
+
#
|
8
|
+
class Region
|
9
|
+
# @return [Pin::Closure]
|
10
|
+
attr_reader :closure
|
11
|
+
|
12
|
+
# @return [Symbol]
|
13
|
+
attr_reader :scope
|
14
|
+
|
15
|
+
# @return [Symbol]
|
16
|
+
attr_reader :visibility
|
17
|
+
|
18
|
+
# @return [Solargraph::Source]
|
19
|
+
attr_reader :source
|
20
|
+
|
21
|
+
# @return [Array<Symbol>]
|
22
|
+
attr_reader :lvars
|
23
|
+
|
24
|
+
# @param source [Source]
|
25
|
+
# @param namespace [String]
|
26
|
+
# @param scope [Symbol]
|
27
|
+
# @param visibility [Symbol]
|
28
|
+
def initialize source: Solargraph::Source.load_string(''), closure: nil,
|
29
|
+
scope: nil, visibility: :public, lvars: []
|
30
|
+
@source = source
|
31
|
+
# @closure = closure
|
32
|
+
@closure = closure || Pin::Namespace.new(name: '', location: source.location)
|
33
|
+
@scope = scope
|
34
|
+
@visibility = visibility
|
35
|
+
@lvars = lvars
|
36
|
+
end
|
37
|
+
|
38
|
+
# @return [String]
|
39
|
+
def filename
|
40
|
+
source.filename
|
41
|
+
end
|
42
|
+
|
43
|
+
# Generate a new Region with the provided attribute changes.
|
44
|
+
#
|
45
|
+
# @param closure [Pin::Closure, nil]
|
46
|
+
# @param scope [Symbol, nil]
|
47
|
+
# @param visibility [Symbol, nil]
|
48
|
+
# @return [Region]
|
49
|
+
def update closure: nil, scope: nil, visibility: nil, lvars: nil
|
50
|
+
Region.new(
|
51
|
+
source: source,
|
52
|
+
closure: closure || self.closure,
|
53
|
+
scope: scope || self.scope,
|
54
|
+
visibility: visibility || self.visibility,
|
55
|
+
lvars: lvars || self.lvars
|
56
|
+
)
|
57
|
+
end
|
58
|
+
|
59
|
+
# @param node [Parser::AST::Node]
|
60
|
+
# @return [String]
|
61
|
+
def code_for node
|
62
|
+
source.code_for(node)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module Solargraph
|
2
|
+
module Parser
|
3
|
+
module Rubyvm
|
4
|
+
autoload :ClassMethods, 'solargraph/parser/rubyvm/class_methods'
|
5
|
+
autoload :NodeChainer, 'solargraph/parser/rubyvm/node_chainer'
|
6
|
+
autoload :NodeMethods, 'solargraph/parser/rubyvm/node_methods'
|
7
|
+
end
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
require 'solargraph/parser/rubyvm/node_processors'
|
12
|
+
|
13
|
+
class RubyVM::AbstractSyntaxTree::Node
|
14
|
+
def to_sexp
|
15
|
+
sexp self
|
16
|
+
end
|
17
|
+
|
18
|
+
def == other
|
19
|
+
return false unless other.is_a?(self.class)
|
20
|
+
here = Solargraph::Range.from_node(self)
|
21
|
+
there = Solargraph::Range.from_node(other)
|
22
|
+
here == there && to_sexp == other.to_sexp
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def sexp node, depth = 0
|
28
|
+
result = ''
|
29
|
+
if node.is_a?(RubyVM::AbstractSyntaxTree::Node)
|
30
|
+
result += "#{' ' * depth}(:#{node.type}"
|
31
|
+
node.children.each do |child|
|
32
|
+
result += "\n" + sexp(child, depth + 1)
|
33
|
+
end
|
34
|
+
result += ")"
|
35
|
+
else
|
36
|
+
result += "#{' ' * depth}#{node.inspect}"
|
37
|
+
end
|
38
|
+
result
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,150 @@
|
|
1
|
+
require 'solargraph/parser/rubyvm/node_processors'
|
2
|
+
|
3
|
+
module Solargraph
|
4
|
+
module Parser
|
5
|
+
module Rubyvm
|
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
|
+
node = RubyVM::AbstractSyntaxTree.parse(code).children[2]
|
12
|
+
comments = CommentRipper.new(code).parse
|
13
|
+
[node, comments]
|
14
|
+
rescue ::SyntaxError => e
|
15
|
+
raise Parser::SyntaxError, e.message
|
16
|
+
end
|
17
|
+
|
18
|
+
# @param code [String]
|
19
|
+
# @param filename [String, nil]
|
20
|
+
# @param line [Integer]
|
21
|
+
# @return [Parser::AST::Node]
|
22
|
+
def parse code, filename = nil, line = 0
|
23
|
+
RubyVM::AbstractSyntaxTree.parse(code).children[2]
|
24
|
+
rescue ::SyntaxError => e
|
25
|
+
raise Parser::SyntaxError, e.message
|
26
|
+
end
|
27
|
+
|
28
|
+
def map source
|
29
|
+
NodeProcessor.process(source.node, Region.new(source: source))
|
30
|
+
end
|
31
|
+
|
32
|
+
# def returns_from node
|
33
|
+
# return [] unless Parser.is_ast_node?(node)
|
34
|
+
# if node.type == :SCOPE
|
35
|
+
# # node.children.select { |n| n.is_a?(RubyVM::AbstractSyntaxTree::Node) }.map { |n| DeepInference.get_return_nodes(n) }.flatten
|
36
|
+
# DeepInference.get_return_nodes(node.children[2])
|
37
|
+
# else
|
38
|
+
# DeepInference.get_return_nodes(node)
|
39
|
+
# end
|
40
|
+
# end
|
41
|
+
|
42
|
+
def references source, name
|
43
|
+
inner_node_references(name, source.node).map do |n|
|
44
|
+
rng = Range.from_node(n)
|
45
|
+
offset = Position.to_offset(source.code, rng.start)
|
46
|
+
soff = source.code.index(name, offset)
|
47
|
+
eoff = soff + name.length
|
48
|
+
Location.new(
|
49
|
+
source.filename,
|
50
|
+
Range.new(
|
51
|
+
Position.from_offset(source.code, soff),
|
52
|
+
Position.from_offset(source.code, eoff)
|
53
|
+
)
|
54
|
+
)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
# @param name [String]
|
59
|
+
# @param top [AST::Node]
|
60
|
+
# @return [Array<AST::Node>]
|
61
|
+
def inner_node_references name, top
|
62
|
+
result = []
|
63
|
+
if Parser.rubyvm?
|
64
|
+
if Parser.is_ast_node?(top)
|
65
|
+
result.push top if match_rubyvm_node_to_ref(top, name)
|
66
|
+
top.children.each { |c| result.concat inner_node_references(name, c) }
|
67
|
+
end
|
68
|
+
else
|
69
|
+
if Parser.is_ast_node?(top) && top.to_s.include?(":#{name}")
|
70
|
+
result.push top if top.children.any? { |c| c.to_s == name }
|
71
|
+
top.children.each { |c| result.concat inner_node_references(name, c) }
|
72
|
+
end
|
73
|
+
end
|
74
|
+
result
|
75
|
+
end
|
76
|
+
|
77
|
+
def match_rubyvm_node_to_ref(top, name)
|
78
|
+
top.children.select { |c| c.is_a?(Symbol) }.any? { |c| c.to_s == name } ||
|
79
|
+
top.children.select { |c| c.is_a?(Array) }.any? { |c| c.include?(name.to_sym) }
|
80
|
+
end
|
81
|
+
|
82
|
+
def chain *args
|
83
|
+
NodeChainer.chain *args
|
84
|
+
end
|
85
|
+
|
86
|
+
def chain_string *args
|
87
|
+
NodeChainer.load_string *args
|
88
|
+
end
|
89
|
+
|
90
|
+
def process_node *args
|
91
|
+
Solargraph::Parser::NodeProcessor.process *args
|
92
|
+
end
|
93
|
+
|
94
|
+
def infer_literal_node_type node
|
95
|
+
# NodeMethods.infer_literal_node_type node
|
96
|
+
end
|
97
|
+
|
98
|
+
def version
|
99
|
+
Ruby::VERSION
|
100
|
+
end
|
101
|
+
|
102
|
+
def is_ast_node? node
|
103
|
+
if Parser.rubyvm?
|
104
|
+
node.is_a?(RubyVM::AbstractSyntaxTree::Node)
|
105
|
+
else
|
106
|
+
node.is_a?(::Parser::AST::Node)
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
def node_range node
|
111
|
+
st = Position.new(node.first_lineno - 1, node.first_column)
|
112
|
+
en = Position.new(node.last_lineno - 1, node.last_column)
|
113
|
+
Range.new(st, en)
|
114
|
+
end
|
115
|
+
|
116
|
+
def recipient_node tree
|
117
|
+
tree.each_with_index do |node, idx|
|
118
|
+
return tree[idx + 1] if [:ARRAY, :ZARRAY, :LIST].include?(node.type) && tree[idx + 1] && [:FCALL, :VCALL, :CALL].include?(tree[idx + 1].type)
|
119
|
+
end
|
120
|
+
nil
|
121
|
+
end
|
122
|
+
|
123
|
+
def string_ranges node
|
124
|
+
return [] unless is_ast_node?(node)
|
125
|
+
result = []
|
126
|
+
if node.type == :STR
|
127
|
+
result.push Range.from_node(node)
|
128
|
+
elsif node.type == :DSTR
|
129
|
+
here = Range.from_node(node)
|
130
|
+
there = Range.from_node(node.children[1])
|
131
|
+
result.push Range.new(here.start, there.start)
|
132
|
+
end
|
133
|
+
node.children.each do |child|
|
134
|
+
result.concat string_ranges(child)
|
135
|
+
end
|
136
|
+
if node.type == :DSTR && node.children.last.nil?
|
137
|
+
# result.push Range.new(result.last.ending, result.last.ending)
|
138
|
+
last = node.children[-2]
|
139
|
+
unless last.nil?
|
140
|
+
rng = Range.from_node(last)
|
141
|
+
pos = Position.new(rng.ending.line, rng.ending.column - 1)
|
142
|
+
result.push Range.new(pos, pos)
|
143
|
+
end
|
144
|
+
end
|
145
|
+
result
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
150
|
+
end
|