From b11db2f70872edcf22b5c3fa712524e871dfa4a9 Mon Sep 17 00:00:00 2001 From: Brennen Berkley Date: Tue, 24 Jul 2018 10:23:20 -0600 Subject: [PATCH] Fix scope of generics within parenthesis The angle brackets in "value = (B) obj;" were being treated as operators instead of punctuation. --- grammars/java.cson | 8 ++++++++ spec/java-spec.coffee | 23 +++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/grammars/java.cson b/grammars/java.cson index 5d5d7d4..68fd718 100644 --- a/grammars/java.cson +++ b/grammars/java.cson @@ -1151,6 +1151,14 @@ '0': 'name': 'punctuation.bracket.round.java' 'patterns': [ + { + 'match': '<\\s*(?:[A-Za-z]\\w*\\s*\\.\\s*)*[A-Za-z]\\w*\\s*>' + 'captures': + '0': + 'patterns': [ + 'include': '#generics' + ] + } { 'include': '#code' } diff --git a/spec/java-spec.coffee b/spec/java-spec.coffee index 8d6a005..484940e 100644 --- a/spec/java-spec.coffee +++ b/spec/java-spec.coffee @@ -1177,6 +1177,29 @@ describe 'Java grammar', -> expect(lines[2][13]).toEqual value: 'null', scopes: ['source.java', 'meta.class.java', 'meta.class.body.java', 'constant.language.java'] expect(lines[2][14]).toEqual value: ';', scopes: ['source.java', 'meta.class.java', 'meta.class.body.java', 'punctuation.terminator.java'] + it 'tokenizes generics within parenthesis', -> + {tokens} = grammar.tokenizeLine 'A value = (A) obj;' + + expect(tokens[9]).toEqual value: '(', scopes: ['source.java', 'punctuation.bracket.round.java'] + expect(tokens[10]).toEqual value: 'A', scopes: ['source.java', 'storage.type.java'] + expect(tokens[11]).toEqual value: '<', scopes: ['source.java', 'punctuation.bracket.angle.java'] + expect(tokens[12]).toEqual value: 'B', scopes: ['source.java', 'storage.type.generic.java'] + expect(tokens[13]).toEqual value: '>', scopes: ['source.java', 'punctuation.bracket.angle.java'] + expect(tokens[14]).toEqual value: ')', scopes: ['source.java', 'punctuation.bracket.round.java'] + + {tokens} = grammar.tokenizeLine 'A value = (A) obj;' + + expect(tokens[13]).toEqual value: '(', scopes: ['source.java', 'punctuation.bracket.round.java'] + expect(tokens[14]).toEqual value: 'A', scopes: ['source.java', 'storage.type.java'] + expect(tokens[15]).toEqual value: '<', scopes: ['source.java', 'punctuation.bracket.angle.java'] + expect(tokens[16]).toEqual value: 'java', scopes: ['source.java', 'storage.type.generic.java'] + expect(tokens[17]).toEqual value: '.', scopes: ['source.java', 'punctuation.separator.period.java'] + expect(tokens[18]).toEqual value: 'lang', scopes: ['source.java', 'storage.type.generic.java'] + expect(tokens[19]).toEqual value: '.', scopes: ['source.java', 'punctuation.separator.period.java'] + expect(tokens[20]).toEqual value: 'String', scopes: ['source.java', 'storage.type.generic.java'] + expect(tokens[21]).toEqual value: '>', scopes: ['source.java', 'punctuation.bracket.angle.java'] + expect(tokens[22]).toEqual value: ')', scopes: ['source.java', 'punctuation.bracket.round.java'] + it 'tokenizes lambda expressions', -> {tokens} = grammar.tokenizeLine '(String s1) -> s1.length() - outer.length();'