Skip to content

Commit 19342b1

Browse files
Stop allowing FileKind to be set on a RazorCodeDocument independently from the RazorParserOptions (#11612)
There are two extension methods targeting `RazorCodeDocument` that allow consumers to set or get the file kind for the document. However, this can result in inconsistencies because that file kind value (stored in `RazorCodeDocument.Items`) is independent from `RazorCodeDocument.ParserOptions.FileKind`. This PR removes both methods in favor `RazorParserOptions.FileKind`. Summary of changes: - Remove the `GetFileKind()` and `SetFileKind(...)` extension methods and expose a convenience `RazorCodeDocument.FileKind` property that delegates to `ParserOptions.FileKind`. - Add `RazorParserOptions.Create(...)` and `RazorCodeGenerationOptions.Create(...)` convenience factory methods. - Remove `LanguageVersion` and `FileKind` from `RazorCodeGenerationOptions` to avoid the possibility of a `RazorCodeDocument` containing parser options and code generation options that disagree about these values. - Update tests (mostly in tooling) to stop calling `SetFileKind(...)` and pass the value as part of `RazorCodeDocument` creation. > [!NOTE] > `GetFileKind()` and `SetFileKind(...)` are public extension methods but are not used by the RazorSdk, so they should be safe to remove.
2 parents c0bd75d + f6aec9f commit 19342b1

File tree

32 files changed

+208
-154
lines changed

32 files changed

+208
-154
lines changed

src/Compiler/Microsoft.AspNetCore.Razor.Language/test/DefaultRazorProjectEngineIntegrationTest.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ public void Process_WithFileKind_SetsOnCodeDocument()
153153
var codeDocument = projectEngine.Process(RazorSourceDocument.ReadFrom(projectItem), "test", importSources: default, tagHelpers: null);
154154

155155
// Assert
156-
var actual = codeDocument.GetFileKind();
156+
var actual = codeDocument.FileKind;
157157
Assert.Equal("test", actual);
158158
}
159159

@@ -201,7 +201,7 @@ public void Process_SetsInferredFileKindOnCodeDocument_MvcFile()
201201
var codeDocument = projectEngine.Process(projectItem);
202202

203203
// Assert
204-
var actual = codeDocument.GetFileKind();
204+
var actual = codeDocument.FileKind;
205205
Assert.Same(FileKinds.Legacy, actual);
206206
}
207207

@@ -217,7 +217,7 @@ public void Process_SetsInferredFileKindOnCodeDocument_Component()
217217
var codeDocument = projectEngine.Process(projectItem);
218218

219219
// Assert
220-
var actual = codeDocument.GetFileKind();
220+
var actual = codeDocument.FileKind;
221221
Assert.Same(FileKinds.Component, actual);
222222
}
223223

@@ -288,7 +288,7 @@ public void ProcessDesignTime_SetsInferredFileKindOnCodeDocument_MvcFile()
288288
var codeDocument = projectEngine.ProcessDesignTime(projectItem);
289289

290290
// Assert
291-
var actual = codeDocument.GetFileKind();
291+
var actual = codeDocument.FileKind;
292292
Assert.Same(FileKinds.Legacy, actual);
293293
}
294294

@@ -304,7 +304,7 @@ public void ProcessDesignTime_SetsInferredFileKindOnCodeDocument_Component()
304304
var codeDocument = projectEngine.ProcessDesignTime(projectItem);
305305

306306
// Assert
307-
var actual = codeDocument.GetFileKind();
307+
var actual = codeDocument.FileKind;
308308
Assert.Same(FileKinds.Component, actual);
309309
}
310310

src/Compiler/Microsoft.AspNetCore.Razor.Language/test/RazorCodeDocumentExtensionsTest.cs

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -302,10 +302,12 @@ public void TryComputeNamespace_RespectsNamespaceDirective()
302302

303303
var codeDocument = RazorCodeDocument.Create(
304304
source,
305-
parserOptions: RazorParserOptions.Default.WithDirectives(NamespaceDirective.Directive),
305+
parserOptions: RazorParserOptions.Create(RazorLanguageVersion.Latest, FileKinds.Component, builder =>
306+
{
307+
builder.Directives = [NamespaceDirective.Directive];
308+
}),
306309
codeGenerationOptions: RazorCodeGenerationOptions.Default.WithRootNamespace("Hello.World"));
307310

