Class: RbsActivesupport::Parser
- Inherits:
-
RBS::Prototype::RB
- Object
- RBS::Prototype::RB
- RbsActivesupport::Parser
- Defined in:
- lib/rbs_activesupport/parser.rb,
lib/rbs_activesupport/parser/comment_parser.rb
Defined Under Namespace
Classes: CommentParser, MethodCall
Constant Summary collapse
- METHODS =
@rbs!
type t = :class_attribute | :delegate | :cattr_accessor | :mattr_accessor | :cattr_reader | :mattr_reader | :cattr_writer | :mattr_writer | :include i[ class_attribute delegate cattr_accessor mattr_accessor cattr_reader mattr_reader cattr_writer mattr_writer include ].freeze
Instance Attribute Summary collapse
-
#comment_parser ⇒ Object
readonly
: CommentParser.
-
#method_calls ⇒ Object
readonly
: Hash[RBS::Namespace, Array].
-
#parse_included_block ⇒ Object
readonly
: bool.
Instance Method Summary collapse
-
#in_included_block? ⇒ Boolean
: bool.
-
#initialize(parse_included_block: false) ⇒ Parser
constructor
A new instance of Parser.
- #parse(string) ⇒ Object
- #private?(decls) ⇒ Boolean
- #process(node, decls:, comments:, context:) ⇒ Object
-
#process_orig ⇒ Object
: Array # steep:ignore IncompatibleAssignment.
- #trailing_comment_for(node) ⇒ Object
- #with_included_block(&block) ⇒ Object
Constructor Details
#initialize(parse_included_block: false) ⇒ Parser
Returns a new instance of Parser.
52 53 54 55 56 57 58 |
# File 'lib/rbs_activesupport/parser.rb', line 52 def initialize(parse_included_block: false) #: void super() @comment_parser = CommentParser.new @parse_included_block = parse_included_block @method_calls = Hash.new { |hash, key| hash[key] = [] } @in_included_block = false end |
Instance Attribute Details
#comment_parser ⇒ Object (readonly)
: CommentParser
46 47 48 |
# File 'lib/rbs_activesupport/parser.rb', line 46 def comment_parser @comment_parser end |
#method_calls ⇒ Object (readonly)
: Hash[RBS::Namespace, Array]
47 48 49 |
# File 'lib/rbs_activesupport/parser.rb', line 47 def method_calls @method_calls end |
#parse_included_block ⇒ Object (readonly)
: bool
48 49 50 |
# File 'lib/rbs_activesupport/parser.rb', line 48 def parse_included_block @parse_included_block end |
Instance Method Details
#in_included_block? ⇒ Boolean
: bool
106 107 108 |
# File 'lib/rbs_activesupport/parser.rb', line 106 def in_included_block? #: bool @in_included_block end |
#parse(string) ⇒ Object
61 62 63 64 |
# File 'lib/rbs_activesupport/parser.rb', line 61 def parse(string) #: void comment_parser.parse(string) super end |
#private?(decls) ⇒ Boolean
102 103 104 |
# File 'lib/rbs_activesupport/parser.rb', line 102 def private?(decls) #: bool current_accessibility(decls) == private end |
#process(node, decls:, comments:, context:) ⇒ Object
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/rbs_activesupport/parser.rb', line 67 def process(node, decls:, comments:, context:) # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity case node.type when :DEFN, :DEFS # ignore definitions inside methods when :FCALL, :VCALL args = node.children[1]&.children || [] case node.children[0] when *METHODS @method_calls[context.namespace] << MethodCall.new(node.children[0], args, private?(decls), included: in_included_block?, trailing_comment: trailing_comment_for(node)) else process_orig(node, decls:, comments:, context:) end when :ITER call = node.children[0] if call.type == :FCALL && call.children[0] == :included && parse_included_block && !in_included_block? body = node.children[1].children[2] with_included_block do process(body, decls:, comments:, context:) end else process_orig(node, decls:, comments:, context:) end else process_orig(node, decls:, comments:, context:) end end |
#process_orig ⇒ Object
: Array # steep:ignore IncompatibleAssignment
44 |
# File 'lib/rbs_activesupport/parser.rb', line 44 alias process_orig process |
#trailing_comment_for(node) ⇒ Object
97 98 99 |
# File 'lib/rbs_activesupport/parser.rb', line 97 def trailing_comment_for(node) #: String? comment_parser.trailing_comments[node.last_lineno] end |
#with_included_block(&block) ⇒ Object
111 112 113 114 115 116 |
# File 'lib/rbs_activesupport/parser.rb', line 111 def with_included_block(&block) #: void @in_included_block = true block.call ensure @in_included_block = false end |