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