rucoa 0.9.0 → 0.11.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 +9 -0
- data/Gemfile.lock +8 -8
- data/data/definitions_ruby_3_1 +0 -0
- data/lib/rucoa/configuration.rb +4 -1
- data/lib/rucoa/definition_store.rb +350 -105
- data/lib/rucoa/definitions/base.rb +14 -3
- data/lib/rucoa/definitions/class_definition.rb +14 -64
- data/lib/rucoa/definitions/constant_definition.rb +31 -19
- data/lib/rucoa/definitions/method_definition.rb +44 -52
- data/lib/rucoa/definitions/method_parameter_definition.rb +4 -1
- data/lib/rucoa/definitions/module_definition.rb +53 -0
- data/lib/rucoa/handler_concerns/diagnostics_publishable.rb +14 -3
- data/lib/rucoa/handlers/base.rb +12 -3
- data/lib/rucoa/handlers/text_document_definition_handler.rb +3 -99
- data/lib/rucoa/handlers/text_document_hover_handler.rb +21 -13
- data/lib/rucoa/handlers/text_document_selection_range_handler.rb +8 -2
- data/lib/rucoa/location.rb +37 -0
- data/lib/rucoa/node_concerns/body.rb +24 -0
- data/lib/rucoa/node_concerns/{name_fully_qualifiable.rb → qualified_name.rb} +2 -2
- data/lib/rucoa/node_concerns.rb +2 -1
- data/lib/rucoa/node_inspector.rb +29 -23
- data/lib/rucoa/nodes/base.rb +22 -6
- data/lib/rucoa/nodes/begin_node.rb +8 -0
- data/lib/rucoa/nodes/casgn_node.rb +1 -1
- data/lib/rucoa/nodes/class_node.rb +2 -1
- data/lib/rucoa/nodes/const_node.rb +33 -15
- data/lib/rucoa/nodes/def_node.rb +2 -2
- data/lib/rucoa/nodes/defs_node.rb +1 -1
- data/lib/rucoa/nodes/module_node.rb +2 -1
- data/lib/rucoa/nodes.rb +2 -1
- data/lib/rucoa/parser.rb +14 -14
- data/lib/rucoa/parser_builder.rb +6 -1
- data/lib/rucoa/position.rb +10 -1
- data/lib/rucoa/range.rb +11 -1
- data/lib/rucoa/rbs/class_definition_mapper.rb +14 -28
- data/lib/rucoa/rbs/constant_definition_mapper.rb +12 -6
- data/lib/rucoa/rbs/method_definition_mapper.rb +12 -6
- data/lib/rucoa/rbs/module_definition_mapper.rb +39 -6
- data/lib/rucoa/rubocop/investigator.rb +4 -1
- data/lib/rucoa/server.rb +9 -3
- data/lib/rucoa/source.rb +19 -4
- data/lib/rucoa/unqualified_name.rb +9 -0
- data/lib/rucoa/version.rb +1 -1
- data/lib/rucoa/yard/definition_generators/attribute_reader_definition_generator.rb +76 -0
- data/lib/rucoa/yard/definition_generators/attribute_writer_definition_generator.rb +76 -0
- data/lib/rucoa/yard/definition_generators/base.rb +117 -0
- data/lib/rucoa/yard/definition_generators/class_definition_generator.rb +67 -0
- data/lib/rucoa/yard/definition_generators/constant_assignment_definition_generator.rb +29 -0
- data/lib/rucoa/yard/definition_generators/method_definition_generator.rb +60 -0
- data/lib/rucoa/yard/definition_generators/module_definition_generator.rb +68 -0
- data/lib/rucoa/yard/definition_generators.rb +15 -0
- data/lib/rucoa/yard/definitions_loader.rb +1 -271
- data/lib/rucoa/yard.rb +1 -0
- data/lib/rucoa.rb +4 -2
- metadata +15 -3
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Rucoa
|
4
|
+
Location = ::Struct.new(
|
5
|
+
:range,
|
6
|
+
:uri,
|
7
|
+
keyword_init: true
|
8
|
+
) do
|
9
|
+
class << self
|
10
|
+
# @param location [RBS::Location]
|
11
|
+
# @return [Rucoa::Location]
|
12
|
+
def from_rbs_location(location)
|
13
|
+
new(
|
14
|
+
range: Range.new(
|
15
|
+
Position.new(
|
16
|
+
column: location.start_column,
|
17
|
+
line: location.start_line
|
18
|
+
),
|
19
|
+
Position.new(
|
20
|
+
column: location.end_column,
|
21
|
+
line: location.end_line
|
22
|
+
)
|
23
|
+
),
|
24
|
+
uri: "file://#{location.name}"
|
25
|
+
)
|
26
|
+
end
|
27
|
+
|
28
|
+
# @param node [Rucoa::Nodes::Base]
|
29
|
+
def from_rucoa_node(node)
|
30
|
+
new(
|
31
|
+
range: Range.from_parser_range(node.location.expression),
|
32
|
+
uri: node.location.expression.source_buffer.name
|
33
|
+
)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Rucoa
|
4
|
+
module NodeConcerns
|
5
|
+
module Body
|
6
|
+
# @return [Rucoa::Nodes::BeginNode, nil]
|
7
|
+
def body
|
8
|
+
children[2]
|
9
|
+
end
|
10
|
+
|
11
|
+
# @return [Array<Rucoa::Nodes::Base>]
|
12
|
+
def body_children
|
13
|
+
case body
|
14
|
+
when Nodes::BeginNode
|
15
|
+
body.children
|
16
|
+
when nil
|
17
|
+
[]
|
18
|
+
else
|
19
|
+
[body]
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
data/lib/rucoa/node_concerns.rb
CHANGED
data/lib/rucoa/node_inspector.rb
CHANGED
@@ -4,7 +4,10 @@ module Rucoa
|
|
4
4
|
class NodeInspector
|
5
5
|
# @param definition_store [Rucoa::DefinitionStore]
|
6
6
|
# @param node [Rucoa::Node]
|
7
|
-
def initialize(
|
7
|
+
def initialize(
|
8
|
+
definition_store:,
|
9
|
+
node:
|
10
|
+
)
|
8
11
|
@definition_store = definition_store
|
9
12
|
@node = node
|
10
13
|
end
|
@@ -48,7 +51,7 @@ module Rucoa
|
|
48
51
|
def return_types
|
49
52
|
case @node.type
|
50
53
|
when :const
|
51
|
-
|
54
|
+
return_types_for_const
|
52
55
|
when :lvar
|
53
56
|
return_types_for_lvar
|
54
57
|
when :send
|
@@ -90,22 +93,14 @@ module Rucoa
|
|
90
93
|
def constant_definition
|
91
94
|
return unless @node.is_a?(Nodes::ConstNode)
|
92
95
|
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
@node.chained_name
|
102
|
-
].join('::')
|
103
|
-
end
|
104
|
-
end + [@node.chained_name]
|
105
|
-
candidate_fully_qualified_names.find do |candidate_fully_qualified_name|
|
106
|
-
definition = @definition_store.find_definition_by_fully_qualified_name(candidate_fully_qualified_name)
|
107
|
-
break definition if definition
|
108
|
-
end
|
96
|
+
@definition_store.find_definition_by_qualified_name(
|
97
|
+
@definition_store.resolve_constant(
|
98
|
+
UnqualifiedName.new(
|
99
|
+
chained_name: @node.chained_name,
|
100
|
+
module_nesting: @node.module_nesting
|
101
|
+
)
|
102
|
+
)
|
103
|
+
)
|
109
104
|
end
|
110
105
|
|
111
106
|
# @return [Boolean]
|
@@ -114,16 +109,27 @@ module Rucoa
|
|
114
109
|
end
|
115
110
|
|
116
111
|
# @return [String, nil]
|
117
|
-
def
|
118
|
-
@node.each_ancestor(:def).first&.
|
112
|
+
def nearest_def_qualified_name
|
113
|
+
@node.each_ancestor(:def).first&.qualified_name
|
114
|
+
end
|
115
|
+
|
116
|
+
# @return [Array<String>]
|
117
|
+
def return_types_for_const
|
118
|
+
qualified_name = @definition_store.resolve_constant(
|
119
|
+
UnqualifiedName.new(
|
120
|
+
chained_name: @node.chained_name,
|
121
|
+
module_nesting: @node.module_nesting
|
122
|
+
)
|
123
|
+
)
|
124
|
+
["singleton<#{qualified_name}>"]
|
119
125
|
end
|
120
126
|
|
121
127
|
# @return [Array<String>]
|
122
128
|
def return_types_for_lvar
|
123
|
-
|
124
|
-
return [] unless
|
129
|
+
qualified_name = nearest_def_qualified_name
|
130
|
+
return [] unless qualified_name
|
125
131
|
|
126
|
-
definition = @definition_store.
|
132
|
+
definition = @definition_store.find_definition_by_qualified_name(qualified_name)
|
127
133
|
return [] unless definition
|
128
134
|
|
129
135
|
definition.parameters.select do |parameter|
|
data/lib/rucoa/nodes/base.rb
CHANGED
@@ -37,7 +37,10 @@ module Rucoa
|
|
37
37
|
# @param types [Array<Symbol>]
|
38
38
|
# @return [Rucoa::Nodes::Base] if a block is given
|
39
39
|
# @return [Enumerator] if no block is given
|
40
|
-
def each_ancestor(
|
40
|
+
def each_ancestor(
|
41
|
+
*types,
|
42
|
+
&block
|
43
|
+
)
|
41
44
|
return to_enum(__method__, *types) unless block
|
42
45
|
|
43
46
|
visit_ancestors(types, &block)
|
@@ -47,7 +50,10 @@ module Rucoa
|
|
47
50
|
# @param types [Array<Symbol>]
|
48
51
|
# @return [Rucoa::Nodes::Base] if a block is given
|
49
52
|
# @return [Enumerator] if no block is given
|
50
|
-
def each_child_node(
|
53
|
+
def each_child_node(
|
54
|
+
*types,
|
55
|
+
&block
|
56
|
+
)
|
51
57
|
return to_enum(__method__, *types) unless block
|
52
58
|
|
53
59
|
visit_child_node(types, &block)
|
@@ -57,7 +63,10 @@ module Rucoa
|
|
57
63
|
# @param types [Array<Symbol>]
|
58
64
|
# @return [Rucoa::Nodes::Base] if a block is given
|
59
65
|
# @return [Enumerator] if no block is given
|
60
|
-
def each_descendant(
|
66
|
+
def each_descendant(
|
67
|
+
*types,
|
68
|
+
&block
|
69
|
+
)
|
61
70
|
return to_enum(__method__, *types) unless block
|
62
71
|
|
63
72
|
visit_descendants(types, &block)
|
@@ -68,7 +77,11 @@ module Rucoa
|
|
68
77
|
# Some nodes change their type depending on the context.
|
69
78
|
# For example, `const` node can be `casgn` node.
|
70
79
|
# @return [Rucoa::Nodes::Base]
|
71
|
-
def updated(
|
80
|
+
def updated(
|
81
|
+
type = nil,
|
82
|
+
children = nil,
|
83
|
+
properties = {}
|
84
|
+
)
|
72
85
|
properties[:location] ||= @location
|
73
86
|
ParserBuilder.node_class_for(type || @type).new(
|
74
87
|
type || @type,
|
@@ -137,7 +150,7 @@ module Rucoa
|
|
137
150
|
# )
|
138
151
|
# expect(node.module_nesting).to eq(['Foo::Bar', 'Foo'])
|
139
152
|
def module_nesting
|
140
|
-
each_ancestor(:class, :module).map(&:
|
153
|
+
each_ancestor(:class, :module).map(&:qualified_name)
|
141
154
|
end
|
142
155
|
|
143
156
|
protected
|
@@ -145,7 +158,10 @@ module Rucoa
|
|
145
158
|
# Visit all descendants.
|
146
159
|
# @param types [Array<Symbol>]
|
147
160
|
# @return [void]
|
148
|
-
def visit_descendants(
|
161
|
+
def visit_descendants(
|
162
|
+
types,
|
163
|
+
&block
|
164
|
+
)
|
149
165
|
each_child_node do |child|
|
150
166
|
yield(child) if types.empty? || types.include?(child.type)
|
151
167
|
child.visit_descendants(types, &block)
|
@@ -5,16 +5,25 @@ module Rucoa
|
|
5
5
|
class ConstNode < Base
|
6
6
|
# @return [String]
|
7
7
|
# @example returns "A" for "A"
|
8
|
-
# node = Rucoa::
|
9
|
-
#
|
10
|
-
#
|
8
|
+
# node = Rucoa::Source.new(
|
9
|
+
# content: <<~RUBY,
|
10
|
+
# A
|
11
|
+
# RUBY
|
12
|
+
# uri: 'file:///path/to/a.rb'
|
11
13
|
# ).root_node
|
12
14
|
# expect(node.name).to eq('A')
|
13
15
|
# @example returns "B" for "A::B"
|
14
|
-
# node = Rucoa::
|
15
|
-
#
|
16
|
-
#
|
17
|
-
#
|
16
|
+
# node = Rucoa::Source.new(
|
17
|
+
# content: <<~RUBY,
|
18
|
+
# A::B
|
19
|
+
# RUBY
|
20
|
+
# uri: 'file:///path/to/a.rb'
|
21
|
+
# ).node_at(
|
22
|
+
# Rucoa::Position.new(
|
23
|
+
# column: 4,
|
24
|
+
# line: 1
|
25
|
+
# )
|
26
|
+
# )
|
18
27
|
# expect(node.name).to eq('B')
|
19
28
|
def name
|
20
29
|
children[1].to_s
|
@@ -22,16 +31,25 @@ module Rucoa
|
|
22
31
|
|
23
32
|
# @return [String]
|
24
33
|
# @example returns "A" for "A"
|
25
|
-
# node = Rucoa::
|
26
|
-
#
|
27
|
-
#
|
34
|
+
# node = Rucoa::Source.new(
|
35
|
+
# content: <<~RUBY,
|
36
|
+
# A
|
37
|
+
# RUBY
|
38
|
+
# uri: 'file:///path/to/a.rb'
|
28
39
|
# ).root_node
|
29
40
|
# expect(node.chained_name).to eq('A')
|
30
41
|
# @example returns "A::B" for "A::B"
|
31
|
-
# node = Rucoa::
|
32
|
-
#
|
33
|
-
#
|
34
|
-
#
|
42
|
+
# node = Rucoa::Source.new(
|
43
|
+
# content: <<~RUBY,
|
44
|
+
# A::B
|
45
|
+
# RUBY
|
46
|
+
# uri: 'file:///path/to/a.rb'
|
47
|
+
# ).node_at(
|
48
|
+
# Rucoa::Position.new(
|
49
|
+
# column: 4,
|
50
|
+
# line: 1
|
51
|
+
# )
|
52
|
+
# )
|
35
53
|
# expect(node.chained_name).to eq('A::B')
|
36
54
|
def chained_name
|
37
55
|
case receiver
|
@@ -70,7 +88,7 @@ module Rucoa
|
|
70
88
|
# )
|
71
89
|
# expect(node.module_nesting).to eq(['Foo::Bar', 'Foo'])
|
72
90
|
def module_nesting
|
73
|
-
each_ancestor(:class, :module).map(&:
|
91
|
+
each_ancestor(:class, :module).map(&:qualified_name)
|
74
92
|
end
|
75
93
|
|
76
94
|
private
|
data/lib/rucoa/nodes/def_node.rb
CHANGED
data/lib/rucoa/nodes.rb
CHANGED
@@ -3,9 +3,10 @@
|
|
3
3
|
module Rucoa
|
4
4
|
module Nodes
|
5
5
|
autoload :Base, 'rucoa/nodes/base'
|
6
|
+
autoload :BeginNode, 'rucoa/nodes/begin_node'
|
7
|
+
autoload :CasgnNode, 'rucoa/nodes/casgn_node'
|
6
8
|
autoload :CbaseNode, 'rucoa/nodes/cbase_node'
|
7
9
|
autoload :ClassNode, 'rucoa/nodes/class_node'
|
8
|
-
autoload :CasgnNode, 'rucoa/nodes/casgn_node'
|
9
10
|
autoload :ConstNode, 'rucoa/nodes/const_node'
|
10
11
|
autoload :DefNode, 'rucoa/nodes/def_node'
|
11
12
|
autoload :DefsNode, 'rucoa/nodes/defs_node'
|
data/lib/rucoa/parser.rb
CHANGED
@@ -5,47 +5,47 @@ require 'parser/current'
|
|
5
5
|
module Rucoa
|
6
6
|
class Parser
|
7
7
|
class << self
|
8
|
-
# @param path [String]
|
9
8
|
# @param text [String]
|
9
|
+
# @param uri [String]
|
10
10
|
# @return [Rucoa::ParseResult]
|
11
11
|
# @example returns non-failed parse result for valid Ruby source
|
12
12
|
# result = Rucoa::Parser.call(
|
13
|
-
#
|
14
|
-
#
|
13
|
+
# text: 'foo',
|
14
|
+
# uri: 'file:///path/to/foo.rb'
|
15
15
|
# )
|
16
16
|
# expect(result).not_to be_failed
|
17
17
|
# @example returns failed parse result for invalid Ruby source
|
18
18
|
# result = Rucoa::Parser.call(
|
19
|
-
#
|
20
|
-
#
|
19
|
+
# text: 'foo(',
|
20
|
+
# uri: 'file:///path/to/foo.rb'
|
21
21
|
# )
|
22
22
|
# expect(result).to be_failed
|
23
23
|
def call(
|
24
|
-
|
25
|
-
|
24
|
+
text:,
|
25
|
+
uri:
|
26
26
|
)
|
27
27
|
new(
|
28
|
-
|
29
|
-
|
28
|
+
text: text,
|
29
|
+
uri: uri
|
30
30
|
).call
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
34
|
-
# @param path [String]
|
35
34
|
# @param text [String]
|
35
|
+
# @param uri [String]
|
36
36
|
def initialize(
|
37
|
-
|
38
|
-
|
37
|
+
text:,
|
38
|
+
uri:
|
39
39
|
)
|
40
|
-
@path = path
|
41
40
|
@text = text
|
41
|
+
@uri = uri
|
42
42
|
end
|
43
43
|
|
44
44
|
# @return [Rucoa::ParseResult]
|
45
45
|
def call
|
46
46
|
root_node, comments = parser.parse_with_comments(
|
47
47
|
::Parser::Source::Buffer.new(
|
48
|
-
@
|
48
|
+
@uri,
|
49
49
|
source: @text
|
50
50
|
)
|
51
51
|
)
|
data/lib/rucoa/parser_builder.rb
CHANGED
@@ -5,6 +5,7 @@ require 'parser/current'
|
|
5
5
|
module Rucoa
|
6
6
|
class ParserBuilder < ::Parser::Builders::Default
|
7
7
|
NODE_CLASS_BY_TYPE = {
|
8
|
+
begin: Nodes::BeginNode,
|
8
9
|
casgn: Nodes::CasgnNode,
|
9
10
|
cbase: Nodes::CbaseNode,
|
10
11
|
class: Nodes::ClassNode,
|
@@ -28,7 +29,11 @@ module Rucoa
|
|
28
29
|
end
|
29
30
|
|
30
31
|
# @note Override.
|
31
|
-
def n(
|
32
|
+
def n(
|
33
|
+
type,
|
34
|
+
children,
|
35
|
+
source_map
|
36
|
+
)
|
32
37
|
self.class.node_class_for(type).new(
|
33
38
|
type,
|
34
39
|
children,
|
data/lib/rucoa/position.rb
CHANGED
@@ -39,11 +39,20 @@ module Rucoa
|
|
39
39
|
|
40
40
|
# @param column [Integer] 0-origin column number
|
41
41
|
# @param line [Integer] 1-origin line number
|
42
|
-
def initialize(
|
42
|
+
def initialize(
|
43
|
+
column: 0,
|
44
|
+
line: 1
|
45
|
+
)
|
43
46
|
@column = column
|
44
47
|
@line = line
|
45
48
|
end
|
46
49
|
|
50
|
+
# @param other [Rucoa::Position]
|
51
|
+
# @return [Boolean]
|
52
|
+
def ==(other)
|
53
|
+
column == other.column && line == other.line
|
54
|
+
end
|
55
|
+
|
47
56
|
# @param text [String]
|
48
57
|
# @return [Integer]
|
49
58
|
def to_index_of(text)
|
data/lib/rucoa/range.rb
CHANGED
@@ -31,12 +31,22 @@ module Rucoa
|
|
31
31
|
# @param beginning [Rucoa::Position]
|
32
32
|
# @param ending [Ruoca::Position]
|
33
33
|
# @param including_ending [Boolean]
|
34
|
-
def initialize(
|
34
|
+
def initialize(
|
35
|
+
beginning,
|
36
|
+
ending,
|
37
|
+
including_ending: true
|
38
|
+
)
|
35
39
|
@beginning = beginning
|
36
40
|
@ending = ending
|
37
41
|
@including_ending = including_ending
|
38
42
|
end
|
39
43
|
|
44
|
+
# @param other [Rucoa::Range]
|
45
|
+
# @return [Boolean]
|
46
|
+
def ==(other)
|
47
|
+
beginning == other.beginning && ending == other.ending
|
48
|
+
end
|
49
|
+
|
40
50
|
# @param range [Rucoa::Range]
|
41
51
|
# @return [Boolean]
|
42
52
|
# @example returns true when the range is contained in self
|
@@ -2,43 +2,29 @@
|
|
2
2
|
|
3
3
|
module Rucoa
|
4
4
|
module Rbs
|
5
|
-
class ClassDefinitionMapper
|
6
|
-
class << self
|
7
|
-
# @param declaration [RBS::AST::Declarations::Class]
|
8
|
-
# @return [Rucoa::Definitions::ClassDefinition]
|
9
|
-
def call(declaration:)
|
10
|
-
new(declaration: declaration).call
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
# @param declaration [RBS::AST::Declarations::Class]
|
15
|
-
def initialize(declaration:)
|
16
|
-
@declaration = declaration
|
17
|
-
end
|
18
|
-
|
5
|
+
class ClassDefinitionMapper < ModuleDefinitionMapper
|
19
6
|
# @return [Rucoa::Definitions::ClassDefinition]
|
7
|
+
# @example supports `include`
|
8
|
+
# definition_store = Rucoa::DefinitionStore.new
|
9
|
+
# definition_store.bulk_add(Rucoa::DefinitionArchiver.load)
|
10
|
+
# subject = definition_store.find_definition_by_qualified_name('Array')
|
11
|
+
# expect(subject.included_module_qualified_names).to include('Enumerable')
|
20
12
|
def call
|
21
13
|
Definitions::ClassDefinition.new(
|
22
|
-
|
23
|
-
|
24
|
-
|
14
|
+
description: description,
|
15
|
+
extended_module_qualified_names: extended_module_qualified_names,
|
16
|
+
included_module_qualified_names: included_module_qualified_names,
|
17
|
+
location: location,
|
18
|
+
prepended_module_qualified_names: prepended_module_qualified_names,
|
19
|
+
qualified_name: qualified_name,
|
20
|
+
super_class_qualified_name: super_class_qualified_name
|
25
21
|
)
|
26
22
|
end
|
27
23
|
|
28
24
|
private
|
29
25
|
|
30
|
-
# @return [String]
|
31
|
-
def fully_qualified_name
|
32
|
-
@declaration.name.to_s.delete_prefix('::')
|
33
|
-
end
|
34
|
-
|
35
|
-
# @return [String]
|
36
|
-
def source_path
|
37
|
-
@declaration.location.name
|
38
|
-
end
|
39
|
-
|
40
26
|
# @return [String, nil]
|
41
|
-
def
|
27
|
+
def super_class_qualified_name
|
42
28
|
@declaration.super_class&.name&.to_s&.delete_prefix('::')
|
43
29
|
end
|
44
30
|
end
|
@@ -19,21 +19,27 @@ module Rucoa
|
|
19
19
|
# @return [Rucoa::Definitions::ConstantDefinition]
|
20
20
|
def call
|
21
21
|
Definitions::ConstantDefinition.new(
|
22
|
-
|
23
|
-
|
22
|
+
description: description,
|
23
|
+
location: location,
|
24
|
+
qualified_name: qualified_name
|
24
25
|
)
|
25
26
|
end
|
26
27
|
|
27
28
|
private
|
28
29
|
|
30
|
+
# @return [String, nil]
|
31
|
+
def description
|
32
|
+
@declaration.comment&.string&.sub(/\A\s*<!--.*-->\s*/m, '')
|
33
|
+
end
|
34
|
+
|
29
35
|
# @return [String]
|
30
|
-
def
|
36
|
+
def qualified_name
|
31
37
|
@declaration.name.to_s.delete_prefix('::')
|
32
38
|
end
|
33
39
|
|
34
|
-
# @return [
|
35
|
-
def
|
36
|
-
@declaration.location
|
40
|
+
# @return [Rucoa::Location]
|
41
|
+
def location
|
42
|
+
Location.from_rbs_location(@declaration.location)
|
37
43
|
end
|
38
44
|
end
|
39
45
|
end
|
@@ -7,7 +7,10 @@ module Rucoa
|
|
7
7
|
# @param declaration [RBS::AST::Declarations::Class, RBS::AST::Declarations::Module]
|
8
8
|
# @param method_definition [RBS::AST::Members::MethodDefinition]
|
9
9
|
# @return [Rucoa::Definitions::MethodDefinition]
|
10
|
-
def call(
|
10
|
+
def call(
|
11
|
+
declaration:,
|
12
|
+
method_definition:
|
13
|
+
)
|
11
14
|
new(
|
12
15
|
declaration: declaration,
|
13
16
|
method_definition: method_definition
|
@@ -17,7 +20,10 @@ module Rucoa
|
|
17
20
|
|
18
21
|
# @param declaration [RBS::AST::Declarations::Class, RBS::AST::Declarations::Module]
|
19
22
|
# @param method_definition [RBS::AST::Members::MethodDefinition]
|
20
|
-
def initialize(
|
23
|
+
def initialize(
|
24
|
+
declaration:,
|
25
|
+
method_definition:
|
26
|
+
)
|
21
27
|
@declaration = declaration
|
22
28
|
@method_definition = method_definition
|
23
29
|
end
|
@@ -27,9 +33,9 @@ module Rucoa
|
|
27
33
|
Definitions::MethodDefinition.new(
|
28
34
|
description: description,
|
29
35
|
kind: kind,
|
36
|
+
location: location,
|
30
37
|
method_name: method_name,
|
31
38
|
namespace: namespace,
|
32
|
-
source_path: source_path,
|
33
39
|
types: types
|
34
40
|
)
|
35
41
|
end
|
@@ -65,9 +71,9 @@ module Rucoa
|
|
65
71
|
@method_definition.kind
|
66
72
|
end
|
67
73
|
|
68
|
-
# @return [
|
69
|
-
def
|
70
|
-
@
|
74
|
+
# @return [Rucoa::Location]
|
75
|
+
def location
|
76
|
+
Location.from_rbs_location(@method_definition.location)
|
71
77
|
end
|
72
78
|
|
73
79
|
class MethodTypeMapper
|