Skip to content

Commit

Permalink
Add grammar support for new directives: rendermode, preservewhitespac…
Browse files Browse the repository at this point in the history
…e and typeparam (#6887)

* added grammar support for new directives

- added grammar support for rendermode, preservewhitespace and typeparam in tmLanguage.yml
- populated the corresponding json file with the npm run compile:razorTextMate command
- added the corresponding tests in Microsoft.AspNetCore.Razor.VSCode.Grammar.Test. Also added the tests in the snapshot.
  • Loading branch information
jordi1215 committed Feb 15, 2024
1 parent 1bf0848 commit 682c432
Show file tree
Hide file tree
Showing 7 changed files with 377 additions and 1 deletion.
78 changes: 78 additions & 0 deletions src/razor/syntaxes/aspnetcorerazor.tmLanguage.json
Expand Up @@ -525,6 +525,15 @@
},
{
"include": "#using-directive"
},
{
"include": "#rendermode-directive"
},
{
"include": "#preservewhitespace-directive"
},
{
"include": "#typeparam-directive"
}
]
},
Expand Down Expand Up @@ -849,6 +858,75 @@
}
}
},
"rendermode-directive": {
"name": "meta.directive",
"match": "(@)(rendermode)\\s+([^$]+)?",
"captures": {
"1": {
"patterns": [
{
"include": "#transition"
}
]
},
"2": {
"name": "keyword.control.razor.directive.rendermode"
},
"3": {
"patterns": [
{
"include": "source.cs#type"
}
]
}
}
},
"preservewhitespace-directive": {
"name": "meta.directive",
"match": "(@)(preservewhitespace)\\s+([^$]+)?",
"captures": {
"1": {
"patterns": [
{
"include": "#transition"
}
]
},
"2": {
"name": "keyword.control.razor.directive.preservewhitespace"
},
"3": {
"patterns": [
{
"include": "source.cs#boolean-literal"
}
]
}
}
},
"typeparam-directive": {
"name": "meta.directive",
"match": "(@)(typeparam)\\s+([^$]+)?",
"captures": {
"1": {
"patterns": [
{
"include": "#transition"
}
]
},
"2": {
"name": "keyword.control.razor.directive.typeparam"
},
"3": {
"patterns": [
{
"include": "source.cs#type"
}
]
}
}
},
"attribute-directive": {
"name": "meta.directive",
"begin": "(@)(attribute)\\b\\s+",
Expand Down
35 changes: 34 additions & 1 deletion src/razor/syntaxes/aspnetcorerazor.tmLanguage.yml
Expand Up @@ -281,6 +281,9 @@ repository:
- include: '#section-directive'
- include: '#layout-directive'
- include: '#using-directive'
- include: '#rendermode-directive'
- include: '#preservewhitespace-directive'
- include: '#typeparam-directive'

#>>>>> @code and @functions <<<<<

Expand Down Expand Up @@ -420,6 +423,36 @@ repository:
3: { patterns: [ include: 'source.cs#type' ] }
4: { name: 'entity.name.variable.property.cs' }

#>>>>> @rendermode <<<<<

rendermode-directive:
name: 'meta.directive'
match: '(@)(rendermode)\s+([^$]+)?'
captures:
1: { patterns: [ include: '#transition' ] }
2: { name: 'keyword.control.razor.directive.rendermode'}
3: { patterns: [ include: 'source.cs#type' ] }

#>>>>> @preservewhitespace <<<<<

preservewhitespace-directive:
name: 'meta.directive'
match: '(@)(preservewhitespace)\s+([^$]+)?'
captures:
1: { patterns: [ include: '#transition' ] }
2: { name: 'keyword.control.razor.directive.preservewhitespace'}
3: { patterns: [ include: 'source.cs#boolean-literal' ] }

#>>>>> @typeparam <<<<<

typeparam-directive:
name: 'meta.directive'
match: '(@)(typeparam)\s+([^$]+)?'
captures:
1: { patterns: [ include: '#transition' ] }
2: { name: 'keyword.control.razor.directive.typeparam'}
3: { patterns: [ include: 'source.cs#type' ] }

#>>>>> @attribute <<<<<

attribute-directive:
Expand Down Expand Up @@ -925,4 +958,4 @@ repository:
- include: 'source.cs#punctuation-semicolon'
end: '(\))'
endCaptures:
1: { name: 'punctuation.parenthesis.close.cs' }
1: { name: 'punctuation.parenthesis.close.cs' }
Expand Up @@ -2820,6 +2820,58 @@ exports[`Grammar tests @page directive Routed spaced 1`] = `
"
`;

exports[`Grammar tests @preservewhitespace directive Bool provided (false) 1`] = `
"Line: @preservewhitespace false
- token from 0 to 1 (@) with scopes text.aspnetcorerazor, meta.directive, keyword.control.cshtml.transition
- token from 1 to 19 (preservewhitespace) with scopes text.aspnetcorerazor, meta.directive, keyword.control.razor.directive.preservewhitespace
- token from 19 to 20 ( ) with scopes text.aspnetcorerazor, meta.directive
- token from 20 to 25 (false) with scopes text.aspnetcorerazor, meta.directive, constant.language.boolean.false.cs
"
`;

exports[`Grammar tests @preservewhitespace directive Bool provided (true) 1`] = `
"Line: @preservewhitespace true
- token from 0 to 1 (@) with scopes text.aspnetcorerazor, meta.directive, keyword.control.cshtml.transition
- token from 1 to 19 (preservewhitespace) with scopes text.aspnetcorerazor, meta.directive, keyword.control.razor.directive.preservewhitespace
- token from 19 to 20 ( ) with scopes text.aspnetcorerazor, meta.directive
- token from 20 to 24 (true) with scopes text.aspnetcorerazor, meta.directive, constant.language.boolean.true.cs
"
`;

exports[`Grammar tests @preservewhitespace directive Bool provided spaced 1`] = `
"Line: @preservewhitespace false
- token from 0 to 1 (@) with scopes text.aspnetcorerazor, meta.directive, keyword.control.cshtml.transition
- token from 1 to 19 (preservewhitespace) with scopes text.aspnetcorerazor, meta.directive, keyword.control.razor.directive.preservewhitespace
- token from 19 to 33 ( ) with scopes text.aspnetcorerazor, meta.directive
- token from 33 to 38 (false) with scopes text.aspnetcorerazor, meta.directive, constant.language.boolean.false.cs
- token from 38 to 48 ( ) with scopes text.aspnetcorerazor, meta.directive
"
`;

exports[`Grammar tests @preservewhitespace directive Incomplete bool 1`] = `
"Line: @preservewhitespace fal
- token from 0 to 1 (@) with scopes text.aspnetcorerazor, meta.directive, keyword.control.cshtml.transition
- token from 1 to 19 (preservewhitespace) with scopes text.aspnetcorerazor, meta.directive, keyword.control.razor.directive.preservewhitespace
- token from 19 to 20 ( ) with scopes text.aspnetcorerazor, meta.directive
- token from 20 to 24 (fal) with scopes text.aspnetcorerazor, meta.directive
"
`;

exports[`Grammar tests @preservewhitespace directive No bool 1`] = `
"Line: @preservewhitespace
- token from 0 to 1 (@) with scopes text.aspnetcorerazor, meta.directive, keyword.control.cshtml.transition
- token from 1 to 19 (preservewhitespace) with scopes text.aspnetcorerazor, meta.directive, keyword.control.razor.directive.preservewhitespace
"
`;

exports[`Grammar tests @preservewhitespace directive No bool spaced 1`] = `
"Line: @preservewhitespace
- token from 0 to 1 (@) with scopes text.aspnetcorerazor, meta.directive, keyword.control.cshtml.transition
- token from 1 to 19 (preservewhitespace) with scopes text.aspnetcorerazor, meta.directive, keyword.control.razor.directive.preservewhitespace
- token from 19 to 34 ( ) with scopes text.aspnetcorerazor, meta.directive
"
`;

exports[`Grammar tests @removeTagHelper directive Incomplete parameter 1`] = `
"Line: @removeTagHelper "
- token from 0 to 1 (@) with scopes text.aspnetcorerazor, meta.directive, keyword.control.cshtml.transition
Expand Down Expand Up @@ -2876,6 +2928,49 @@ exports[`Grammar tests @removeTagHelper directive Unquoted parameter 1`] = `
"
`;

exports[`Grammar tests @rendermode directive Incomplete mode 1`] = `
"Line: @rendermode InteractiveWebAssemb
- token from 0 to 1 (@) with scopes text.aspnetcorerazor, meta.directive, keyword.control.cshtml.transition
- token from 1 to 11 (rendermode) with scopes text.aspnetcorerazor, meta.directive, keyword.control.razor.directive.rendermode
- token from 11 to 12 ( ) with scopes text.aspnetcorerazor, meta.directive
- token from 12 to 32 (InteractiveWebAssemb) with scopes text.aspnetcorerazor, meta.directive, entity.name.type.cs
"
`;

exports[`Grammar tests @rendermode directive Mode provided 1`] = `
"Line: @rendermode InteractiveServer
- token from 0 to 1 (@) with scopes text.aspnetcorerazor, meta.directive, keyword.control.cshtml.transition
- token from 1 to 11 (rendermode) with scopes text.aspnetcorerazor, meta.directive, keyword.control.razor.directive.rendermode
- token from 11 to 12 ( ) with scopes text.aspnetcorerazor, meta.directive
- token from 12 to 29 (InteractiveServer) with scopes text.aspnetcorerazor, meta.directive, entity.name.type.cs
"
`;

exports[`Grammar tests @rendermode directive Mode provided spaced 1`] = `
"Line: @rendermode InteractiveAuto
- token from 0 to 1 (@) with scopes text.aspnetcorerazor, meta.directive, keyword.control.cshtml.transition
- token from 1 to 11 (rendermode) with scopes text.aspnetcorerazor, meta.directive, keyword.control.razor.directive.rendermode
- token from 11 to 25 ( ) with scopes text.aspnetcorerazor, meta.directive
- token from 25 to 40 (InteractiveAuto) with scopes text.aspnetcorerazor, meta.directive, entity.name.type.cs
- token from 40 to 50 ( ) with scopes text.aspnetcorerazor, meta.directive
"
`;

exports[`Grammar tests @rendermode directive No mode 1`] = `
"Line: @rendermode
- token from 0 to 1 (@) with scopes text.aspnetcorerazor, meta.directive, keyword.control.cshtml.transition
- token from 1 to 11 (rendermode) with scopes text.aspnetcorerazor, meta.directive, keyword.control.razor.directive.rendermode
"
`;

exports[`Grammar tests @rendermode directive No mode spaced 1`] = `
"Line: @rendermode
- token from 0 to 1 (@) with scopes text.aspnetcorerazor, meta.directive, keyword.control.cshtml.transition
- token from 1 to 11 (rendermode) with scopes text.aspnetcorerazor, meta.directive, keyword.control.razor.directive.rendermode
- token from 11 to 26 ( ) with scopes text.aspnetcorerazor, meta.directive
"
`;

exports[`Grammar tests @section directive As C# local 1`] = `
"Line: @section.method()
- token from 0 to 1 (@) with scopes text.aspnetcorerazor, meta.expression.implicit.cshtml, keyword.control.cshtml.transition
Expand Down Expand Up @@ -3661,6 +3756,63 @@ exports[`Grammar tests @try { ... } catch/finally { ... } Single line 1`] = `
"
`;

exports[`Grammar tests @typeparam directive Complete type, generic 1`] = `
"Line: @typeparam SomeViewBase<string>
- token from 0 to 1 (@) with scopes text.aspnetcorerazor, meta.directive, keyword.control.cshtml.transition
- token from 1 to 10 (typeparam) with scopes text.aspnetcorerazor, meta.directive, keyword.control.razor.directive.typeparam
- token from 10 to 11 ( ) with scopes text.aspnetcorerazor, meta.directive
- token from 11 to 23 (SomeViewBase) with scopes text.aspnetcorerazor, meta.directive, entity.name.type.cs
- token from 23 to 24 (<) with scopes text.aspnetcorerazor, meta.directive, punctuation.definition.typeparameters.begin.cs
- token from 24 to 30 (string) with scopes text.aspnetcorerazor, meta.directive, keyword.type.cs
- token from 30 to 31 (>) with scopes text.aspnetcorerazor, meta.directive, punctuation.definition.typeparameters.end.cs
"
`;

exports[`Grammar tests @typeparam directive Incomplete type, generic 1`] = `
"Line: @typeparam SomeViewBase<string
- token from 0 to 1 (@) with scopes text.aspnetcorerazor, meta.directive, keyword.control.cshtml.transition
- token from 1 to 10 (typeparam) with scopes text.aspnetcorerazor, meta.directive, keyword.control.razor.directive.typeparam
- token from 10 to 11 ( ) with scopes text.aspnetcorerazor, meta.directive
- token from 11 to 23 (SomeViewBase) with scopes text.aspnetcorerazor, meta.directive, entity.name.type.cs
- token from 23 to 24 (<) with scopes text.aspnetcorerazor, meta.directive, punctuation.definition.typeparameters.begin.cs
- token from 24 to 30 (string) with scopes text.aspnetcorerazor, meta.directive, keyword.type.cs
"
`;

exports[`Grammar tests @typeparam directive No type 1`] = `
"Line: @typeparam
- token from 0 to 1 (@) with scopes text.aspnetcorerazor, meta.directive, keyword.control.cshtml.transition
- token from 1 to 10 (typeparam) with scopes text.aspnetcorerazor, meta.directive, keyword.control.razor.directive.typeparam
"
`;

exports[`Grammar tests @typeparam directive No type spaced 1`] = `
"Line: @typeparam
- token from 0 to 1 (@) with scopes text.aspnetcorerazor, meta.directive, keyword.control.cshtml.transition
- token from 1 to 10 (typeparam) with scopes text.aspnetcorerazor, meta.directive, keyword.control.razor.directive.typeparam
- token from 10 to 25 ( ) with scopes text.aspnetcorerazor, meta.directive
"
`;

exports[`Grammar tests @typeparam directive Type provided 1`] = `
"Line: @typeparam Person
- token from 0 to 1 (@) with scopes text.aspnetcorerazor, meta.directive, keyword.control.cshtml.transition
- token from 1 to 10 (typeparam) with scopes text.aspnetcorerazor, meta.directive, keyword.control.razor.directive.typeparam
- token from 10 to 11 ( ) with scopes text.aspnetcorerazor, meta.directive
- token from 11 to 17 (Person) with scopes text.aspnetcorerazor, meta.directive, entity.name.type.cs
"
`;

exports[`Grammar tests @typeparam directive Type provided spaced 1`] = `
"Line: @typeparam Person
- token from 0 to 1 (@) with scopes text.aspnetcorerazor, meta.directive, keyword.control.cshtml.transition
- token from 1 to 10 (typeparam) with scopes text.aspnetcorerazor, meta.directive, keyword.control.razor.directive.typeparam
- token from 10 to 24 ( ) with scopes text.aspnetcorerazor, meta.directive
- token from 24 to 30 (Person) with scopes text.aspnetcorerazor, meta.directive, entity.name.type.cs
- token from 30 to 40 ( ) with scopes text.aspnetcorerazor, meta.directive
"
`;

exports[`Grammar tests @using ( ... ) { ... } Incomplete using statement, no condition 1`] = `
"Line: @using {}
- token from 0 to 1 (@) with scopes text.aspnetcorerazor, meta.directive, keyword.control.cshtml.transition
Expand Down
Expand Up @@ -39,6 +39,9 @@ import { RunTryStatementSuite } from './tryStatement';
import { RunUsingDirectiveSuite } from './usingDirective';
import { RunUsingStatementSuite } from './usingStatement';
import { RunWhileStatementSuite } from './whileStatement';
import { RunRendermodeDirectiveSuite } from './rendermodeDirective';
import { RunPreservewhitespaceDirectiveSuite } from './preservewhitespaceDirective';
import { RunTypeparamDirectiveSuite } from './typeparamDirective';

// We bring together all test suites and wrap them in one here. The reason behind this is that
// modules get reloaded per test suite and the vscode-textmate library doesn't support the way
Expand Down Expand Up @@ -71,6 +74,9 @@ describe('Grammar tests', () => {
RunSectionDirectiveSuite();
RunLayoutDirectiveSuite();
RunUsingDirectiveSuite();
RunRendermodeDirectiveSuite();
RunPreservewhitespaceDirectiveSuite();
RunTypeparamDirectiveSuite();

// Razor C# Control Structures
RunUsingStatementSuite();
Expand Down
@@ -0,0 +1,37 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/

import { describe, it } from '@jest/globals';
import { assertMatchesSnapshot } from './infrastructure/testUtilities';

// See GrammarTests.test.ts for details on exporting this test suite instead of running in place.

export function RunPreservewhitespaceDirectiveSuite() {
describe('@preservewhitespace directive', () => {
it('No bool', async () => {
await assertMatchesSnapshot('@preservewhitespace');
});

it('No bool spaced', async () => {
await assertMatchesSnapshot('@preservewhitespace ');
});

it('Incomplete bool', async () => {
await assertMatchesSnapshot('@preservewhitespace fal');
});

it('Bool provided (true)', async () => {
await assertMatchesSnapshot('@preservewhitespace true');
});

it('Bool provided (false)', async () => {
await assertMatchesSnapshot('@preservewhitespace false');
});

it('Bool provided spaced', async () => {
await assertMatchesSnapshot('@preservewhitespace false ');
});
});
}

0 comments on commit 682c432

Please sign in to comment.