rucoa 0.10.0 → 0.12.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 +4 -4
- data/.rubocop.yml +8 -2
- data/Gemfile.lock +3 -3
- data/README.md +4 -1
- data/data/definitions_ruby_3_1 +6594 -6594
- data/lib/rucoa/configuration.rb +22 -12
- data/lib/rucoa/definition_store.rb +270 -158
- data/lib/rucoa/definitions/method_definition.rb +11 -11
- data/lib/rucoa/definitions/module_definition.rb +14 -0
- data/lib/rucoa/handler_concerns/configuration_requestable.rb +7 -7
- data/lib/rucoa/handler_concerns/diagnostics_publishable.rb +11 -11
- data/lib/rucoa/handler_concerns/text_document_position_parameters.rb +29 -0
- data/lib/rucoa/handler_concerns/text_document_uri_parameters.rb +21 -0
- data/lib/rucoa/handler_concerns.rb +2 -0
- data/lib/rucoa/handlers/base.rb +9 -9
- data/lib/rucoa/handlers/initialize_handler.rb +1 -0
- data/lib/rucoa/handlers/initialized_handler.rb +16 -16
- data/lib/rucoa/handlers/text_document_code_action_handler.rb +12 -12
- data/lib/rucoa/handlers/text_document_completion_handler.rb +85 -99
- data/lib/rucoa/handlers/text_document_definition_handler.rb +11 -30
- data/lib/rucoa/handlers/text_document_did_close_handler.rb +2 -8
- data/lib/rucoa/handlers/text_document_did_open_handler.rb +3 -7
- data/lib/rucoa/handlers/text_document_document_highlight_handler.rb +256 -0
- data/lib/rucoa/handlers/text_document_document_symbol_handler.rb +47 -76
- data/lib/rucoa/handlers/text_document_formatting_handler.rb +15 -23
- data/lib/rucoa/handlers/text_document_hover_handler.rb +24 -43
- data/lib/rucoa/handlers/text_document_range_formatting_handler.rb +17 -25
- data/lib/rucoa/handlers/text_document_selection_range_handler.rb +11 -19
- data/lib/rucoa/handlers/text_document_signature_help_handler.rb +17 -36
- data/lib/rucoa/handlers.rb +1 -0
- data/lib/rucoa/node_concerns/body.rb +1 -1
- data/lib/rucoa/node_concerns/qualified_name.rb +5 -5
- data/lib/rucoa/node_concerns/rescue.rb +21 -0
- data/lib/rucoa/node_concerns.rb +1 -0
- data/lib/rucoa/node_inspector.rb +17 -6
- data/lib/rucoa/nodes/base.rb +48 -48
- data/lib/rucoa/nodes/begin_node.rb +2 -0
- data/lib/rucoa/nodes/block_node.rb +24 -0
- data/lib/rucoa/nodes/case_node.rb +24 -0
- data/lib/rucoa/nodes/const_node.rb +26 -26
- data/lib/rucoa/nodes/def_node.rb +14 -13
- data/lib/rucoa/nodes/ensure_node.rb +19 -0
- data/lib/rucoa/nodes/for_node.rb +8 -0
- data/lib/rucoa/nodes/if_node.rb +32 -0
- data/lib/rucoa/nodes/resbody_node.rb +8 -0
- data/lib/rucoa/nodes/rescue_node.rb +17 -0
- data/lib/rucoa/nodes/send_node.rb +40 -0
- data/lib/rucoa/nodes/until_node.rb +8 -0
- data/lib/rucoa/nodes/when_node.rb +8 -0
- data/lib/rucoa/nodes/while_node.rb +8 -0
- data/lib/rucoa/nodes.rb +10 -1
- data/lib/rucoa/parser_builder.rb +16 -2
- data/lib/rucoa/range.rb +9 -3
- data/lib/rucoa/rbs/class_definition_mapper.rb +1 -0
- data/lib/rucoa/rbs/constant_definition_mapper.rb +5 -5
- data/lib/rucoa/rbs/method_definition_mapper.rb +18 -18
- data/lib/rucoa/rbs/module_definition_mapper.rb +17 -12
- data/lib/rucoa/rbs/ruby_definitions_loader.rb +5 -5
- data/lib/rucoa/rubocop/configuration_checker.rb +7 -7
- data/lib/rucoa/server.rb +25 -24
- data/lib/rucoa/source.rb +5 -5
- data/lib/rucoa/source_store.rb +8 -8
- data/lib/rucoa/version.rb +1 -1
- data/lib/rucoa/yard/definition_generators/attribute_reader_definition_generator.rb +17 -1
- data/lib/rucoa/yard/definition_generators/attribute_writer_definition_generator.rb +17 -1
- data/lib/rucoa/yard/definition_generators/class_definition_generator.rb +1 -0
- data/lib/rucoa/yard/definition_generators/method_definition_generator.rb +14 -1
- data/lib/rucoa/yard/definition_generators/module_definition_generator.rb +6 -0
- metadata +16 -3
- data/lib/rucoa/nodes/defs_node.rb +0 -33
@@ -21,6 +21,39 @@ module Rucoa
|
|
21
21
|
children[2..]
|
22
22
|
end
|
23
23
|
|
24
|
+
# @return [Rucoa::Nodes::BlockNode, nil]
|
25
|
+
# @example returns nil for method call without block
|
26
|
+
# node = Rucoa::Source.new(
|
27
|
+
# content: <<~RUBY,
|
28
|
+
# foo
|
29
|
+
# RUBY
|
30
|
+
# uri: 'file:///path/to/example.rb'
|
31
|
+
# ).node_at(
|
32
|
+
# Rucoa::Position.new(
|
33
|
+
# column: 0,
|
34
|
+
# line: 1
|
35
|
+
# )
|
36
|
+
# )
|
37
|
+
# expect(node.block).to be_nil
|
38
|
+
# @example returns block
|
39
|
+
# node = Rucoa::Source.new(
|
40
|
+
# content: <<~RUBY,
|
41
|
+
# foo do
|
42
|
+
# bar
|
43
|
+
# end
|
44
|
+
# RUBY
|
45
|
+
# uri: 'file:///path/to/example.rb'
|
46
|
+
# ).node_at(
|
47
|
+
# Rucoa::Position.new(
|
48
|
+
# column: 0,
|
49
|
+
# line: 1
|
50
|
+
# )
|
51
|
+
# )
|
52
|
+
# expect(node.block).to be_a(Rucoa::Nodes::BlockNode)
|
53
|
+
def block
|
54
|
+
parent if called_with_block?
|
55
|
+
end
|
56
|
+
|
24
57
|
# @return [String]
|
25
58
|
# @example returns method name
|
26
59
|
# node = Rucoa::Source.new(
|
@@ -59,6 +92,13 @@ module Rucoa
|
|
59
92
|
def receiver
|
60
93
|
children[0]
|
61
94
|
end
|
95
|
+
|
96
|
+
private
|
97
|
+
|
98
|
+
# @return [Boolean]
|
99
|
+
def called_with_block?
|
100
|
+
parent.is_a?(Nodes::BlockNode) && eql?(parent.send_node)
|
101
|
+
end
|
62
102
|
end
|
63
103
|
end
|
64
104
|
end
|
data/lib/rucoa/nodes.rb
CHANGED
@@ -4,17 +4,26 @@ module Rucoa
|
|
4
4
|
module Nodes
|
5
5
|
autoload :Base, 'rucoa/nodes/base'
|
6
6
|
autoload :BeginNode, 'rucoa/nodes/begin_node'
|
7
|
+
autoload :BlockNode, 'rucoa/nodes/block_node'
|
8
|
+
autoload :CaseNode, 'rucoa/nodes/case_node'
|
7
9
|
autoload :CasgnNode, 'rucoa/nodes/casgn_node'
|
8
10
|
autoload :CbaseNode, 'rucoa/nodes/cbase_node'
|
9
11
|
autoload :ClassNode, 'rucoa/nodes/class_node'
|
10
12
|
autoload :ConstNode, 'rucoa/nodes/const_node'
|
11
13
|
autoload :DefNode, 'rucoa/nodes/def_node'
|
12
|
-
autoload :
|
14
|
+
autoload :EnsureNode, 'rucoa/nodes/ensure_node'
|
15
|
+
autoload :ForNode, 'rucoa/nodes/for_node'
|
16
|
+
autoload :IfNode, 'rucoa/nodes/if_node'
|
13
17
|
autoload :LvarNode, 'rucoa/nodes/lvar_node'
|
14
18
|
autoload :ModuleNode, 'rucoa/nodes/module_node'
|
19
|
+
autoload :ResbodyNode, 'rucoa/nodes/resbody_node'
|
20
|
+
autoload :RescueNode, 'rucoa/nodes/rescue_node'
|
15
21
|
autoload :SclassNode, 'rucoa/nodes/sclass_node'
|
16
22
|
autoload :SendNode, 'rucoa/nodes/send_node'
|
17
23
|
autoload :StrNode, 'rucoa/nodes/str_node'
|
18
24
|
autoload :SymNode, 'rucoa/nodes/sym_node'
|
25
|
+
autoload :UntilNode, 'rucoa/nodes/until_node'
|
26
|
+
autoload :WhenNode, 'rucoa/nodes/when_node'
|
27
|
+
autoload :WhileNode, 'rucoa/nodes/while_node'
|
19
28
|
end
|
20
29
|
end
|
data/lib/rucoa/parser_builder.rb
CHANGED
@@ -6,18 +6,32 @@ module Rucoa
|
|
6
6
|
class ParserBuilder < ::Parser::Builders::Default
|
7
7
|
NODE_CLASS_BY_TYPE = {
|
8
8
|
begin: Nodes::BeginNode,
|
9
|
+
block: Nodes::BlockNode,
|
10
|
+
case: Nodes::CaseNode,
|
9
11
|
casgn: Nodes::CasgnNode,
|
10
12
|
cbase: Nodes::CbaseNode,
|
11
13
|
class: Nodes::ClassNode,
|
12
14
|
const: Nodes::ConstNode,
|
15
|
+
csend: Nodes::SendNode,
|
13
16
|
def: Nodes::DefNode,
|
14
|
-
defs: Nodes::
|
17
|
+
defs: Nodes::DefNode,
|
18
|
+
ensure: Nodes::EnsureNode,
|
19
|
+
for: Nodes::ForNode,
|
20
|
+
if: Nodes::IfNode,
|
21
|
+
kwbegin: Nodes::BeginNode,
|
15
22
|
lvar: Nodes::LvarNode,
|
16
23
|
module: Nodes::ModuleNode,
|
24
|
+
resbody: Nodes::ResbodyNode,
|
25
|
+
rescue: Nodes::RescueNode,
|
17
26
|
sclass: Nodes::SclassNode,
|
18
27
|
send: Nodes::SendNode,
|
19
28
|
str: Nodes::StrNode,
|
20
|
-
|
29
|
+
super: Nodes::SendNode,
|
30
|
+
sym: Nodes::SymNode,
|
31
|
+
until: Nodes::UntilNode,
|
32
|
+
when: Nodes::WhenNode,
|
33
|
+
while: Nodes::WhileNode,
|
34
|
+
zsuper: Nodes::SendNode
|
21
35
|
}.freeze
|
22
36
|
|
23
37
|
class << self
|
data/lib/rucoa/range.rb
CHANGED
@@ -103,6 +103,12 @@ module Rucoa
|
|
103
103
|
# )
|
104
104
|
# expect(range).to include(
|
105
105
|
# Rucoa::Position.new(
|
106
|
+
# column: 1,
|
107
|
+
# line: 1
|
108
|
+
# )
|
109
|
+
# )
|
110
|
+
# expect(range).to include(
|
111
|
+
# Rucoa::Position.new(
|
106
112
|
# column: 0,
|
107
113
|
# line: 2
|
108
114
|
# )
|
@@ -116,9 +122,9 @@ module Rucoa
|
|
116
122
|
def include?(position)
|
117
123
|
return false if position.line > @ending.line
|
118
124
|
return false if position.line < @beginning.line
|
119
|
-
return false if position.column < @beginning.column
|
120
|
-
return false if position.column > @ending.column
|
121
|
-
return false if position.column == @ending.column && !@including_ending
|
125
|
+
return false if position.line == @beginning.line && position.column < @beginning.column
|
126
|
+
return false if position.line == @ending.line && position.column > @ending.column
|
127
|
+
return false if position.line == @ending.line && position.column == @ending.column && !@including_ending
|
122
128
|
|
123
129
|
true
|
124
130
|
end
|
@@ -12,6 +12,7 @@ module Rucoa
|
|
12
12
|
def call
|
13
13
|
Definitions::ClassDefinition.new(
|
14
14
|
description: description,
|
15
|
+
extended_module_qualified_names: extended_module_qualified_names,
|
15
16
|
included_module_qualified_names: included_module_qualified_names,
|
16
17
|
location: location,
|
17
18
|
prepended_module_qualified_names: prepended_module_qualified_names,
|
@@ -32,15 +32,15 @@ module Rucoa
|
|
32
32
|
@declaration.comment&.string&.sub(/\A\s*<!--.*-->\s*/m, '')
|
33
33
|
end
|
34
34
|
|
35
|
-
# @return [String]
|
36
|
-
def qualified_name
|
37
|
-
@declaration.name.to_s.delete_prefix('::')
|
38
|
-
end
|
39
|
-
|
40
35
|
# @return [Rucoa::Location]
|
41
36
|
def location
|
42
37
|
Location.from_rbs_location(@declaration.location)
|
43
38
|
end
|
39
|
+
|
40
|
+
# @return [String]
|
41
|
+
def qualified_name
|
42
|
+
@declaration.name.to_s.delete_prefix('::')
|
43
|
+
end
|
44
44
|
end
|
45
45
|
end
|
46
46
|
end
|
@@ -42,23 +42,19 @@ module Rucoa
|
|
42
42
|
|
43
43
|
private
|
44
44
|
|
45
|
-
# @return [Array<Rucoa::Types::MethodType>]
|
46
|
-
def types
|
47
|
-
@method_definition.types.map do |method_type|
|
48
|
-
MethodTypeMapper.call(
|
49
|
-
method_type: method_type
|
50
|
-
)
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
45
|
# @return [String, nil]
|
55
46
|
def description
|
56
47
|
@method_definition.comment&.string&.sub(/\A\s*<!--.*-->\s*/m, '')
|
57
48
|
end
|
58
49
|
|
59
|
-
# @return [
|
60
|
-
def
|
61
|
-
@
|
50
|
+
# @return [Symbol]
|
51
|
+
def kind
|
52
|
+
@method_definition.kind
|
53
|
+
end
|
54
|
+
|
55
|
+
# @return [Rucoa::Location]
|
56
|
+
def location
|
57
|
+
Location.from_rbs_location(@method_definition.location)
|
62
58
|
end
|
63
59
|
|
64
60
|
# @return [String]
|
@@ -66,14 +62,18 @@ module Rucoa
|
|
66
62
|
@method_definition.name.to_s
|
67
63
|
end
|
68
64
|
|
69
|
-
# @return [
|
70
|
-
def
|
71
|
-
@
|
65
|
+
# @return [String]
|
66
|
+
def namespace
|
67
|
+
@declaration.name.to_s.delete_prefix('::')
|
72
68
|
end
|
73
69
|
|
74
|
-
# @return [Rucoa::
|
75
|
-
def
|
76
|
-
|
70
|
+
# @return [Array<Rucoa::Types::MethodType>]
|
71
|
+
def types
|
72
|
+
@method_definition.types.map do |method_type|
|
73
|
+
MethodTypeMapper.call(
|
74
|
+
method_type: method_type
|
75
|
+
)
|
76
|
+
end
|
77
77
|
end
|
78
78
|
|
79
79
|
class MethodTypeMapper
|
@@ -20,6 +20,7 @@ module Rucoa
|
|
20
20
|
def call
|
21
21
|
Definitions::ModuleDefinition.new(
|
22
22
|
description: description,
|
23
|
+
extended_module_qualified_names: extended_module_qualified_names,
|
23
24
|
included_module_qualified_names: included_module_qualified_names,
|
24
25
|
location: location,
|
25
26
|
prepended_module_qualified_names: prepended_module_qualified_names,
|
@@ -34,9 +35,14 @@ module Rucoa
|
|
34
35
|
@declaration.comment&.string&.sub(/\A\s*<!--.*-->\s*/m, '')
|
35
36
|
end
|
36
37
|
|
37
|
-
# @return [String]
|
38
|
-
def
|
39
|
-
|
38
|
+
# @return [Array<String>]
|
39
|
+
def extended_module_qualified_names
|
40
|
+
module_qualified_names_for(::RBS::AST::Members::Extend)
|
41
|
+
end
|
42
|
+
|
43
|
+
# @return [Array<String>]
|
44
|
+
def included_module_qualified_names
|
45
|
+
module_qualified_names_for(::RBS::AST::Members::Include)
|
40
46
|
end
|
41
47
|
|
42
48
|
# @return [Rucoa::Location]
|
@@ -44,11 +50,10 @@ module Rucoa
|
|
44
50
|
Location.from_rbs_location(@declaration.location)
|
45
51
|
end
|
46
52
|
|
47
|
-
|
48
|
-
def included_module_qualified_names
|
53
|
+
def module_qualified_names_for(member_class)
|
49
54
|
@declaration.members.filter_map do |member|
|
50
55
|
case member
|
51
|
-
when
|
56
|
+
when member_class
|
52
57
|
member.name.to_s.delete_prefix('::')
|
53
58
|
end
|
54
59
|
end
|
@@ -56,12 +61,12 @@ module Rucoa
|
|
56
61
|
|
57
62
|
# @return [Array<String>]
|
58
63
|
def prepended_module_qualified_names
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
64
|
+
module_qualified_names_for(::RBS::AST::Members::Prepend)
|
65
|
+
end
|
66
|
+
|
67
|
+
# @return [String]
|
68
|
+
def qualified_name
|
69
|
+
@declaration.name.to_s.delete_prefix('::')
|
65
70
|
end
|
66
71
|
end
|
67
72
|
end
|
@@ -43,11 +43,6 @@ module Rucoa
|
|
43
43
|
|
44
44
|
private
|
45
45
|
|
46
|
-
# @return [Array<RBS::AST::Declarations::Base>]
|
47
|
-
def declarations
|
48
|
-
class_declarations + constant_declarations
|
49
|
-
end
|
50
|
-
|
51
46
|
# @return [Array<RBS::AST::Declarations::Class>]
|
52
47
|
def class_declarations
|
53
48
|
environment.class_decls.values.flat_map do |multi_entry|
|
@@ -60,6 +55,11 @@ module Rucoa
|
|
60
55
|
environment.constant_decls.values.map(&:decl)
|
61
56
|
end
|
62
57
|
|
58
|
+
# @return [Array<RBS::AST::Declarations::Base>]
|
59
|
+
def declarations
|
60
|
+
class_declarations + constant_declarations
|
61
|
+
end
|
62
|
+
|
63
63
|
# @return [RBS::Environment]
|
64
64
|
def environment
|
65
65
|
@environment ||= ::RBS::Environment.from_loader(
|
@@ -19,13 +19,6 @@ module Rucoa
|
|
19
19
|
|
20
20
|
private
|
21
21
|
|
22
|
-
# @return [Boolean]
|
23
|
-
def rubocop_configured_for_current_directory?
|
24
|
-
each_current_and_ancestor_pathname.any? do |pathname|
|
25
|
-
pathname.join('.rubocop.yml').exist?
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
22
|
# @return [Enumerable<Pathname>]
|
30
23
|
def each_current_and_ancestor_pathname
|
31
24
|
return to_enum(__method__) unless block_given?
|
@@ -39,6 +32,13 @@ module Rucoa
|
|
39
32
|
end
|
40
33
|
self
|
41
34
|
end
|
35
|
+
|
36
|
+
# @return [Boolean]
|
37
|
+
def rubocop_configured_for_current_directory?
|
38
|
+
each_current_and_ancestor_pathname.any? do |pathname|
|
39
|
+
pathname.join('.rubocop.yml').exist?
|
40
|
+
end
|
41
|
+
end
|
42
42
|
end
|
43
43
|
end
|
44
44
|
end
|
data/lib/rucoa/server.rb
CHANGED
@@ -17,6 +17,7 @@ module Rucoa
|
|
17
17
|
'textDocument/didChange' => Handlers::TextDocumentDidChangeHandler,
|
18
18
|
'textDocument/didClose' => Handlers::TextDocumentDidCloseHandler,
|
19
19
|
'textDocument/didOpen' => Handlers::TextDocumentDidOpenHandler,
|
20
|
+
'textDocument/documentHighlight' => Handlers::TextDocumentDocumentHighlightHandler,
|
20
21
|
'textDocument/documentSymbol' => Handlers::TextDocumentDocumentSymbolHandler,
|
21
22
|
'textDocument/formatting' => Handlers::TextDocumentFormattingHandler,
|
22
23
|
'textDocument/hover' => Handlers::TextDocumentHoverHandler,
|
@@ -43,8 +44,8 @@ module Rucoa
|
|
43
44
|
# @param io_in [IO]
|
44
45
|
# @param io_out [IO]
|
45
46
|
def initialize(
|
46
|
-
io_log: ::StringIO.new,
|
47
47
|
io_in: ::StringIO.new,
|
48
|
+
io_log: ::StringIO.new,
|
48
49
|
io_out: ::StringIO.new
|
49
50
|
)
|
50
51
|
@logger = ::Logger.new(io_log)
|
@@ -62,6 +63,19 @@ module Rucoa
|
|
62
63
|
@definition_store.bulk_add(DefinitionArchiver.load)
|
63
64
|
end
|
64
65
|
|
66
|
+
# @return [void]
|
67
|
+
def finish
|
68
|
+
exit(0)
|
69
|
+
end
|
70
|
+
|
71
|
+
# @note This method is for testing.
|
72
|
+
# @return [Array<Hash>]
|
73
|
+
def responses
|
74
|
+
io = @writer.io
|
75
|
+
io.rewind
|
76
|
+
MessageReader.new(io).read.to_a
|
77
|
+
end
|
78
|
+
|
65
79
|
# @return [void]
|
66
80
|
def start
|
67
81
|
@reader.read do |message|
|
@@ -75,11 +89,6 @@ module Rucoa
|
|
75
89
|
end
|
76
90
|
end
|
77
91
|
|
78
|
-
# @return [void]
|
79
|
-
def finish
|
80
|
-
exit(0)
|
81
|
-
end
|
82
|
-
|
83
92
|
# @yieldparam response [Hash]
|
84
93
|
# @param message [Hash]
|
85
94
|
# @return [void]
|
@@ -94,15 +103,18 @@ module Rucoa
|
|
94
103
|
end
|
95
104
|
end
|
96
105
|
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
MessageReader.new(io).read.to_a
|
106
|
+
private
|
107
|
+
|
108
|
+
# @yieldparam log [String]
|
109
|
+
def debug(&block)
|
110
|
+
@logger.debug(&block) if configuration.enables_debug?
|
103
111
|
end
|
104
112
|
|
105
|
-
|
113
|
+
# @param request_method [String]
|
114
|
+
# @return [Class, nil]
|
115
|
+
def find_client_request_handler(request_method)
|
116
|
+
METHOD_TO_HANDLER_MAP[request_method]
|
117
|
+
end
|
106
118
|
|
107
119
|
# @param request [Hash]
|
108
120
|
# @return [void]
|
@@ -114,11 +126,6 @@ module Rucoa
|
|
114
126
|
end
|
115
127
|
end
|
116
128
|
|
117
|
-
# @yieldparam log [String]
|
118
|
-
def debug(&block)
|
119
|
-
@logger.debug(&block) if configuration.enables_debug?
|
120
|
-
end
|
121
|
-
|
122
129
|
# @param request [Hash]
|
123
130
|
# @return [void]
|
124
131
|
def handle_client_request(request)
|
@@ -134,12 +141,6 @@ module Rucoa
|
|
134
141
|
@client_response_handlers.delete(response['id'])&.call(response)
|
135
142
|
end
|
136
143
|
|
137
|
-
# @param request_method [String]
|
138
|
-
# @return [Class, nil]
|
139
|
-
def find_client_request_handler(request_method)
|
140
|
-
METHOD_TO_HANDLER_MAP[request_method]
|
141
|
-
end
|
142
|
-
|
143
144
|
# @param message [Hash]
|
144
145
|
# @return [void]
|
145
146
|
def write_server_request(
|
data/lib/rucoa/source.rb
CHANGED
@@ -62,6 +62,11 @@ module Rucoa
|
|
62
62
|
end
|
63
63
|
end
|
64
64
|
|
65
|
+
# @return [Boolean]
|
66
|
+
def failed_to_parse?
|
67
|
+
parse_result.failed?
|
68
|
+
end
|
69
|
+
|
65
70
|
# @return [String, nil]
|
66
71
|
# @example returns path for file URI
|
67
72
|
# source = Rucoa::Source.new(
|
@@ -96,11 +101,6 @@ module Rucoa
|
|
96
101
|
parse_result.root_node
|
97
102
|
end
|
98
103
|
|
99
|
-
# @return [Boolean]
|
100
|
-
def failed_to_parse?
|
101
|
-
parse_result.failed?
|
102
|
-
end
|
103
|
-
|
104
104
|
# @return [Boolean]
|
105
105
|
def untitled?
|
106
106
|
uri_object.scheme == 'untitled'
|
data/lib/rucoa/source_store.rb
CHANGED
@@ -6,10 +6,10 @@ module Rucoa
|
|
6
6
|
@data = {}
|
7
7
|
end
|
8
8
|
|
9
|
-
# @
|
10
|
-
# @return [
|
11
|
-
def
|
12
|
-
@data
|
9
|
+
# @yieldparam uri [String]
|
10
|
+
# @return [Enumerable<String>]
|
11
|
+
def each_uri(&block)
|
12
|
+
@data.each_key(&block)
|
13
13
|
end
|
14
14
|
|
15
15
|
# @param uri [String]
|
@@ -18,10 +18,10 @@ module Rucoa
|
|
18
18
|
@data[uri]
|
19
19
|
end
|
20
20
|
|
21
|
-
# @
|
22
|
-
# @return [
|
23
|
-
def
|
24
|
-
@data.
|
21
|
+
# @param source [Rucoa::Source]
|
22
|
+
# @return [void]
|
23
|
+
def update(source)
|
24
|
+
@data[source.uri] = source
|
25
25
|
end
|
26
26
|
end
|
27
27
|
end
|
data/lib/rucoa/version.rb
CHANGED
@@ -35,10 +35,26 @@ module Rucoa
|
|
35
35
|
# Foo#bar=
|
36
36
|
# ]
|
37
37
|
# )
|
38
|
+
# @example ignores unrecognizable attributes
|
39
|
+
# definitions = Rucoa::Source.new(
|
40
|
+
# content: <<~RUBY,
|
41
|
+
# class Foo
|
42
|
+
# attr_reader foo
|
43
|
+
# end
|
44
|
+
# RUBY
|
45
|
+
# uri: '/path/to/foo.rb'
|
46
|
+
# ).definitions
|
47
|
+
# expect(definitions.map(&:qualified_name)).to eq(
|
48
|
+
# %w[
|
49
|
+
# Foo
|
50
|
+
# ]
|
51
|
+
# )
|
38
52
|
def call
|
39
53
|
return [] unless @node.is_a?(Nodes::SendNode) && READER_METHOD_NAMES.include?(@node.name)
|
40
54
|
|
41
|
-
@node.arguments.
|
55
|
+
@node.arguments.filter_map do |argument|
|
56
|
+
next unless argument.respond_to?(:value)
|
57
|
+
|
42
58
|
Definitions::MethodDefinition.new(
|
43
59
|
description: description,
|
44
60
|
kind: :instance,
|
@@ -35,10 +35,26 @@ module Rucoa
|
|
35
35
|
# Foo#bar=
|
36
36
|
# ]
|
37
37
|
# )
|
38
|
+
# @example ignores unrecognizable attributes
|
39
|
+
# definitions = Rucoa::Source.new(
|
40
|
+
# content: <<~RUBY,
|
41
|
+
# class Foo
|
42
|
+
# attr_writer foo
|
43
|
+
# end
|
44
|
+
# RUBY
|
45
|
+
# uri: '/path/to/foo.rb'
|
46
|
+
# ).definitions
|
47
|
+
# expect(definitions.map(&:qualified_name)).to eq(
|
48
|
+
# %w[
|
49
|
+
# Foo
|
50
|
+
# ]
|
51
|
+
# )
|
38
52
|
def call
|
39
53
|
return [] unless @node.is_a?(Nodes::SendNode) && WRITER_METHOD_NAMES.include?(@node.name)
|
40
54
|
|
41
|
-
@node.arguments.
|
55
|
+
@node.arguments.filter_map do |argument|
|
56
|
+
next unless argument.respond_to?(:value)
|
57
|
+
|
42
58
|
Definitions::MethodDefinition.new(
|
43
59
|
description: description,
|
44
60
|
kind: :instance,
|
@@ -49,6 +49,7 @@ module Rucoa
|
|
49
49
|
[
|
50
50
|
Definitions::ClassDefinition.new(
|
51
51
|
description: description,
|
52
|
+
extended_module_unqualified_names: extended_module_unqualified_names,
|
52
53
|
included_module_unqualified_names: included_module_unqualified_names,
|
53
54
|
location: location,
|
54
55
|
prepended_module_unqualified_names: prepended_module_unqualified_names,
|
@@ -22,8 +22,21 @@ module Rucoa
|
|
22
22
|
# uri: '/path/to/foo.rb'
|
23
23
|
# ).definitions
|
24
24
|
# expect(definitions[0]).to be_a(Rucoa::Definitions::MethodDefinition)
|
25
|
+
# @example returns method definition for another style of singleton def node
|
26
|
+
# definitions = Rucoa::Source.new(
|
27
|
+
# content: <<~RUBY,
|
28
|
+
# class Foo
|
29
|
+
# class << self
|
30
|
+
# def bar
|
31
|
+
# end
|
32
|
+
# end
|
33
|
+
# end
|
34
|
+
# RUBY
|
35
|
+
# uri: '/path/to/foo.rb'
|
36
|
+
# ).definitions
|
37
|
+
# expect(definitions[1].qualified_name).to eq('Foo.bar')
|
25
38
|
def call
|
26
|
-
return [] unless @node.is_a?(Nodes::DefNode)
|
39
|
+
return [] unless @node.is_a?(Nodes::DefNode)
|
27
40
|
|
28
41
|
[
|
29
42
|
Definitions::MethodDefinition.new(
|
@@ -19,6 +19,7 @@ module Rucoa
|
|
19
19
|
[
|
20
20
|
Definitions::ModuleDefinition.new(
|
21
21
|
description: description,
|
22
|
+
extended_module_unqualified_names: extended_module_unqualified_names,
|
22
23
|
included_module_unqualified_names: included_module_unqualified_names,
|
23
24
|
location: location,
|
24
25
|
prepended_module_unqualified_names: prepended_module_unqualified_names,
|
@@ -29,6 +30,11 @@ module Rucoa
|
|
29
30
|
|
30
31
|
private
|
31
32
|
|
33
|
+
# @return [Array<Rucoa::UnqualifiedName>]
|
34
|
+
def extended_module_unqualified_names
|
35
|
+
unqualified_names_for('extend')
|
36
|
+
end
|
37
|
+
|
32
38
|
# @return [Array<Rucoa::UnqualifiedName>]
|
33
39
|
def included_module_unqualified_names
|
34
40
|
unqualified_names_for('include')
|