Class: Parser::Source::Comment

Inherits:
Object
  • Object
show all
Defined in:
lib/parser/source/comment.rb

Overview

A comment in the source code.

Defined Under Namespace

Classes: Associator

Instance Attribute Summary (collapse)

Class Method Summary (collapse)

Instance Method Summary (collapse)

Constructor Details

- (Comment) initialize(range)

Returns a new instance of Comment

Parameters:



52
53
54
55
56
57
# File 'lib/parser/source/comment.rb', line 52

def initialize(range)
  @location = Parser::Source::Map.new(range)
  @text     = range.source.freeze

  freeze
end

Instance Attribute Details

- (Parser::Source::Map) location (readonly) Also known as: loc

Returns:



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
# File 'lib/parser/source/comment.rb', line 15

class Comment
  attr_reader  :text

  attr_reader  :location
  alias_method :loc, :location

  ##
  # Associate `comments` with `ast` nodes by their corresponding node.
  #
  # @param [Parser::AST::Node] ast
  # @param [Array(Comment)]    comments
  # @return [Hash(Parser::AST::Node, Array(Comment))]
  # @see Parser::Source::Comment::Associator#associate
  # @deprecated Use {associate_locations}.
  #
  def self.associate(ast, comments)
    associator = Associator.new(ast, comments)
    associator.associate
  end

  ##
  # Associate `comments` with `ast` nodes by their location in the
  # source.
  #
  # @param [Parser::AST::Node] ast
  # @param [Array(Comment)]    comments
  # @return [Hash(Parser::Source::Map, Array(Comment))]
  # @see Parser::Source::Comment::Associator#associate_locations
  #
  def self.associate_locations(ast, comments)
    associator = Associator.new(ast, comments)
    associator.associate_locations
  end

  ##
  # @param [Parser::Source::Range] range
  #
  def initialize(range)
    @location = Parser::Source::Map.new(range)
    @text     = range.source.freeze

    freeze
  end

  ##
  # Type of this comment.
  #
  #   * Inline comments correspond to `:inline`:
  #
  #         # whatever
  #
  #   * Block comments correspond to `:document`:
  #
  #         =begin
  #         hi i am a document
  #         =end
  #
  # @return [Symbol]
  #
  def type
    case text
    when /^#/
      :inline
    when /^=begin/
      :document
    end
  end

  ##
  # @see #type
  # @return [Boolean] true if this is an inline comment.
  #
  def inline?
    type == :inline
  end

  ##
  # @see #type
  # @return [Boolean] true if this is a block comment.
  #
  def document?
    type == :document
  end

  ##
  # Compares comments. Two comments are equal if they
  # correspond to the same source range.
  #
  # @param [Object] other
  # @return [Boolean]
  #
  def ==(other)
    other.is_a?(Source::Comment) &&
      @location == other.location
  end

  ##
  # @return [String] a human-readable representation of this comment
  #
  def inspect
    "#<Parser::Source::Comment #{@location.expression.to_s} #{text.inspect}>"
  end
end

- (String) text (readonly)

Returns:



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
# File 'lib/parser/source/comment.rb', line 15

class Comment
  attr_reader  :text

  attr_reader  :location
  alias_method :loc, :location

  ##
  # Associate `comments` with `ast` nodes by their corresponding node.
  #
  # @param [Parser::AST::Node] ast
  # @param [Array(Comment)]    comments
  # @return [Hash(Parser::AST::Node, Array(Comment))]
  # @see Parser::Source::Comment::Associator#associate
  # @deprecated Use {associate_locations}.
  #
  def self.associate(ast, comments)
    associator = Associator.new(ast, comments)
    associator.associate
  end

  ##
  # Associate `comments` with `ast` nodes by their location in the
  # source.
  #
  # @param [Parser::AST::Node] ast
  # @param [Array(Comment)]    comments
  # @return [Hash(Parser::Source::Map, Array(Comment))]
  # @see Parser::Source::Comment::Associator#associate_locations
  #
  def self.associate_locations(ast, comments)
    associator = Associator.new(ast, comments)
    associator.associate_locations
  end

  ##
  # @param [Parser::Source::Range] range
  #
  def initialize(range)
    @location = Parser::Source::Map.new(range)
    @text     = range.source.freeze

    freeze
  end

  ##
  # Type of this comment.
  #
  #   * Inline comments correspond to `:inline`:
  #
  #         # whatever
  #
  #   * Block comments correspond to `:document`:
  #
  #         =begin
  #         hi i am a document
  #         =end
  #
  # @return [Symbol]
  #
  def type
    case text
    when /^#/
      :inline
    when /^=begin/
      :document
    end
  end

  ##
  # @see #type
  # @return [Boolean] true if this is an inline comment.
  #
  def inline?
    type == :inline
  end

  ##
  # @see #type
  # @return [Boolean] true if this is a block comment.
  #
  def document?
    type == :document
  end

  ##
  # Compares comments. Two comments are equal if they
  # correspond to the same source range.
  #
  # @param [Object] other
  # @return [Boolean]
  #
  def ==(other)
    other.is_a?(Source::Comment) &&
      @location == other.location
  end

  ##
  # @return [String] a human-readable representation of this comment
  #
  def inspect
    "#<Parser::Source::Comment #{@location.expression.to_s} #{text.inspect}>"
  end
end

Class Method Details

+ (Hash(Parser::AST::Node, Array(Comment))) associate(ast, comments)

Deprecated.

Associate comments with ast nodes by their corresponding node.

Parameters:

Returns:

See Also:



30
31
32
33
# File 'lib/parser/source/comment.rb', line 30

def self.associate(ast, comments)
  associator = Associator.new(ast, comments)
  associator.associate
end

+ (Hash(Parser::Source::Map, Array(Comment))) associate_locations(ast, comments)

Associate comments with ast nodes by their location in the source.

Parameters:

Returns:

See Also:



44
45
46
47
# File 'lib/parser/source/comment.rb', line 44

def self.associate_locations(ast, comments)
  associator = Associator.new(ast, comments)
  associator.associate_locations
end

Instance Method Details

- (Boolean) ==(other)

Compares comments. Two comments are equal if they correspond to the same source range.

Parameters:

  • other (Object)

Returns:

  • (Boolean)


106
107
108
109
# File 'lib/parser/source/comment.rb', line 106

def ==(other)
  other.is_a?(Source::Comment) &&
    @location == other.location
end

- (Boolean) document?

Returns true if this is a block comment.

Returns:

  • (Boolean)

    true if this is a block comment.

See Also:



95
96
97
# File 'lib/parser/source/comment.rb', line 95

def document?
  type == :document
end

- (Boolean) inline?

Returns true if this is an inline comment.

Returns:

  • (Boolean)

    true if this is an inline comment.

See Also:



87
88
89
# File 'lib/parser/source/comment.rb', line 87

def inline?
  type == :inline
end

- (String) inspect

Returns a human-readable representation of this comment

Returns:

  • (String)

    a human-readable representation of this comment



114
115
116
# File 'lib/parser/source/comment.rb', line 114

def inspect
  "#<Parser::Source::Comment #{@location.expression.to_s} #{text.inspect}>"
end

- (Symbol) type

Type of this comment.

  • Inline comments correspond to :inline:

    # whatever
    
  • Block comments correspond to :document:

    =begin
    hi i am a document
    =end
    

Returns:

  • (Symbol)


74
75
76
77
78
79
80
81
# File 'lib/parser/source/comment.rb', line 74

def type
  case text
  when /^#/
    :inline
  when /^=begin/
    :document
  end
end