docrb-parser 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. checksums.yaml +7 -0
  2. data/.rspec +3 -0
  3. data/.rubocop.yml +75 -0
  4. data/Rakefile +12 -0
  5. data/docrb-parser.gemspec +38 -0
  6. data/lib/docrb/core_extensions.rb +60 -0
  7. data/lib/docrb/parser/attribute.rb +25 -0
  8. data/lib/docrb/parser/call.rb +27 -0
  9. data/lib/docrb/parser/class.rb +94 -0
  10. data/lib/docrb/parser/comment.rb +40 -0
  11. data/lib/docrb/parser/comment_parser.rb +290 -0
  12. data/lib/docrb/parser/computations.rb +471 -0
  13. data/lib/docrb/parser/constant.rb +19 -0
  14. data/lib/docrb/parser/container.rb +305 -0
  15. data/lib/docrb/parser/deferred_singleton_class.rb +17 -0
  16. data/lib/docrb/parser/location.rb +43 -0
  17. data/lib/docrb/parser/method.rb +62 -0
  18. data/lib/docrb/parser/method_parameters.rb +85 -0
  19. data/lib/docrb/parser/module.rb +50 -0
  20. data/lib/docrb/parser/node_array.rb +24 -0
  21. data/lib/docrb/parser/reference.rb +25 -0
  22. data/lib/docrb/parser/reloader.rb +19 -0
  23. data/lib/docrb/parser/resolved_reference.rb +26 -0
  24. data/lib/docrb/parser/version.rb +7 -0
  25. data/lib/docrb/parser/virtual_container.rb +21 -0
  26. data/lib/docrb/parser/virtual_location.rb +9 -0
  27. data/lib/docrb/parser/virtual_method.rb +19 -0
  28. data/lib/docrb/parser.rb +139 -0
  29. data/lib/docrb-parser.rb +3 -0
  30. data/sig/docrb/core_extensions.rbs +24 -0
  31. data/sig/docrb/parser/attribute.rbs +18 -0
  32. data/sig/docrb/parser/call.rbs +17 -0
  33. data/sig/docrb/parser/class.rbs +34 -0
  34. data/sig/docrb/parser/comment.rbs +14 -0
  35. data/sig/docrb/parser/comment_parser.rbs +79 -0
  36. data/sig/docrb/parser/constant.rbs +15 -0
  37. data/sig/docrb/parser/container.rbs +91 -0
  38. data/sig/docrb/parser/deferred_singleton_class.rbs +12 -0
  39. data/sig/docrb/parser/location.rbs +24 -0
  40. data/sig/docrb/parser/method.rbs +34 -0
  41. data/sig/docrb/parser/method_parameters.rbs +34 -0
  42. data/sig/docrb/parser/module.rbs +14 -0
  43. data/sig/docrb/parser/node_array.rbs +12 -0
  44. data/sig/docrb/parser/reference.rbs +19 -0
  45. data/sig/docrb/parser/reloader.rbs +7 -0
  46. data/sig/docrb/parser/resolved_reference.rbs +22 -0
  47. data/sig/docrb/parser/virtual_method.rbs +17 -0
  48. data/sig/docrb/parser.rbs +5 -0
  49. metadata +109 -0
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Docrb
4
+ class Parser
5
+ class VirtualMethod
6
+ VirtualReceiver = Data.define(:type)
7
+
8
+ attr_accessor :name, :parameters, :receiver
9
+
10
+ def type = :def_node
11
+
12
+ def initialize(name, receiver, parameters = nil)
13
+ @name = name
14
+ @receiver = VirtualReceiver.new(type: receiver)
15
+ @parameters = parameters
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,139 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "prism"
4
+
5
+ require_relative "parser/reloader"
6
+
7
+ require_relative "parser/version"
8
+ require_relative "core_extensions"
9
+ require_relative "parser/node_array"
10
+
11
+ require_relative "parser/method"
12
+ require_relative "parser/location"
13
+ require_relative "parser/method_parameters"
14
+ require_relative "parser/container"
15
+ require_relative "parser/class"
16
+ require_relative "parser/deferred_singleton_class"
17
+ require_relative "parser/module"
18
+ require_relative "parser/reference"
19
+ require_relative "parser/call"
20
+ require_relative "parser/attribute"
21
+ require_relative "parser/constant"
22
+ require_relative "parser/comment"
23
+
24
+ require_relative "parser/virtual_method"
25
+ require_relative "parser/virtual_location"
26
+ require_relative "parser/virtual_container"
27
+
28
+ require_relative "parser/resolved_reference"
29
+ require_relative "parser/computations"
30
+ require_relative "parser/comment_parser"
31
+
32
+ module Docrb
33
+ class Parser
34
+ attr_reader :current_file, :locations, :references, :nodes
35
+ attr_accessor :debug, :ast_lines
36
+
37
+ def initialize
38
+ @current_ast = nil
39
+ @current_file = nil
40
+ @locations = []
41
+ @references = []
42
+ @ast_lines = {}
43
+ @object_by_id = {}
44
+ @current_object_id = 1
45
+ @nodes = NodeArray.new
46
+ end
47
+
48
+ def lines_for(file, ast)
49
+ return ast_lines[file] if ast_lines.key? file
50
+
51
+ ast.source.source.split("\n").tap { ast_lines[file] = _1 }
52
+ end
53
+
54
+ def all_objects = @object_by_id.values
55
+ def all_classes = all_objects.filter { _1.is_a? Class }
56
+ def all_modules = all_objects.filter { _1.is_a? Module }
57
+ def all_methods = all_objects.filter { _1.is_a? Method }
58
+
59
+ def finalize = Computations.new(self).tap(&:run)
60
+
61
+ docrb_inspect_attrs(:current_file, :locations, :references, :nodes)
62
+
63
+ def parse(file)
64
+ tap do
65
+ @current_file = file
66
+ @current_ast = Prism.parse_file(file)
67
+ @nodes.append(*@current_ast.value.statements.body.map { handle_node(_1) }.reject { _1.is_a? Call })
68
+ end
69
+ end
70
+
71
+ def make_id(obj)
72
+ @current_object_id.tap do |id|
73
+ @object_by_id[id] = obj
74
+ @current_object_id += 1
75
+ end
76
+ end
77
+
78
+ def object_by_id(id) = @object_by_id[id]
79
+
80
+ def handle_node(node, parent = nil)
81
+ case node.type
82
+ when :def_node then Method.new(self, parent, node)
83
+ when :class_node then Class.new(self, parent, node)
84
+ when :module_node then Module.new(self, parent, node)
85
+ when :singleton_class_node then handle_singleton_class(parent, node)
86
+ when :call_node then Call.new(self, parent, node)
87
+ when :constant_write_node then Constant.new(self, parent, node)
88
+ else unhandled_node!(node)
89
+ end
90
+ end
91
+
92
+ def unhandled_node!(node)
93
+ return unless debug
94
+
95
+ bs = caller_locations[1...].join("\n")
96
+ type = node.try(:type) || node.class.name
97
+ warn "Warning: Unhandled node type #{type}\n#{bs}\n#{node}"
98
+ end
99
+
100
+ def location(loc)
101
+ return loc if loc.is_a? Location
102
+
103
+ Location.new(self, @current_ast, loc).tap { @locations << _1 }
104
+ end
105
+
106
+ def reference(parent, path)
107
+ raise ArgumentError, "Empty path" if path.nil? || path.empty?
108
+
109
+ Reference.new(self, parent, path).tap { @references << _1 }
110
+ end
111
+
112
+ def attach_sources!
113
+ @locations.each(&:load_source!)
114
+ end
115
+
116
+ def unfurl_constant_path(node)
117
+ return [] unless node
118
+ return [node.name] if node.type == :constant_read_node
119
+
120
+ [].tap do |segments|
121
+ while node&.type == :constant_path_node
122
+ segments << node.child.name
123
+ node = node.parent
124
+ end
125
+ segments << (node&.name || :root!)
126
+ segments.reverse!
127
+ end
128
+ end
129
+
130
+ def handle_singleton_class(parent, node)
131
+ case node.expression.type
132
+ when :self_node
133
+ Class.new(self, parent, node).tap(&:singleton!)
134
+ else
135
+ DeferredSingletonClass.new(self, parent, node)
136
+ end
137
+ end
138
+ end
139
+ end
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "docrb/parser"
@@ -0,0 +1,24 @@
1
+ class Object
2
+ self.@__inspect_installed__: bool
3
+
4
+ def own_methods: -> Array[Symbol]
5
+ def object_id_hex: -> String
6
+
7
+ def self.docrb_inspect: { (void) -> String } -> String
8
+ def self.docrb_inspect_attrs: (*Symbol attrs) -> void
9
+ def self.visible_attr_reader: (*Symbol args) -> void
10
+ def self.visible_attr_Accessor: (*Symbol args) -> void
11
+
12
+ def try: (String | Symbol method, *untyped args, **untyped kwargs) ?{ (untyped) -> untyped } -> untyped
13
+ def attr_list: (*String names) -> String
14
+ end
15
+
16
+ class Array[unchecked out Elem] < Object
17
+ def first!: () -> Elem
18
+
19
+ alias old_first first
20
+ end
21
+
22
+ module Kernel
23
+ def then!: () { (self) -> untyped } -> (nil | untyped)
24
+ end
@@ -0,0 +1,18 @@
1
+ module Docrb
2
+ class Parser
3
+ class Attribute
4
+ type kind = :writer | :reader | :accessor
5
+
6
+ attr_reader name: Symbol
7
+ attr_reader location: Location
8
+ attr_accessor writer_visibility: Container::visibility
9
+ attr_accessor reader_visibility: Container::visibility
10
+ attr_accessor type: kind
11
+ attr_accessor parent: Container
12
+
13
+ def initialize: (Parser parser, Container parent, untyped node, Symbol name, kind `type`) -> void
14
+
15
+ def id: () -> Integer
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+ module Docrb
3
+ class Parser
4
+ class Call
5
+ attr_reader name: String
6
+ attr_reader arguments: Array[untyped]
7
+ attr_reader parent: Container
8
+ attr_reader location: Location
9
+
10
+ @object_id: Integer
11
+
12
+ def initialize: (Parser parser, Container parent, untyped node) -> void
13
+
14
+ def id: () -> Integer
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+ module Docrb
3
+ class Parser
4
+ class Class < Container
5
+ attr_accessor node: untyped
6
+ attr_accessor inherits: Reference?
7
+ attr_accessor singleton: bool
8
+
9
+ def kind: () -> :class
10
+
11
+ def initialize: (Parser parser, Container? parent, untyped node) -> void
12
+
13
+ def unowned_classes: () -> NodeArray[Class]
14
+
15
+ def unowned_modules: () -> NodeArray[Module]
16
+
17
+ def unowned_instance_methods: () -> NodeArray[Method]
18
+
19
+ def unowned_class_methods: () -> NodeArray[Method]
20
+
21
+ def unowned_class_attributes: () -> NodeArray[Attribute]
22
+
23
+ def unowned_instance_attributes: () -> NodeArray[Attribute]
24
+
25
+ def singleton!: () -> self
26
+
27
+ def singleton?: () -> bool
28
+
29
+ def handle_parsed_node: (Parser parser, untyped node) -> void
30
+
31
+ def merge_singleton_class: (Class other) -> void
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,14 @@
1
+ module Docrb
2
+ class Parser
3
+ class Comment
4
+ @location: Location
5
+ @file_path: String
6
+ @parser: Parser
7
+ @comments: Array[String]?
8
+
9
+ def initialize: (Parser parser, Location location, String file_path) -> void
10
+
11
+ def locate: () -> void
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,79 @@
1
+ module Docrb
2
+ class Parser
3
+ class CommentParser
4
+ type untyped_hash = Hash[untyped, untyped]
5
+ type replacement_object = { start_idx: Integer, end_idx: Integer, object: untyped_hash }
6
+
7
+ NEWLINE: "\n"
8
+ POUND: "#"
9
+ SPACE: ""
10
+ DASH: "-"
11
+ COLON: ":"
12
+
13
+ @data: Array[String]
14
+
15
+ @data_len: Integer
16
+
17
+ attr_accessor objects: Array[untyped_hash] | Array[String]
18
+ attr_accessor current_object: Array[String]
19
+ attr_accessor cursor: Integer
20
+ attr_accessor visibility: String?
21
+
22
+ def self.parse: (String data) -> untyped_hash
23
+
24
+ def initialize: (String data) -> void
25
+
26
+ def at_end?: () -> bool
27
+ def will_end?: () -> bool
28
+ def at_start?: () -> bool
29
+ def peek: () -> String?
30
+ def peek_next: () -> String?
31
+ def peek_prev: () -> String?
32
+ def advance: () -> String?
33
+ def match?: (*String args) -> bool
34
+ def consume_spaces: () -> nil
35
+ def extract_while: () { () -> bool } -> void
36
+ def extract_until: () { () -> bool } -> void
37
+
38
+ def parse: () -> true
39
+
40
+ def flush_current_object: () -> void
41
+
42
+ def parse_one: () -> void
43
+
44
+ FIELD_LIST_HEADING: ::Regexp
45
+
46
+ def detect_field_list: () -> void
47
+
48
+ def process_field_list: (String obj, Integer at) -> void
49
+
50
+ def process_text_blocks: () -> void
51
+
52
+ def span: (String text) -> { type: :span, value: String }
53
+
54
+ def process_text_block: (String text) -> void
55
+
56
+ COMMENT_METHOD_REF_REGEXP: ::Regexp
57
+
58
+ def extract_method_reference: (String text) ->replacement_object?
59
+
60
+ COMMENT_SYMBOL_REGEXP: ::Regexp
61
+
62
+ def extract_symbol: (untyped text) -> replacement_object?
63
+
64
+ CAMELCASE_IDENTIFIER_REGEXP: ::Regexp
65
+
66
+ def extract_camelcase_identifier: (untyped text) -> replacement_object?
67
+
68
+ VISIBILITY_INDICATOR_REGEXP: ::Regexp
69
+
70
+ def process_visibility: (?untyped? obj) -> void
71
+
72
+ def process_code_examples: () -> void
73
+
74
+ def join_code_example_lines: (Integer start_at, Integer end_at) -> void
75
+
76
+ def normalize_tree: () -> void
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,15 @@
1
+ module Docrb
2
+ class Parser
3
+ class Constant
4
+ attr_reader name: String
5
+ attr_reader location: Location
6
+ attr_accessor parent: untyped
7
+
8
+ @object_id: Integer
9
+
10
+ def initialize: (Parser parser, Container parent, untyped node) -> void
11
+
12
+ def id: () -> Integer
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,91 @@
1
+ module Docrb
2
+ class Parser
3
+ class Container
4
+ type visibility = :public | :protected | :private | :module_function
5
+
6
+ attr_accessor parent: Container?
7
+ attr_accessor parser: Parser
8
+ attr_accessor classes: NodeArray[Class]
9
+ attr_accessor modules: NodeArray[Module]
10
+ attr_accessor instance_methods: NodeArray[Method]
11
+ attr_accessor class_methods: NodeArray[Method]
12
+ attr_accessor extends: NodeArray[Reference]
13
+ attr_accessor includes: NodeArray[Reference]
14
+ attr_accessor name: String | Symbol
15
+ attr_accessor path_segments: Array[Symbol]?
16
+ attr_accessor instance_attributes: Array[Attribute]
17
+ attr_accessor class_attributes: Array[Attribute]
18
+ attr_accessor current_visibility_modifier: visibility
19
+ attr_accessor constants: NodeArray[Constant]
20
+ attr_accessor location: Location
21
+
22
+ @object_id: Integer
23
+ @node: untyped
24
+ @explicit_instance_visibility: Hash[Symbol, visibility]
25
+ @explicit_class_visibility: Hash[Symbol, visibility]
26
+ @defined_by: Array[Location]
27
+ @inside_module_function: bool
28
+ @default_constructor_visibility: visibility?
29
+
30
+ SINGLETON_CLASS_TYPES: ::Array[:singleton_class_node | :deferred_singleton_class_node]
31
+
32
+ def initialize: (Parser parser, Container? parent, untyped node) -> void
33
+
34
+ def extract_references: (NodeArray[untyped] from, Symbol attr) -> NodeArray[untyped]
35
+
36
+ def unowned_classes: () -> NodeArray[Class]
37
+
38
+ def all_classes: () -> NodeArray[Class]
39
+
40
+ def unowned_modules: () -> NodeArray[Module]
41
+
42
+ def all_modules: () -> NodeArray[Module]
43
+
44
+ def unowned_instance_methods: () -> NodeArray[Method]
45
+
46
+ def all_instance_methods: () -> NodeArray[Method]
47
+
48
+ def unowned_class_methods: () -> NodeArray[Method]
49
+
50
+ def all_class_methods: () -> NodeArray[Method]
51
+
52
+ def unowned_class_attributes: () -> NodeArray[Attribute]
53
+
54
+ def all_class_attributes: () -> NodeArray[Attribute]
55
+
56
+ def unowned_instance_attributes: () -> NodeArray[Attribute]
57
+
58
+ def all_instance_attributes: () -> NodeArray[Attribute]
59
+
60
+ def id: () -> Integer
61
+
62
+ def handle_parsed_node: (Parser parser, untyped node) -> nil
63
+
64
+ def instance_method_added: (Parser parser, untyped node, Method method) -> nil
65
+
66
+ def class_method_added: (Parser parser, untyped node, Method method) -> nil
67
+
68
+ def class_added: (Parser parser, untyped node, Method method) -> nil
69
+
70
+ def module_added: (Parser parser, untyped node, Method method) -> nil
71
+
72
+ def handle_call: (Call call) -> untyped
73
+
74
+ def handle_node: (untyped node) -> untyped
75
+
76
+ def parse_node: (untyped node) -> untyped
77
+
78
+ def reference: (Symbol | Array[Symbol] path) -> Reference
79
+
80
+ def add_attribute: (Parser parser, untyped node, Attribute::kind `type`) -> void
81
+
82
+ def adjust_split_attributes!: (Symbol scope) -> void
83
+
84
+ def handle_visibility_modifier: (Parser _parser, untyped node) -> void
85
+
86
+ def handle_singleton_visibility_modifier: (Parser _parser, untyped node) -> void
87
+
88
+ def update_constructor_visibility!: () -> void
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+ module Docrb
3
+ class Parser
4
+ class DeferredSingletonClass < Class
5
+ attr_reader target: Array[Symbol]
6
+
7
+ def kind: () -> :deferred_singleton_class
8
+
9
+ def initialize: (Parser parser, Container? parent, untyped node) -> void
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,24 @@
1
+ module Docrb
2
+ class Parser
3
+ class Location
4
+
5
+
6
+ @virtual: untyped
7
+
8
+ attr_reader line_start: Integer?
9
+ attr_reader line_end: Integer?
10
+ attr_reader source: String?
11
+ attr_reader offset_start: Integer?
12
+ attr_reader offset_end: Integer?
13
+ attr_reader parser: Parser
14
+ attr_reader file_path: String?
15
+ attr_reader ast: untyped
16
+
17
+ def virtual?: -> bool
18
+
19
+ def initialize: (Parser parser, untyped ast, untyped loc) -> void
20
+
21
+ def load_source!: () -> void
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,34 @@
1
+ module Docrb
2
+ class Parser
3
+ class Method
4
+ type method_type = :instance | :class
5
+
6
+ attr_accessor name: Symbol
7
+ attr_accessor parameters: MethodParameters
8
+ attr_accessor visibility: Container::visibility
9
+ attr_accessor overriding: Integer?
10
+ attr_accessor overridden_by: ::Array[Integer]
11
+ attr_accessor type: method_type
12
+ attr_accessor external_receiver: Reference?
13
+ attr_accessor location: Location
14
+ attr_accessor parent: Container?
15
+ attr_accessor node: untyped
16
+
17
+ @object_id: Integer
18
+
19
+ def kind: () -> :method
20
+
21
+ def initialize: (Parser parser, Container? parent, untyped node) -> void
22
+
23
+ def id: () -> Integer
24
+
25
+ def class?: () -> bool
26
+
27
+ def instance?: () -> bool
28
+
29
+ def module_function?: () -> bool
30
+
31
+ def external?: () -> bool
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,34 @@
1
+ module Docrb
2
+ class Parser
3
+ class MethodParameters < Array[Parameter]
4
+ def initialize: (Parser parser, Method parent, untyped node) -> void
5
+
6
+ def id: () -> Integer
7
+
8
+ class Parameter
9
+ attr_reader parser: Parser
10
+ type kind = :arg | :kw | :optarg | :optkw | :rest | :kwrest | :block
11
+
12
+ def initialize: (Parser parser, kind kind, Symbol name, ?untyped? value) -> void
13
+
14
+ def id: () -> Integer
15
+
16
+ def has_value?: () -> bool
17
+
18
+ def optional?: () -> bool
19
+
20
+ def positional?: () -> bool
21
+
22
+ def keyword?: () -> bool
23
+
24
+ def block?: () -> bool
25
+
26
+ def rest?: () -> bool
27
+
28
+ private
29
+
30
+ def name_by_type: () -> Symbol
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+ module Docrb
3
+ class Parser
4
+ class Module < Container
5
+ def kind: () -> :module
6
+
7
+ def initialize: (Parser parser, Container? parent, untyped node) -> void
8
+
9
+ def instance_method_added: (Parser parser, untyped node, Method method) -> void
10
+
11
+ def handle_parsed_node: (Parser parser, untyped node) -> void
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+ module Docrb
3
+ class Parser
4
+ class NodeArray[unchecked out Elem] < Array[Elem]
5
+ def by_kind: (Symbol kind) -> ::Array[Elem]
6
+
7
+ def named: (Symbol name) -> ::Array[Elem]
8
+
9
+ def named!: (Symbol name) -> Elem
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,19 @@
1
+ module Docrb
2
+ class Parser
3
+ class Reference
4
+ attr_accessor parent: untyped
5
+ attr_accessor path: Array[Symbol]
6
+ attr_accessor resolved: ResolvedReference
7
+
8
+ @parser: Parser
9
+
10
+ def initialize: (Parser parser, untyped parent, Array[Symbol] path) -> void
11
+
12
+ def resolved?: () -> bool
13
+
14
+ def fulfilled?: () -> bool
15
+
16
+ def dereference!: () -> untyped
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,7 @@
1
+ module Docrb
2
+ class Parser
3
+ class Reloader
4
+ def self.reload!: () -> true
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,22 @@
1
+ module Docrb
2
+ class Parser
3
+ class ResolvedReference
4
+ type reference_status = :valid | :broken
5
+
6
+ attr_accessor status: reference_status
7
+
8
+ @parser: Parser
9
+ @object_id: Integer
10
+
11
+ def initialize: (Parser parser, reference_status status, Integer id) -> void
12
+
13
+ def id: () -> Integer
14
+
15
+ def broken?: () -> bool
16
+
17
+ def valid?: () -> bool
18
+
19
+ def dereference!: () -> untyped
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,17 @@
1
+ module Docrb
2
+ class Parser
3
+ class VirtualMethod
4
+ VirtualReceiver: untyped
5
+
6
+ attr_accessor name: Symbol | String
7
+
8
+ attr_accessor parameters: ::Array[untyped]
9
+
10
+ attr_accessor receiver: untyped
11
+
12
+ def type: () -> :def_node
13
+
14
+ def initialize: (Symbol | String name, untyped receiver, ?::Array[untyped]? parameters) -> void
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,5 @@
1
+ module Docrb
2
+ class Parser
3
+ VERSION: String
4
+ end
5
+ end