From a8a1a74b119031b11f5f60f98dd2f97d2c813ee6 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Wed, 20 Jun 2012 17:46:22 -0600 Subject: [PATCH] Refactor Snippets to a class that creates an instance for each Editor --- spec/extensions/snippets-spec.coffee | 2 +- src/extensions/snippets/snippets.coffee | 52 ++++++++++++------------- 2 files changed, 25 insertions(+), 29 deletions(-) diff --git a/spec/extensions/snippets-spec.coffee b/spec/extensions/snippets-spec.coffee index 0beca965d..f9ac9aa7b 100644 --- a/spec/extensions/snippets-spec.coffee +++ b/spec/extensions/snippets-spec.coffee @@ -32,7 +32,7 @@ describe "Snippets extension", -> expect(editor.getCursorScreenPosition()).toEqual [0, 14] describe "when the snippet contains tab stops", -> - + describe "when the letters preceding the cursor don't match a snippet", -> it "inserts a tab as normal", -> diff --git a/src/extensions/snippets/snippets.coffee b/src/extensions/snippets/snippets.coffee index 02a74584e..9fd363f9d 100644 --- a/src/extensions/snippets/snippets.coffee +++ b/src/extensions/snippets/snippets.coffee @@ -2,38 +2,34 @@ fs = require 'fs' PEG = require 'pegjs' module.exports = - name: 'Snippets' - snippetsByExtension: {} - snippetsParser: PEG.buildParser(fs.read(require.resolve 'extensions/snippets/snippets.pegjs')) + class Snippets + @snippetsByExtension: {} + @snippetsParser: PEG.buildParser(fs.read(require.resolve 'extensions/snippets/snippets.pegjs')) - activate: (@rootView) -> - @loadSnippets() + @activate: (@rootView) -> + @loadSnippets() + rootView.on 'editor-open', (e, editor) => new Snippets(editor) - for editor in rootView.editors() - @enableSnippetsForEditor(editor) + @loadSnippets: -> + snippetsDir = fs.join(atom.configDirPath, 'snippets') + return unless fs.exists(snippetsDir) - rootView.on 'editor-open', (e, editor) => - @enableSnippetsForEditor(editor) + @loadSnippetsFile(path) for path in fs.list(snippetsDir) when fs.extension(path) == '.snippets' - enableSnippetsForEditor: (editor) -> - editor.preempt 'tab', => return false if @expandSnippet() + @loadSnippetsFile: (path) -> + @evalSnippets(fs.base(path, '.snippets'), fs.read(path)) - loadSnippets: -> - snippetsDir = fs.join(atom.configDirPath, 'snippets') - return unless fs.exists(snippetsDir) - @loadSnippetsFile(path) for path in fs.list(snippetsDir) when fs.extension(path) == '.snippets' + @evalSnippets: (extension, text) -> + @snippetsByExtension[extension] = @snippetsParser.parse(text) - loadSnippetsFile: (path) -> - @evalSnippets(fs.base(path, '.snippets'), fs.read(path)) + constructor: (@editor) -> + @editor.preempt 'tab', => return false if @expandSnippet() - evalSnippets: (extension, text) -> - @snippetsByExtension[extension] = @snippetsParser.parse(text) - - expandSnippet: -> - editSession = @rootView.activeEditor().activeEditSession - return unless snippets = @snippetsByExtension[editSession.buffer.getExtension()] - prefix = editSession.getLastCursor().getCurrentWordPrefix() - if body = snippets[prefix]?.body - editSession.selectToBeginningOfWord() - editSession.insertText(body) - true + expandSnippet: -> + editSession = @editor.activeEditSession + return unless snippets = @constructor.snippetsByExtension[editSession.buffer.getExtension()] + prefix = editSession.getLastCursor().getCurrentWordPrefix() + if body = snippets[prefix]?.body + editSession.selectToBeginningOfWord() + editSession.insertText(body) + true