diff --git a/spec/fixtures/packages/package-with-snippets/snippets/.hidden-file b/spec/fixtures/packages/package-with-snippets/snippets/.hidden-file new file mode 100644 index 000000000..7aa86d685 --- /dev/null +++ b/spec/fixtures/packages/package-with-snippets/snippets/.hidden-file @@ -0,0 +1 @@ +This is a hidden file. Don't even try to load it as a snippet diff --git a/spec/fixtures/packages/package-with-snippets/snippets/junk-file b/spec/fixtures/packages/package-with-snippets/snippets/junk-file new file mode 100644 index 000000000..5549cb956 --- /dev/null +++ b/spec/fixtures/packages/package-with-snippets/snippets/junk-file @@ -0,0 +1 @@ +This file isn't CSON, but shouldn't be a big deal \ No newline at end of file diff --git a/src/packages/snippets/spec/snippets-spec.coffee b/src/packages/snippets/spec/snippets-spec.coffee index fd8cea73d..f03a86452 100644 --- a/src/packages/snippets/spec/snippets-spec.coffee +++ b/src/packages/snippets/spec/snippets-spec.coffee @@ -207,12 +207,17 @@ describe "Snippets extension", -> expect(editor.getSelectedBufferRange()).toEqual [[1, 6], [1, 36]] describe "snippet loading", -> - it "loads snippets from all atom packages with a snippets directory", -> + it "loads non-hidden snippet files from all atom packages with snippets directories, logging a warning if a file can't be parsed", -> + spyOn(console, 'warn') jasmine.unspy(AtomPackage.prototype, 'loadSnippets') snippets.loadAll() expect(syntax.getProperty(['.test'], 'snippets.test')?.constructor).toBe Snippet + # warn about junk-file, but don't even try to parse a hidden file + expect(console.warn).toHaveBeenCalled() + expect(console.warn.calls.length).toBe 1 + it "loads snippets from all TextMate packages with snippets", -> jasmine.unspy(TextMatePackage.prototype, 'loadSnippets') snippets.loadAll() diff --git a/src/packages/snippets/src/package-extensions.coffee b/src/packages/snippets/src/package-extensions.coffee index 8ce001487..342d20ecd 100644 --- a/src/packages/snippets/src/package-extensions.coffee +++ b/src/packages/snippets/src/package-extensions.coffee @@ -4,9 +4,7 @@ fs = require 'fs' AtomPackage.prototype.loadSnippets = -> snippetsDirPath = fs.join(@path, 'snippets') - if fs.exists(snippetsDirPath) - for snippetsPath in fs.list(snippetsDirPath) - snippets.load(snippetsPath) + snippets.loadDirectory(snippetsDirPath) if fs.exists(snippetsDirPath) TextMatePackage.prototype.loadSnippets = -> snippetsDirPath = fs.join(@path, 'Snippets') diff --git a/src/packages/snippets/src/snippets.coffee b/src/packages/snippets/src/snippets.coffee index 657153a8d..769b59aef 100644 --- a/src/packages/snippets/src/snippets.coffee +++ b/src/packages/snippets/src/snippets.coffee @@ -19,11 +19,18 @@ module.exports = for pack in atom.getPackages() pack.loadSnippets() - for snippetsPath in fs.list(@userSnippetsDir) - @load(snippetsPath) + @loadDirectory(@userSnippetsDir) if fs.exists(@userSnippetsDir) + + loadDirectory: (snippetsDirPath) -> + for snippetsPath in fs.list(snippetsDirPath) when fs.base(snippetsPath).indexOf('.') isnt 0 + snippets.load(snippetsPath) load: (snippetsPath) -> - @add(fs.readObject(snippetsPath)) + try + snippets = fs.readObject(snippetsPath) + catch e + console.warn "Error reading snippets file '#{snippetsPath}'" + @add(snippets) add: (snippetsBySelector) -> for selector, snippetsByName of snippetsBySelector