class PlaceholderPattern

Implements using a pattern that has not been defined

Public Class Methods

new(placeholder, deep_clone = nil, original_arguments = nil) click to toggle source

Constructs a new placeholder pattern @overload initialize(placeholder)

@param [Symbol] placeholder the name to replace with

@overload initialize(opts, deep_clone, original)

@param (see PatternBase#initialize)
Calls superclass method PatternBase::new
# File lib/textmate_grammar/pattern_extensions/placeholder.rb, line 15
def initialize(placeholder, deep_clone = nil, original_arguments = nil)
    if deep_clone == :deep_clone
        super(placeholder, deep_clone, original_arguments)
    else
        super(
            match: Regexp.new("placeholder(?##{placeholder})"),
            placeholder: placeholder
        )
    end
end

Public Instance Methods

evaluate(groups = nil) click to toggle source

(see PatternBase#evaluate) @note this raises a runtime error if the pattern has not been resolved

Calls superclass method PatternBase#evaluate
# File lib/textmate_grammar/pattern_extensions/placeholder.rb, line 49
def evaluate(groups = nil)
    if @match.is_a?(String) && @match.start_with?("placeholder")
        raise "Attempting to evaluate an unresolved placeholder `:#{@arguments[:placeholder]}'"
    end

    super(groups)
end
resolve!(repository) click to toggle source

Resolves the placeholder

@param [Hash] repository the repository to use to resolve the placeholder

@return [self]

# File lib/textmate_grammar/pattern_extensions/placeholder.rb, line 64
def resolve!(repository)
    unless repository[@arguments[:placeholder]].is_a? PatternBase
        raise ":#{@arguments[:placeholder]} is not a pattern and cannot be substituted"
    end

    @match = repository[@arguments[:placeholder]].__deep_clone__
    self
    # repository[@arguments[:placeholder]].resolve(repository)
end
to_s(depth = 0, top_level = true) click to toggle source

(see PatternBase#to_s)

Calls superclass method PatternBase#to_s
# File lib/textmate_grammar/pattern_extensions/placeholder.rb, line 27
def to_s(depth = 0, top_level = true)
    return super unless @match == "placeholder"

    output = top_level ? "placeholder(" : ".placeholder("
    output += ":#{@arguments[:placeholder]})"
    output += @next_pattern.to_s(depth, false).lstrip if @next_pattern
    output
end
to_tag() click to toggle source

(see PatternBase#to_tag) @note this raises a runtime error if the pattern has not been resolved

Calls superclass method PatternBase#to_tag
# File lib/textmate_grammar/pattern_extensions/placeholder.rb, line 38
def to_tag
    if @match.is_a?(String) && @match.start_with?("placeholder")
        placeholder = @arguments[:placeholder]
        raise "Attempting to create a tag from an unresolved placeholder `:#{placeholder}'"
    end

    super()
end