 
   activate: ->
     @userSnippetsPath = null
+    @snippetIdCounter = 0
+    @snippetsCache = new Map
     @scopedPropertyStore = new ScopedPropertyStore
     @subscriptions = new CompositeDisposable
     @subscriptions.add atom.workspace.addOpener (uri) =>

      for name, attributes of snippetsByName
        {prefix, body} = attributes
        attributes.name = name
        if typeof body is 'string'
          unparsedSnippetsByPrefix[prefix] = attributes
        else if not body?

    for prefix, attributes of unparsedSnippetsByPrefix
      continue if typeof attributes?.body isnt 'string'

      {id, name, body, bodyTree, description, descriptionMoreURL} = attributes

      unless @snippetsCache.has(id)
        bodyTree ?= @getBodyParser().parse(body)
        snippet = new Snippet({id, name, prefix, bodyTree, description, descriptionMoreURL, bodyText: body})
        @snippetsCache.set(id, snippet)

      snippets[prefix] = @snippetsCache.get(id)
    snippets

  priorityForSource: (source) ->
