helpers.coffee

Jump To …
browser.coffee cake.coffee coffee-script.coffee command.coffee grammar.coffee helpers.coffee index.coffee lexer.coffee nodes.coffee optparse.coffee repl.coffee rewriter.coffee scope.coffee

# helpers.coffee |
--- | ---
¶ This file contains the common helper functions that we'd like to share among the Lexer, Rewriter, and the Nodes. Merge objects, flatten arrays, count characters, that sort of thing. |
¶ Peek at the beginning of a given string to see if it matches a sequence. |
    exports.starts = (string, literal, start) ->
      literal is string.substr start, literal.length
¶ Peek at the end of a given string to see if it matches a sequence. |
    exports.ends = (string, literal, back) ->
      len = literal.length
      literal is string.substr string.length - len - (back or 0), len
¶ Trim out all falsy values from an array. |
    exports.compact = (array) ->
      item for item in array when item
¶ Count the number of occurrences of a string in a string. |
    exports.count = (string, substr) ->
      num = pos = 0
      return 1/0 unless substr.length
      num++ while pos = 1 + string.indexOf substr, pos
      num
¶ Merge objects, returning a fresh copy with attributes from both sides. Used every time `Base#compile` is called, to allow properties in the options hash to propagate down the tree without polluting other branches. |
    exports.merge = (options, overrides) ->
      extend (extend {}, options), overrides
¶ Extend a source object with the properties of another object (shallow copy). |
    extend = exports.extend = (object, properties) ->
      for key, val of properties
        object[key] = val
      object
¶ Return a flattened version of an array. Handy for getting a list of `children` from the nodes. |
    exports.flatten = flatten = (array) ->
      flattened = []
      for element in array
        if element instanceof Array
          flattened = flattened.concat flatten element
        else
          flattened.push element
      flattened
¶ Delete a key from an object, returning the value. Useful when a node is looking for a particular method in an options hash. |
    exports.del = (obj, key) ->
      val =  obj[key]
      delete obj[key]
      val
¶ Gets the last item of an array(-like) object. |
    exports.last = (array, back) -> array[array.length - (back or 0) - 1]
¶ Typical Array::some |
    exports.some = Array::some ? (fn) ->
      return true for e in this when fn e
      false