From e4409be95acadddf97c80d6c0af0772384c67bba Mon Sep 17 00:00:00 2001 From: David Graham & Nathan Sobo Date: Tue, 19 Jun 2012 17:56:03 -0600 Subject: [PATCH] Parse multiple snippets and allow any characters in snippet body --- spec/extensions/snippets-spec.coffee | 24 ++++++++++++++++-------- src/extensions/snippets/snippets.pegjs | 4 ++-- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/spec/extensions/snippets-spec.coffee b/spec/extensions/snippets-spec.coffee index 50d939939..b40d36b69 100644 --- a/spec/extensions/snippets-spec.coffee +++ b/spec/extensions/snippets-spec.coffee @@ -29,15 +29,23 @@ fdescribe "Snippets extension", -> expect(editor.getCursorScreenPosition()).toEqual [0, 14] describe "Snippets parser", -> - it "can parse a snippet", -> + it "can parse multiple snippets", -> snippets = Snippets.snippetsParser.parse """ - snippet te "Test snippet description" - this is a test + snippet t1 "Test snippet 1" + this is a test 1 + endsnippet + + snippet t2 "Test snippet 2" + this is a test 2 endsnippet """ + expect(_.keys(snippets).length).toBe 2 + snippet = snippets['t1'] + expect(snippet.prefix).toBe 't1' + expect(snippet.description).toBe "Test snippet 1" + expect(snippet.body).toBe "this is a test 1" - expect(_.keys(snippets).length).toBe 1 - snippet = snippets['te'] - expect(snippet.prefix).toBe 'te' - expect(snippet.description).toBe "Test snippet description" - expect(snippet.body).toBe "this is a test" + snippet = snippets['t2'] + expect(snippet.prefix).toBe 't2' + expect(snippet.description).toBe "Test snippet 2" + expect(snippet.body).toBe "this is a test 2" diff --git a/src/extensions/snippets/snippets.pegjs b/src/extensions/snippets/snippets.pegjs index f40d399bc..98993deb3 100644 --- a/src/extensions/snippets/snippets.pegjs +++ b/src/extensions/snippets/snippets.pegjs @@ -6,7 +6,7 @@ snippets = snippets:snippet+ { return snippetsByPrefix; } -snippet = start ws prefix:prefix ws description:string separator body:body end { +snippet = ws? start ws prefix:prefix ws description:string separator body:body end { return { prefix: prefix, description: description, body: body }; } @@ -14,7 +14,7 @@ separator = [ ]* '\n' start = 'snippet' prefix = prefix:[A-Za-z0-9_]+ { return prefix.join(''); } body = body:bodyCharacter* { return body.join(''); } -bodyCharacter = !end char:[a-z ] { return char; } +bodyCharacter = !end char:. { return char; } end = '\nendsnippet' string = ['] body:[^']* ['] { return body.join(''); }