Skip to content

Commit 7a7482f

Browse files
authored
Merge pull request #310 from dotnet/dev/jorobich/abstract-interface
2 parents cf46bf7 + 7bd8767 commit 7a7482f

File tree

4 files changed

+90
-0
lines changed

4 files changed

+90
-0
lines changed

grammars/csharp.tmLanguage

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,10 @@
227227
<key>include</key>
228228
<string>#comment</string>
229229
</dict>
230+
<dict>
231+
<key>include</key>
232+
<string>#storage-modifier</string>
233+
</dict>
230234
<dict>
231235
<key>include</key>
232236
<string>#property-declaration</string>
@@ -243,6 +247,10 @@
243247
<key>include</key>
244248
<string>#method-declaration</string>
245249
</dict>
250+
<dict>
251+
<key>include</key>
252+
<string>#operator-declaration</string>
253+
</dict>
246254
<dict>
247255
<key>include</key>
248256
<string>#attribute-section</string>

grammars/csharp.tmLanguage.cson

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,9 @@ repository:
156156
{
157157
include: "#comment"
158158
}
159+
{
160+
include: "#storage-modifier"
161+
}
159162
{
160163
include: "#property-declaration"
161164
}
@@ -168,6 +171,9 @@ repository:
168171
{
169172
include: "#method-declaration"
170173
}
174+
{
175+
include: "#operator-declaration"
176+
}
171177
{
172178
include: "#attribute-section"
173179
}

src/csharp.tmLanguage.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,10 +69,12 @@ repository:
6969
patterns:
7070
- include: '#preprocessor'
7171
- include: '#comment'
72+
- include: '#storage-modifier'
7273
- include: '#property-declaration'
7374
- include: '#event-declaration'
7475
- include: '#indexer-declaration'
7576
- include: '#method-declaration'
77+
- include: '#operator-declaration'
7678
- include: '#attribute-section'
7779
- include: '#punctuation-semicolon'
7880

test/interface.tests.ts

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,5 +100,79 @@ interface IBar : IFoo { }
100100
Token.Punctuation.OpenBrace,
101101
Token.Punctuation.CloseBrace]);
102102
});
103+
104+
it("generic interface with abstract methods (issue #307)", async () => {
105+
106+
const input = `
107+
public interface IAdditionSubtraction<T> where T : IAdditionSubtraction<T>
108+
{
109+
public abstract static T operator -(T left, T right);
110+
abstract static T operator +(T left, T right);
111+
public abstract void M();
112+
void N();
113+
}`;
114+
const tokens = await tokenize(input);
115+
116+
tokens.should.deep.equal([
117+
Token.Keyword.Modifier.Public,
118+
Token.Keyword.Definition.Interface,
119+
Token.Identifier.InterfaceName("IAdditionSubtraction"),
120+
Token.Punctuation.TypeParameter.Begin,
121+
Token.Identifier.TypeParameterName("T"),
122+
Token.Punctuation.TypeParameter.End,
123+
Token.Keyword.Modifier.Where,
124+
Token.Identifier.TypeParameterName("T"),
125+
Token.Punctuation.Colon,
126+
Token.Type("IAdditionSubtraction"),
127+
Token.Punctuation.TypeParameter.Begin,
128+
Token.Type("T"),
129+
Token.Punctuation.TypeParameter.End,
130+
Token.Punctuation.OpenBrace,
131+
132+
Token.Keyword.Modifier.Public,
133+
Token.Keyword.Modifier.Abstract,
134+
Token.Keyword.Modifier.Static,
135+
Token.Type("T"),
136+
Token.Keyword.Definition.Operator,
137+
Token.Identifier.MethodName("-"),
138+
Token.Punctuation.OpenParen,
139+
Token.Type("T"),
140+
Token.Identifier.ParameterName("left"),
141+
Token.Punctuation.Comma,
142+
Token.Type("T"),
143+
Token.Identifier.ParameterName("right"),
144+
Token.Punctuation.CloseParen,
145+
Token.Punctuation.Semicolon,
146+
147+
Token.Keyword.Modifier.Abstract,
148+
Token.Keyword.Modifier.Static,
149+
Token.Type("T"),
150+
Token.Keyword.Definition.Operator,
151+
Token.Identifier.MethodName("+"),
152+
Token.Punctuation.OpenParen,
153+
Token.Type("T"),
154+
Token.Identifier.ParameterName("left"),
155+
Token.Punctuation.Comma,
156+
Token.Type("T"),
157+
Token.Identifier.ParameterName("right"),
158+
Token.Punctuation.CloseParen,
159+
Token.Punctuation.Semicolon,
160+
161+
Token.Keyword.Modifier.Public,
162+
Token.Keyword.Modifier.Abstract,
163+
Token.PrimitiveType.Void,
164+
Token.Identifier.MethodName("M"),
165+
Token.Punctuation.OpenParen,
166+
Token.Punctuation.CloseParen,
167+
Token.Punctuation.Semicolon,
168+
169+
Token.PrimitiveType.Void,
170+
Token.Identifier.MethodName("N"),
171+
Token.Punctuation.OpenParen,
172+
Token.Punctuation.CloseParen,
173+
Token.Punctuation.Semicolon,
174+
175+
Token.Punctuation.CloseBrace]);
176+
});
103177
});
104178
});

0 commit comments

Comments
 (0)