Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix vscode fuse feature flag #10169

Merged
merged 13 commits into from
Mar 29, 2024
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,7 @@ private ClassDeclarationIntermediateNode FindClassNode(IntermediateNode node)

private RazorEngine CreateEngine()
{
var configuration = new RazorConfiguration(RazorLanguageVersion.Version_1_1, "test", Extensions: []);
var configuration = new RazorConfiguration(RazorLanguageVersion.Version_1_1, "test", Extensions: [], RazorLanguageFeatureFlags.Default);
return RazorProjectEngine.Create(configuration, RazorProjectFileSystem.Empty, b =>
{
// Notice we're not registering the InjectDirective.Pass here so we can run it on demand.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ public class CodeGenerationIntegrationTest : IntegrationTestBase
public CodeGenerationIntegrationTest()
: base(layer: TestProject.Layer.Compiler, generateBaselines: null, projectDirectoryHint: "Microsoft.AspNetCore.Mvc.Razor.Extensions.Version1_X")
{
Configuration = new(RazorLanguageVersion.Version_1_1, "MVC-1.1", Extensions: []);
Configuration = new(RazorLanguageVersion.Version_1_1, "MVC-1.1", Extensions: [], RazorLanguageFeatureFlags.Default);
}

protected override CSharpCompilation BaseCompilation => DefaultBaseCompilation;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ public class CodeGenerationIntegrationTest : IntegrationTestBase
public CodeGenerationIntegrationTest()
: base(layer: TestProject.Layer.Compiler, generateBaselines: null, projectDirectoryHint: "Microsoft.AspNetCore.Mvc.Razor.Extensions.Version2_X")
{
Configuration = new(RazorLanguageVersion.Version_2_0, "MVC-2.1", Extensions: []);
Configuration = new(RazorLanguageVersion.Version_2_0, "MVC-2.1", Extensions: [], RazorLanguageFeatureFlags.Default);
}

protected override CSharpCompilation BaseCompilation => DefaultBaseCompilation;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public class InstrumentationPassIntegrationTest : IntegrationTestBase
public InstrumentationPassIntegrationTest()
: base(layer: TestProject.Layer.Compiler, generateBaselines: null, projectDirectoryHint: "Microsoft.AspNetCore.Mvc.Razor.Extensions.Version2_X")
{
Configuration = new(RazorLanguageVersion.Version_2_0, "MVC-2.1", Extensions: []);
Configuration = new(RazorLanguageVersion.Version_2_0, "MVC-2.1", Extensions: [], RazorLanguageFeatureFlags.Default);
}

protected override CSharpCompilation BaseCompilation => DefaultBaseCompilation;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ public class CodeGenerationIntegrationTest : IntegrationTestBase
public CodeGenerationIntegrationTest()
: base(layer: TestProject.Layer.Compiler, generateBaselines: null, projectDirectoryHint: "Microsoft.AspNetCore.Mvc.Razor.Extensions")
{
Configuration = new(RazorLanguageVersion.Latest, "MVC-3.0", Extensions: []);
Configuration = new(RazorLanguageVersion.Latest, "MVC-3.0", Extensions: [], RazorLanguageFeatureFlags.Default);
}

protected override CSharpCompilation BaseCompilation { get; set; } = DefaultBaseCompilation;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -994,7 +994,8 @@ public void IncludesMinimizedAttributeValueParameterBeforeLanguageVersion5()
_configuration = new(
RazorLanguageVersion.Version_3_0,
base.Configuration.ConfigurationName,
base.Configuration.Extensions);
base.Configuration.Extensions,
base.Configuration.RazorLanguageFeatureFlags);

// Act
var generated = CompileToCSharp(@"
Expand Down Expand Up @@ -3930,6 +3931,7 @@ public void BindToComponent_WithGetSet_ProducesErrorOnOlderLanguageVersions()
RazorLanguageVersion.Version_6_0,
"unnamed",
Extensions: [],
RazorLanguageFeatureFlags.Default,
UseConsolidatedMvcViews: false);

// Arrange
Expand Down Expand Up @@ -9178,10 +9180,7 @@ @preservewhitespace true
public void Legacy_3_1_LeadingWhiteSpace_WithDirective()
{
// Arrange/Act
_configuration = new(
RazorLanguageVersion.Version_3_0,
base.Configuration.ConfigurationName,
base.Configuration.Extensions);
_configuration = base.Configuration with { LanguageVersion = RazorLanguageVersion.Version_3_0 };

var generated = CompileToCSharp(@"

Expand All @@ -9199,10 +9198,7 @@ @using System
public void Legacy_3_1_LeadingWhiteSpace_WithCSharpExpression()
{
// Arrange/Act
_configuration = new(
RazorLanguageVersion.Version_3_0,
base.Configuration.ConfigurationName,
base.Configuration.Extensions);
_configuration = base.Configuration with { LanguageVersion = RazorLanguageVersion.Version_3_0 };

var generated = CompileToCSharp(@"

Expand All @@ -9220,10 +9216,7 @@ public void Legacy_3_1_LeadingWhiteSpace_WithCSharpExpression()
public void Legacy_3_1_LeadingWhiteSpace_WithComponent()
{
// Arrange
_configuration = new(
RazorLanguageVersion.Version_3_0,
base.Configuration.ConfigurationName,
base.Configuration.Extensions);
_configuration = base.Configuration with { LanguageVersion = RazorLanguageVersion.Version_3_0 };

AdditionalSyntaxTrees.Add(Parse(@"
using Microsoft.AspNetCore.Components;
Expand Down Expand Up @@ -9256,10 +9249,7 @@ public class SomeOtherComponent : ComponentBase
public void Legacy_3_1_TrailingWhiteSpace_WithDirective()
{
// Arrange/Act
_configuration = new(
RazorLanguageVersion.Version_3_0,
base.Configuration.ConfigurationName,
base.Configuration.Extensions);
_configuration = base.Configuration with { LanguageVersion = RazorLanguageVersion.Version_3_0 };

var generated = CompileToCSharp(@"
<h1>Hello</h1>
Expand All @@ -9278,10 +9268,7 @@ public void Legacy_3_1_TrailingWhiteSpace_WithDirective()
public void Legacy_3_1_TrailingWhiteSpace_WithCSharpExpression()
{
// Arrange/Act
_configuration = new(
RazorLanguageVersion.Version_3_0,
base.Configuration.ConfigurationName,
base.Configuration.Extensions);
_configuration = base.Configuration with { LanguageVersion = RazorLanguageVersion.Version_3_0 };

var generated = CompileToCSharp(@"
<h1>Hello</h1>
Expand All @@ -9300,10 +9287,7 @@ public void Legacy_3_1_TrailingWhiteSpace_WithCSharpExpression()
public void Legacy_3_1_TrailingWhiteSpace_WithComponent()
{
// Arrange
_configuration = new(
RazorLanguageVersion.Version_3_0,
base.Configuration.ConfigurationName,
base.Configuration.Extensions);
_configuration = base.Configuration with { LanguageVersion = RazorLanguageVersion.Version_3_0 };

AdditionalSyntaxTrees.Add(Parse(@"
using Microsoft.AspNetCore.Components;
Expand Down Expand Up @@ -9334,10 +9318,7 @@ public class SomeOtherComponent : ComponentBase
public void Legacy_3_1_Whitespace_BetweenElementAndFunctions()
{
// Arrange
_configuration = new(
RazorLanguageVersion.Version_3_0,
base.Configuration.ConfigurationName,
base.Configuration.Extensions);
_configuration = base.Configuration with { LanguageVersion = RazorLanguageVersion.Version_3_0 };

// Act
var generated = CompileToCSharp(@"
Expand All @@ -9357,10 +9338,7 @@ public void Legacy_3_1_Whitespace_BetweenElementAndFunctions()
public void Legacy_3_1_WhiteSpace_InsideAttribute_InMarkupBlock()
{
// Arrange
_configuration = new(
RazorLanguageVersion.Version_3_0,
base.Configuration.ConfigurationName,
base.Configuration.Extensions);
_configuration = base.Configuration with { LanguageVersion = RazorLanguageVersion.Version_3_0 };

// Act
var generated = CompileToCSharp(@"<div class=""first second"">Hello</div>");
Expand All @@ -9375,10 +9353,7 @@ public void Legacy_3_1_WhiteSpace_InsideAttribute_InMarkupBlock()
public void Legacy_3_1_WhiteSpace_InMarkupInFunctionsBlock()
{
// Arrange
_configuration = new(
RazorLanguageVersion.Version_3_0,
base.Configuration.ConfigurationName,
base.Configuration.Extensions);
_configuration = base.Configuration with { LanguageVersion = RazorLanguageVersion.Version_3_0 };

// Act
var generated = CompileToCSharp(@"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,22 +11,22 @@ public sealed record class RazorConfiguration(
RazorLanguageVersion LanguageVersion,
string ConfigurationName,
ImmutableArray<RazorExtension> Extensions,
bool UseConsolidatedMvcViews = false,
bool ForceRuntimeCodeGeneration = false)
RazorLanguageFeatureFlags RazorLanguageFeatureFlags,
ryzngard marked this conversation as resolved.
Show resolved Hide resolved
bool UseConsolidatedMvcViews = false)
{
public static readonly RazorConfiguration Default = new(
RazorLanguageVersion.Latest,
ConfigurationName: "unnamed",
Extensions: [],
UseConsolidatedMvcViews: false,
ForceRuntimeCodeGeneration: false);
RazorLanguageFeatureFlags.Default,
UseConsolidatedMvcViews: false);

public bool Equals(RazorConfiguration? other)
=> other is not null &&
LanguageVersion == other.LanguageVersion &&
ConfigurationName == other.ConfigurationName &&
RazorLanguageFeatureFlags == other.RazorLanguageFeatureFlags &&
UseConsolidatedMvcViews == other.UseConsolidatedMvcViews &&
ForceRuntimeCodeGeneration == other.ForceRuntimeCodeGeneration &&
Extensions.SequenceEqual(other.Extensions);

public override int GetHashCode()
Expand All @@ -36,7 +36,7 @@ public override int GetHashCode()
hash.Add(ConfigurationName);
hash.Add(Extensions);
hash.Add(UseConsolidatedMvcViews);
hash.Add(ForceRuntimeCodeGeneration);
hash.Add(RazorLanguageFeatureFlags);
return hash;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

namespace Microsoft.AspNetCore.Razor.Language;

public sealed record class RazorLanguageFeatureFlags(
bool ForceRuntimeCodeGeneration)
{
public static RazorLanguageFeatureFlags Default = new(
ryzngard marked this conversation as resolved.
Show resolved Hide resolved
ForceRuntimeCodeGeneration: false);
}
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ public RazorCodeDocument ProcessDesignTime(RazorProjectItem projectItem)
throw new ArgumentNullException(nameof(projectItem));
}

var codeDocument = Configuration.ForceRuntimeCodeGeneration
var codeDocument = Configuration.RazorLanguageFeatureFlags.ForceRuntimeCodeGeneration
? CreateCodeDocumentCore(projectItem)
: CreateCodeDocumentDesignTimeCore(projectItem);
ProcessCore(codeDocument);
Expand All @@ -127,7 +127,7 @@ public RazorCodeDocument ProcessDesignTime(
throw new ArgumentNullException(nameof(source));
}

var codeDocument = Configuration.ForceRuntimeCodeGeneration
var codeDocument = Configuration.RazorLanguageFeatureFlags.ForceRuntimeCodeGeneration
? CreateCodeDocumentCore(source, fileKind, importSources, tagHelpers, configureParser: null, configureCodeGeneration: null)
: CreateCodeDocumentDesignTimeCore(source, fileKind, importSources, tagHelpers, configureParser: null, configureCodeGeneration: null);
ProcessCore(codeDocument);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ public class RazorPageDocumentClassifierPass : DocumentClassifierPassBase
public static readonly string RouteTemplateKey = "RouteTemplate";

private static readonly RazorProjectEngine LeadingDirectiveParsingEngine = RazorProjectEngine.Create(
new(RazorLanguageVersion.Version_2_1, "leading-directive-parser", Extensions: []),
new(RazorLanguageVersion.Version_2_1, "leading-directive-parser", Extensions: [], RazorLanguageFeatureFlags.Default),
RazorProjectFileSystem.Create("/"),
builder =>
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ public RazorPageDocumentClassifierPass(bool useConsolidatedMvcViews)
}

private static readonly RazorProjectEngine LeadingDirectiveParsingEngine = RazorProjectEngine.Create(
new(RazorLanguageVersion.Version_3_0, "leading-directive-parser", []),
new(RazorLanguageVersion.Version_3_0, "leading-directive-parser", [], RazorLanguageFeatureFlags.Default),
RazorProjectFileSystem.Create("/"),
builder =>
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ public partial class RazorSourceGenerator
razorLanguageVersion = RazorLanguageVersion.Latest;
}

var razorConfiguration = new RazorConfiguration(razorLanguageVersion, configurationName ?? "default", Extensions: [], UseConsolidatedMvcViews: true);
var razorConfiguration = new RazorConfiguration(razorLanguageVersion, configurationName ?? "default", Extensions: [], RazorLanguageFeatureFlags.Default, UseConsolidatedMvcViews: true);

var razorSourceGenerationOptions = new RazorSourceGenerationOptions()
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ private static RazorConfiguration ComputeRazorConfigurationOptions(AnalyzerConfi
razorLanguageVersion = RazorLanguageVersion.Latest;
}

var razorConfiguration = new RazorConfiguration(razorLanguageVersion, configurationName, Extensions: [], UseConsolidatedMvcViews: true);
var razorConfiguration = new RazorConfiguration(razorLanguageVersion, configurationName, Extensions: [], RazorLanguageFeatureFlags.Default, UseConsolidatedMvcViews: true);

defaultNamespace = rootNamespace ?? "ASP"; // TODO: Source generator does this. Do we want it?

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
using Microsoft.AspNetCore.Razor.ProjectSystem;
using Microsoft.AspNetCore.Razor.Utilities;
using Microsoft.CodeAnalysis.Razor;
using Microsoft.CodeAnalysis.Razor.Workspaces;

namespace Microsoft.AspNetCore.Razor.LanguageServer;

Expand All @@ -32,7 +33,7 @@ public ProjectConfigurationFileChangeEventArgs(
_gate = new object();
}

public bool TryDeserialize([NotNullWhen(true)] out RazorProjectInfo? projectInfo)
public bool TryDeserialize(LanguageServerFeatureOptions languageServerFeatureOptions, [NotNullWhen(true)] out RazorProjectInfo? projectInfo)
ryzngard marked this conversation as resolved.
Show resolved Hide resolved
{
if (Kind == RazorFileChangeKind.Removed)
{
Expand All @@ -59,6 +60,15 @@ public bool TryDeserialize([NotNullWhen(true)] out RazorProjectInfo? projectInfo
var normalizedDetectedFilePath = FilePathNormalizer.Normalize(ConfigurationFilePath);
if (string.Equals(normalizedSerializedFilePath, normalizedDetectedFilePath, FilePathComparison.Instance))
{
// Modify the feature flags on the configuration before storing
deserializedProjectInfo = deserializedProjectInfo with
{
Configuration = deserializedProjectInfo.Configuration with
{
RazorLanguageFeatureFlags = new(ForceRuntimeCodeGeneration: languageServerFeatureOptions.ForceRuntimeCodeGeneration)
}
};

_projectInfo = deserializedProjectInfo;
}
else
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
using Microsoft.CodeAnalysis.Razor;
using Microsoft.CodeAnalysis.Razor.Logging;
using Microsoft.CodeAnalysis.Razor.ProjectSystem;
using Microsoft.CodeAnalysis.Razor.Workspaces;
using Microsoft.Extensions.Logging;

namespace Microsoft.AspNetCore.Razor.LanguageServer;
Expand All @@ -22,17 +23,20 @@ internal class ProjectConfigurationStateSynchronizer : IProjectConfigurationFile
{
private readonly ProjectSnapshotManagerDispatcher _projectSnapshotManagerDispatcher;
private readonly IRazorProjectService _projectService;
private readonly LanguageServerFeatureOptions _languageServerFeatureOptions;
private readonly ILogger _logger;
private readonly Dictionary<string, ProjectKey> _configurationToProjectMap;
internal readonly Dictionary<ProjectKey, DelayedProjectInfo> ProjectInfoMap;

public ProjectConfigurationStateSynchronizer(
ProjectSnapshotManagerDispatcher projectSnapshotManagerDispatcher,
IRazorProjectService projectService,
IRazorLoggerFactory loggerFactory)
IRazorLoggerFactory loggerFactory,
LanguageServerFeatureOptions languageServerFeatureOptions)
{
_projectSnapshotManagerDispatcher = projectSnapshotManagerDispatcher;
_projectService = projectService;
_languageServerFeatureOptions = languageServerFeatureOptions;
_logger = loggerFactory.CreateLogger<ProjectConfigurationStateSynchronizer>();
_configurationToProjectMap = new Dictionary<string, ProjectKey>(FilePathComparer.Instance);
ProjectInfoMap = new Dictionary<ProjectKey, DelayedProjectInfo>();
Expand All @@ -54,7 +58,7 @@ public void ProjectConfigurationFileChanged(ProjectConfigurationFileChangeEventA
case RazorFileChangeKind.Changed:
{
var configurationFilePath = FilePathNormalizer.Normalize(args.ConfigurationFilePath);
if (!args.TryDeserialize(out var projectInfo))
if (!args.TryDeserialize(_languageServerFeatureOptions, out var projectInfo))
{
if (!_configurationToProjectMap.TryGetValue(configurationFilePath, out var lastAssociatedProjectKey))
{
Expand Down Expand Up @@ -90,7 +94,7 @@ public void ProjectConfigurationFileChanged(ProjectConfigurationFileChangeEventA
case RazorFileChangeKind.Added:
{
var configurationFilePath = FilePathNormalizer.Normalize(args.ConfigurationFilePath);
if (!args.TryDeserialize(out var projectInfo))
if (!args.TryDeserialize(_languageServerFeatureOptions, out var projectInfo))
{
// Given that this is the first time we're seeing this configuration file if we can't deserialize it
// then we have to noop.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,6 @@ internal static class UnsupportedRazorConfiguration
public static readonly RazorConfiguration Instance = new(
RazorLanguageVersion.Version_1_0,
"UnsupportedRazor",
[new("UnsupportedRazorExtension")]);
[new("UnsupportedRazorExtension")],
RazorLanguageFeatureFlags.Default);
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,20 +12,20 @@

namespace Microsoft.AspNetCore.Razor.ProjectSystem;

internal sealed class RazorProjectInfo
internal sealed record class RazorProjectInfo
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does making this a record help in some way? Note that the equality of this record won't be correct because it will need to use SequenceEquals for the Documents property.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It made it cleaner to add a with for modifying readonly properties than having to write out new(...)

{
private static readonly MessagePackSerializerOptions s_options = MessagePackSerializerOptions.Standard
.WithResolver(CompositeResolver.Create(
RazorProjectInfoResolver.Instance,
StandardResolver.Instance));

public string SerializedFilePath { get; }
public string FilePath { get; }
public RazorConfiguration Configuration { get; }
public string? RootNamespace { get; }
public string DisplayName { get; }
public ProjectWorkspaceState ProjectWorkspaceState { get; }
public ImmutableArray<DocumentSnapshotHandle> Documents { get; }
public string SerializedFilePath { get; init; }
public string FilePath { get; init; }
public RazorConfiguration Configuration { get; init; }
public string? RootNamespace { get; init; }
public string DisplayName { get; init; }
public ProjectWorkspaceState ProjectWorkspaceState { get; init; }
public ImmutableArray<DocumentSnapshotHandle> Documents { get; init; }

public RazorProjectInfo(
string serializedFilePath,
Expand Down
Loading
Loading