docrb-parser 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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