diff --git a/grammars/csharp.tmLanguage b/grammars/csharp.tmLanguage
index 39d6c8f..e9e6081 100644
--- a/grammars/csharp.tmLanguage
+++ b/grammars/csharp.tmLanguage
@@ -165,6 +165,10 @@
include
#type-declarations
+
+ include
+ #constructor-declaration
+
include
#property-declaration
@@ -185,10 +189,6 @@
include
#variable-initializer
-
- include
- #constructor-declaration
-
include
#destructor-declaration
@@ -2391,23 +2391,19 @@
constructor-declaration
begin
- (?=@?[_[:alpha:]][_[:alnum:]]*\s*\()
+ (@?[_[:alpha:]][_[:alnum:]]*)\s*(?=\(|$)
+ beginCaptures
+
+ 1
+
+ name
+ entity.name.function.cs
+
+
end
(?<=\})|(?=;)
patterns
-
- match
- (@?[_[:alpha:]][_[:alnum:]]*)\b
- captures
-
- 1
-
- name
- entity.name.function.cs
-
-
-
begin
(:)
diff --git a/grammars/csharp.tmLanguage.cson b/grammars/csharp.tmLanguage.cson
index 5d67c5f..225822a 100644
--- a/grammars/csharp.tmLanguage.cson
+++ b/grammars/csharp.tmLanguage.cson
@@ -111,6 +111,9 @@ repository:
{
include: "#type-declarations"
}
+ {
+ include: "#constructor-declaration"
+ }
{
include: "#property-declaration"
}
@@ -126,9 +129,6 @@ repository:
{
include: "#variable-initializer"
}
- {
- include: "#constructor-declaration"
- }
{
include: "#destructor-declaration"
}
@@ -1528,15 +1528,12 @@ repository:
}
]
"constructor-declaration":
- begin: "(?=@?[_[:alpha:]][_[:alnum:]]*\\s*\\()"
+ begin: "(@?[_[:alpha:]][_[:alnum:]]*)\\s*(?=\\(|$)"
+ beginCaptures:
+ "1":
+ name: "entity.name.function.cs"
end: "(?<=\\})|(?=;)"
patterns: [
- {
- match: "(@?[_[:alpha:]][_[:alnum:]]*)\\b"
- captures:
- "1":
- name: "entity.name.function.cs"
- }
{
begin: "(:)"
beginCaptures:
diff --git a/src/csharp.tmLanguage.yml b/src/csharp.tmLanguage.yml
index 7b75a01..e098bb9 100644
--- a/src/csharp.tmLanguage.yml
+++ b/src/csharp.tmLanguage.yml
@@ -52,12 +52,12 @@ repository:
- include: '#comment'
- include: '#storage-modifier'
- include: '#type-declarations'
+ - include: '#constructor-declaration'
- include: '#property-declaration'
- include: '#field-declaration'
- include: '#event-declaration'
- include: '#indexer-declaration'
- include: '#variable-initializer'
- - include: '#constructor-declaration'
- include: '#destructor-declaration'
- include: '#operator-declaration'
- include: '#conversion-operator-declaration'
@@ -877,12 +877,11 @@ repository:
- include: '#block'
constructor-declaration:
- begin: (?=@?[_[:alpha:]][_[:alnum:]]*\s*\()
+ begin: (@?[_[:alpha:]][_[:alnum:]]*)\s*(?=\(|$)
+ beginCaptures:
+ '1': { name: entity.name.function.cs }
end: (?<=\})|(?=;)
patterns:
- - match: (@?[_[:alpha:]][_[:alnum:]]*)\b
- captures:
- '1': { name: entity.name.function.cs }
- begin: (:)
beginCaptures:
'1': { name: punctuation.separator.colon.cs }
diff --git a/test/constructor.tests.ts b/test/constructor.tests.ts
index a435940..db23055 100644
--- a/test/constructor.tests.ts
+++ b/test/constructor.tests.ts
@@ -414,5 +414,41 @@ public AccountController(
Token.Punctuation.CloseBrace
]);
});
+
+ it("opening parenthesis on new line (issue dotnet/vscode-csharp#4190)", async () => {
+ const input = Input.InClass(`
+public TestClass
+(
+ string s
+)
+{
+}
+
+public void Method()
+{
+}`);
+ const tokens = await tokenize(input);
+
+ tokens.should.deep.equal([
+ Token.Keyword.Modifier.Public,
+ Token.Identifier.MethodName("TestClass"),
+ Token.Punctuation.OpenParen,
+
+ Token.PrimitiveType.String,
+ Token.Identifier.ParameterName("s"),
+
+ Token.Punctuation.CloseParen,
+ Token.Punctuation.OpenBrace,
+ Token.Punctuation.CloseBrace,
+
+ Token.Keyword.Modifier.Public,
+ Token.PrimitiveType.Void,
+ Token.Identifier.MethodName("Method"),
+ Token.Punctuation.OpenParen,
+ Token.Punctuation.CloseParen,
+ Token.Punctuation.OpenBrace,
+ Token.Punctuation.CloseBrace
+ ]);
+ });
});
});
\ No newline at end of file