From 9e7a9e621091480b0af3691f1d99b6861c087a69 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Fri, 31 May 2013 09:05:26 -0700 Subject: [PATCH 1/2] Remove incorrect @ anchorPosition is a parameter --- src/app/text-mate-grammar.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/text-mate-grammar.coffee b/src/app/text-mate-grammar.coffee index d4a9016bd..ed0066e69 100644 --- a/src/app/text-mate-grammar.coffee +++ b/src/app/text-mate-grammar.coffee @@ -203,7 +203,7 @@ class Injections return injection.scanner if injection.scanner? regexes = _.map injection.patterns, (pattern) -> - pattern.getRegex(firstLine, position, @anchorPosition) + pattern.getRegex(firstLine, position, anchorPosition) scanner = new OnigScanner(regexes) scanner.patterns = injection.patterns scanner.anchored = injection.anchored From 9431a8c3ac7a23c45ec521f7e612282b027c5f87 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Fri, 31 May 2013 09:26:07 -0700 Subject: [PATCH 2/2] Check that scope name is present before comparing Previously if the last 2 rules in the stack had no scope name and the position wasn't advancing then the last rule would be popped. This caused Java single line comments to not parse properly since the push rules for comment blocks have no scope name. --- spec/app/text-mate-grammar-spec.coffee | 17 +++++++++++++++++ src/app/text-mate-grammar.coffee | 2 +- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/spec/app/text-mate-grammar-spec.coffee b/spec/app/text-mate-grammar-spec.coffee index b9985012a..8d23cb569 100644 --- a/spec/app/text-mate-grammar-spec.coffee +++ b/spec/app/text-mate-grammar-spec.coffee @@ -597,3 +597,20 @@ describe "TextMateGrammar", -> tokens = lines[1] expect(tokens[2].value).toBe '@"' expect(tokens[2].scopes).toEqual ["source.objc++", "meta.function.c", "meta.block.c", "string.quoted.double.objc", "punctuation.definition.string.begin.objc"] + + describe "Java", -> + beforeEach -> + atom.activatePackage('java-tmbundle', sync: true) + grammar = syntax.selectGrammar('Function.java') + lines = grammar.tokenizeLines """ + public void test() { + //comment + } + """ + + it "correctly parses single line comments", -> + tokens = lines[1] + expect(tokens[0].scopes).toEqual ["source.java", "comment.line.double-slash.java", "punctuation.definition.comment.java"] + expect(tokens[0].value).toEqual '//' + expect(tokens[1].scopes).toEqual ["source.java", "comment.line.double-slash.java"] + expect(tokens[1].value).toEqual 'comment' diff --git a/src/app/text-mate-grammar.coffee b/src/app/text-mate-grammar.coffee index ed0066e69..6b244384e 100644 --- a/src/app/text-mate-grammar.coffee +++ b/src/app/text-mate-grammar.coffee @@ -159,7 +159,7 @@ class TextMateGrammar ruleStack.pop() [penultimateRule, lastRule] = ruleStack[-2..] - if lastRule? and penultimateRule.scopeName == lastRule.scopeName + if lastRule?.scopeName? and penultimateRule.scopeName == lastRule.scopeName ruleStack.pop() tokens.push(new Token( value: line[position...line.length]