Sha256: c25805dcd043a21e8151335d0c5853cf686f79ba9c32a2d9f9bb8ff78049bdc4

Contents?: true

Size: 1.75 KB

Versions: 24

Compression:

Stored size: 1.75 KB

Contents

module YARD
  module Parser::Ruby::Legacy
    class TokenList < Array
      include RubyToken
      
      def initialize(content = nil)
        self << content if content
      end
      
      def to_s(full_statement = false, show_block = true)
        inject([]) do |acc, token|
          break acc if !full_statement && TkStatementEnd === token
          if !show_block && TkBlockContents === token
            acc << ""
          else
            acc << token.text
          end
          acc
        end.join
      end
      
      # @param [TokenList, Token, String] tokens
      #   A list of tokens. If the token is a string, it
      #   is parsed with {RubyLex}.
      def push(*tokens)
        tokens.each do |tok|
          if tok.is_a?(TokenList) || tok.is_a?(Array)
            concat tok
          elsif tok.is_a?(Token)
            super tok
          elsif tok.is_a?(String)
            parse_content(tok)
          else
            raise ArgumentError, "Expecting token, list of tokens or string of code to be tokenized. Got #{tok.class}"
          end
        end
        self
      end
      alias_method :<<, :push
      
      def squeeze(type = TkSPACE)
        last = nil
        TokenList.new(map {|t| x = t.is_a?(type) && last.is_a?(type) ? nil : t; last = t; x })
      end
      
      private
      
      def parse_content(content)
        lex = RubyLex.new(content)
        while tk = lex.token do 
          self << convert_token(lex, tk)
        end
      end
      
      def convert_token(lex, tk)
        if TkSYMBEG === tk && next_tk = lex.token
          sym = TkSYMBOL.new(tk.line_no, tk.char_no, nil)
          sym.lex_state = lex.lex_state
          sym.set_text(tk.text + next_tk.text)
        else
          tk 
        end
      end
    end
  end
end

Version data entries

24 entries across 24 versions & 1 rubygems

Version Path
yard-0.6.8 lib/yard/parser/ruby/legacy/token_list.rb
yard-0.6.7 lib/yard/parser/ruby/legacy/token_list.rb
yard-0.6.6 lib/yard/parser/ruby/legacy/token_list.rb
yard-0.6.5 lib/yard/parser/ruby/legacy/token_list.rb
yard-0.6.4 lib/yard/parser/ruby/legacy/token_list.rb
yard-0.6.3 lib/yard/parser/ruby/legacy/token_list.rb
yard-0.6.2 lib/yard/parser/ruby/legacy/token_list.rb
yard-0.6.1 lib/yard/parser/ruby/legacy/token_list.rb
yard-0.6.0 lib/yard/parser/ruby/legacy/token_list.rb
yard-0.5.8 lib/yard/parser/ruby/legacy/token_list.rb
yard-0.5.7 lib/yard/parser/ruby/legacy/token_list.rb
yard-0.5.6 lib/yard/parser/ruby/legacy/token_list.rb
yard-0.5.5 lib/yard/parser/ruby/legacy/token_list.rb
yard-0.5.4 lib/yard/parser/ruby/legacy/token_list.rb
yard-0.5.3 lib/yard/parser/ruby/legacy/token_list.rb
yard-0.5.2 lib/yard/parser/ruby/legacy/token_list.rb
yard-0.5.1p1 lib/yard/parser/ruby/legacy/token_list.rb
yard-0.5.1 lib/yard/parser/ruby/legacy/token_list.rb
yard-0.5.0 lib/yard/parser/ruby/legacy/token_list.rb
yard-0.4.0 lib/yard/parser/ruby/legacy/token_list.rb