Skip to content

Commit 49dc980

Browse files
Merge pull request #1089 from DustinCampbell/fix-grammar-perf-issue
Workaround performance issue introduced by regular expression in syntax grammar
2 parents 9502872 + e4f51e3 commit 49dc980

File tree

7 files changed

+29
-11
lines changed

7 files changed

+29
-11
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 1.6.2 (December 24, 2016)
2+
3+
* Fix performance issue when editing type names containing multiple generic type parameters. ([#1088](https://github.com/OmniSharp/omnisharp-vscode/issues/1088), [#1086](https://github.com/OmniSharp/omnisharp-vscode/issues/1086))
4+
15
## 1.6.1 (December 22, 2016)
26

37
* Fix crash when tasks.json contains comments. ([#1074](https://github.com/OmniSharp/omnisharp-vscode/issues/1074))

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "csharp",
33
"publisher": "ms-vscode",
4-
"version": "1.6.1",
4+
"version": "1.6.2",
55
"description": "C# for Visual Studio Code (powered by OmniSharp).",
66
"displayName": "C#",
77
"author": "Microsoft Corporation",

syntaxes/csharp.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@
167167
"type": {
168168
"patterns": [
169169
{
170-
"match": "([\\w\\.]+\\s*<(?:[\\w\\s,\\.`\\[\\]\\*]+|\\g<1>)+>(?:\\s*\\[\\s*\\])?)",
170+
"match": "([\\w\\.]+\\s*<(?:[\\w\\s,\\.`\\[\\]\\*]+)+>(?:\\s*\\[\\s*\\])?)",
171171
"comment": "generic type",
172172
"captures": {
173173
"1": {

test/syntaxes/class.test.syntax.ts

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,11 @@ namespace TestNamespace
8383
let tokens: Token[] = TokenizerUtil.tokenize(input);
8484

8585
tokens.should.contain(Tokens.ClassKeyword("class", 4, 5));
86-
tokens.should.contain(Tokens.ClassIdentifier("Dictionary<T, Dictionary<string, string>>", 4, 11));
86+
87+
// OLD: tokens.should.contain(Tokens.ClassIdentifier("Dictionary<T, Dictionary<string, string>>", 4, 11));
88+
tokens.should.contain(Tokens.ClassIdentifier("Dictionary", 4, 11));
89+
tokens.should.contain(Tokens.ClassIdentifier("T", 4, 22));
90+
tokens.should.contain(Tokens.ClassIdentifier("Dictionary<string, string>", 4, 25));
8791
});
8892

8993
it("inheritance", function() {
@@ -106,9 +110,10 @@ namespace TestNamespace
106110
tokens.should.contain(Tokens.ClassIdentifier("PublicClass<T>", 5, 11));
107111
tokens.should.contain(Tokens.Type("Root.IInterface<Something.Nested>", 5, 28));
108112
tokens.should.contain(Tokens.Type("Something.IInterfaceTwo", 5, 63));
109-
110-
tokens.should.contain(Tokens.Type("Dictionary<T, Dictionary<string, string>>", 6, 28));
111-
tokens.should.contain(Tokens.Type("IMap<T, Dictionary<string, string>>", 6, 71));
113+
tokens.should.contain(Tokens.Type("Dictionary", 6, 28));
114+
tokens.should.contain(Tokens.Type("Dictionary<string, string>", 6, 42));
115+
tokens.should.contain(Tokens.Type("IMap", 6, 71));
116+
tokens.should.contain(Tokens.Type("Dictionary<string, string>", 6, 79));
112117
});
113118

114119
it("generic constraints", function() {
@@ -129,7 +134,8 @@ namespace TestNamespace
129134

130135
tokens.should.contain(Tokens.ClassKeyword("class", 5, 5));
131136
tokens.should.contain(Tokens.ClassIdentifier("PublicClass<T, X>", 5, 11));
132-
tokens.should.contain(Tokens.Type("Dictionary<T, List<string>[]>", 5, 31));
137+
tokens.should.contain(Tokens.Type("Dictionary", 5, 31));
138+
tokens.should.contain(Tokens.Type("List<string>[]", 5, 45));
133139
tokens.should.contain(Tokens.Type("ISomething", 5, 62));
134140
tokens.should.contain(Tokens.Keyword("where", 5, 73));
135141
tokens.should.contain(Tokens.Type("T", 5, 79));

test/syntaxes/event.test.syntax.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,9 @@ public class Tester
3636

3737
tokens.should.contain(Tokens.StorageModifierKeyword("public", 4, 5));
3838
tokens.should.contain(Tokens.StorageModifierKeyword("event", 4, 12));
39-
tokens.should.contain(Tokens.Type("EventHandler<List<T>, Dictionary<T, D>>", 4, 18));
39+
tokens.should.contain(Tokens.Type("EventHandler", 4, 18));
40+
tokens.should.contain(Tokens.Type("List<T>", 4, 31));
41+
tokens.should.contain(Tokens.Type("Dictionary<T, D>", 4, 40));
4042
tokens.should.contain(Tokens.EventIdentifier("Event", 4, 58));
4143
});
4244
});

test/syntaxes/field.test.syntax.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,9 @@ public class Tester
3939
let tokens: Token[] = TokenizerUtil.tokenize(input);
4040

4141
tokens.should.contain(Tokens.StorageModifierKeyword("private", 4, 5));
42-
tokens.should.contain(Tokens.Type("Dictionary< List<T>, Dictionary<T, D>>", 4, 13));
42+
tokens.should.contain(Tokens.Type("Dictionary", 4, 13));
43+
tokens.should.contain(Tokens.Type("List<T>", 4, 25));
44+
tokens.should.contain(Tokens.Type("Dictionary<T, D>", 4, 34));
4345
tokens.should.contain(Tokens.FieldIdentifier("_field", 4, 52));
4446
});
4547

test/syntaxes/property.test.syntax.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,9 @@ class Tester
105105
let tokens: Token[] = TokenizerUtil.tokenize(input);
106106

107107
tokens.should.contain(Tokens.StorageModifierKeyword("public", 4, 5));
108-
tokens.should.contain(Tokens.Type("Dictionary<string, List<T>[]>", 4, 12));
108+
tokens.should.contain(Tokens.Type("Dictionary", 4, 12));
109+
tokens.should.contain(Tokens.Type("string", 4, 23));
110+
tokens.should.contain(Tokens.Type("List<T>[]", 4, 31));
109111
tokens.should.contain(Tokens.PropertyIdentifier("Property", 4, 42));
110112
tokens.should.contain(Tokens.Keyword("get", 4, 53));
111113
tokens.should.contain(Tokens.Keyword("set", 4, 58));
@@ -122,7 +124,9 @@ class Tester
122124
let tokens: Token[] = TokenizerUtil.tokenize(input);
123125

124126
tokens.should.contain(Tokens.StorageModifierKeyword("public", 4, 5));
125-
tokens.should.contain(Tokens.Type("Dictionary<string, List<T>[]>", 4, 12));
127+
tokens.should.contain(Tokens.Type("Dictionary", 4, 12));
128+
tokens.should.contain(Tokens.Type("string", 4, 23));
129+
tokens.should.contain(Tokens.Type("List<T>[]", 4, 31));
126130
tokens.should.contain(Tokens.PropertyIdentifier("Property", 4, 42));
127131
tokens.should.contain(Tokens.Keyword("get", 4, 53));
128132
tokens.should.contain(Tokens.StorageModifierKeyword("new", 4, 62));

0 commit comments

Comments
 (0)