code: function(syntax, name, memo) {
  			if (!syntax || !name)
  				return null;
  			
  			memo = memo || [];
  			
  			var names = [name];
  			// create automatic aliases to properties with colons,
  			// e.g. pos-a == pos:a
  			if (~name.indexOf('-'))
  				names.push(name.replace(/\-/g, ':'));
  			
  			var data = this.getSection(syntax), matchedItem = null;
  			_.find(['snippets', 'abbreviations'], function(sectionName) {
  				var data = this.getSection(syntax, sectionName);
  				if (data) {
  					return _.find(names, function(n) {
  						if (data[n])
  							return matchedItem = parseItem(n, data[n], sectionName);
  					});
  				}
  			}, this);
  			
  			memo.push(syntax);
  			if (!matchedItem && data['extends'] && !_.include(memo, data['extends'])) {
  				// try to find item in parent syntax section
  				return this.findSnippet(data['extends'], name, memo);
  			}
  			
  			return matchedItem;
  		}
docs: Recursively searches for a snippet definition inside syntax section.
  Definition is searched inside `snippets` and `abbreviations`
  subsections
  @param {String} syntax Top-level section name (syntax)
  @param {String} name Snippet name
  @returns {Object}