mirror of
https://github.com/jashkenas/coffeescript.git
synced 2022-11-09 12:23:24 -05:00
56 lines
2 KiB
CoffeeScript
56 lines
2 KiB
CoffeeScript
# 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]
|