Class: RDoc::RipperStateLex
- Inherits:
-
Object
- Object
- RDoc::RipperStateLex
- Defined in:
- lib/rdoc/parser/ripper_state_lex.rb
Defined Under Namespace
Classes: InnerStateLex
Constant Summary collapse
- RIPPER_HAS_LEX_STATE =
TODO: Remove this constants after Ruby 2.4 EOL
Ripper::Filter.method_defined?(:state)
- EXPR_NONE =
0
- EXPR_BEG =
1
- EXPR_END =
2
- EXPR_ENDARG =
4
- EXPR_ENDFN =
8
- EXPR_ARG =
16
- EXPR_CMDARG =
32
- EXPR_MID =
64
- EXPR_FNAME =
128
- EXPR_DOT =
256
- EXPR_CLASS =
512
- EXPR_LABEL =
1024
- EXPR_LABELED =
2048
- EXPR_FITEM =
4096
- EXPR_VALUE =
EXPR_BEG
- EXPR_BEG_ANY =
(EXPR_BEG | EXPR_MID | EXPR_CLASS)
- EXPR_ARG_ANY =
(EXPR_ARG | EXPR_CMDARG)
- EXPR_END_ANY =
(EXPR_END | EXPR_ENDARG | EXPR_ENDFN)
Class Method Summary collapse
Instance Method Summary collapse
- #get_squashed_tk ⇒ Object
-
#initialize(code) ⇒ RipperStateLex
constructor
A new instance of RipperStateLex.
Constructor Details
#initialize(code) ⇒ RipperStateLex
Returns a new instance of RipperStateLex.
579 580 581 582 583 584 585 586 587 588 |
# File 'lib/rdoc/parser/ripper_state_lex.rb', line 579 def initialize(code) @buf = [] @heredoc_queue = [] @inner_lex = InnerStateLex.new(code) @inner_lex_enumerator = Enumerator.new do |y| @inner_lex.each do |tk| y << tk end end end |
Class Method Details
.end?(token) ⇒ Boolean
602 603 604 |
# File 'lib/rdoc/parser/ripper_state_lex.rb', line 602 def self.end?(token) (token[:state] & EXPR_END) end |
.parse(code) ⇒ Object
590 591 592 593 594 595 596 597 598 599 600 |
# File 'lib/rdoc/parser/ripper_state_lex.rb', line 590 def self.parse(code) lex = self.new(code) tokens = [] begin while tk = lex.get_squashed_tk tokens.push tk end rescue StopIteration end tokens end |
Instance Method Details
#get_squashed_tk ⇒ Object
306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 |
# File 'lib/rdoc/parser/ripper_state_lex.rb', line 306 def get_squashed_tk if @buf.empty? tk = @inner_lex_enumerator.next else tk = @buf.shift end case tk[:kind] when :on_symbeg then tk = get_symbol_tk(tk) when :on_tstring_beg then tk = get_string_tk(tk) when :on_backtick then if (tk[:state] & (EXPR_FNAME | EXPR_ENDFN)) != 0 @inner_lex.lex_state = EXPR_ARG unless RIPPER_HAS_LEX_STATE tk[:kind] = :on_ident tk[:state] = Ripper::Lexer.const_defined?(:State) ? Ripper::Lexer::State.new(EXPR_ARG) : EXPR_ARG else tk = get_string_tk(tk) end when :on_regexp_beg then tk = get_regexp_tk(tk) when :on_embdoc_beg then tk = get_embdoc_tk(tk) when :on_heredoc_beg then @heredoc_queue << retrieve_heredoc_info(tk) @inner_lex.lex_state = EXPR_END unless RIPPER_HAS_LEX_STATE when :on_nl, :on_ignored_nl, :on_comment, :on_heredoc_end then unless @heredoc_queue.empty? get_heredoc_tk(*@heredoc_queue.shift) end when :on_words_beg then tk = get_words_tk(tk) when :on_qwords_beg then tk = get_words_tk(tk) when :on_symbols_beg then tk = get_words_tk(tk) when :on_qsymbols_beg then tk = get_words_tk(tk) when :on_op then if '&.' == tk[:text] tk[:kind] = :on_period else tk = get_op_tk(tk) end end tk end |