308-
codeDocument.SetFileKind(FileKinds.Component);
309311
codeDocument.SetSyntaxTree(RazorSyntaxTree.Parse(source, codeDocument.ParserOptions));
310312

311313
// Act
@@ -325,10 +327,12 @@ public void TryComputeNamespace_RespectsImportsNamespaceDirective()
325327

326328
var codeDocument = RazorCodeDocument.Create(
327329
source,
328-
parserOptions: RazorParserOptions.Default.WithDirectives(NamespaceDirective.Directive),
330+
parserOptions: RazorParserOptions.Create(RazorLanguageVersion.Latest, FileKinds.Component, builder =>
331+
{
332+
builder.Directives = [NamespaceDirective.Directive];
333+
}),
329334
codeGenerationOptions: RazorCodeGenerationOptions.Default.WithRootNamespace("Hello.World"));
330335

331-
codeDocument.SetFileKind(FileKinds.Component);
332336
codeDocument.SetSyntaxTree(RazorSyntaxTree.Parse(source, codeDocument.ParserOptions));
333337

334338
var importSource = TestRazorSourceDocument.Create(
@@ -356,10 +360,12 @@ public void TryComputeNamespace_RespectsImportsNamespaceDirective_SameFolder()
356360

357361
var codeDocument = RazorCodeDocument.Create(
358362
source,
359-
parserOptions: RazorParserOptions.Default.WithDirectives(NamespaceDirective.Directive),
363+
parserOptions: RazorParserOptions.Create(RazorLanguageVersion.Latest, FileKinds.Component, builder =>
364+
{
365+
builder.Directives = [NamespaceDirective.Directive];
366+
}),
360367
codeGenerationOptions: RazorCodeGenerationOptions.Default.WithRootNamespace("Hello.World"));
361368

362-
codeDocument.SetFileKind(FileKinds.Component);
363369
codeDocument.SetSyntaxTree(RazorSyntaxTree.Parse(source, codeDocument.ParserOptions));
364370

365371
var importSource = TestRazorSourceDocument.Create(
@@ -388,9 +394,11 @@ public void TryComputeNamespace_OverrideImportsNamespaceDirective()
388394

389395
var codeDocument = RazorCodeDocument.Create(
390396
source,
391-
parserOptions: RazorParserOptions.Default.WithDirectives(NamespaceDirective.Directive));
397+
parserOptions: RazorParserOptions.Create(RazorLanguageVersion.Latest, FileKinds.Component, builder =>
398+
{
399+
builder.Directives = [NamespaceDirective.Directive];
400+
}));
392401

393-
codeDocument.SetFileKind(FileKinds.Component);
394402
codeDocument.SetSyntaxTree(RazorSyntaxTree.Parse(source, codeDocument.ParserOptions));
395403

396404
var importSource = TestRazorSourceDocument.Create(

src/Compiler/Microsoft.AspNetCore.Razor.Language/test/RazorProjectEngineBuilderExtensionsTest.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ public void SetCSharpLanguageVersion_ResolvesLatestCSharpLangVersions()
121121
});
122122

123123
var features = projectEngine.Engine.GetFeatures<IConfigureRazorCodeGenerationOptionsFeature>().OrderByAsArray(static x => x.Order);
124-
var builder = new RazorCodeGenerationOptions.Builder(RazorLanguageVersion.Latest, FileKinds.Legacy);
124+
var builder = new RazorCodeGenerationOptions.Builder();
125125

