diff --git a/.atom/snippets/coffee.cson b/.atom/snippets/coffee.cson index cf7e223a9..f960ce1a5 100644 --- a/.atom/snippets/coffee.cson +++ b/.atom/snippets/coffee.cson @@ -17,8 +17,14 @@ beforeEach -> $1 """ + "After each": + prefix: "af" + body: """ + afterEach -> + $1 + """ "Expectation": - prefix: "be" + prefix: "ex" body: "expect($1).to$2" "Console log": prefix: "log" diff --git a/spec/fixtures/packages/package-with-snippets/snippets/test.cson b/spec/fixtures/packages/package-with-snippets/snippets/test.cson new file mode 100644 index 000000000..b936fea16 --- /dev/null +++ b/spec/fixtures/packages/package-with-snippets/snippets/test.cson @@ -0,0 +1,4 @@ +".test": + "Test Snippet": + prefix: "test" + body: "testing 123" diff --git a/spec/spec-helper.coffee b/spec/spec-helper.coffee index f6a4df0eb..c15eb37b2 100644 --- a/spec/spec-helper.coffee +++ b/spec/spec-helper.coffee @@ -13,7 +13,8 @@ TokenizedBuffer = require 'tokenized-buffer' fs = require 'fs' require 'window' requireStylesheet "jasmine.css" -require.paths.unshift(require.resolve('fixtures/packages')) +fixturePackagesPath = require.resolve('fixtures/packages') +require.paths.unshift(fixturePackagesPath) [bindingSetsToRestore, bindingSetsByFirstKeystrokeToRestore] = [] # Load TextMate bundles, which specs rely on (but not other packages) @@ -29,6 +30,7 @@ beforeEach -> # reset config before each spec; don't load or save from/to `config.json` window.config = new Config() + config.packageDirPaths.unshift(fixturePackagesPath) spyOn(config, 'load') spyOn(config, 'save') config.set "editor.fontSize", 16 diff --git a/src/packages/snippets/spec/snippets-spec.coffee b/src/packages/snippets/spec/snippets-spec.coffee index e832851e0..f1b262679 100644 --- a/src/packages/snippets/spec/snippets-spec.coffee +++ b/src/packages/snippets/spec/snippets-spec.coffee @@ -1,4 +1,5 @@ Snippets = require 'snippets' +Snippet = require 'snippets/src/snippet' RootView = require 'root-view' Buffer = require 'buffer' Editor = require 'editor' @@ -197,6 +198,10 @@ describe "Snippets extension", -> anotherEditor.trigger keydownEvent('tab', target: anotherEditor[0]) expect(anotherEditor.getSelectedBufferRange()).toEqual [[1, 6], [1, 36]] + describe "snippet loading", -> + it "loads snippets from all packages with a snippets directory", -> + expect(syntax.getProperty(['.test'], 'snippets.test')?.constructor).toBe Snippet + describe "Snippets parser", -> it "breaks a snippet body into lines, with each line containing tab stops at the appropriate position", -> bodyTree = Snippets.parser.parse """ diff --git a/src/packages/snippets/src/package-extensions.coffee b/src/packages/snippets/src/package-extensions.coffee new file mode 100644 index 000000000..f4de953f7 --- /dev/null +++ b/src/packages/snippets/src/package-extensions.coffee @@ -0,0 +1,11 @@ +AtomPackage = require 'atom-package' +TextMatePackage = require 'text-mate-package' +fs = require 'fs' + +AtomPackage.prototype.loadSnippets = -> + snippetsDirPath = fs.join(@path, 'snippets') + if fs.exists(snippetsDirPath) + for snippetsPath in fs.list(snippetsDirPath) + snippets.load(snippetsPath) + +TextMatePackage.prototype.loadSnippets = -> diff --git a/src/packages/snippets/src/snippets.coffee b/src/packages/snippets/src/snippets.coffee index 4d88dc0c5..3d7a35a48 100644 --- a/src/packages/snippets/src/snippets.coffee +++ b/src/packages/snippets/src/snippets.coffee @@ -3,6 +3,7 @@ PEG = require 'pegjs' _ = require 'underscore' SnippetExpansion = require 'snippets/src/snippet-expansion' Snippet = require './snippet' +require './package-extensions' module.exports = snippetsByExtension: {} @@ -15,6 +16,9 @@ module.exports = @rootView.on 'editor:attached', (e, editor) => @enableSnippetsInEditor(editor) loadAll: -> + for pack in atom.getPackages() + pack.loadSnippets() + for snippetsPath in fs.list(@userSnippetsDir) @load(snippetsPath)