class SublimeDSL::TextMate::Snippet::DSLReader

DSL reader for a collection of snippets.

Public Class Methods

new(file = nil) click to toggle source
# File lib/sublime_dsl/textmate/snippet.rb, line 273
def initialize(file = nil)
  @snippets = []
  @default_scope = nil
  @file_format = nil
  @in_snippets = false
  instance_eval File.read(file, encoding: 'utf-8'), file if file
end

Public Instance Methods

_snippets() click to toggle source
# File lib/sublime_dsl/textmate/snippet.rb, line 281
def _snippets
  @snippets
end
default_scope(scope) click to toggle source
# File lib/sublime_dsl/textmate/snippet.rb, line 296
def default_scope(scope)
  ensure_context __method__
  @default_scope = scope
end
file_format(format) click to toggle source
# File lib/sublime_dsl/textmate/snippet.rb, line 301
def file_format(format)
  ensure_context __method__
  if format
    format = format.to_sym
    [:textmate, :sublime_text].include?(format) or
      raise Error, "invalid snippet file format: #{format.inspect}"
  end
  @file_format = format
end
key(key_equivalent, name, content, options = {}) click to toggle source
# File lib/sublime_dsl/textmate/snippet.rb, line 316
def key(key_equivalent, name, content, options = {})
  ensure_context __method__
  _snippets << new_snippet(:key_equivalent=, key_equivalent, name, content, options)
end
method_missing(sym, *args, &block) click to toggle source
# File lib/sublime_dsl/textmate/snippet.rb, line 292
def method_missing(sym, *args, &block)
  raise Error, "'#{sym}' is not a snippet DSL statement"
end
snippets(&block) click to toggle source
# File lib/sublime_dsl/textmate/snippet.rb, line 285
def snippets(&block)
  @in_snippets and raise Error, "'snippets' blocks cannot be nested"
  @in_snippets = true
  instance_eval(&block)
  @in_snippets = false
end
tab(tab_trigger, name, content, options = {}) click to toggle source
# File lib/sublime_dsl/textmate/snippet.rb, line 311
def tab(tab_trigger, name, content, options = {})
  ensure_context __method__
  _snippets << new_snippet(:tab_trigger=, tab_trigger, name, content, options)
end

Private Instance Methods

ensure_context(name) click to toggle source
# File lib/sublime_dsl/textmate/snippet.rb, line 323
def ensure_context(name)
  @in_snippets or raise Error, "'#{name}' is invalid outside of 'snippets' blocks"
end
new_snippet(method, arg, name, content, options) click to toggle source
# File lib/sublime_dsl/textmate/snippet.rb, line 327
def new_snippet(method, arg, name, content, options)
  snippet = Snippet.new
  snippet.send method, arg
  snippet.name = name
  snippet.content = content.sub(/\n\z/, '')
  snippet.scope = options.delete(:scope) || @default_scope
  snippet.file_format = @file_format
  if (k = options.delete(:key_equivalent))
    if snippet.key_equivalent && snippet.key_equivalent != k
      warn "key_equivalent option given for 'key' snippet: #{snippet}"
    else
      snippet.key_equivalent = k
    end
  end
  if (t = options.delete(:tab_trigger))
    if snippet.tab_trigger && snippet.tab_trigger != t
      warn "tab_trigger option given for 'tab' snippet: #{snippet}"
    else
      snippet.tab_trigger = t
    end
  end
  snippet.semantic_class = options.delete(:semantic_class)
  snippet.uuid = options.delete(:uuid)
  snippet.bundle_uuid = options.delete(:bundle_uuid)
  snippet.basename = options.delete(:file)

  options.empty? or warn "invalid snippet options: #{options.inspect}"
  snippet.complete!

  snippet
end