126126
foreach (var feature in features)
127127
{

src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/Components/ComponentDocumentClassifierPass.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public ComponentDocumentClassifierPass(RazorLanguageVersion version)
4747

4848
protected override bool IsMatch(RazorCodeDocument codeDocument, DocumentIntermediateNode documentNode)
4949
{
50-
return FileKinds.IsComponent(codeDocument.GetFileKind());
50+
return FileKinds.IsComponent(codeDocument.FileKind);
5151
}
5252

5353
protected override CodeTarget CreateTarget(RazorCodeDocument codeDocument, RazorCodeGenerationOptions options)
@@ -95,7 +95,7 @@ protected override void OnDocumentStructureCreated(
9595
@class.Modifiers.Add("public");
9696
@class.Modifiers.Add("partial");
9797

98-
if (FileKinds.IsComponentImport(codeDocument.GetFileKind()))
98+
if (FileKinds.IsComponentImport(codeDocument.FileKind))
9999
{
100100
// We don't want component imports to be considered as real component.
101101
// But we still want to generate code for it so we can get diagnostics.

src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/Components/ComponentPageDirectivePass.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ protected override void ExecuteCore(RazorCodeDocument codeDocument, DocumentInte
3838
for (var i = 0; i < directives.Count; i++)
3939
{
4040
var directive = directives[i];
41-
if (FileKinds.IsComponentImport(codeDocument.GetFileKind()) || directive.Node.IsImported())
41+
if (FileKinds.IsComponentImport(codeDocument.FileKind) || directive.Node.IsImported())
4242
{
4343
directive.Node.Diagnostics.Add(ComponentDiagnosticFactory.CreatePageDirective_CannotBeImported(directive.Node.Source.GetValueOrDefault()));
4444
}

src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/DefaultDirectiveSyntaxTreePass.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ internal class DefaultDirectiveSyntaxTreePass : RazorEngineFeatureBase, IRazorSy
1414

1515
public RazorSyntaxTree Execute(RazorCodeDocument codeDocument, RazorSyntaxTree syntaxTree)
1616
{
17-
if (FileKinds.IsComponent(codeDocument.GetFileKind()))
17+
if (FileKinds.IsComponent(codeDocument.FileKind))
1818
{
1919
// Nothing to do here.
2020
return syntaxTree;

src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/DefaultRazorIntermediateNodeLoweringPhase.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ protected override void ExecuteCore(RazorCodeDocument codeDocument, Cancellation
4343
// We need to decide up front if this document is a "component" file. This will affect how
4444
// lowering behaves.
4545
LoweringVisitor visitor;
46-
if (FileKinds.IsComponentImport(codeDocument.GetFileKind()) &&
46+
if (FileKinds.IsComponentImport(codeDocument.FileKind) &&
4747
syntaxTree.Options.AllowComponentFileKind)
4848
{
4949
visitor = new ComponentImportFileKindVisitor(documentNode, builder, syntaxTree.Options)
@@ -53,7 +53,7 @@ protected override void ExecuteCore(RazorCodeDocument codeDocument, Cancellation
5353

5454
visitor.Visit(syntaxTree.Root);
5555
}
56-
else if (FileKinds.IsComponent(codeDocument.GetFileKind()) &&
56+
else if (FileKinds.IsComponent(codeDocument.FileKind) &&
5757
syntaxTree.Options.AllowComponentFileKind)
5858
{
5959
visitor = new ComponentFileKindVisitor(documentNode, builder, syntaxTree.Options)

src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/DefaultRazorTagHelperContextDiscoveryPhase_Pooling.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ internal static PooledDirectiveVisitor GetPooledVisitor(
5252
out DirectiveVisitor visitor)
5353
{
5454
var useComponentDirectiveVisitor = codeDocument.ParserOptions.AllowComponentFileKind &&
55-
FileKinds.IsComponent(codeDocument.GetFileKind());
55+
FileKinds.IsComponent(codeDocument.FileKind);
5656

5757
if (useComponentDirectiveVisitor)
5858
{

src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/Extensions/FunctionsDirectivePass.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ protected override void ExecuteCore(RazorCodeDocument codeDocument, DocumentInte
2323
var directiveNodes = new List<IntermediateNodeReference>();
2424
directiveNodes.AddRange(documentNode.FindDirectiveReferences(FunctionsDirective.Directive));
2525

26-
if (FileKinds.IsComponent(codeDocument.GetFileKind()))
26+
if (FileKinds.IsComponent(codeDocument.FileKind))
2727
{
2828
directiveNodes.AddRange(documentNode.FindDirectiveReferences(ComponentCodeDirective.Directive));
2929
}

src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/RazorCodeDocument.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ public sealed class RazorCodeDocument
1515
public RazorParserOptions ParserOptions { get; }
1616
public RazorCodeGenerationOptions CodeGenerationOptions { get; }
1717

18+
public string FileKind => ParserOptions.FileKind;
19+
1820
private RazorCodeDocument(
1921
RazorSourceDocument source,
2022
ImmutableArray<RazorSourceDocument> imports,

0 commit comments

Comments
 (0)