diff --git a/build/artifacts.props b/build/artifacts.props
index c9ce534c4f0b..07df0a68e1c0 100644
--- a/build/artifacts.props
+++ b/build/artifacts.props
@@ -148,9 +148,7 @@
-
-
@@ -177,9 +175,6 @@
-
-
-
diff --git a/src/Razor/NuGetPackageVerifier.json b/src/Razor/NuGetPackageVerifier.json
index aeabac8d86a0..a6b622a7e434 100644
--- a/src/Razor/NuGetPackageVerifier.json
+++ b/src/Razor/NuGetPackageVerifier.json
@@ -5,11 +5,7 @@
],
"packages": {
"Microsoft.AspNetCore.Razor.TagHelpers.Testing.Sources": {},
- "RazorPageGenerator": {},
- "Microsoft.CodeAnalysis.Remote.Razor": {},
- "Microsoft.VisualStudio.Editor.Razor": {},
- "Microsoft.VisualStudio.LanguageServices.Razor": {},
- "Microsoft.VisualStudio.Mac.LanguageServices.Razor": {}
+ "RazorPageGenerator": {}
}
},
"Default": { // Rules to run for packages not listed in any other set.
diff --git a/src/Razor/Razor.sln b/src/Razor/Razor.sln
index 6ec8cff6c0e6..7fa54f113ffc 100644
--- a/src/Razor/Razor.sln
+++ b/src/Razor/Razor.sln
@@ -31,24 +31,12 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Razor.
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Razor.Runtime.Test", "test\Microsoft.AspNetCore.Razor.Runtime.Test\Microsoft.AspNetCore.Razor.Runtime.Test.csproj", "{277AB67E-9C8D-4799-A18C-C628E70A8664}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.CodeAnalysis.Razor.Workspaces", "src\Microsoft.CodeAnalysis.Razor.Workspaces\Microsoft.CodeAnalysis.Razor.Workspaces.csproj", "{0F265874-C592-448B-BC4F-3430AB03E0DC}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.CodeAnalysis.Remote.Razor", "src\Microsoft.CodeAnalysis.Remote.Razor\Microsoft.CodeAnalysis.Remote.Razor.csproj", "{4EAD959D-73B2-4FB2-B46F-16CEB1EF49D4}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tooling", "tooling", "{C0CC1E1F-1559-44DE-93A8-63259CEA2AAB}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.VisualStudio.RazorExtension", "tooling\Microsoft.VisualStudio.RazorExtension\Microsoft.VisualStudio.RazorExtension.csproj", "{D66B45B5-CBFD-4947-81F1-F30AB80EA992}"
-EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.CodeAnalysis.Razor", "src\Microsoft.CodeAnalysis.Razor\Microsoft.CodeAnalysis.Razor.csproj", "{42403DAF-F0BC-4F3A-B7F2-46D7013345D8}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.CodeAnalysis.Razor.Test", "test\Microsoft.CodeAnalysis.Razor.Test\Microsoft.CodeAnalysis.Razor.Test.csproj", "{7A8A1664-37CE-4376-81CA-1862CF5F91D9}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.VisualStudio.LanguageServices.Razor", "src\Microsoft.VisualStudio.LanguageServices.Razor\Microsoft.VisualStudio.LanguageServices.Razor.csproj", "{E5D92DB7-5CBF-410A-9685-FF76F71EC96F}"
-EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RazorPageGenerator.Test", "test\RazorPageGenerator.Test\RazorPageGenerator.Test.csproj", "{96EB1BD4-B8E0-4F52-A068-BBCACA7E3F63}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.VisualStudio.LanguageServices.Razor.Test", "test\Microsoft.VisualStudio.LanguageServices.Razor.Test\Microsoft.VisualStudio.LanguageServices.Razor.Test.csproj", "{37E61BDB-658E-4F44-A499-D64CC6D35485}"
-EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Razor.Extensions", "src\Microsoft.AspNetCore.Mvc.Razor.Extensions\Microsoft.AspNetCore.Mvc.Razor.Extensions.csproj", "{995F2FEB-65FA-4399-B1C0-16E0B3FBDB15}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Razor.Extensions.Test", "test\Microsoft.AspNetCore.Mvc.Razor.Extensions.Test\Microsoft.AspNetCore.Mvc.Razor.Extensions.Test.csproj", "{7CFD5646-A757-4498-9E01-9C8528ED60AE}"
@@ -57,26 +45,12 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Razor.
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Razor.Test.MvcShim", "test\Microsoft.AspNetCore.Razor.Test.MvcShim\Microsoft.AspNetCore.Razor.Test.MvcShim.csproj", "{8F165A3F-A18C-4649-AA08-C0E1BA5F5C90}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.CodeAnalysis.Razor.Workspaces.Test", "test\Microsoft.CodeAnalysis.Razor.Workspaces.Test\Microsoft.CodeAnalysis.Razor.Workspaces.Test.csproj", "{C61AAE12-5007-4205-A220-68F354A7F235}"
-EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Razor.Extensions.Version1_X", "src\Microsoft.AspNetCore.Mvc.Razor.Extensions.Version1_X\Microsoft.AspNetCore.Mvc.Razor.Extensions.Version1_X.csproj", "{F1538809-7347-45D2-A7AC-C1D89CF0BBD4}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Razor.Extensions.Version1_X.Test", "test\Microsoft.AspNetCore.Mvc.Razor.Extensions.Version1_X.Test\Microsoft.AspNetCore.Mvc.Razor.Extensions.Version1_X.Test.csproj", "{296D4516-0323-4D28-955D-B0324E4F10BE}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Razor.Test.MvcShim.Version1_X", "test\Microsoft.AspNetCore.Razor.Test.MvcShim.Version1_X\Microsoft.AspNetCore.Razor.Test.MvcShim.Version1_X.csproj", "{AC5CA24B-B81E-4B20-B193-2E3983B1896C}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.VisualStudio.Editor.Razor", "src\Microsoft.VisualStudio.Editor.Razor\Microsoft.VisualStudio.Editor.Razor.csproj", "{0BCDE75A-A438-46C7-95E9-391F029D07C5}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.VisualStudio.Editor.Razor.Test", "test\Microsoft.VisualStudio.Editor.Razor.Test\Microsoft.VisualStudio.Editor.Razor.Test.csproj", "{AA888DB9-340E-4E06-A2A4-25BFEE1AC2B7}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.VisualStudio.Editor.Razor.Test.Common", "test\Microsoft.VisualStudio.Editor.Razor.Test.Common\Microsoft.VisualStudio.Editor.Razor.Test.Common.csproj", "{FC684D4F-D23C-407C-9C68-E10EF3B38560}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.VisualStudio.Mac.RazorAddin", "tooling\Microsoft.VisualStudio.Mac.RazorAddin\Microsoft.VisualStudio.Mac.RazorAddin.csproj", "{FAF9986F-E086-4513-9D52-F7BF5FFCF31D}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.VisualStudio.Mac.LanguageServices.Razor", "src\Microsoft.VisualStudio.Mac.LanguageServices.Razor\Microsoft.VisualStudio.Mac.LanguageServices.Razor.csproj", "{95B18DEE-8B45-4CF0-B9F8-CCBAF3B5251A}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.VisualStudio.Mac.LanguageServices.Razor.Test", "test\Microsoft.VisualStudio.Mac.LanguageServices.Razor.Test\Microsoft.VisualStudio.Mac.LanguageServices.Razor.Test.csproj", "{B8A3E4CA-D54A-441F-A3BF-E00F060CA042}"
-EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Razor.Design", "src\Microsoft.AspNetCore.Razor.Design\Microsoft.AspNetCore.Razor.Design.csproj", "{5257B25D-330A-4DCF-ACED-B4709CFBF916}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Razor.Design.Test", "test\Microsoft.AspNetCore.Razor.Design.Test\Microsoft.AspNetCore.Razor.Design.Test.csproj", "{1D90F276-E1CA-4FDF-A173-EB889E7D3150}"
@@ -85,12 +59,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Razor.
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Razor.Test", "test\Microsoft.AspNetCore.Razor.Test\Microsoft.AspNetCore.Razor.Test.csproj", "{323553F0-14AB-4FBD-9CF0-1CC0BE8056F8}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Razor.Performance", "benchmarks\Microsoft.AspNetCore.Razor.Performance\Microsoft.AspNetCore.Razor.Performance.csproj", "{6205467F-E381-4C42-AEEC-763BD62B3D5E}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "benchmarks", "benchmarks", "{C2C98051-0F39-47F2-80B6-E72B29159F2C}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.CodeAnalysis.Razor.Workspaces.Test.Common", "test\Microsoft.CodeAnalysis.Razor.Workspaces.Test.Common\Microsoft.CodeAnalysis.Razor.Workspaces.Test.Common.csproj", "{933101DA-C4CC-401A-AA01-2784E1025B7F}"
-EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Razor.Tools", "src\Microsoft.AspNetCore.Razor.Tools\Microsoft.AspNetCore.Razor.Tools.csproj", "{3E7F2D49-3B45-45A8-9893-F73EC1EEBAAB}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.NET.Sdk.Razor", "src\Microsoft.NET.Sdk.Razor\Microsoft.NET.Sdk.Razor.csproj", "{7D9ECCEE-71D1-4A42-ABEE-876AFA1B4FC9}"
@@ -155,28 +123,6 @@ Global
{277AB67E-9C8D-4799-A18C-C628E70A8664}.Release|Any CPU.Build.0 = Release|Any CPU
{277AB67E-9C8D-4799-A18C-C628E70A8664}.ReleaseNoVSIX|Any CPU.ActiveCfg = Release|Any CPU
{277AB67E-9C8D-4799-A18C-C628E70A8664}.ReleaseNoVSIX|Any CPU.Build.0 = Release|Any CPU
- {0F265874-C592-448B-BC4F-3430AB03E0DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {0F265874-C592-448B-BC4F-3430AB03E0DC}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {0F265874-C592-448B-BC4F-3430AB03E0DC}.DebugNoVSIX|Any CPU.ActiveCfg = Debug|Any CPU
- {0F265874-C592-448B-BC4F-3430AB03E0DC}.DebugNoVSIX|Any CPU.Build.0 = Debug|Any CPU
- {0F265874-C592-448B-BC4F-3430AB03E0DC}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {0F265874-C592-448B-BC4F-3430AB03E0DC}.Release|Any CPU.Build.0 = Release|Any CPU
- {0F265874-C592-448B-BC4F-3430AB03E0DC}.ReleaseNoVSIX|Any CPU.ActiveCfg = Release|Any CPU
- {0F265874-C592-448B-BC4F-3430AB03E0DC}.ReleaseNoVSIX|Any CPU.Build.0 = Release|Any CPU
- {4EAD959D-73B2-4FB2-B46F-16CEB1EF49D4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {4EAD959D-73B2-4FB2-B46F-16CEB1EF49D4}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {4EAD959D-73B2-4FB2-B46F-16CEB1EF49D4}.DebugNoVSIX|Any CPU.ActiveCfg = Debug|Any CPU
- {4EAD959D-73B2-4FB2-B46F-16CEB1EF49D4}.DebugNoVSIX|Any CPU.Build.0 = Debug|Any CPU
- {4EAD959D-73B2-4FB2-B46F-16CEB1EF49D4}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {4EAD959D-73B2-4FB2-B46F-16CEB1EF49D4}.Release|Any CPU.Build.0 = Release|Any CPU
- {4EAD959D-73B2-4FB2-B46F-16CEB1EF49D4}.ReleaseNoVSIX|Any CPU.ActiveCfg = Release|Any CPU
- {4EAD959D-73B2-4FB2-B46F-16CEB1EF49D4}.ReleaseNoVSIX|Any CPU.Build.0 = Release|Any CPU
- {D66B45B5-CBFD-4947-81F1-F30AB80EA992}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {D66B45B5-CBFD-4947-81F1-F30AB80EA992}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {D66B45B5-CBFD-4947-81F1-F30AB80EA992}.DebugNoVSIX|Any CPU.ActiveCfg = Debug|Any CPU
- {D66B45B5-CBFD-4947-81F1-F30AB80EA992}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {D66B45B5-CBFD-4947-81F1-F30AB80EA992}.Release|Any CPU.Build.0 = Release|Any CPU
- {D66B45B5-CBFD-4947-81F1-F30AB80EA992}.ReleaseNoVSIX|Any CPU.ActiveCfg = Release|Any CPU
{42403DAF-F0BC-4F3A-B7F2-46D7013345D8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{42403DAF-F0BC-4F3A-B7F2-46D7013345D8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{42403DAF-F0BC-4F3A-B7F2-46D7013345D8}.DebugNoVSIX|Any CPU.ActiveCfg = Debug|Any CPU
@@ -193,14 +139,6 @@ Global
{7A8A1664-37CE-4376-81CA-1862CF5F91D9}.Release|Any CPU.Build.0 = Release|Any CPU
{7A8A1664-37CE-4376-81CA-1862CF5F91D9}.ReleaseNoVSIX|Any CPU.ActiveCfg = Release|Any CPU
{7A8A1664-37CE-4376-81CA-1862CF5F91D9}.ReleaseNoVSIX|Any CPU.Build.0 = Release|Any CPU
- {E5D92DB7-5CBF-410A-9685-FF76F71EC96F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {E5D92DB7-5CBF-410A-9685-FF76F71EC96F}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {E5D92DB7-5CBF-410A-9685-FF76F71EC96F}.DebugNoVSIX|Any CPU.ActiveCfg = Debug|Any CPU
- {E5D92DB7-5CBF-410A-9685-FF76F71EC96F}.DebugNoVSIX|Any CPU.Build.0 = Debug|Any CPU
- {E5D92DB7-5CBF-410A-9685-FF76F71EC96F}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {E5D92DB7-5CBF-410A-9685-FF76F71EC96F}.Release|Any CPU.Build.0 = Release|Any CPU
- {E5D92DB7-5CBF-410A-9685-FF76F71EC96F}.ReleaseNoVSIX|Any CPU.ActiveCfg = Release|Any CPU
- {E5D92DB7-5CBF-410A-9685-FF76F71EC96F}.ReleaseNoVSIX|Any CPU.Build.0 = Release|Any CPU
{96EB1BD4-B8E0-4F52-A068-BBCACA7E3F63}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{96EB1BD4-B8E0-4F52-A068-BBCACA7E3F63}.Debug|Any CPU.Build.0 = Debug|Any CPU
{96EB1BD4-B8E0-4F52-A068-BBCACA7E3F63}.DebugNoVSIX|Any CPU.ActiveCfg = Debug|Any CPU
@@ -209,14 +147,6 @@ Global
{96EB1BD4-B8E0-4F52-A068-BBCACA7E3F63}.Release|Any CPU.Build.0 = Release|Any CPU
{96EB1BD4-B8E0-4F52-A068-BBCACA7E3F63}.ReleaseNoVSIX|Any CPU.ActiveCfg = Release|Any CPU
{96EB1BD4-B8E0-4F52-A068-BBCACA7E3F63}.ReleaseNoVSIX|Any CPU.Build.0 = Release|Any CPU
- {37E61BDB-658E-4F44-A499-D64CC6D35485}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {37E61BDB-658E-4F44-A499-D64CC6D35485}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {37E61BDB-658E-4F44-A499-D64CC6D35485}.DebugNoVSIX|Any CPU.ActiveCfg = Debug|Any CPU
- {37E61BDB-658E-4F44-A499-D64CC6D35485}.DebugNoVSIX|Any CPU.Build.0 = Debug|Any CPU
- {37E61BDB-658E-4F44-A499-D64CC6D35485}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {37E61BDB-658E-4F44-A499-D64CC6D35485}.Release|Any CPU.Build.0 = Release|Any CPU
- {37E61BDB-658E-4F44-A499-D64CC6D35485}.ReleaseNoVSIX|Any CPU.ActiveCfg = Release|Any CPU
- {37E61BDB-658E-4F44-A499-D64CC6D35485}.ReleaseNoVSIX|Any CPU.Build.0 = Release|Any CPU
{995F2FEB-65FA-4399-B1C0-16E0B3FBDB15}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{995F2FEB-65FA-4399-B1C0-16E0B3FBDB15}.Debug|Any CPU.Build.0 = Debug|Any CPU
{995F2FEB-65FA-4399-B1C0-16E0B3FBDB15}.DebugNoVSIX|Any CPU.ActiveCfg = Debug|Any CPU
@@ -249,14 +179,6 @@ Global
{8F165A3F-A18C-4649-AA08-C0E1BA5F5C90}.Release|Any CPU.Build.0 = Release|Any CPU
{8F165A3F-A18C-4649-AA08-C0E1BA5F5C90}.ReleaseNoVSIX|Any CPU.ActiveCfg = Release|Any CPU
{8F165A3F-A18C-4649-AA08-C0E1BA5F5C90}.ReleaseNoVSIX|Any CPU.Build.0 = Release|Any CPU
- {C61AAE12-5007-4205-A220-68F354A7F235}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {C61AAE12-5007-4205-A220-68F354A7F235}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {C61AAE12-5007-4205-A220-68F354A7F235}.DebugNoVSIX|Any CPU.ActiveCfg = Debug|Any CPU
- {C61AAE12-5007-4205-A220-68F354A7F235}.DebugNoVSIX|Any CPU.Build.0 = Debug|Any CPU
- {C61AAE12-5007-4205-A220-68F354A7F235}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {C61AAE12-5007-4205-A220-68F354A7F235}.Release|Any CPU.Build.0 = Release|Any CPU
- {C61AAE12-5007-4205-A220-68F354A7F235}.ReleaseNoVSIX|Any CPU.ActiveCfg = Release|Any CPU
- {C61AAE12-5007-4205-A220-68F354A7F235}.ReleaseNoVSIX|Any CPU.Build.0 = Release|Any CPU
{F1538809-7347-45D2-A7AC-C1D89CF0BBD4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F1538809-7347-45D2-A7AC-C1D89CF0BBD4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F1538809-7347-45D2-A7AC-C1D89CF0BBD4}.DebugNoVSIX|Any CPU.ActiveCfg = Debug|Any CPU
@@ -281,54 +203,6 @@ Global
{AC5CA24B-B81E-4B20-B193-2E3983B1896C}.Release|Any CPU.Build.0 = Release|Any CPU
{AC5CA24B-B81E-4B20-B193-2E3983B1896C}.ReleaseNoVSIX|Any CPU.ActiveCfg = Release|Any CPU
{AC5CA24B-B81E-4B20-B193-2E3983B1896C}.ReleaseNoVSIX|Any CPU.Build.0 = Release|Any CPU
- {0BCDE75A-A438-46C7-95E9-391F029D07C5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {0BCDE75A-A438-46C7-95E9-391F029D07C5}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {0BCDE75A-A438-46C7-95E9-391F029D07C5}.DebugNoVSIX|Any CPU.ActiveCfg = Debug|Any CPU
- {0BCDE75A-A438-46C7-95E9-391F029D07C5}.DebugNoVSIX|Any CPU.Build.0 = Debug|Any CPU
- {0BCDE75A-A438-46C7-95E9-391F029D07C5}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {0BCDE75A-A438-46C7-95E9-391F029D07C5}.Release|Any CPU.Build.0 = Release|Any CPU
- {0BCDE75A-A438-46C7-95E9-391F029D07C5}.ReleaseNoVSIX|Any CPU.ActiveCfg = Release|Any CPU
- {0BCDE75A-A438-46C7-95E9-391F029D07C5}.ReleaseNoVSIX|Any CPU.Build.0 = Release|Any CPU
- {AA888DB9-340E-4E06-A2A4-25BFEE1AC2B7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {AA888DB9-340E-4E06-A2A4-25BFEE1AC2B7}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {AA888DB9-340E-4E06-A2A4-25BFEE1AC2B7}.DebugNoVSIX|Any CPU.ActiveCfg = Debug|Any CPU
- {AA888DB9-340E-4E06-A2A4-25BFEE1AC2B7}.DebugNoVSIX|Any CPU.Build.0 = Debug|Any CPU
- {AA888DB9-340E-4E06-A2A4-25BFEE1AC2B7}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {AA888DB9-340E-4E06-A2A4-25BFEE1AC2B7}.Release|Any CPU.Build.0 = Release|Any CPU
- {AA888DB9-340E-4E06-A2A4-25BFEE1AC2B7}.ReleaseNoVSIX|Any CPU.ActiveCfg = Release|Any CPU
- {AA888DB9-340E-4E06-A2A4-25BFEE1AC2B7}.ReleaseNoVSIX|Any CPU.Build.0 = Release|Any CPU
- {FC684D4F-D23C-407C-9C68-E10EF3B38560}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {FC684D4F-D23C-407C-9C68-E10EF3B38560}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {FC684D4F-D23C-407C-9C68-E10EF3B38560}.DebugNoVSIX|Any CPU.ActiveCfg = Debug|Any CPU
- {FC684D4F-D23C-407C-9C68-E10EF3B38560}.DebugNoVSIX|Any CPU.Build.0 = Debug|Any CPU
- {FC684D4F-D23C-407C-9C68-E10EF3B38560}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {FC684D4F-D23C-407C-9C68-E10EF3B38560}.Release|Any CPU.Build.0 = Release|Any CPU
- {FC684D4F-D23C-407C-9C68-E10EF3B38560}.ReleaseNoVSIX|Any CPU.ActiveCfg = Release|Any CPU
- {FC684D4F-D23C-407C-9C68-E10EF3B38560}.ReleaseNoVSIX|Any CPU.Build.0 = Release|Any CPU
- {FAF9986F-E086-4513-9D52-F7BF5FFCF31D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {FAF9986F-E086-4513-9D52-F7BF5FFCF31D}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {FAF9986F-E086-4513-9D52-F7BF5FFCF31D}.DebugNoVSIX|Any CPU.ActiveCfg = Debug|Any CPU
- {FAF9986F-E086-4513-9D52-F7BF5FFCF31D}.DebugNoVSIX|Any CPU.Build.0 = Debug|Any CPU
- {FAF9986F-E086-4513-9D52-F7BF5FFCF31D}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {FAF9986F-E086-4513-9D52-F7BF5FFCF31D}.Release|Any CPU.Build.0 = Release|Any CPU
- {FAF9986F-E086-4513-9D52-F7BF5FFCF31D}.ReleaseNoVSIX|Any CPU.ActiveCfg = Release|Any CPU
- {FAF9986F-E086-4513-9D52-F7BF5FFCF31D}.ReleaseNoVSIX|Any CPU.Build.0 = Release|Any CPU
- {95B18DEE-8B45-4CF0-B9F8-CCBAF3B5251A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {95B18DEE-8B45-4CF0-B9F8-CCBAF3B5251A}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {95B18DEE-8B45-4CF0-B9F8-CCBAF3B5251A}.DebugNoVSIX|Any CPU.ActiveCfg = Debug|Any CPU
- {95B18DEE-8B45-4CF0-B9F8-CCBAF3B5251A}.DebugNoVSIX|Any CPU.Build.0 = Debug|Any CPU
- {95B18DEE-8B45-4CF0-B9F8-CCBAF3B5251A}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {95B18DEE-8B45-4CF0-B9F8-CCBAF3B5251A}.Release|Any CPU.Build.0 = Release|Any CPU
- {95B18DEE-8B45-4CF0-B9F8-CCBAF3B5251A}.ReleaseNoVSIX|Any CPU.ActiveCfg = Release|Any CPU
- {95B18DEE-8B45-4CF0-B9F8-CCBAF3B5251A}.ReleaseNoVSIX|Any CPU.Build.0 = Release|Any CPU
- {B8A3E4CA-D54A-441F-A3BF-E00F060CA042}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {B8A3E4CA-D54A-441F-A3BF-E00F060CA042}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {B8A3E4CA-D54A-441F-A3BF-E00F060CA042}.DebugNoVSIX|Any CPU.ActiveCfg = Debug|Any CPU
- {B8A3E4CA-D54A-441F-A3BF-E00F060CA042}.DebugNoVSIX|Any CPU.Build.0 = Debug|Any CPU
- {B8A3E4CA-D54A-441F-A3BF-E00F060CA042}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {B8A3E4CA-D54A-441F-A3BF-E00F060CA042}.Release|Any CPU.Build.0 = Release|Any CPU
- {B8A3E4CA-D54A-441F-A3BF-E00F060CA042}.ReleaseNoVSIX|Any CPU.ActiveCfg = Release|Any CPU
- {B8A3E4CA-D54A-441F-A3BF-E00F060CA042}.ReleaseNoVSIX|Any CPU.Build.0 = Release|Any CPU
{5257B25D-330A-4DCF-ACED-B4709CFBF916}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5257B25D-330A-4DCF-ACED-B4709CFBF916}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5257B25D-330A-4DCF-ACED-B4709CFBF916}.DebugNoVSIX|Any CPU.ActiveCfg = Debug|Any CPU
@@ -361,22 +235,6 @@ Global
{323553F0-14AB-4FBD-9CF0-1CC0BE8056F8}.Release|Any CPU.Build.0 = Release|Any CPU
{323553F0-14AB-4FBD-9CF0-1CC0BE8056F8}.ReleaseNoVSIX|Any CPU.ActiveCfg = Release|Any CPU
{323553F0-14AB-4FBD-9CF0-1CC0BE8056F8}.ReleaseNoVSIX|Any CPU.Build.0 = Release|Any CPU
- {6205467F-E381-4C42-AEEC-763BD62B3D5E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {6205467F-E381-4C42-AEEC-763BD62B3D5E}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {6205467F-E381-4C42-AEEC-763BD62B3D5E}.DebugNoVSIX|Any CPU.ActiveCfg = Debug|Any CPU
- {6205467F-E381-4C42-AEEC-763BD62B3D5E}.DebugNoVSIX|Any CPU.Build.0 = Debug|Any CPU
- {6205467F-E381-4C42-AEEC-763BD62B3D5E}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {6205467F-E381-4C42-AEEC-763BD62B3D5E}.Release|Any CPU.Build.0 = Release|Any CPU
- {6205467F-E381-4C42-AEEC-763BD62B3D5E}.ReleaseNoVSIX|Any CPU.ActiveCfg = Release|Any CPU
- {6205467F-E381-4C42-AEEC-763BD62B3D5E}.ReleaseNoVSIX|Any CPU.Build.0 = Release|Any CPU
- {933101DA-C4CC-401A-AA01-2784E1025B7F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {933101DA-C4CC-401A-AA01-2784E1025B7F}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {933101DA-C4CC-401A-AA01-2784E1025B7F}.DebugNoVSIX|Any CPU.ActiveCfg = Debug|Any CPU
- {933101DA-C4CC-401A-AA01-2784E1025B7F}.DebugNoVSIX|Any CPU.Build.0 = Debug|Any CPU
- {933101DA-C4CC-401A-AA01-2784E1025B7F}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {933101DA-C4CC-401A-AA01-2784E1025B7F}.Release|Any CPU.Build.0 = Release|Any CPU
- {933101DA-C4CC-401A-AA01-2784E1025B7F}.ReleaseNoVSIX|Any CPU.ActiveCfg = Release|Any CPU
- {933101DA-C4CC-401A-AA01-2784E1025B7F}.ReleaseNoVSIX|Any CPU.Build.0 = Release|Any CPU
{3E7F2D49-3B45-45A8-9893-F73EC1EEBAAB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3E7F2D49-3B45-45A8-9893-F73EC1EEBAAB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3E7F2D49-3B45-45A8-9893-F73EC1EEBAAB}.DebugNoVSIX|Any CPU.ActiveCfg = Debug|Any CPU
@@ -420,34 +278,20 @@ Global
{932F3C9C-A6C0-40D3-BA50-9309886242FC} = {3C0D6505-79B3-49D0-B4C3-176F0F1836ED}
{969357A4-CCF1-46D9-B002-9AA072AFC75C} = {92463391-81BE-462B-AC3C-78C6C760741F}
{277AB67E-9C8D-4799-A18C-C628E70A8664} = {92463391-81BE-462B-AC3C-78C6C760741F}
- {0F265874-C592-448B-BC4F-3430AB03E0DC} = {3C0D6505-79B3-49D0-B4C3-176F0F1836ED}
- {4EAD959D-73B2-4FB2-B46F-16CEB1EF49D4} = {3C0D6505-79B3-49D0-B4C3-176F0F1836ED}
- {D66B45B5-CBFD-4947-81F1-F30AB80EA992} = {C0CC1E1F-1559-44DE-93A8-63259CEA2AAB}
{42403DAF-F0BC-4F3A-B7F2-46D7013345D8} = {3C0D6505-79B3-49D0-B4C3-176F0F1836ED}
{7A8A1664-37CE-4376-81CA-1862CF5F91D9} = {92463391-81BE-462B-AC3C-78C6C760741F}
- {E5D92DB7-5CBF-410A-9685-FF76F71EC96F} = {3C0D6505-79B3-49D0-B4C3-176F0F1836ED}
{96EB1BD4-B8E0-4F52-A068-BBCACA7E3F63} = {92463391-81BE-462B-AC3C-78C6C760741F}
- {37E61BDB-658E-4F44-A499-D64CC6D35485} = {92463391-81BE-462B-AC3C-78C6C760741F}
{995F2FEB-65FA-4399-B1C0-16E0B3FBDB15} = {3C0D6505-79B3-49D0-B4C3-176F0F1836ED}
{7CFD5646-A757-4498-9E01-9C8528ED60AE} = {92463391-81BE-462B-AC3C-78C6C760741F}
{078AEF36-F319-4CE2-BAA2-5B58A6536B46} = {92463391-81BE-462B-AC3C-78C6C760741F}
{8F165A3F-A18C-4649-AA08-C0E1BA5F5C90} = {92463391-81BE-462B-AC3C-78C6C760741F}
- {C61AAE12-5007-4205-A220-68F354A7F235} = {92463391-81BE-462B-AC3C-78C6C760741F}
{F1538809-7347-45D2-A7AC-C1D89CF0BBD4} = {3C0D6505-79B3-49D0-B4C3-176F0F1836ED}
{296D4516-0323-4D28-955D-B0324E4F10BE} = {92463391-81BE-462B-AC3C-78C6C760741F}
{AC5CA24B-B81E-4B20-B193-2E3983B1896C} = {92463391-81BE-462B-AC3C-78C6C760741F}
- {0BCDE75A-A438-46C7-95E9-391F029D07C5} = {3C0D6505-79B3-49D0-B4C3-176F0F1836ED}
- {AA888DB9-340E-4E06-A2A4-25BFEE1AC2B7} = {92463391-81BE-462B-AC3C-78C6C760741F}
- {FC684D4F-D23C-407C-9C68-E10EF3B38560} = {92463391-81BE-462B-AC3C-78C6C760741F}
- {FAF9986F-E086-4513-9D52-F7BF5FFCF31D} = {C0CC1E1F-1559-44DE-93A8-63259CEA2AAB}
- {95B18DEE-8B45-4CF0-B9F8-CCBAF3B5251A} = {3C0D6505-79B3-49D0-B4C3-176F0F1836ED}
- {B8A3E4CA-D54A-441F-A3BF-E00F060CA042} = {92463391-81BE-462B-AC3C-78C6C760741F}
{5257B25D-330A-4DCF-ACED-B4709CFBF916} = {3C0D6505-79B3-49D0-B4C3-176F0F1836ED}
{1D90F276-E1CA-4FDF-A173-EB889E7D3150} = {92463391-81BE-462B-AC3C-78C6C760741F}
{043B9497-C0BA-4770-9210-4456D2F81CE0} = {3C0D6505-79B3-49D0-B4C3-176F0F1836ED}
{323553F0-14AB-4FBD-9CF0-1CC0BE8056F8} = {92463391-81BE-462B-AC3C-78C6C760741F}
- {6205467F-E381-4C42-AEEC-763BD62B3D5E} = {C2C98051-0F39-47F2-80B6-E72B29159F2C}
- {933101DA-C4CC-401A-AA01-2784E1025B7F} = {92463391-81BE-462B-AC3C-78C6C760741F}
{3E7F2D49-3B45-45A8-9893-F73EC1EEBAAB} = {3C0D6505-79B3-49D0-B4C3-176F0F1836ED}
{7D9ECCEE-71D1-4A42-ABEE-876AFA1B4FC9} = {3C0D6505-79B3-49D0-B4C3-176F0F1836ED}
{6EA56B2B-89EC-4C38-A384-97D203375B06} = {92463391-81BE-462B-AC3C-78C6C760741F}
diff --git a/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Performance/AssemblyInfo.cs b/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Performance/AssemblyInfo.cs
deleted file mode 100644
index 32248e0d1b0a..000000000000
--- a/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Performance/AssemblyInfo.cs
+++ /dev/null
@@ -1 +0,0 @@
-[assembly: BenchmarkDotNet.Attributes.AspNetCoreBenchmark]
diff --git a/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Performance/CodeGenerationBenchmark.cs b/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Performance/CodeGenerationBenchmark.cs
deleted file mode 100644
index c35e1db42f8b..000000000000
--- a/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Performance/CodeGenerationBenchmark.cs
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.IO;
-using BenchmarkDotNet.Attributes;
-using Microsoft.AspNetCore.Mvc.Razor.Extensions;
-using Microsoft.AspNetCore.Razor.Language;
-
-namespace Microsoft.AspNetCore.Razor.Performance
-{
- public class CodeGenerationBenchmark
- {
- public CodeGenerationBenchmark()
- {
- var current = new DirectoryInfo(AppContext.BaseDirectory);
- while (current != null && !File.Exists(Path.Combine(current.FullName, "MSN.cshtml")))
- {
- current = current.Parent;
- }
-
- var root = current;
- var fileSystem = RazorProjectFileSystem.Create(root.FullName);
-
- ProjectEngine = RazorProjectEngine.Create(RazorConfiguration.Default, fileSystem, b => RazorExtensions.Register(b)); ;
-
- MSN = fileSystem.GetItem(Path.Combine(root.FullName, "MSN.cshtml"));
- }
-
- public RazorProjectEngine ProjectEngine { get; }
-
- public RazorProjectItem MSN { get; }
-
- [Benchmark(Description = "Razor Design Time Code Generation of MSN.com")]
- public void CodeGeneration_DesignTime_LargeStaticFile()
- {
- var codeDocument = ProjectEngine.ProcessDesignTime(MSN);
- var generated = codeDocument.GetCSharpDocument();
-
- if (generated.Diagnostics.Count != 0)
- {
- throw new Exception("Error!" + Environment.NewLine + string.Join(Environment.NewLine, generated.Diagnostics));
- }
- }
-
- [Benchmark(Description = "Razor Runtime Code Generation of MSN.com")]
- public void CodeGeneration_Runtime_LargeStaticFile()
- {
- var codeDocument = ProjectEngine.Process(MSN);
- var generated = codeDocument.GetCSharpDocument();
-
- if (generated.Diagnostics.Count != 0)
- {
- throw new Exception("Error!" + Environment.NewLine + string.Join(Environment.NewLine, generated.Diagnostics));
- }
- }
- }
-}
diff --git a/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Performance/MSN.cshtml b/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Performance/MSN.cshtml
deleted file mode 100644
index 7b3d7a3a08f1..000000000000
--- a/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Performance/MSN.cshtml
+++ /dev/null
@@ -1,3983 +0,0 @@
-
-
-
-
-
-
-
- MSN.com - Hotmail, Outlook, Skype, Bing, Latest News, Photos & Videos
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Get your mail here
-
- - See your recent emails
- - Send a quick email
- - Manage your calendar with easy access
-
-
-
Sign in with any Microsoft account: Outlook, Hotmail, MSN, Live
-
What is a Microsoft account?
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Skype on MSN
-
- - See who's online
- - Notifications and missed messages
- - Voice calls and chats
-
-
-
Start connecting your Skype
-
Connecting Skype with MSN requires a Microsoft account to get set up.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Get your latest feed from Facebook
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Send Feedback
-
-
-
-
-
-
-
-
- I'm having problems with Top Destinations
- I'm having issues searching
- I'm having problems with Featured Apps
- I see an error in the content
- Other
-
-
-
-
-
-
-
-
-
-
-
-
Please give an overall site rating:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Performance/Microsoft.AspNetCore.Razor.Performance.csproj b/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Performance/Microsoft.AspNetCore.Razor.Performance.csproj
deleted file mode 100644
index 60fc7c6b4756..000000000000
--- a/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Performance/Microsoft.AspNetCore.Razor.Performance.csproj
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
-
- netcoreapp2.1
- Exe
- true
- true
- false
-
-
-
-
-
-
-
-
-
- Serialization\%(FileName)%(Extension)
-
-
-
-
-
-
-
-
-
-
diff --git a/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Performance/TagHelperSerializationBenchmark.cs b/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Performance/TagHelperSerializationBenchmark.cs
deleted file mode 100644
index f1dcabe64092..000000000000
--- a/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Performance/TagHelperSerializationBenchmark.cs
+++ /dev/null
@@ -1,54 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Text;
-using BenchmarkDotNet.Attributes;
-using Microsoft.AspNetCore.Razor.Language;
-using Microsoft.VisualStudio.LanguageServices.Razor.Serialization;
-using Newtonsoft.Json;
-
-namespace Microsoft.AspNetCore.Razor.Performance
-{
- public class TagHelperSerializationBenchmark
- {
- private readonly byte[] _tagHelperBuffer;
-
- public TagHelperSerializationBenchmark()
- {
- var current = new DirectoryInfo(AppContext.BaseDirectory);
- while (current != null && !File.Exists(Path.Combine(current.FullName, "taghelpers.json")))
- {
- current = current.Parent;
- }
-
- var tagHelperFilePath = Path.Combine(current.FullName, "taghelpers.json");
- _tagHelperBuffer = File.ReadAllBytes(tagHelperFilePath);
- }
-
- [Benchmark(Description = "Razor TagHelper Serialization")]
- public void TagHelper_Serialization_RoundTrip()
- {
- var serializer = new JsonSerializer();
- serializer.Converters.Add(new RazorDiagnosticJsonConverter());
- serializer.Converters.Add(new TagHelperDescriptorJsonConverter());
-
- // Deserialize from json file.
- IReadOnlyList tagHelpers;
- using (var stream = new MemoryStream(_tagHelperBuffer))
- using (var reader = new JsonTextReader(new StreamReader(stream)))
- {
- tagHelpers = serializer.Deserialize>(reader);
- }
-
- // Serialize back to json.
- using (var stream = new MemoryStream())
- using (var writer = new StreamWriter(stream, Encoding.UTF8, bufferSize: 4096))
- {
- serializer.Serialize(writer, tagHelpers);
- }
- }
- }
-}
diff --git a/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Performance/readme.md b/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Performance/readme.md
deleted file mode 100644
index 38ce0ff71a02..000000000000
--- a/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Performance/readme.md
+++ /dev/null
@@ -1,11 +0,0 @@
-Compile the solution in Release mode (so binaries are available in release)
-
-To run a specific benchmark add it as parameter.
-```
-dotnet run -c Release
-```
-
-If you run without any parameters, you'll be offered the list of all benchmarks and get to choose.
-```
-dotnet run -c Release
-```
\ No newline at end of file
diff --git a/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Performance/taghelpers.json b/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Performance/taghelpers.json
deleted file mode 100644
index 27dcb160389e..000000000000
--- a/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Performance/taghelpers.json
+++ /dev/null
@@ -1 +0,0 @@
-[{"Kind":"ITagHelper","Name":"Microsoft.AspNetCore.SpaServices.Prerendering.PrerenderTagHelper","TagMatchingRules":[{"TagName":"*","Attributes":[{"Name":"asp-prerender-module","NameComparison":0,"Value":null,"ValueComparison":0,"DisplayName":"asp-prerender-module","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":0,"Diagnostics":[],"HasErrors":false}],"AssemblyName":"Microsoft.AspNetCore.SpaServices","BoundAttributes":[{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":true,"Name":"asp-prerender-module","IndexerNamePrefix":null,"TypeName":"System.String","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"string Microsoft.AspNetCore.SpaServices.Prerendering.PrerenderTagHelper.ModuleName","Diagnostics":[],"Metadata":{"Common.PropertyName":"ModuleName"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":true,"Name":"asp-prerender-export","IndexerNamePrefix":null,"TypeName":"System.String","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"string Microsoft.AspNetCore.SpaServices.Prerendering.PrerenderTagHelper.ExportName","Diagnostics":[],"Metadata":{"Common.PropertyName":"ExportName"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":false,"Name":"asp-prerender-data","IndexerNamePrefix":null,"TypeName":"System.Object","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"object Microsoft.AspNetCore.SpaServices.Prerendering.PrerenderTagHelper.CustomDataParameter","Diagnostics":[],"Metadata":{"Common.PropertyName":"CustomDataParameter"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":false,"Name":"asp-prerender-timeout","IndexerNamePrefix":null,"TypeName":"System.Int32","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"int Microsoft.AspNetCore.SpaServices.Prerendering.PrerenderTagHelper.TimeoutMillisecondsParameter","Diagnostics":[],"Metadata":{"Common.PropertyName":"TimeoutMillisecondsParameter"},"HasErrors":false}],"AllowedChildTags":[],"Documentation":null,"DisplayName":"Microsoft.AspNetCore.SpaServices.Prerendering.PrerenderTagHelper","TagOutputHint":null,"Diagnostics":[],"Metadata":{"Runtime.Name":"ITagHelper","Common.TypeName":"Microsoft.AspNetCore.SpaServices.Prerendering.PrerenderTagHelper"},"HasErrors":false},{"Kind":"ITagHelper","Name":"Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper","TagMatchingRules":[{"TagName":"a","Attributes":[{"Name":"asp-action","NameComparison":0,"Value":null,"ValueComparison":0,"DisplayName":"asp-action","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":0,"Diagnostics":[],"HasErrors":false},{"TagName":"a","Attributes":[{"Name":"asp-controller","NameComparison":0,"Value":null,"ValueComparison":0,"DisplayName":"asp-controller","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":0,"Diagnostics":[],"HasErrors":false},{"TagName":"a","Attributes":[{"Name":"asp-area","NameComparison":0,"Value":null,"ValueComparison":0,"DisplayName":"asp-area","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":0,"Diagnostics":[],"HasErrors":false},{"TagName":"a","Attributes":[{"Name":"asp-page","NameComparison":0,"Value":null,"ValueComparison":0,"DisplayName":"asp-page","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":0,"Diagnostics":[],"HasErrors":false},{"TagName":"a","Attributes":[{"Name":"asp-page-handler","NameComparison":0,"Value":null,"ValueComparison":0,"DisplayName":"asp-page-handler","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":0,"Diagnostics":[],"HasErrors":false},{"TagName":"a","Attributes":[{"Name":"asp-fragment","NameComparison":0,"Value":null,"ValueComparison":0,"DisplayName":"asp-fragment","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":0,"Diagnostics":[],"HasErrors":false},{"TagName":"a","Attributes":[{"Name":"asp-host","NameComparison":0,"Value":null,"ValueComparison":0,"DisplayName":"asp-host","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":0,"Diagnostics":[],"HasErrors":false},{"TagName":"a","Attributes":[{"Name":"asp-protocol","NameComparison":0,"Value":null,"ValueComparison":0,"DisplayName":"asp-protocol","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":0,"Diagnostics":[],"HasErrors":false},{"TagName":"a","Attributes":[{"Name":"asp-route","NameComparison":0,"Value":null,"ValueComparison":0,"DisplayName":"asp-route","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":0,"Diagnostics":[],"HasErrors":false},{"TagName":"a","Attributes":[{"Name":"asp-all-route-data","NameComparison":0,"Value":null,"ValueComparison":0,"DisplayName":"asp-all-route-data","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":0,"Diagnostics":[],"HasErrors":false},{"TagName":"a","Attributes":[{"Name":"asp-route-","NameComparison":1,"Value":null,"ValueComparison":0,"DisplayName":"asp-route-...","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":0,"Diagnostics":[],"HasErrors":false}],"AssemblyName":"Microsoft.AspNetCore.Mvc.TagHelpers","BoundAttributes":[{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":true,"Name":"asp-action","IndexerNamePrefix":null,"TypeName":"System.String","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"string Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper.Action","Diagnostics":[],"Metadata":{"Common.PropertyName":"Action"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":true,"Name":"asp-controller","IndexerNamePrefix":null,"TypeName":"System.String","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"string Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper.Controller","Diagnostics":[],"Metadata":{"Common.PropertyName":"Controller"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":true,"Name":"asp-area","IndexerNamePrefix":null,"TypeName":"System.String","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"string Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper.Area","Diagnostics":[],"Metadata":{"Common.PropertyName":"Area"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":true,"Name":"asp-page","IndexerNamePrefix":null,"TypeName":"System.String","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"string Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper.Page","Diagnostics":[],"Metadata":{"Common.PropertyName":"Page"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":true,"Name":"asp-page-handler","IndexerNamePrefix":null,"TypeName":"System.String","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"string Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper.PageHandler","Diagnostics":[],"Metadata":{"Common.PropertyName":"PageHandler"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":true,"Name":"asp-protocol","IndexerNamePrefix":null,"TypeName":"System.String","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"string Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper.Protocol","Diagnostics":[],"Metadata":{"Common.PropertyName":"Protocol"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":true,"Name":"asp-host","IndexerNamePrefix":null,"TypeName":"System.String","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"string Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper.Host","Diagnostics":[],"Metadata":{"Common.PropertyName":"Host"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":true,"Name":"asp-fragment","IndexerNamePrefix":null,"TypeName":"System.String","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"string Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper.Fragment","Diagnostics":[],"Metadata":{"Common.PropertyName":"Fragment"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":true,"Name":"asp-route","IndexerNamePrefix":null,"TypeName":"System.String","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"string Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper.Route","Diagnostics":[],"Metadata":{"Common.PropertyName":"Route"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":true,"IsEnum":false,"IsStringProperty":false,"Name":"asp-all-route-data","IndexerNamePrefix":"asp-route-","TypeName":"System.Collections.Generic.IDictionary","IndexerTypeName":"System.String","HasIndexer":true,"Documentation":null,"DisplayName":"System.Collections.Generic.IDictionary Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper.RouteValues","Diagnostics":[],"Metadata":{"Common.PropertyName":"RouteValues"},"HasErrors":false}],"AllowedChildTags":[],"Documentation":null,"DisplayName":"Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper","TagOutputHint":null,"Diagnostics":[],"Metadata":{"Runtime.Name":"ITagHelper","Common.TypeName":"Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper"},"HasErrors":false},{"Kind":"ITagHelper","Name":"Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelper","TagMatchingRules":[{"TagName":"cache","Attributes":[],"ParentTag":null,"TagStructure":0,"Diagnostics":[],"HasErrors":false}],"AssemblyName":"Microsoft.AspNetCore.Mvc.TagHelpers","BoundAttributes":[{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":false,"Name":"priority","IndexerNamePrefix":null,"TypeName":"Microsoft.Extensions.Caching.Memory.CacheItemPriority?","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"Microsoft.Extensions.Caching.Memory.CacheItemPriority? Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelper.Priority","Diagnostics":[],"Metadata":{"Common.PropertyName":"Priority"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":true,"Name":"vary-by","IndexerNamePrefix":null,"TypeName":"System.String","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"string Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelper.VaryBy","Diagnostics":[],"Metadata":{"Common.PropertyName":"VaryBy"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":true,"Name":"vary-by-header","IndexerNamePrefix":null,"TypeName":"System.String","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"string Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelper.VaryByHeader","Diagnostics":[],"Metadata":{"Common.PropertyName":"VaryByHeader"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":true,"Name":"vary-by-query","IndexerNamePrefix":null,"TypeName":"System.String","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"string Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelper.VaryByQuery","Diagnostics":[],"Metadata":{"Common.PropertyName":"VaryByQuery"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":true,"Name":"vary-by-route","IndexerNamePrefix":null,"TypeName":"System.String","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"string Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelper.VaryByRoute","Diagnostics":[],"Metadata":{"Common.PropertyName":"VaryByRoute"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":true,"Name":"vary-by-cookie","IndexerNamePrefix":null,"TypeName":"System.String","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"string Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelper.VaryByCookie","Diagnostics":[],"Metadata":{"Common.PropertyName":"VaryByCookie"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":false,"Name":"vary-by-user","IndexerNamePrefix":null,"TypeName":"System.Boolean","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"bool Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelper.VaryByUser","Diagnostics":[],"Metadata":{"Common.PropertyName":"VaryByUser"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":false,"Name":"expires-on","IndexerNamePrefix":null,"TypeName":"System.DateTimeOffset?","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"System.DateTimeOffset? Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelper.ExpiresOn","Diagnostics":[],"Metadata":{"Common.PropertyName":"ExpiresOn"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":false,"Name":"expires-after","IndexerNamePrefix":null,"TypeName":"System.TimeSpan?","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"System.TimeSpan? Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelper.ExpiresAfter","Diagnostics":[],"Metadata":{"Common.PropertyName":"ExpiresAfter"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":false,"Name":"expires-sliding","IndexerNamePrefix":null,"TypeName":"System.TimeSpan?","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"System.TimeSpan? Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelper.ExpiresSliding","Diagnostics":[],"Metadata":{"Common.PropertyName":"ExpiresSliding"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":false,"Name":"enabled","IndexerNamePrefix":null,"TypeName":"System.Boolean","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"bool Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelper.Enabled","Diagnostics":[],"Metadata":{"Common.PropertyName":"Enabled"},"HasErrors":false}],"AllowedChildTags":[],"Documentation":null,"DisplayName":"Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelper","TagOutputHint":null,"Diagnostics":[],"Metadata":{"Runtime.Name":"ITagHelper","Common.TypeName":"Microsoft.AspNetCore.Mvc.TagHelpers.CacheTagHelper"},"HasErrors":false},{"Kind":"ITagHelper","Name":"Microsoft.AspNetCore.Mvc.TagHelpers.DistributedCacheTagHelper","TagMatchingRules":[{"TagName":"distributed-cache","Attributes":[{"Name":"name","NameComparison":0,"Value":null,"ValueComparison":0,"DisplayName":"name","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":0,"Diagnostics":[],"HasErrors":false}],"AssemblyName":"Microsoft.AspNetCore.Mvc.TagHelpers","BoundAttributes":[{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":true,"Name":"name","IndexerNamePrefix":null,"TypeName":"System.String","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"string Microsoft.AspNetCore.Mvc.TagHelpers.DistributedCacheTagHelper.Name","Diagnostics":[],"Metadata":{"Common.PropertyName":"Name"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":true,"Name":"vary-by","IndexerNamePrefix":null,"TypeName":"System.String","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"string Microsoft.AspNetCore.Mvc.TagHelpers.DistributedCacheTagHelper.VaryBy","Diagnostics":[],"Metadata":{"Common.PropertyName":"VaryBy"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":true,"Name":"vary-by-header","IndexerNamePrefix":null,"TypeName":"System.String","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"string Microsoft.AspNetCore.Mvc.TagHelpers.DistributedCacheTagHelper.VaryByHeader","Diagnostics":[],"Metadata":{"Common.PropertyName":"VaryByHeader"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":true,"Name":"vary-by-query","IndexerNamePrefix":null,"TypeName":"System.String","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"string Microsoft.AspNetCore.Mvc.TagHelpers.DistributedCacheTagHelper.VaryByQuery","Diagnostics":[],"Metadata":{"Common.PropertyName":"VaryByQuery"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":true,"Name":"vary-by-route","IndexerNamePrefix":null,"TypeName":"System.String","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"string Microsoft.AspNetCore.Mvc.TagHelpers.DistributedCacheTagHelper.VaryByRoute","Diagnostics":[],"Metadata":{"Common.PropertyName":"VaryByRoute"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":true,"Name":"vary-by-cookie","IndexerNamePrefix":null,"TypeName":"System.String","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"string Microsoft.AspNetCore.Mvc.TagHelpers.DistributedCacheTagHelper.VaryByCookie","Diagnostics":[],"Metadata":{"Common.PropertyName":"VaryByCookie"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":false,"Name":"vary-by-user","IndexerNamePrefix":null,"TypeName":"System.Boolean","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"bool Microsoft.AspNetCore.Mvc.TagHelpers.DistributedCacheTagHelper.VaryByUser","Diagnostics":[],"Metadata":{"Common.PropertyName":"VaryByUser"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":false,"Name":"expires-on","IndexerNamePrefix":null,"TypeName":"System.DateTimeOffset?","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"System.DateTimeOffset? Microsoft.AspNetCore.Mvc.TagHelpers.DistributedCacheTagHelper.ExpiresOn","Diagnostics":[],"Metadata":{"Common.PropertyName":"ExpiresOn"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":false,"Name":"expires-after","IndexerNamePrefix":null,"TypeName":"System.TimeSpan?","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"System.TimeSpan? Microsoft.AspNetCore.Mvc.TagHelpers.DistributedCacheTagHelper.ExpiresAfter","Diagnostics":[],"Metadata":{"Common.PropertyName":"ExpiresAfter"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":false,"Name":"expires-sliding","IndexerNamePrefix":null,"TypeName":"System.TimeSpan?","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"System.TimeSpan? Microsoft.AspNetCore.Mvc.TagHelpers.DistributedCacheTagHelper.ExpiresSliding","Diagnostics":[],"Metadata":{"Common.PropertyName":"ExpiresSliding"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":false,"Name":"enabled","IndexerNamePrefix":null,"TypeName":"System.Boolean","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"bool Microsoft.AspNetCore.Mvc.TagHelpers.DistributedCacheTagHelper.Enabled","Diagnostics":[],"Metadata":{"Common.PropertyName":"Enabled"},"HasErrors":false}],"AllowedChildTags":[],"Documentation":null,"DisplayName":"Microsoft.AspNetCore.Mvc.TagHelpers.DistributedCacheTagHelper","TagOutputHint":null,"Diagnostics":[],"Metadata":{"Runtime.Name":"ITagHelper","Common.TypeName":"Microsoft.AspNetCore.Mvc.TagHelpers.DistributedCacheTagHelper"},"HasErrors":false},{"Kind":"ITagHelper","Name":"Microsoft.AspNetCore.Mvc.TagHelpers.EnvironmentTagHelper","TagMatchingRules":[{"TagName":"environment","Attributes":[],"ParentTag":null,"TagStructure":0,"Diagnostics":[],"HasErrors":false}],"AssemblyName":"Microsoft.AspNetCore.Mvc.TagHelpers","BoundAttributes":[{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":true,"Name":"names","IndexerNamePrefix":null,"TypeName":"System.String","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"string Microsoft.AspNetCore.Mvc.TagHelpers.EnvironmentTagHelper.Names","Diagnostics":[],"Metadata":{"Common.PropertyName":"Names"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":true,"Name":"include","IndexerNamePrefix":null,"TypeName":"System.String","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"string Microsoft.AspNetCore.Mvc.TagHelpers.EnvironmentTagHelper.Include","Diagnostics":[],"Metadata":{"Common.PropertyName":"Include"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":true,"Name":"exclude","IndexerNamePrefix":null,"TypeName":"System.String","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"string Microsoft.AspNetCore.Mvc.TagHelpers.EnvironmentTagHelper.Exclude","Diagnostics":[],"Metadata":{"Common.PropertyName":"Exclude"},"HasErrors":false}],"AllowedChildTags":[],"Documentation":null,"DisplayName":"Microsoft.AspNetCore.Mvc.TagHelpers.EnvironmentTagHelper","TagOutputHint":null,"Diagnostics":[],"Metadata":{"Runtime.Name":"ITagHelper","Common.TypeName":"Microsoft.AspNetCore.Mvc.TagHelpers.EnvironmentTagHelper"},"HasErrors":false},{"Kind":"ITagHelper","Name":"Microsoft.AspNetCore.Mvc.TagHelpers.FormActionTagHelper","TagMatchingRules":[{"TagName":"button","Attributes":[{"Name":"asp-action","NameComparison":0,"Value":null,"ValueComparison":0,"DisplayName":"asp-action","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":0,"Diagnostics":[],"HasErrors":false},{"TagName":"button","Attributes":[{"Name":"asp-controller","NameComparison":0,"Value":null,"ValueComparison":0,"DisplayName":"asp-controller","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":0,"Diagnostics":[],"HasErrors":false},{"TagName":"button","Attributes":[{"Name":"asp-area","NameComparison":0,"Value":null,"ValueComparison":0,"DisplayName":"asp-area","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":0,"Diagnostics":[],"HasErrors":false},{"TagName":"button","Attributes":[{"Name":"asp-page","NameComparison":0,"Value":null,"ValueComparison":0,"DisplayName":"asp-page","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":0,"Diagnostics":[],"HasErrors":false},{"TagName":"button","Attributes":[{"Name":"asp-page-handler","NameComparison":0,"Value":null,"ValueComparison":0,"DisplayName":"asp-page-handler","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":0,"Diagnostics":[],"HasErrors":false},{"TagName":"button","Attributes":[{"Name":"asp-fragment","NameComparison":0,"Value":null,"ValueComparison":0,"DisplayName":"asp-fragment","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":0,"Diagnostics":[],"HasErrors":false},{"TagName":"button","Attributes":[{"Name":"asp-route","NameComparison":0,"Value":null,"ValueComparison":0,"DisplayName":"asp-route","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":0,"Diagnostics":[],"HasErrors":false},{"TagName":"button","Attributes":[{"Name":"asp-all-route-data","NameComparison":0,"Value":null,"ValueComparison":0,"DisplayName":"asp-all-route-data","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":0,"Diagnostics":[],"HasErrors":false},{"TagName":"button","Attributes":[{"Name":"asp-route-","NameComparison":1,"Value":null,"ValueComparison":0,"DisplayName":"asp-route-...","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":0,"Diagnostics":[],"HasErrors":false},{"TagName":"input","Attributes":[{"Name":"type","NameComparison":0,"Value":"image","ValueComparison":1,"DisplayName":"type","Diagnostics":[],"HasErrors":false},{"Name":"asp-action","NameComparison":0,"Value":null,"ValueComparison":0,"DisplayName":"asp-action","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":2,"Diagnostics":[],"HasErrors":false},{"TagName":"input","Attributes":[{"Name":"type","NameComparison":0,"Value":"image","ValueComparison":1,"DisplayName":"type","Diagnostics":[],"HasErrors":false},{"Name":"asp-controller","NameComparison":0,"Value":null,"ValueComparison":0,"DisplayName":"asp-controller","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":2,"Diagnostics":[],"HasErrors":false},{"TagName":"input","Attributes":[{"Name":"type","NameComparison":0,"Value":"image","ValueComparison":1,"DisplayName":"type","Diagnostics":[],"HasErrors":false},{"Name":"asp-area","NameComparison":0,"Value":null,"ValueComparison":0,"DisplayName":"asp-area","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":2,"Diagnostics":[],"HasErrors":false},{"TagName":"input","Attributes":[{"Name":"type","NameComparison":0,"Value":"image","ValueComparison":1,"DisplayName":"type","Diagnostics":[],"HasErrors":false},{"Name":"asp-page","NameComparison":0,"Value":null,"ValueComparison":0,"DisplayName":"asp-page","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":2,"Diagnostics":[],"HasErrors":false},{"TagName":"input","Attributes":[{"Name":"type","NameComparison":0,"Value":"image","ValueComparison":1,"DisplayName":"type","Diagnostics":[],"HasErrors":false},{"Name":"asp-page-handler","NameComparison":0,"Value":null,"ValueComparison":0,"DisplayName":"asp-page-handler","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":2,"Diagnostics":[],"HasErrors":false},{"TagName":"input","Attributes":[{"Name":"type","NameComparison":0,"Value":"image","ValueComparison":1,"DisplayName":"type","Diagnostics":[],"HasErrors":false},{"Name":"asp-fragment","NameComparison":0,"Value":null,"ValueComparison":0,"DisplayName":"asp-fragment","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":2,"Diagnostics":[],"HasErrors":false},{"TagName":"input","Attributes":[{"Name":"type","NameComparison":0,"Value":"image","ValueComparison":1,"DisplayName":"type","Diagnostics":[],"HasErrors":false},{"Name":"asp-route","NameComparison":0,"Value":null,"ValueComparison":0,"DisplayName":"asp-route","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":2,"Diagnostics":[],"HasErrors":false},{"TagName":"input","Attributes":[{"Name":"type","NameComparison":0,"Value":"image","ValueComparison":1,"DisplayName":"type","Diagnostics":[],"HasErrors":false},{"Name":"asp-all-route-data","NameComparison":0,"Value":null,"ValueComparison":0,"DisplayName":"asp-all-route-data","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":2,"Diagnostics":[],"HasErrors":false},{"TagName":"input","Attributes":[{"Name":"type","NameComparison":0,"Value":"image","ValueComparison":1,"DisplayName":"type","Diagnostics":[],"HasErrors":false},{"Name":"asp-route-","NameComparison":1,"Value":null,"ValueComparison":0,"DisplayName":"asp-route-...","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":2,"Diagnostics":[],"HasErrors":false},{"TagName":"input","Attributes":[{"Name":"type","NameComparison":0,"Value":"submit","ValueComparison":1,"DisplayName":"type","Diagnostics":[],"HasErrors":false},{"Name":"asp-action","NameComparison":0,"Value":null,"ValueComparison":0,"DisplayName":"asp-action","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":2,"Diagnostics":[],"HasErrors":false},{"TagName":"input","Attributes":[{"Name":"type","NameComparison":0,"Value":"submit","ValueComparison":1,"DisplayName":"type","Diagnostics":[],"HasErrors":false},{"Name":"asp-controller","NameComparison":0,"Value":null,"ValueComparison":0,"DisplayName":"asp-controller","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":2,"Diagnostics":[],"HasErrors":false},{"TagName":"input","Attributes":[{"Name":"type","NameComparison":0,"Value":"submit","ValueComparison":1,"DisplayName":"type","Diagnostics":[],"HasErrors":false},{"Name":"asp-area","NameComparison":0,"Value":null,"ValueComparison":0,"DisplayName":"asp-area","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":2,"Diagnostics":[],"HasErrors":false},{"TagName":"input","Attributes":[{"Name":"type","NameComparison":0,"Value":"submit","ValueComparison":1,"DisplayName":"type","Diagnostics":[],"HasErrors":false},{"Name":"asp-page","NameComparison":0,"Value":null,"ValueComparison":0,"DisplayName":"asp-page","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":2,"Diagnostics":[],"HasErrors":false},{"TagName":"input","Attributes":[{"Name":"type","NameComparison":0,"Value":"submit","ValueComparison":1,"DisplayName":"type","Diagnostics":[],"HasErrors":false},{"Name":"asp-page-handler","NameComparison":0,"Value":null,"ValueComparison":0,"DisplayName":"asp-page-handler","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":2,"Diagnostics":[],"HasErrors":false},{"TagName":"input","Attributes":[{"Name":"type","NameComparison":0,"Value":"submit","ValueComparison":1,"DisplayName":"type","Diagnostics":[],"HasErrors":false},{"Name":"asp-fragment","NameComparison":0,"Value":null,"ValueComparison":0,"DisplayName":"asp-fragment","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":2,"Diagnostics":[],"HasErrors":false},{"TagName":"input","Attributes":[{"Name":"type","NameComparison":0,"Value":"submit","ValueComparison":1,"DisplayName":"type","Diagnostics":[],"HasErrors":false},{"Name":"asp-route","NameComparison":0,"Value":null,"ValueComparison":0,"DisplayName":"asp-route","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":2,"Diagnostics":[],"HasErrors":false},{"TagName":"input","Attributes":[{"Name":"type","NameComparison":0,"Value":"submit","ValueComparison":1,"DisplayName":"type","Diagnostics":[],"HasErrors":false},{"Name":"asp-all-route-data","NameComparison":0,"Value":null,"ValueComparison":0,"DisplayName":"asp-all-route-data","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":2,"Diagnostics":[],"HasErrors":false},{"TagName":"input","Attributes":[{"Name":"type","NameComparison":0,"Value":"submit","ValueComparison":1,"DisplayName":"type","Diagnostics":[],"HasErrors":false},{"Name":"asp-route-","NameComparison":1,"Value":null,"ValueComparison":0,"DisplayName":"asp-route-...","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":2,"Diagnostics":[],"HasErrors":false}],"AssemblyName":"Microsoft.AspNetCore.Mvc.TagHelpers","BoundAttributes":[{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":true,"Name":"asp-action","IndexerNamePrefix":null,"TypeName":"System.String","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"string Microsoft.AspNetCore.Mvc.TagHelpers.FormActionTagHelper.Action","Diagnostics":[],"Metadata":{"Common.PropertyName":"Action"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":true,"Name":"asp-controller","IndexerNamePrefix":null,"TypeName":"System.String","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"string Microsoft.AspNetCore.Mvc.TagHelpers.FormActionTagHelper.Controller","Diagnostics":[],"Metadata":{"Common.PropertyName":"Controller"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":true,"Name":"asp-area","IndexerNamePrefix":null,"TypeName":"System.String","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"string Microsoft.AspNetCore.Mvc.TagHelpers.FormActionTagHelper.Area","Diagnostics":[],"Metadata":{"Common.PropertyName":"Area"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":true,"Name":"asp-page","IndexerNamePrefix":null,"TypeName":"System.String","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"string Microsoft.AspNetCore.Mvc.TagHelpers.FormActionTagHelper.Page","Diagnostics":[],"Metadata":{"Common.PropertyName":"Page"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":true,"Name":"asp-page-handler","IndexerNamePrefix":null,"TypeName":"System.String","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"string Microsoft.AspNetCore.Mvc.TagHelpers.FormActionTagHelper.PageHandler","Diagnostics":[],"Metadata":{"Common.PropertyName":"PageHandler"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":true,"Name":"asp-fragment","IndexerNamePrefix":null,"TypeName":"System.String","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"string Microsoft.AspNetCore.Mvc.TagHelpers.FormActionTagHelper.Fragment","Diagnostics":[],"Metadata":{"Common.PropertyName":"Fragment"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":true,"Name":"asp-route","IndexerNamePrefix":null,"TypeName":"System.String","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"string Microsoft.AspNetCore.Mvc.TagHelpers.FormActionTagHelper.Route","Diagnostics":[],"Metadata":{"Common.PropertyName":"Route"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":true,"IsEnum":false,"IsStringProperty":false,"Name":"asp-all-route-data","IndexerNamePrefix":"asp-route-","TypeName":"System.Collections.Generic.IDictionary","IndexerTypeName":"System.String","HasIndexer":true,"Documentation":null,"DisplayName":"System.Collections.Generic.IDictionary Microsoft.AspNetCore.Mvc.TagHelpers.FormActionTagHelper.RouteValues","Diagnostics":[],"Metadata":{"Common.PropertyName":"RouteValues"},"HasErrors":false}],"AllowedChildTags":[],"Documentation":null,"DisplayName":"Microsoft.AspNetCore.Mvc.TagHelpers.FormActionTagHelper","TagOutputHint":null,"Diagnostics":[],"Metadata":{"Runtime.Name":"ITagHelper","Common.TypeName":"Microsoft.AspNetCore.Mvc.TagHelpers.FormActionTagHelper"},"HasErrors":false},{"Kind":"ITagHelper","Name":"Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper","TagMatchingRules":[{"TagName":"form","Attributes":[],"ParentTag":null,"TagStructure":0,"Diagnostics":[],"HasErrors":false}],"AssemblyName":"Microsoft.AspNetCore.Mvc.TagHelpers","BoundAttributes":[{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":true,"Name":"asp-action","IndexerNamePrefix":null,"TypeName":"System.String","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"string Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper.Action","Diagnostics":[],"Metadata":{"Common.PropertyName":"Action"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":true,"Name":"asp-controller","IndexerNamePrefix":null,"TypeName":"System.String","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"string Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper.Controller","Diagnostics":[],"Metadata":{"Common.PropertyName":"Controller"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":true,"Name":"asp-area","IndexerNamePrefix":null,"TypeName":"System.String","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"string Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper.Area","Diagnostics":[],"Metadata":{"Common.PropertyName":"Area"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":true,"Name":"asp-page","IndexerNamePrefix":null,"TypeName":"System.String","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"string Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper.Page","Diagnostics":[],"Metadata":{"Common.PropertyName":"Page"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":true,"Name":"asp-page-handler","IndexerNamePrefix":null,"TypeName":"System.String","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"string Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper.PageHandler","Diagnostics":[],"Metadata":{"Common.PropertyName":"PageHandler"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":false,"Name":"asp-antiforgery","IndexerNamePrefix":null,"TypeName":"System.Boolean?","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"System.Boolean? Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper.Antiforgery","Diagnostics":[],"Metadata":{"Common.PropertyName":"Antiforgery"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":true,"Name":"asp-fragment","IndexerNamePrefix":null,"TypeName":"System.String","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"string Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper.Fragment","Diagnostics":[],"Metadata":{"Common.PropertyName":"Fragment"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":true,"Name":"asp-route","IndexerNamePrefix":null,"TypeName":"System.String","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"string Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper.Route","Diagnostics":[],"Metadata":{"Common.PropertyName":"Route"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":true,"Name":"method","IndexerNamePrefix":null,"TypeName":"System.String","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"string Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper.Method","Diagnostics":[],"Metadata":{"Common.PropertyName":"Method"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":true,"IsEnum":false,"IsStringProperty":false,"Name":"asp-all-route-data","IndexerNamePrefix":"asp-route-","TypeName":"System.Collections.Generic.IDictionary","IndexerTypeName":"System.String","HasIndexer":true,"Documentation":null,"DisplayName":"System.Collections.Generic.IDictionary Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper.RouteValues","Diagnostics":[],"Metadata":{"Common.PropertyName":"RouteValues"},"HasErrors":false}],"AllowedChildTags":[],"Documentation":null,"DisplayName":"Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper","TagOutputHint":null,"Diagnostics":[],"Metadata":{"Runtime.Name":"ITagHelper","Common.TypeName":"Microsoft.AspNetCore.Mvc.TagHelpers.FormTagHelper"},"HasErrors":false},{"Kind":"ITagHelper","Name":"Microsoft.AspNetCore.Mvc.TagHelpers.ImageTagHelper","TagMatchingRules":[{"TagName":"img","Attributes":[{"Name":"asp-append-version","NameComparison":0,"Value":null,"ValueComparison":0,"DisplayName":"asp-append-version","Diagnostics":[],"HasErrors":false},{"Name":"src","NameComparison":0,"Value":null,"ValueComparison":0,"DisplayName":"src","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":2,"Diagnostics":[],"HasErrors":false}],"AssemblyName":"Microsoft.AspNetCore.Mvc.TagHelpers","BoundAttributes":[{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":true,"Name":"src","IndexerNamePrefix":null,"TypeName":"System.String","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"string Microsoft.AspNetCore.Mvc.TagHelpers.ImageTagHelper.Src","Diagnostics":[],"Metadata":{"Common.PropertyName":"Src"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":false,"Name":"asp-append-version","IndexerNamePrefix":null,"TypeName":"System.Boolean","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"bool Microsoft.AspNetCore.Mvc.TagHelpers.ImageTagHelper.AppendVersion","Diagnostics":[],"Metadata":{"Common.PropertyName":"AppendVersion"},"HasErrors":false}],"AllowedChildTags":[],"Documentation":null,"DisplayName":"Microsoft.AspNetCore.Mvc.TagHelpers.ImageTagHelper","TagOutputHint":null,"Diagnostics":[],"Metadata":{"Runtime.Name":"ITagHelper","Common.TypeName":"Microsoft.AspNetCore.Mvc.TagHelpers.ImageTagHelper"},"HasErrors":false},{"Kind":"ITagHelper","Name":"Microsoft.AspNetCore.Mvc.TagHelpers.InputTagHelper","TagMatchingRules":[{"TagName":"input","Attributes":[{"Name":"asp-for","NameComparison":0,"Value":null,"ValueComparison":0,"DisplayName":"asp-for","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":2,"Diagnostics":[],"HasErrors":false}],"AssemblyName":"Microsoft.AspNetCore.Mvc.TagHelpers","BoundAttributes":[{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":false,"Name":"asp-for","IndexerNamePrefix":null,"TypeName":"Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpression","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpression Microsoft.AspNetCore.Mvc.TagHelpers.InputTagHelper.For","Diagnostics":[],"Metadata":{"Common.PropertyName":"For"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":true,"Name":"asp-format","IndexerNamePrefix":null,"TypeName":"System.String","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"string Microsoft.AspNetCore.Mvc.TagHelpers.InputTagHelper.Format","Diagnostics":[],"Metadata":{"Common.PropertyName":"Format"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":true,"Name":"type","IndexerNamePrefix":null,"TypeName":"System.String","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"string Microsoft.AspNetCore.Mvc.TagHelpers.InputTagHelper.InputTypeName","Diagnostics":[],"Metadata":{"Common.PropertyName":"InputTypeName"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":true,"Name":"value","IndexerNamePrefix":null,"TypeName":"System.String","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"string Microsoft.AspNetCore.Mvc.TagHelpers.InputTagHelper.Value","Diagnostics":[],"Metadata":{"Common.PropertyName":"Value"},"HasErrors":false}],"AllowedChildTags":[],"Documentation":null,"DisplayName":"Microsoft.AspNetCore.Mvc.TagHelpers.InputTagHelper","TagOutputHint":null,"Diagnostics":[],"Metadata":{"Runtime.Name":"ITagHelper","Common.TypeName":"Microsoft.AspNetCore.Mvc.TagHelpers.InputTagHelper"},"HasErrors":false},{"Kind":"ITagHelper","Name":"Microsoft.AspNetCore.Mvc.TagHelpers.LabelTagHelper","TagMatchingRules":[{"TagName":"label","Attributes":[{"Name":"asp-for","NameComparison":0,"Value":null,"ValueComparison":0,"DisplayName":"asp-for","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":0,"Diagnostics":[],"HasErrors":false}],"AssemblyName":"Microsoft.AspNetCore.Mvc.TagHelpers","BoundAttributes":[{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":false,"Name":"asp-for","IndexerNamePrefix":null,"TypeName":"Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpression","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpression Microsoft.AspNetCore.Mvc.TagHelpers.LabelTagHelper.For","Diagnostics":[],"Metadata":{"Common.PropertyName":"For"},"HasErrors":false}],"AllowedChildTags":[],"Documentation":null,"DisplayName":"Microsoft.AspNetCore.Mvc.TagHelpers.LabelTagHelper","TagOutputHint":null,"Diagnostics":[],"Metadata":{"Runtime.Name":"ITagHelper","Common.TypeName":"Microsoft.AspNetCore.Mvc.TagHelpers.LabelTagHelper"},"HasErrors":false},{"Kind":"ITagHelper","Name":"Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper","TagMatchingRules":[{"TagName":"link","Attributes":[{"Name":"asp-href-include","NameComparison":0,"Value":null,"ValueComparison":0,"DisplayName":"asp-href-include","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":2,"Diagnostics":[],"HasErrors":false},{"TagName":"link","Attributes":[{"Name":"asp-href-exclude","NameComparison":0,"Value":null,"ValueComparison":0,"DisplayName":"asp-href-exclude","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":2,"Diagnostics":[],"HasErrors":false},{"TagName":"link","Attributes":[{"Name":"asp-fallback-href","NameComparison":0,"Value":null,"ValueComparison":0,"DisplayName":"asp-fallback-href","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":2,"Diagnostics":[],"HasErrors":false},{"TagName":"link","Attributes":[{"Name":"asp-fallback-href-include","NameComparison":0,"Value":null,"ValueComparison":0,"DisplayName":"asp-fallback-href-include","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":2,"Diagnostics":[],"HasErrors":false},{"TagName":"link","Attributes":[{"Name":"asp-fallback-href-exclude","NameComparison":0,"Value":null,"ValueComparison":0,"DisplayName":"asp-fallback-href-exclude","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":2,"Diagnostics":[],"HasErrors":false},{"TagName":"link","Attributes":[{"Name":"asp-fallback-test-class","NameComparison":0,"Value":null,"ValueComparison":0,"DisplayName":"asp-fallback-test-class","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":2,"Diagnostics":[],"HasErrors":false},{"TagName":"link","Attributes":[{"Name":"asp-fallback-test-property","NameComparison":0,"Value":null,"ValueComparison":0,"DisplayName":"asp-fallback-test-property","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":2,"Diagnostics":[],"HasErrors":false},{"TagName":"link","Attributes":[{"Name":"asp-fallback-test-value","NameComparison":0,"Value":null,"ValueComparison":0,"DisplayName":"asp-fallback-test-value","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":2,"Diagnostics":[],"HasErrors":false},{"TagName":"link","Attributes":[{"Name":"asp-append-version","NameComparison":0,"Value":null,"ValueComparison":0,"DisplayName":"asp-append-version","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":2,"Diagnostics":[],"HasErrors":false}],"AssemblyName":"Microsoft.AspNetCore.Mvc.TagHelpers","BoundAttributes":[{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":true,"Name":"href","IndexerNamePrefix":null,"TypeName":"System.String","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"string Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.Href","Diagnostics":[],"Metadata":{"Common.PropertyName":"Href"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":true,"Name":"asp-href-include","IndexerNamePrefix":null,"TypeName":"System.String","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"string Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.HrefInclude","Diagnostics":[],"Metadata":{"Common.PropertyName":"HrefInclude"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":true,"Name":"asp-href-exclude","IndexerNamePrefix":null,"TypeName":"System.String","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"string Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.HrefExclude","Diagnostics":[],"Metadata":{"Common.PropertyName":"HrefExclude"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":true,"Name":"asp-fallback-href","IndexerNamePrefix":null,"TypeName":"System.String","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"string Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.FallbackHref","Diagnostics":[],"Metadata":{"Common.PropertyName":"FallbackHref"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":false,"Name":"asp-append-version","IndexerNamePrefix":null,"TypeName":"System.Boolean?","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"System.Boolean? Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.AppendVersion","Diagnostics":[],"Metadata":{"Common.PropertyName":"AppendVersion"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":true,"Name":"asp-fallback-href-include","IndexerNamePrefix":null,"TypeName":"System.String","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"string Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.FallbackHrefInclude","Diagnostics":[],"Metadata":{"Common.PropertyName":"FallbackHrefInclude"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":true,"Name":"asp-fallback-href-exclude","IndexerNamePrefix":null,"TypeName":"System.String","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"string Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.FallbackHrefExclude","Diagnostics":[],"Metadata":{"Common.PropertyName":"FallbackHrefExclude"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":true,"Name":"asp-fallback-test-class","IndexerNamePrefix":null,"TypeName":"System.String","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"string Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.FallbackTestClass","Diagnostics":[],"Metadata":{"Common.PropertyName":"FallbackTestClass"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":true,"Name":"asp-fallback-test-property","IndexerNamePrefix":null,"TypeName":"System.String","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"string Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.FallbackTestProperty","Diagnostics":[],"Metadata":{"Common.PropertyName":"FallbackTestProperty"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":true,"Name":"asp-fallback-test-value","IndexerNamePrefix":null,"TypeName":"System.String","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"string Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper.FallbackTestValue","Diagnostics":[],"Metadata":{"Common.PropertyName":"FallbackTestValue"},"HasErrors":false}],"AllowedChildTags":[],"Documentation":null,"DisplayName":"Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper","TagOutputHint":null,"Diagnostics":[],"Metadata":{"Runtime.Name":"ITagHelper","Common.TypeName":"Microsoft.AspNetCore.Mvc.TagHelpers.LinkTagHelper"},"HasErrors":false},{"Kind":"ITagHelper","Name":"Microsoft.AspNetCore.Mvc.TagHelpers.OptionTagHelper","TagMatchingRules":[{"TagName":"option","Attributes":[],"ParentTag":null,"TagStructure":0,"Diagnostics":[],"HasErrors":false}],"AssemblyName":"Microsoft.AspNetCore.Mvc.TagHelpers","BoundAttributes":[{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":true,"Name":"value","IndexerNamePrefix":null,"TypeName":"System.String","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"string Microsoft.AspNetCore.Mvc.TagHelpers.OptionTagHelper.Value","Diagnostics":[],"Metadata":{"Common.PropertyName":"Value"},"HasErrors":false}],"AllowedChildTags":[],"Documentation":null,"DisplayName":"Microsoft.AspNetCore.Mvc.TagHelpers.OptionTagHelper","TagOutputHint":null,"Diagnostics":[],"Metadata":{"Runtime.Name":"ITagHelper","Common.TypeName":"Microsoft.AspNetCore.Mvc.TagHelpers.OptionTagHelper"},"HasErrors":false},{"Kind":"ITagHelper","Name":"Microsoft.AspNetCore.Mvc.TagHelpers.RenderAtEndOfFormTagHelper","TagMatchingRules":[{"TagName":"form","Attributes":[],"ParentTag":null,"TagStructure":0,"Diagnostics":[],"HasErrors":false}],"AssemblyName":"Microsoft.AspNetCore.Mvc.TagHelpers","BoundAttributes":[],"AllowedChildTags":[],"Documentation":null,"DisplayName":"Microsoft.AspNetCore.Mvc.TagHelpers.RenderAtEndOfFormTagHelper","TagOutputHint":null,"Diagnostics":[],"Metadata":{"Runtime.Name":"ITagHelper","Common.TypeName":"Microsoft.AspNetCore.Mvc.TagHelpers.RenderAtEndOfFormTagHelper"},"HasErrors":false},{"Kind":"ITagHelper","Name":"Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper","TagMatchingRules":[{"TagName":"script","Attributes":[{"Name":"asp-src-include","NameComparison":0,"Value":null,"ValueComparison":0,"DisplayName":"asp-src-include","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":0,"Diagnostics":[],"HasErrors":false},{"TagName":"script","Attributes":[{"Name":"asp-src-exclude","NameComparison":0,"Value":null,"ValueComparison":0,"DisplayName":"asp-src-exclude","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":0,"Diagnostics":[],"HasErrors":false},{"TagName":"script","Attributes":[{"Name":"asp-fallback-src","NameComparison":0,"Value":null,"ValueComparison":0,"DisplayName":"asp-fallback-src","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":0,"Diagnostics":[],"HasErrors":false},{"TagName":"script","Attributes":[{"Name":"asp-fallback-src-include","NameComparison":0,"Value":null,"ValueComparison":0,"DisplayName":"asp-fallback-src-include","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":0,"Diagnostics":[],"HasErrors":false},{"TagName":"script","Attributes":[{"Name":"asp-fallback-src-exclude","NameComparison":0,"Value":null,"ValueComparison":0,"DisplayName":"asp-fallback-src-exclude","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":0,"Diagnostics":[],"HasErrors":false},{"TagName":"script","Attributes":[{"Name":"asp-fallback-test","NameComparison":0,"Value":null,"ValueComparison":0,"DisplayName":"asp-fallback-test","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":0,"Diagnostics":[],"HasErrors":false},{"TagName":"script","Attributes":[{"Name":"asp-append-version","NameComparison":0,"Value":null,"ValueComparison":0,"DisplayName":"asp-append-version","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":0,"Diagnostics":[],"HasErrors":false}],"AssemblyName":"Microsoft.AspNetCore.Mvc.TagHelpers","BoundAttributes":[{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":true,"Name":"src","IndexerNamePrefix":null,"TypeName":"System.String","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"string Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper.Src","Diagnostics":[],"Metadata":{"Common.PropertyName":"Src"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":true,"Name":"asp-src-include","IndexerNamePrefix":null,"TypeName":"System.String","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"string Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper.SrcInclude","Diagnostics":[],"Metadata":{"Common.PropertyName":"SrcInclude"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":true,"Name":"asp-src-exclude","IndexerNamePrefix":null,"TypeName":"System.String","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"string Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper.SrcExclude","Diagnostics":[],"Metadata":{"Common.PropertyName":"SrcExclude"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":true,"Name":"asp-fallback-src","IndexerNamePrefix":null,"TypeName":"System.String","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"string Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper.FallbackSrc","Diagnostics":[],"Metadata":{"Common.PropertyName":"FallbackSrc"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":false,"Name":"asp-append-version","IndexerNamePrefix":null,"TypeName":"System.Boolean?","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"System.Boolean? Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper.AppendVersion","Diagnostics":[],"Metadata":{"Common.PropertyName":"AppendVersion"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":true,"Name":"asp-fallback-src-include","IndexerNamePrefix":null,"TypeName":"System.String","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"string Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper.FallbackSrcInclude","Diagnostics":[],"Metadata":{"Common.PropertyName":"FallbackSrcInclude"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":true,"Name":"asp-fallback-src-exclude","IndexerNamePrefix":null,"TypeName":"System.String","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"string Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper.FallbackSrcExclude","Diagnostics":[],"Metadata":{"Common.PropertyName":"FallbackSrcExclude"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":true,"Name":"asp-fallback-test","IndexerNamePrefix":null,"TypeName":"System.String","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"string Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper.FallbackTestExpression","Diagnostics":[],"Metadata":{"Common.PropertyName":"FallbackTestExpression"},"HasErrors":false}],"AllowedChildTags":[],"Documentation":null,"DisplayName":"Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper","TagOutputHint":null,"Diagnostics":[],"Metadata":{"Runtime.Name":"ITagHelper","Common.TypeName":"Microsoft.AspNetCore.Mvc.TagHelpers.ScriptTagHelper"},"HasErrors":false},{"Kind":"ITagHelper","Name":"Microsoft.AspNetCore.Mvc.TagHelpers.SelectTagHelper","TagMatchingRules":[{"TagName":"select","Attributes":[{"Name":"asp-for","NameComparison":0,"Value":null,"ValueComparison":0,"DisplayName":"asp-for","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":0,"Diagnostics":[],"HasErrors":false},{"TagName":"select","Attributes":[{"Name":"asp-items","NameComparison":0,"Value":null,"ValueComparison":0,"DisplayName":"asp-items","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":0,"Diagnostics":[],"HasErrors":false}],"AssemblyName":"Microsoft.AspNetCore.Mvc.TagHelpers","BoundAttributes":[{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":false,"Name":"asp-for","IndexerNamePrefix":null,"TypeName":"Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpression","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpression Microsoft.AspNetCore.Mvc.TagHelpers.SelectTagHelper.For","Diagnostics":[],"Metadata":{"Common.PropertyName":"For"},"HasErrors":false},{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":false,"Name":"asp-items","IndexerNamePrefix":null,"TypeName":"System.Collections.Generic.IEnumerable","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"System.Collections.Generic.IEnumerable Microsoft.AspNetCore.Mvc.TagHelpers.SelectTagHelper.Items","Diagnostics":[],"Metadata":{"Common.PropertyName":"Items"},"HasErrors":false}],"AllowedChildTags":[],"Documentation":null,"DisplayName":"Microsoft.AspNetCore.Mvc.TagHelpers.SelectTagHelper","TagOutputHint":null,"Diagnostics":[],"Metadata":{"Runtime.Name":"ITagHelper","Common.TypeName":"Microsoft.AspNetCore.Mvc.TagHelpers.SelectTagHelper"},"HasErrors":false},{"Kind":"ITagHelper","Name":"Microsoft.AspNetCore.Mvc.TagHelpers.TextAreaTagHelper","TagMatchingRules":[{"TagName":"textarea","Attributes":[{"Name":"asp-for","NameComparison":0,"Value":null,"ValueComparison":0,"DisplayName":"asp-for","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":0,"Diagnostics":[],"HasErrors":false}],"AssemblyName":"Microsoft.AspNetCore.Mvc.TagHelpers","BoundAttributes":[{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":false,"Name":"asp-for","IndexerNamePrefix":null,"TypeName":"Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpression","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpression Microsoft.AspNetCore.Mvc.TagHelpers.TextAreaTagHelper.For","Diagnostics":[],"Metadata":{"Common.PropertyName":"For"},"HasErrors":false}],"AllowedChildTags":[],"Documentation":null,"DisplayName":"Microsoft.AspNetCore.Mvc.TagHelpers.TextAreaTagHelper","TagOutputHint":null,"Diagnostics":[],"Metadata":{"Runtime.Name":"ITagHelper","Common.TypeName":"Microsoft.AspNetCore.Mvc.TagHelpers.TextAreaTagHelper"},"HasErrors":false},{"Kind":"ITagHelper","Name":"Microsoft.AspNetCore.Mvc.TagHelpers.ValidationMessageTagHelper","TagMatchingRules":[{"TagName":"span","Attributes":[{"Name":"asp-validation-for","NameComparison":0,"Value":null,"ValueComparison":0,"DisplayName":"asp-validation-for","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":0,"Diagnostics":[],"HasErrors":false}],"AssemblyName":"Microsoft.AspNetCore.Mvc.TagHelpers","BoundAttributes":[{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":false,"IsStringProperty":false,"Name":"asp-validation-for","IndexerNamePrefix":null,"TypeName":"Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpression","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpression Microsoft.AspNetCore.Mvc.TagHelpers.ValidationMessageTagHelper.For","Diagnostics":[],"Metadata":{"Common.PropertyName":"For"},"HasErrors":false}],"AllowedChildTags":[],"Documentation":null,"DisplayName":"Microsoft.AspNetCore.Mvc.TagHelpers.ValidationMessageTagHelper","TagOutputHint":null,"Diagnostics":[],"Metadata":{"Runtime.Name":"ITagHelper","Common.TypeName":"Microsoft.AspNetCore.Mvc.TagHelpers.ValidationMessageTagHelper"},"HasErrors":false},{"Kind":"ITagHelper","Name":"Microsoft.AspNetCore.Mvc.TagHelpers.ValidationSummaryTagHelper","TagMatchingRules":[{"TagName":"div","Attributes":[{"Name":"asp-validation-summary","NameComparison":0,"Value":null,"ValueComparison":0,"DisplayName":"asp-validation-summary","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":0,"Diagnostics":[],"HasErrors":false}],"AssemblyName":"Microsoft.AspNetCore.Mvc.TagHelpers","BoundAttributes":[{"Kind":"ITagHelper","IsIndexerStringProperty":false,"IsEnum":true,"IsStringProperty":false,"Name":"asp-validation-summary","IndexerNamePrefix":null,"TypeName":"Microsoft.AspNetCore.Mvc.Rendering.ValidationSummary","IndexerTypeName":null,"HasIndexer":false,"Documentation":null,"DisplayName":"Microsoft.AspNetCore.Mvc.Rendering.ValidationSummary Microsoft.AspNetCore.Mvc.TagHelpers.ValidationSummaryTagHelper.ValidationSummary","Diagnostics":[],"Metadata":{"Common.PropertyName":"ValidationSummary"},"HasErrors":false}],"AllowedChildTags":[],"Documentation":null,"DisplayName":"Microsoft.AspNetCore.Mvc.TagHelpers.ValidationSummaryTagHelper","TagOutputHint":null,"Diagnostics":[],"Metadata":{"Runtime.Name":"ITagHelper","Common.TypeName":"Microsoft.AspNetCore.Mvc.TagHelpers.ValidationSummaryTagHelper"},"HasErrors":false},{"Kind":"ITagHelper","Name":"Microsoft.AspNetCore.Mvc.Razor.TagHelpers.BodyTagHelper","TagMatchingRules":[{"TagName":"body","Attributes":[],"ParentTag":null,"TagStructure":0,"Diagnostics":[],"HasErrors":false}],"AssemblyName":"Microsoft.AspNetCore.Mvc.Razor","BoundAttributes":[],"AllowedChildTags":[],"Documentation":null,"DisplayName":"Microsoft.AspNetCore.Mvc.Razor.TagHelpers.BodyTagHelper","TagOutputHint":null,"Diagnostics":[],"Metadata":{"Runtime.Name":"ITagHelper","Common.TypeName":"Microsoft.AspNetCore.Mvc.Razor.TagHelpers.BodyTagHelper"},"HasErrors":false},{"Kind":"ITagHelper","Name":"Microsoft.AspNetCore.Mvc.Razor.TagHelpers.HeadTagHelper","TagMatchingRules":[{"TagName":"head","Attributes":[],"ParentTag":null,"TagStructure":0,"Diagnostics":[],"HasErrors":false}],"AssemblyName":"Microsoft.AspNetCore.Mvc.Razor","BoundAttributes":[],"AllowedChildTags":[],"Documentation":null,"DisplayName":"Microsoft.AspNetCore.Mvc.Razor.TagHelpers.HeadTagHelper","TagOutputHint":null,"Diagnostics":[],"Metadata":{"Runtime.Name":"ITagHelper","Common.TypeName":"Microsoft.AspNetCore.Mvc.Razor.TagHelpers.HeadTagHelper"},"HasErrors":false},{"Kind":"ITagHelper","Name":"Microsoft.AspNetCore.Mvc.Razor.TagHelpers.UrlResolutionTagHelper","TagMatchingRules":[{"TagName":"*","Attributes":[{"Name":"itemid","NameComparison":0,"Value":"~/","ValueComparison":2,"DisplayName":"itemid","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":0,"Diagnostics":[],"HasErrors":false},{"TagName":"a","Attributes":[{"Name":"href","NameComparison":0,"Value":"~/","ValueComparison":2,"DisplayName":"href","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":0,"Diagnostics":[],"HasErrors":false},{"TagName":"applet","Attributes":[{"Name":"archive","NameComparison":0,"Value":"~/","ValueComparison":2,"DisplayName":"archive","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":0,"Diagnostics":[],"HasErrors":false},{"TagName":"area","Attributes":[{"Name":"href","NameComparison":0,"Value":"~/","ValueComparison":2,"DisplayName":"href","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":2,"Diagnostics":[],"HasErrors":false},{"TagName":"audio","Attributes":[{"Name":"src","NameComparison":0,"Value":"~/","ValueComparison":2,"DisplayName":"src","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":0,"Diagnostics":[],"HasErrors":false},{"TagName":"base","Attributes":[{"Name":"href","NameComparison":0,"Value":"~/","ValueComparison":2,"DisplayName":"href","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":2,"Diagnostics":[],"HasErrors":false},{"TagName":"blockquote","Attributes":[{"Name":"cite","NameComparison":0,"Value":"~/","ValueComparison":2,"DisplayName":"cite","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":0,"Diagnostics":[],"HasErrors":false},{"TagName":"button","Attributes":[{"Name":"formaction","NameComparison":0,"Value":"~/","ValueComparison":2,"DisplayName":"formaction","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":0,"Diagnostics":[],"HasErrors":false},{"TagName":"del","Attributes":[{"Name":"cite","NameComparison":0,"Value":"~/","ValueComparison":2,"DisplayName":"cite","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":0,"Diagnostics":[],"HasErrors":false},{"TagName":"embed","Attributes":[{"Name":"src","NameComparison":0,"Value":"~/","ValueComparison":2,"DisplayName":"src","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":2,"Diagnostics":[],"HasErrors":false},{"TagName":"form","Attributes":[{"Name":"action","NameComparison":0,"Value":"~/","ValueComparison":2,"DisplayName":"action","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":0,"Diagnostics":[],"HasErrors":false},{"TagName":"html","Attributes":[{"Name":"manifest","NameComparison":0,"Value":"~/","ValueComparison":2,"DisplayName":"manifest","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":0,"Diagnostics":[],"HasErrors":false},{"TagName":"iframe","Attributes":[{"Name":"src","NameComparison":0,"Value":"~/","ValueComparison":2,"DisplayName":"src","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":0,"Diagnostics":[],"HasErrors":false},{"TagName":"img","Attributes":[{"Name":"src","NameComparison":0,"Value":"~/","ValueComparison":2,"DisplayName":"src","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":2,"Diagnostics":[],"HasErrors":false},{"TagName":"img","Attributes":[{"Name":"srcset","NameComparison":0,"Value":"~/","ValueComparison":2,"DisplayName":"srcset","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":2,"Diagnostics":[],"HasErrors":false},{"TagName":"input","Attributes":[{"Name":"src","NameComparison":0,"Value":"~/","ValueComparison":2,"DisplayName":"src","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":2,"Diagnostics":[],"HasErrors":false},{"TagName":"input","Attributes":[{"Name":"formaction","NameComparison":0,"Value":"~/","ValueComparison":2,"DisplayName":"formaction","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":2,"Diagnostics":[],"HasErrors":false},{"TagName":"ins","Attributes":[{"Name":"cite","NameComparison":0,"Value":"~/","ValueComparison":2,"DisplayName":"cite","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":0,"Diagnostics":[],"HasErrors":false},{"TagName":"link","Attributes":[{"Name":"href","NameComparison":0,"Value":"~/","ValueComparison":2,"DisplayName":"href","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":2,"Diagnostics":[],"HasErrors":false},{"TagName":"menuitem","Attributes":[{"Name":"icon","NameComparison":0,"Value":"~/","ValueComparison":2,"DisplayName":"icon","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":0,"Diagnostics":[],"HasErrors":false},{"TagName":"object","Attributes":[{"Name":"archive","NameComparison":0,"Value":"~/","ValueComparison":2,"DisplayName":"archive","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":0,"Diagnostics":[],"HasErrors":false},{"TagName":"object","Attributes":[{"Name":"data","NameComparison":0,"Value":"~/","ValueComparison":2,"DisplayName":"data","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":0,"Diagnostics":[],"HasErrors":false},{"TagName":"q","Attributes":[{"Name":"cite","NameComparison":0,"Value":"~/","ValueComparison":2,"DisplayName":"cite","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":0,"Diagnostics":[],"HasErrors":false},{"TagName":"script","Attributes":[{"Name":"src","NameComparison":0,"Value":"~/","ValueComparison":2,"DisplayName":"src","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":0,"Diagnostics":[],"HasErrors":false},{"TagName":"source","Attributes":[{"Name":"src","NameComparison":0,"Value":"~/","ValueComparison":2,"DisplayName":"src","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":2,"Diagnostics":[],"HasErrors":false},{"TagName":"source","Attributes":[{"Name":"srcset","NameComparison":0,"Value":"~/","ValueComparison":2,"DisplayName":"srcset","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":2,"Diagnostics":[],"HasErrors":false},{"TagName":"track","Attributes":[{"Name":"src","NameComparison":0,"Value":"~/","ValueComparison":2,"DisplayName":"src","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":2,"Diagnostics":[],"HasErrors":false},{"TagName":"video","Attributes":[{"Name":"src","NameComparison":0,"Value":"~/","ValueComparison":2,"DisplayName":"src","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":0,"Diagnostics":[],"HasErrors":false},{"TagName":"video","Attributes":[{"Name":"poster","NameComparison":0,"Value":"~/","ValueComparison":2,"DisplayName":"poster","Diagnostics":[],"HasErrors":false}],"ParentTag":null,"TagStructure":0,"Diagnostics":[],"HasErrors":false}],"AssemblyName":"Microsoft.AspNetCore.Mvc.Razor","BoundAttributes":[],"AllowedChildTags":[],"Documentation":null,"DisplayName":"Microsoft.AspNetCore.Mvc.Razor.TagHelpers.UrlResolutionTagHelper","TagOutputHint":null,"Diagnostics":[],"Metadata":{"Runtime.Name":"ITagHelper","Common.TypeName":"Microsoft.AspNetCore.Mvc.Razor.TagHelpers.UrlResolutionTagHelper"},"HasErrors":false}]
\ No newline at end of file
diff --git a/src/Razor/build.cmd b/src/Razor/build.cmd
new file mode 100644
index 000000000000..f4169ea5e411
--- /dev/null
+++ b/src/Razor/build.cmd
@@ -0,0 +1,3 @@
+@ECHO OFF
+SET RepoRoot="%~dp0..\.."
+%RepoRoot%\build.cmd -LockFile %RepoRoot%\korebuild-lock.txt -Path %~dp0 %*
diff --git a/src/Razor/build.sh b/src/Razor/build.sh
new file mode 100644
index 000000000000..d5bb0cf6312d
--- /dev/null
+++ b/src/Razor/build.sh
@@ -0,0 +1,7 @@
+#!/usr/bin/env bash
+
+set -euo pipefail
+
+DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+repo_root="$DIR/../.."
+"$repo_root/build.sh" --path "$DIR" --lockfile "$repo_root/korebuild-lock.txt" "$@"
diff --git a/src/Razor/build/MPack.targets b/src/Razor/build/MPack.targets
deleted file mode 100644
index 54ace6edf49f..000000000000
--- a/src/Razor/build/MPack.targets
+++ /dev/null
@@ -1,97 +0,0 @@
-
-
- $(PackageDependsOn);GenerateMPack
- $(GetArtifactInfoDependsOn);GetMPackArtifactInfo
- Microsoft.VisualStudio.Mac.RazorAddin
- $(RepositoryRoot)tooling\$(AddinName)\
- shipoob
-
- $(IntermediateDir)mpack\
- $(AddinDirectory)bin\$(Configuration)\net461\
- Microsoft.VisualStudio.Mac.LanguageServices.Razor
- $(RepositoryRoot)src\$(LanguageServiceName)\bin\$(Configuration)\net461\
- $(AddinName)_$(AddinVersion)
- $(MPackName).mpack
- $(BuildDir)$(MPackFileName)
- $(BuildDir)$(MPackName).zip
- $(AddinDirectory)Properties\_Manifest.addin.xml
- $(MPackIntermediateOutputPath)addin.info
-
-
-
-
-
-
-
-
- MPackFile
- $(AddinName)
- $(AddinVersion)
- $(MPackArtifactCategory)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/Razor/build/VSIX.targets b/src/Razor/build/VSIX.targets
deleted file mode 100644
index 09b73d8b8912..000000000000
--- a/src/Razor/build/VSIX.targets
+++ /dev/null
@@ -1,121 +0,0 @@
-
-
- false
- $(RestoreDependsOn);RestoreVSIX
- $(PackageDependsOn);PackageVSIX
- $(GetArtifactInfoDependsOn);GetVSIXArtifactInfo
- Microsoft.VisualStudio.RazorExtension
- $(BuildDir)$(VSIXName).vsix
- $(BuildDir)$(VSIXName).json
- $(RepositoryRoot)tooling\$(VSIXName)\$(VSIXName).csproj
- $(BuildDir)$(VSIXName).pdb
- shipoob
-
-
-
-
-
-
-
-
-
- VsixPackage
- $(PackageVersion)
- $(VSIXArtifactCategory)
- $(VSIXName)
-
-
-
- SymbolsFile
- $(VSIXArtifactCategory)
- $(VSIXName).vsix
- full
-
-
-
- VsixPackageManifestFile
- $(VSIXArtifactCategory)
- $(VSIXName).vsix
- $(VSIXName)
-
-
-
-
-
-
-
-
-
-
-
-
-
- $(LogOutputDir)vsix-restore.rsp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- $(LogOutputDir)vsix.log
- $(LogOutputDir)vsix-build.rsp
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/Razor/build/repo.targets b/src/Razor/build/repo.targets
index 2e234b2b723f..f9ef2f96ae7f 100644
--- a/src/Razor/build/repo.targets
+++ b/src/Razor/build/repo.targets
@@ -1,6 +1,4 @@
-
-
diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.Language/Properties/AssemblyInfo.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.Language/Properties/AssemblyInfo.cs
index 7214d8bacabc..1a87602ce228 100644
--- a/src/Razor/src/Microsoft.AspNetCore.Razor.Language/Properties/AssemblyInfo.cs
+++ b/src/Razor/src/Microsoft.AspNetCore.Razor.Language/Properties/AssemblyInfo.cs
@@ -2,24 +2,12 @@
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System.Runtime.CompilerServices;
-[assembly: InternalsVisibleTo("Microsoft.AspNetCore.Razor.Performance, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
[assembly: InternalsVisibleTo("Microsoft.AspNetCore.Mvc.Razor.Extensions.Test, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
[assembly: InternalsVisibleTo("Microsoft.AspNetCore.Mvc.Razor.Extensions.Version1_X.Test, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
-[assembly: InternalsVisibleTo("Microsoft.AspNetCore.Razor.GenerateTool, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
[assembly: InternalsVisibleTo("Microsoft.AspNetCore.Razor.Language.Test, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
-[assembly: InternalsVisibleTo("Microsoft.AspNetCore.Razor.TagHelperTool, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
[assembly: InternalsVisibleTo("Microsoft.AspNetCore.Razor.Test.Common, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
[assembly: InternalsVisibleTo("Microsoft.AspNetCore.Razor.Tools.Test, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
[assembly: InternalsVisibleTo("rzc, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
[assembly: InternalsVisibleTo("Microsoft.CodeAnalysis.Razor, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
[assembly: InternalsVisibleTo("Microsoft.CodeAnalysis.Razor.Test, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
-[assembly: InternalsVisibleTo("Microsoft.CodeAnalysis.Razor.Workspaces.Test, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
-[assembly: InternalsVisibleTo("Microsoft.CodeAnalysis.Razor.Workspaces, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
-[assembly: InternalsVisibleTo("Microsoft.CodeAnalysis.Remote.Razor, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
-[assembly: InternalsVisibleTo("Microsoft.VisualStudio.Editor.Razor, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
-[assembly: InternalsVisibleTo("Microsoft.VisualStudio.Editor.Razor.Test.Common, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
-[assembly: InternalsVisibleTo("Microsoft.VisualStudio.LanguageServices.Razor, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
-[assembly: InternalsVisibleTo("Microsoft.VisualStudio.Editor.Razor.Test, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
-[assembly: InternalsVisibleTo("Microsoft.VisualStudio.LanguageServices.Razor.Test, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
-[assembly: InternalsVisibleTo("Microsoft.VisualStudio.RazorExtension, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7")]
diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.Tools/Microsoft.AspNetCore.Razor.Tools.csproj b/src/Razor/src/Microsoft.AspNetCore.Razor.Tools/Microsoft.AspNetCore.Razor.Tools.csproj
index e67f36e02f5e..8e48f98549e1 100644
--- a/src/Razor/src/Microsoft.AspNetCore.Razor.Tools/Microsoft.AspNetCore.Razor.Tools.csproj
+++ b/src/Razor/src/Microsoft.AspNetCore.Razor.Tools/Microsoft.AspNetCore.Razor.Tools.csproj
@@ -1,4 +1,4 @@
-
+
Razor is a markup syntax for adding server-side logic to web pages. This assembly contains infrastructure supporting Razor MSBuild integration.
@@ -12,15 +12,6 @@
false
-
-
- Shared\TagHelperDescriptorJsonConverter.cs
-
-
- Shared\RazorDiagnosticJsonConverter.cs
-
-
-
diff --git a/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/Serialization/RazorDiagnosticJsonConverter.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.Tools/Shared/RazorDiagnosticJsonConverter.cs
similarity index 100%
rename from src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/Serialization/RazorDiagnosticJsonConverter.cs
rename to src/Razor/src/Microsoft.AspNetCore.Razor.Tools/Shared/RazorDiagnosticJsonConverter.cs
diff --git a/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/Serialization/TagHelperDescriptorJsonConverter.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.Tools/Shared/TagHelperDescriptorJsonConverter.cs
similarity index 100%
rename from src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/Serialization/TagHelperDescriptorJsonConverter.cs
rename to src/Razor/src/Microsoft.AspNetCore.Razor.Tools/Shared/TagHelperDescriptorJsonConverter.cs
diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/DefaultErrorReporter.cs b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/DefaultErrorReporter.cs
deleted file mode 100644
index ff200966e826..000000000000
--- a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/DefaultErrorReporter.cs
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using Microsoft.CodeAnalysis.Razor.ProjectSystem;
-
-namespace Microsoft.CodeAnalysis.Razor
-{
- internal class DefaultErrorReporter : ErrorReporter
- {
- public override void ReportError(Exception exception)
- {
- if (exception == null)
- {
- throw new ArgumentNullException(nameof(exception));
- }
-
- // Do nothing.
- }
-
- public override void ReportError(Exception exception, ProjectSnapshot project)
- {
- if (exception == null)
- {
- throw new ArgumentNullException(nameof(exception));
- }
-
- // Do nothing.
- }
-
- public override void ReportError(Exception exception, Project workspaceProject)
- {
- if (exception == null)
- {
- throw new ArgumentNullException(nameof(exception));
- }
-
- // Do nothing.
- }
- }
-}
diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/DefaultErrorReporterFactory.cs b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/DefaultErrorReporterFactory.cs
deleted file mode 100644
index e9c987d10895..000000000000
--- a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/DefaultErrorReporterFactory.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System.Composition;
-using Microsoft.CodeAnalysis.Host;
-using Microsoft.CodeAnalysis.Host.Mef;
-
-namespace Microsoft.CodeAnalysis.Razor
-{
- [Shared]
- [ExportWorkspaceServiceFactory(typeof(ErrorReporter), ServiceLayer.Default)]
- internal class DefaultErrorReporterFactory : IWorkspaceServiceFactory
- {
- public IWorkspaceService CreateService(HostWorkspaceServices workspaceServices)
- {
- return new DefaultErrorReporter();
- }
- }
-}
diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/Editor/EditorSettings.cs b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/Editor/EditorSettings.cs
deleted file mode 100644
index 113238a878ce..000000000000
--- a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/Editor/EditorSettings.cs
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright(c) .NET Foundation.All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using Microsoft.Extensions.Internal;
-
-namespace Microsoft.CodeAnalysis.Razor.Editor
-{
- public sealed class EditorSettings : IEquatable
- {
- public static readonly EditorSettings Default = new EditorSettings(indentWithTabs: false, indentSize: 4);
-
- public EditorSettings(bool indentWithTabs, int indentSize)
- {
- if (indentSize < 0)
- {
- throw new ArgumentOutOfRangeException(nameof(indentSize));
- }
-
- IndentWithTabs = indentWithTabs;
- IndentSize = indentSize;
- }
-
- public bool IndentWithTabs { get; }
-
- public int IndentSize { get; }
-
- public bool Equals(EditorSettings other)
- {
- if (other == null)
- {
- return false;
- }
-
- return IndentWithTabs == other.IndentWithTabs &&
- IndentSize == other.IndentSize;
- }
-
- public override bool Equals(object other)
- {
- return Equals(other as EditorSettings);
- }
-
- public override int GetHashCode()
- {
- var combiner = HashCodeCombiner.Start();
- combiner.Add(IndentWithTabs);
- combiner.Add(IndentSize);
-
- return combiner.CombinedHash;
- }
- }
-}
diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/Editor/EditorSettingsChangedEventArgs.cs b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/Editor/EditorSettingsChangedEventArgs.cs
deleted file mode 100644
index 573d56654a44..000000000000
--- a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/Editor/EditorSettingsChangedEventArgs.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-
-namespace Microsoft.CodeAnalysis.Razor.Editor
-{
- public sealed class EditorSettingsChangedEventArgs : EventArgs
- {
- public EditorSettingsChangedEventArgs(EditorSettings settings)
- {
- Settings = settings;
- }
-
- public EditorSettings Settings { get; }
- }
-}
diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/Editor/WorkspaceEditorSettings.cs b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/Editor/WorkspaceEditorSettings.cs
deleted file mode 100644
index 6736dfc39d94..000000000000
--- a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/Editor/WorkspaceEditorSettings.cs
+++ /dev/null
@@ -1,15 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using Microsoft.CodeAnalysis.Host;
-
-namespace Microsoft.CodeAnalysis.Razor.Editor
-{
- internal abstract class WorkspaceEditorSettings : ILanguageService
- {
- public abstract event EventHandler Changed;
-
- public abstract EditorSettings Current { get; }
- }
-}
diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ErrorReporter.cs b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ErrorReporter.cs
deleted file mode 100644
index 4f0b0dab818e..000000000000
--- a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ErrorReporter.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using Microsoft.CodeAnalysis.Host;
-using Microsoft.CodeAnalysis.Razor.ProjectSystem;
-
-namespace Microsoft.CodeAnalysis.Razor
-{
- internal abstract class ErrorReporter : IWorkspaceService
- {
- public abstract void ReportError(Exception exception);
-
- public abstract void ReportError(Exception exception, ProjectSnapshot project);
-
- public abstract void ReportError(Exception exception, Project workspaceProject);
- }
-}
diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ExportCustomProjectEngineFactoryAttribute.cs b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ExportCustomProjectEngineFactoryAttribute.cs
deleted file mode 100644
index 923cb0a66ec3..000000000000
--- a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ExportCustomProjectEngineFactoryAttribute.cs
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.Composition;
-
-namespace Microsoft.CodeAnalysis.Razor
-{
- [MetadataAttribute]
- [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
- public class ExportCustomProjectEngineFactoryAttribute : ExportAttribute, ICustomProjectEngineFactoryMetadata
- {
- public ExportCustomProjectEngineFactoryAttribute(string configurationName)
- : base(typeof(IProjectEngineFactory))
- {
- if (configurationName == null)
- {
- throw new ArgumentNullException(nameof(configurationName));
- }
-
- ConfigurationName = configurationName;
- }
-
- public string ConfigurationName { get; }
-
- public bool SupportsSerialization { get; set; }
- }
-}
diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/FallbackProjectEngineFactory.cs b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/FallbackProjectEngineFactory.cs
deleted file mode 100644
index 855acedde25c..000000000000
--- a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/FallbackProjectEngineFactory.cs
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.Composition;
-using Microsoft.AspNetCore.Razor.Language;
-
-namespace Microsoft.CodeAnalysis.Razor
-{
- [Export(typeof(IFallbackProjectEngineFactory))]
- internal class FallbackProjectEngineFactory : IFallbackProjectEngineFactory
- {
- public RazorProjectEngine Create(RazorConfiguration configuration, RazorProjectFileSystem fileSystem, Action configure)
- {
- if (configuration == null)
- {
- throw new ArgumentNullException(nameof(configuration));
- }
-
- if (fileSystem == null)
- {
- throw new ArgumentNullException(nameof(fileSystem));
- }
-
- // This is a very basic implementation that will provide reasonable support without crashing.
- // If the user falls into this situation, ideally they can realize that something is wrong and take
- // action.
- //
- // This has no support for:
- // - Tag Helpers
- // - Imports
- // - Default Imports
- // - and will have a very limited set of directives
- return RazorProjectEngine.Create(configuration, fileSystem, configure);
- }
- }
-}
diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ForegroundDispatcher.cs b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ForegroundDispatcher.cs
deleted file mode 100644
index bf9b0f59a49c..000000000000
--- a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ForegroundDispatcher.cs
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.Runtime.CompilerServices;
-using System.Threading.Tasks;
-using Microsoft.CodeAnalysis.Host;
-
-namespace Microsoft.CodeAnalysis.Razor
-{
- internal abstract class ForegroundDispatcher
- {
- public abstract bool IsForegroundThread { get; }
-
- public abstract TaskScheduler ForegroundScheduler { get; }
-
- public abstract TaskScheduler BackgroundScheduler { get; }
-
- public virtual void AssertForegroundThread([CallerMemberName] string caller = null)
- {
- if (!IsForegroundThread)
- {
- caller = caller == null ? Workspaces.Resources.ForegroundDispatcher_NoMethodNamePlaceholder : $"'{caller}'";
- throw new InvalidOperationException(Workspaces.Resources.FormatForegroundDispatcher_AssertForegroundThread(caller));
- }
- }
-
- public virtual void AssertBackgroundThread([CallerMemberName] string caller = null)
- {
- if (IsForegroundThread)
- {
- caller = caller == null ? Workspaces.Resources.ForegroundDispatcher_NoMethodNamePlaceholder : $"'{caller}'";
- throw new InvalidOperationException(Workspaces.Resources.FormatForegroundDispatcher_AssertBackgroundThread(caller));
- }
- }
- }
-}
diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ICustomProjectEngineFactoryMetadata.cs b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ICustomProjectEngineFactoryMetadata.cs
deleted file mode 100644
index 3f93a6e60523..000000000000
--- a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ICustomProjectEngineFactoryMetadata.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-namespace Microsoft.CodeAnalysis.Razor
-{
- public interface ICustomProjectEngineFactoryMetadata
- {
- string ConfigurationName { get; }
-
- bool SupportsSerialization { get; }
- }
-}
diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/IFallbackProjectEngineFactory.cs b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/IFallbackProjectEngineFactory.cs
deleted file mode 100644
index ccdc1b80c16c..000000000000
--- a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/IFallbackProjectEngineFactory.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-namespace Microsoft.CodeAnalysis.Razor
-{
- // Used to create the 'fallback' project engine when we don't have a custom implementation.
- internal interface IFallbackProjectEngineFactory : IProjectEngineFactory
- {
- }
-}
diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/IProjectEngineFactory.cs b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/IProjectEngineFactory.cs
deleted file mode 100644
index 903c47842b21..000000000000
--- a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/IProjectEngineFactory.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using Microsoft.AspNetCore.Razor.Language;
-
-namespace Microsoft.CodeAnalysis.Razor
-{
- public interface IProjectEngineFactory
- {
- RazorProjectEngine Create(RazorConfiguration configuration, RazorProjectFileSystem fileSystem, Action configure);
- }
-}
diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/Microsoft.CodeAnalysis.Razor.Workspaces.csproj b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/Microsoft.CodeAnalysis.Razor.Workspaces.csproj
deleted file mode 100644
index e7f29a2fb0f6..000000000000
--- a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/Microsoft.CodeAnalysis.Razor.Workspaces.csproj
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
- Razor is a markup syntax for adding server-side logic to web pages. This package contains the Razor design-time infrastructure.
- net46;netstandard2.0
- false
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/DefaultProjectSnapshot.cs b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/DefaultProjectSnapshot.cs
deleted file mode 100644
index b8646429c695..000000000000
--- a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/DefaultProjectSnapshot.cs
+++ /dev/null
@@ -1,184 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using Microsoft.AspNetCore.Razor.Language;
-
-namespace Microsoft.CodeAnalysis.Razor.ProjectSystem
-{
- // All of the public state of this is immutable - we create a new instance and notify subscribers
- // when it changes.
- //
- // However we use the private state to track things like dirty/clean.
- //
- // See the private constructors... When we update the snapshot we either are processing a Workspace
- // change (Project) or updating the computed state (ProjectSnapshotUpdateContext). We don't do both
- // at once.
- internal class DefaultProjectSnapshot : ProjectSnapshot
- {
- public DefaultProjectSnapshot(HostProject hostProject, Project workspaceProject, VersionStamp? version = null)
- {
- if (hostProject == null)
- {
- throw new ArgumentNullException(nameof(hostProject));
- }
-
- HostProject = hostProject;
- WorkspaceProject = workspaceProject; // Might be null
-
- FilePath = hostProject.FilePath;
- Version = version ?? VersionStamp.Default;
- }
-
- private DefaultProjectSnapshot(HostProject hostProject, DefaultProjectSnapshot other)
- {
- if (hostProject == null)
- {
- throw new ArgumentNullException(nameof(hostProject));
- }
-
- if (other == null)
- {
- throw new ArgumentNullException(nameof(other));
- }
-
- ComputedVersion = other.ComputedVersion;
-
- FilePath = other.FilePath;
- TagHelpers = other.TagHelpers;
- HostProject = hostProject;
- WorkspaceProject = other.WorkspaceProject;
-
- Version = other.Version.GetNewerVersion();
- }
-
- private DefaultProjectSnapshot(Project workspaceProject, DefaultProjectSnapshot other)
- {
- if (workspaceProject == null)
- {
- throw new ArgumentNullException(nameof(workspaceProject));
- }
-
- if (other == null)
- {
- throw new ArgumentNullException(nameof(other));
- }
-
- ComputedVersion = other.ComputedVersion;
-
- FilePath = other.FilePath;
- TagHelpers = other.TagHelpers;
- HostProject = other.HostProject;
- WorkspaceProject = workspaceProject;
-
- Version = other.Version.GetNewerVersion();
- }
-
- private DefaultProjectSnapshot(ProjectSnapshotUpdateContext update, DefaultProjectSnapshot other)
- {
- if (update == null)
- {
- throw new ArgumentNullException(nameof(update));
- }
-
- if (other == null)
- {
- throw new ArgumentNullException(nameof(other));
- }
-
- ComputedVersion = update.Version;
-
- FilePath = other.FilePath;
- HostProject = other.HostProject;
- TagHelpers = update.TagHelpers ?? Array.Empty();
- WorkspaceProject = other.WorkspaceProject;
-
- // This doesn't represent a new version of the underlying data. Keep the same version.
- Version = other.Version;
- }
-
- public override RazorConfiguration Configuration => HostProject.Configuration;
-
- public override string FilePath { get; }
-
- public override HostProject HostProject { get; }
-
- public override bool IsInitialized => WorkspaceProject != null;
-
- public override VersionStamp Version { get; }
-
- public override Project WorkspaceProject { get; }
-
- public override IReadOnlyList TagHelpers { get; } = Array.Empty();
-
- // This is the version that the computed state is based on.
- public VersionStamp? ComputedVersion { get; set; }
-
- // We know the project is dirty if we don't have a computed result, or it was computed for a different version.
- // Since the PSM updates the snapshots synchronously, the snapshot can never be older than the computed state.
- public bool IsDirty => ComputedVersion == null || ComputedVersion.Value != Version;
-
- public ProjectSnapshotUpdateContext CreateUpdateContext()
- {
- return new ProjectSnapshotUpdateContext(FilePath, HostProject, WorkspaceProject, Version);
- }
-
- public DefaultProjectSnapshot WithHostProject(HostProject hostProject)
- {
- if (hostProject == null)
- {
- throw new ArgumentNullException(nameof(hostProject));
- }
-
- return new DefaultProjectSnapshot(hostProject, this);
- }
-
- public DefaultProjectSnapshot RemoveWorkspaceProject()
- {
- // We want to get rid of all of the computed state since it's not really valid.
- return new DefaultProjectSnapshot(HostProject, null, Version.GetNewerVersion());
- }
-
- public DefaultProjectSnapshot WithWorkspaceProject(Project workspaceProject)
- {
- if (workspaceProject == null)
- {
- throw new ArgumentNullException(nameof(workspaceProject));
- }
-
- return new DefaultProjectSnapshot(workspaceProject, this);
- }
-
- public DefaultProjectSnapshot WithComputedUpdate(ProjectSnapshotUpdateContext update)
- {
- if (update == null)
- {
- throw new ArgumentNullException(nameof(update));
- }
-
- return new DefaultProjectSnapshot(update, this);
- }
-
- public bool HasConfigurationChanged(DefaultProjectSnapshot original)
- {
- if (original == null)
- {
- throw new ArgumentNullException(nameof(original));
- }
-
- return !object.Equals(Configuration, original.Configuration);
- }
-
- public bool HaveTagHelpersChanged(ProjectSnapshot original)
- {
- if (original == null)
- {
- throw new ArgumentNullException(nameof(original));
- }
-
- return !Enumerable.SequenceEqual(TagHelpers, original.TagHelpers);
- }
- }
-}
\ No newline at end of file
diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/DefaultProjectSnapshotManager.cs b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/DefaultProjectSnapshotManager.cs
deleted file mode 100644
index c246fa14d7fa..000000000000
--- a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/DefaultProjectSnapshotManager.cs
+++ /dev/null
@@ -1,463 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.Linq;
-
-namespace Microsoft.CodeAnalysis.Razor.ProjectSystem
-{
- // The implementation of project snapshot manager abstracts over the Roslyn Project (WorkspaceProject)
- // and information from the host's underlying project system (HostProject), to provide a unified and
- // immutable view of the underlying project systems.
- //
- // The HostProject support all of the configuration that the Razor SDK exposes via the project system
- // (language version, extensions, named configuration).
- //
- // The WorkspaceProject is needed to support our use of Roslyn Compilations for Tag Helpers and other
- // C# based constructs.
- //
- // The implementation will create a ProjectSnapshot for each HostProject. Put another way, when we
- // see a WorkspaceProject get created, we only care if we already have a HostProject for the same
- // filepath.
- //
- // Our underlying HostProject infrastructure currently does not handle multiple TFMs (project with
- // $(TargetFrameworks), so we just bind to the first WorkspaceProject we see for each HostProject.
- internal class DefaultProjectSnapshotManager : ProjectSnapshotManagerBase
- {
- public override event EventHandler Changed;
-
- private readonly ErrorReporter _errorReporter;
- private readonly ForegroundDispatcher _foregroundDispatcher;
- private readonly ProjectSnapshotChangeTrigger[] _triggers;
- private readonly ProjectSnapshotWorkerQueue _workerQueue;
- private readonly ProjectSnapshotWorker _worker;
-
- private readonly Dictionary _projects;
-
- public DefaultProjectSnapshotManager(
- ForegroundDispatcher foregroundDispatcher,
- ErrorReporter errorReporter,
- ProjectSnapshotWorker worker,
- IEnumerable triggers,
- Workspace workspace)
- {
- if (foregroundDispatcher == null)
- {
- throw new ArgumentNullException(nameof(foregroundDispatcher));
- }
-
- if (errorReporter == null)
- {
- throw new ArgumentNullException(nameof(errorReporter));
- }
-
- if (worker == null)
- {
- throw new ArgumentNullException(nameof(worker));
- }
-
- if (triggers == null)
- {
- throw new ArgumentNullException(nameof(triggers));
- }
-
- if (workspace == null)
- {
- throw new ArgumentNullException(nameof(workspace));
- }
-
- _foregroundDispatcher = foregroundDispatcher;
- _errorReporter = errorReporter;
- _worker = worker;
- _triggers = triggers.ToArray();
- Workspace = workspace;
-
- _projects = new Dictionary(FilePathComparer.Instance);
-
- _workerQueue = new ProjectSnapshotWorkerQueue(_foregroundDispatcher, this, worker);
-
- for (var i = 0; i < _triggers.Length; i++)
- {
- _triggers[i].Initialize(this);
- }
- }
-
- public override IReadOnlyList Projects
- {
- get
- {
- _foregroundDispatcher.AssertForegroundThread();
- return _projects.Values.ToArray();
- }
- }
-
- public override Workspace Workspace { get; }
-
- public override void ProjectUpdated(ProjectSnapshotUpdateContext update)
- {
- if (update == null)
- {
- throw new ArgumentNullException(nameof(update));
- }
-
- _foregroundDispatcher.AssertForegroundThread();
-
- if (_projects.TryGetValue(update.WorkspaceProject.FilePath, out var original))
- {
- if (!original.IsInitialized)
- {
- // If the project has been uninitialized, just ignore the update.
- return;
- }
-
- // This is an update to the project's computed values, so everything should be overwritten
- var snapshot = original.WithComputedUpdate(update);
- _projects[update.WorkspaceProject.FilePath] = snapshot;
-
- if (snapshot.IsDirty)
- {
- // It's possible that the snapshot can still be dirty if we got a project update while computing state in
- // the background. We need to trigger the background work to asynchronously compute the effect of the updates.
- NotifyBackgroundWorker(snapshot.CreateUpdateContext());
- }
-
- if (!object.Equals(snapshot.ComputedVersion, original.ComputedVersion))
- {
- NotifyListeners(new ProjectChangeEventArgs(snapshot, ProjectChangeKind.TagHelpersChanged));
- }
- }
- }
-
- public override void HostProjectAdded(HostProject hostProject)
- {
- if (hostProject == null)
- {
- throw new ArgumentNullException(nameof(hostProject));
- }
-
- _foregroundDispatcher.AssertForegroundThread();
-
- // We don't expect to see a HostProject initialized multiple times for the same path. Just ignore it.
- if (_projects.ContainsKey(hostProject.FilePath))
- {
- return;
- }
-
- // It's possible that Workspace has already created a project for this, but it's not deterministic
- // So if possible find a WorkspaceProject.
- var workspaceProject = GetWorkspaceProject(hostProject.FilePath);
-
- var snapshot = new DefaultProjectSnapshot(hostProject, workspaceProject);
- _projects[hostProject.FilePath] = snapshot;
-
- if (snapshot.IsInitialized && snapshot.IsDirty)
- {
- // Start computing background state if the project is fully initialized.
- NotifyBackgroundWorker(snapshot.CreateUpdateContext());
- }
-
- // We need to notify listeners about every project add.
- NotifyListeners(new ProjectChangeEventArgs(snapshot, ProjectChangeKind.Added));
- }
-
- public override void HostProjectChanged(HostProject hostProject)
- {
- if (hostProject == null)
- {
- throw new ArgumentNullException(nameof(hostProject));
- }
-
- _foregroundDispatcher.AssertForegroundThread();
-
- if (_projects.TryGetValue(hostProject.FilePath, out var original))
- {
- // Doing an update to the project should keep computed values, but mark the project as dirty if the
- // underlying project is newer.
- var snapshot = original.WithHostProject(hostProject);
- _projects[hostProject.FilePath] = snapshot;
-
- if (snapshot.IsInitialized && snapshot.IsDirty)
- {
- // Start computing background state if the project is fully initialized.
- NotifyBackgroundWorker(snapshot.CreateUpdateContext());
- }
-
- // Notify listeners right away because if the HostProject changes then it's likely that the Razor
- // configuration changed.
- NotifyListeners(new ProjectChangeEventArgs(snapshot, ProjectChangeKind.Changed));
- }
- }
-
- public override void HostProjectRemoved(HostProject hostProject)
- {
- if (hostProject == null)
- {
- throw new ArgumentNullException(nameof(hostProject));
- }
-
- _foregroundDispatcher.AssertForegroundThread();
-
- if (_projects.TryGetValue(hostProject.FilePath, out var snapshot))
- {
- _projects.Remove(hostProject.FilePath);
-
- // We need to notify listeners about every project removal.
- NotifyListeners(new ProjectChangeEventArgs(snapshot, ProjectChangeKind.Removed));
- }
- }
-
- public override void HostProjectBuildComplete(HostProject hostProject)
- {
- if (hostProject == null)
- {
- throw new ArgumentNullException(nameof(hostProject));
- }
-
- _foregroundDispatcher.AssertForegroundThread();
-
- if (_projects.TryGetValue(hostProject.FilePath, out var original))
- {
- var workspaceProject = GetWorkspaceProject(hostProject.FilePath);
- if (workspaceProject == null)
- {
- // Host project was built prior to a workspace project being associated. We have nothing to do without
- // a workspace project so we short circuit.
- return;
- }
-
- // Doing an update to the project should keep computed values, but mark the project as dirty if the
- // underlying project is newer.
- var snapshot = original.WithWorkspaceProject(workspaceProject);
-
- _projects[hostProject.FilePath] = snapshot;
-
- // Notify the background worker so it can trigger tag helper discovery.
- NotifyBackgroundWorker(snapshot.CreateUpdateContext());
- }
- }
-
- public override void WorkspaceProjectAdded(Project workspaceProject)
- {
- if (workspaceProject == null)
- {
- throw new ArgumentNullException(nameof(workspaceProject));
- }
-
- _foregroundDispatcher.AssertForegroundThread();
-
- if (!IsSupportedWorkspaceProject(workspaceProject))
- {
- return;
- }
-
- // The WorkspaceProject initialization never triggers a "Project Add" from out point of view, we
- // only care if the new WorkspaceProject matches an existing HostProject.
- if (_projects.TryGetValue(workspaceProject.FilePath, out var original))
- {
- // If this is a multi-targeting project then we are only interested in a single workspace project. If we already
- // found one in the past just ignore this one.
- if (original.WorkspaceProject == null)
- {
- var snapshot = original.WithWorkspaceProject(workspaceProject);
- _projects[workspaceProject.FilePath] = snapshot;
-
- if (snapshot.IsInitialized && snapshot.IsDirty)
- {
- // We don't need to notify listeners yet because we don't have any **new** computed state.
- //
- // However we do need to trigger the background work to asynchronously compute the effect of the updates.
- NotifyBackgroundWorker(snapshot.CreateUpdateContext());
- }
-
- // Notify listeners right away since WorkspaceProject was just added, the project is now initialized.
- NotifyListeners(new ProjectChangeEventArgs(snapshot, ProjectChangeKind.Changed));
- }
- }
- }
-
- public override void WorkspaceProjectChanged(Project workspaceProject)
- {
- if (workspaceProject == null)
- {
- throw new ArgumentNullException(nameof(workspaceProject));
- }
-
- _foregroundDispatcher.AssertForegroundThread();
-
- if (!IsSupportedWorkspaceProject(workspaceProject))
- {
- return;
- }
-
- // We also need to check the projectId here. If this is a multi-targeting project then we are only interested
- // in a single workspace project. Just use the one that showed up first.
- if (_projects.TryGetValue(workspaceProject.FilePath, out var original) &&
- (original.WorkspaceProject == null ||
- original.WorkspaceProject.Id == workspaceProject.Id))
- {
- // Doing an update to the project should keep computed values, but mark the project as dirty if the
- // underlying project is newer.
- var snapshot = original.WithWorkspaceProject(workspaceProject);
- _projects[workspaceProject.FilePath] = snapshot;
-
- if (snapshot.IsInitialized && snapshot.IsDirty)
- {
- // We don't need to notify listeners yet because we don't have any **new** computed state. However we do
- // need to trigger the background work to asynchronously compute the effect of the updates.
- NotifyBackgroundWorker(snapshot.CreateUpdateContext());
- }
-
- if (snapshot.HaveTagHelpersChanged(original))
- {
- NotifyListeners(new ProjectChangeEventArgs(snapshot, ProjectChangeKind.TagHelpersChanged));
- }
- }
- }
-
- public override void WorkspaceProjectRemoved(Project workspaceProject)
- {
- if (workspaceProject == null)
- {
- throw new ArgumentNullException(nameof(workspaceProject));
- }
-
- _foregroundDispatcher.AssertForegroundThread();
-
- if (!IsSupportedWorkspaceProject(workspaceProject))
- {
- return;
- }
-
- if (_projects.TryGetValue(workspaceProject.FilePath, out var original))
- {
- // We also need to check the projectId here. If this is a multi-targeting project then we are only interested
- // in a single workspace project. Make sure the WorkspaceProject we're using is the one that's being removed.
- if (original.WorkspaceProject?.Id != workspaceProject.Id)
- {
- return;
- }
-
- DefaultProjectSnapshot snapshot;
-
- // So if the WorkspaceProject got removed, we should double check to make sure that there aren't others
- // hanging around. This could happen if a project is multi-targeting and one of the TFMs is removed.
- var otherWorkspaceProject = GetWorkspaceProject(workspaceProject.FilePath);
- if (otherWorkspaceProject != null && otherWorkspaceProject.Id != workspaceProject.Id)
- {
- // OK there's another WorkspaceProject, use that.
- //
- // Doing an update to the project should keep computed values, but mark the project as dirty if the
- // underlying project is newer.
- snapshot = original.WithWorkspaceProject(otherWorkspaceProject);
- _projects[workspaceProject.FilePath] = snapshot;
-
- if (snapshot.IsInitialized && snapshot.IsDirty)
- {
- // We don't need to notify listeners yet because we don't have any **new** computed state. However we do
- // need to trigger the background work to asynchronously compute the effect of the updates.
- NotifyBackgroundWorker(snapshot.CreateUpdateContext());
- }
-
- // Notify listeners of a change because it's a different WorkspaceProject.
- NotifyListeners(new ProjectChangeEventArgs(snapshot, ProjectChangeKind.Changed));
-
- return;
- }
-
- snapshot = original.RemoveWorkspaceProject();
- _projects[workspaceProject.FilePath] = snapshot;
-
- // Notify listeners of a change because we've removed computed state.
- NotifyListeners(new ProjectChangeEventArgs(snapshot, ProjectChangeKind.Changed));
- }
- }
-
- public override void ReportError(Exception exception)
- {
- if (exception == null)
- {
- throw new ArgumentNullException(nameof(exception));
- }
-
- _errorReporter.ReportError(exception);
- }
-
- public override void ReportError(Exception exception, ProjectSnapshot project)
- {
- if (exception == null)
- {
- throw new ArgumentNullException(nameof(exception));
- }
-
- _errorReporter.ReportError(exception, project);
- }
-
- public override void ReportError(Exception exception, HostProject hostProject)
- {
- if (exception == null)
- {
- throw new ArgumentNullException(nameof(exception));
- }
-
- var project = hostProject?.FilePath == null ? null : this.GetProjectWithFilePath(hostProject.FilePath);
- _errorReporter.ReportError(exception, project);
- }
-
- public override void ReportError(Exception exception, Project workspaceProject)
- {
- if (exception == null)
- {
- throw new ArgumentNullException(nameof(exception));
- }
-
- _errorReporter.ReportError(exception, workspaceProject);
- }
-
- // We're only interested in CSharp projects that have a FilePath. We rely on the FilePath to
- // unify the Workspace Project with our HostProject concept.
- private bool IsSupportedWorkspaceProject(Project workspaceProject) => workspaceProject.Language == LanguageNames.CSharp && workspaceProject.FilePath != null;
-
- private Project GetWorkspaceProject(string filePath)
- {
- var solution = Workspace.CurrentSolution;
- if (solution == null)
- {
- return null;
- }
-
- foreach (var workspaceProject in solution.Projects)
- {
- if (IsSupportedWorkspaceProject(workspaceProject) &&
- FilePathComparer.Instance.Equals(filePath, workspaceProject.FilePath))
- {
- // We don't try to handle mulitple TFMs anwhere in Razor, just take the first WorkspaceProject that is a match.
- return workspaceProject;
- }
- }
-
- return null;
- }
-
- // virtual so it can be overridden in tests
- protected virtual void NotifyBackgroundWorker(ProjectSnapshotUpdateContext context)
- {
- _foregroundDispatcher.AssertForegroundThread();
-
- _workerQueue.Enqueue(context);
- }
-
- // virtual so it can be overridden in tests
- protected virtual void NotifyListeners(ProjectChangeEventArgs e)
- {
- _foregroundDispatcher.AssertForegroundThread();
-
- var handler = Changed;
- if (handler != null)
- {
- handler(this, e);
- }
- }
- }
-}
\ No newline at end of file
diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/DefaultProjectSnapshotManagerFactory.cs b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/DefaultProjectSnapshotManagerFactory.cs
deleted file mode 100644
index d82d82cd7c3a..000000000000
--- a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/DefaultProjectSnapshotManagerFactory.cs
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.Collections.Generic;
-using System.Composition;
-using Microsoft.CodeAnalysis.Host;
-using Microsoft.CodeAnalysis.Host.Mef;
-
-namespace Microsoft.CodeAnalysis.Razor.ProjectSystem
-{
- [Shared]
- [ExportLanguageServiceFactory(typeof(ProjectSnapshotManager), RazorLanguage.Name)]
- internal class DefaultProjectSnapshotManagerFactory : ILanguageServiceFactory
- {
- private readonly IEnumerable _triggers;
- private readonly ForegroundDispatcher _foregroundDispatcher;
-
- [ImportingConstructor]
- public DefaultProjectSnapshotManagerFactory(
- ForegroundDispatcher foregroundDispatcher,
- [ImportMany] IEnumerable triggers)
- {
- if (foregroundDispatcher == null)
- {
- throw new ArgumentNullException(nameof(foregroundDispatcher));
- }
-
- if (triggers == null)
- {
- throw new ArgumentNullException(nameof(triggers));
- }
-
- _foregroundDispatcher = foregroundDispatcher;
- _triggers = triggers;
- }
-
- public ILanguageService CreateLanguageService(HostLanguageServices languageServices)
- {
- if (languageServices == null)
- {
- throw new ArgumentNullException(nameof(languageServices));
- }
-
- return new DefaultProjectSnapshotManager(
- _foregroundDispatcher,
- languageServices.WorkspaceServices.GetRequiredService(),
- languageServices.GetRequiredService(),
- _triggers,
- languageServices.WorkspaceServices.Workspace);
- }
- }
-}
diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/DefaultProjectSnapshotWorker.cs b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/DefaultProjectSnapshotWorker.cs
deleted file mode 100644
index 1b7480f940f9..000000000000
--- a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/DefaultProjectSnapshotWorker.cs
+++ /dev/null
@@ -1,62 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace Microsoft.CodeAnalysis.Razor.ProjectSystem
-{
- internal class DefaultProjectSnapshotWorker : ProjectSnapshotWorker
- {
- private readonly ForegroundDispatcher _foregroundDispatcher;
- private readonly TagHelperResolver _tagHelperResolver;
-
- public DefaultProjectSnapshotWorker(ForegroundDispatcher foregroundDispatcher, TagHelperResolver tagHelperResolver)
- {
- if (foregroundDispatcher == null)
- {
- throw new ArgumentNullException(nameof(foregroundDispatcher));
- }
-
- if (tagHelperResolver == null)
- {
- throw new ArgumentNullException(nameof(tagHelperResolver));
- }
-
- _foregroundDispatcher = foregroundDispatcher;
- _tagHelperResolver = tagHelperResolver;
- }
-
- public override Task ProcessUpdateAsync(ProjectSnapshotUpdateContext update, CancellationToken cancellationToken = default(CancellationToken))
- {
- if (update == null)
- {
- throw new ArgumentNullException(nameof(update));
- }
-
- // Don't block the main thread
- if (_foregroundDispatcher.IsForegroundThread)
- {
- return Task.Factory.StartNew(ProjectUpdatesCoreAsync, update, cancellationToken, TaskCreationOptions.None, _foregroundDispatcher.BackgroundScheduler);
- }
-
- return ProjectUpdatesCoreAsync(update);
- }
-
- protected virtual void OnProcessingUpdate()
- {
- }
-
- private async Task ProjectUpdatesCoreAsync(object state)
- {
- var update = (ProjectSnapshotUpdateContext)state;
-
- OnProcessingUpdate();
-
- var snapshot = new DefaultProjectSnapshot(update.HostProject, update.WorkspaceProject, update.Version);
- var result = await _tagHelperResolver.GetTagHelpersAsync(snapshot, CancellationToken.None);
- update.TagHelpers = result.Descriptors;
- }
- }
-}
diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/DefaultProjectSnapshotWorkerFactory.cs b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/DefaultProjectSnapshotWorkerFactory.cs
deleted file mode 100644
index bd36bf361d4a..000000000000
--- a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/DefaultProjectSnapshotWorkerFactory.cs
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System.Composition;
-using Microsoft.CodeAnalysis.Host;
-using Microsoft.CodeAnalysis.Host.Mef;
-
-namespace Microsoft.CodeAnalysis.Razor.ProjectSystem
-{
- [Shared]
- [ExportLanguageServiceFactory(typeof(ProjectSnapshotWorker), RazorLanguage.Name)]
- internal class DefaultProjectSnapshotWorkerFactory : ILanguageServiceFactory
- {
- private readonly ForegroundDispatcher _foregroundDispatcher;
-
- [ImportingConstructor]
- public DefaultProjectSnapshotWorkerFactory(ForegroundDispatcher foregroundDispatcher)
- {
- if (foregroundDispatcher == null)
- {
- throw new System.ArgumentNullException(nameof(foregroundDispatcher));
- }
-
- _foregroundDispatcher = foregroundDispatcher;
- }
-
- public ILanguageService CreateLanguageService(HostLanguageServices languageServices)
- {
- return new DefaultProjectSnapshotWorker(_foregroundDispatcher, languageServices.GetRequiredService());
- }
- }
-}
diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/FallbackRazorConfiguration.cs b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/FallbackRazorConfiguration.cs
deleted file mode 100644
index 024b421312a2..000000000000
--- a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/FallbackRazorConfiguration.cs
+++ /dev/null
@@ -1,88 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.Collections.Generic;
-using Microsoft.AspNetCore.Razor.Language;
-
-namespace Microsoft.CodeAnalysis.Razor.ProjectSystem
-{
- internal class FallbackRazorConfiguration : RazorConfiguration
- {
- public static readonly RazorConfiguration MVC_1_0 = new FallbackRazorConfiguration(
- RazorLanguageVersion.Version_1_0,
- "MVC-1.0",
- new[] { new FallbackRazorExtension("MVC-1.0"), });
-
- public static readonly RazorConfiguration MVC_1_1 = new FallbackRazorConfiguration(
- RazorLanguageVersion.Version_1_1,
- "MVC-1.1",
- new[] { new FallbackRazorExtension("MVC-1.1"), });
-
- public static readonly RazorConfiguration MVC_2_0 = new FallbackRazorConfiguration(
- RazorLanguageVersion.Version_2_0,
- "MVC-2.0",
- new[] { new FallbackRazorExtension("MVC-2.0"), });
-
- public static readonly RazorConfiguration MVC_2_1 = new FallbackRazorConfiguration(
- RazorLanguageVersion.Version_2_1,
- "MVC-2.1",
- new[] { new FallbackRazorExtension("MVC-2.1"), });
-
-
- public static RazorConfiguration SelectConfiguration(Version version)
- {
- if (version.Major == 1 && version.Minor == 0)
- {
- return MVC_1_0;
- }
- else if (version.Major == 1 && version.Minor == 1)
- {
- return MVC_1_1;
- }
- else if (version.Major == 2 && version.Minor == 0)
- {
- return MVC_2_0;
- }
- else if (version.Major == 2 && version.Minor == 1)
- {
- return MVC_2_1;
- }
- else
- {
- return MVC_2_1;
- }
- }
-
- public FallbackRazorConfiguration(
- RazorLanguageVersion languageVersion,
- string configurationName,
- RazorExtension[] extensions)
- {
- if (languageVersion == null)
- {
- throw new ArgumentNullException(nameof(languageVersion));
- }
-
- if (configurationName == null)
- {
- throw new ArgumentNullException(nameof(configurationName));
- }
-
- if (extensions == null)
- {
- throw new ArgumentNullException(nameof(extensions));
- }
-
- LanguageVersion = languageVersion;
- ConfigurationName = configurationName;
- Extensions = extensions;
- }
-
- public override string ConfigurationName { get; }
-
- public override IReadOnlyList Extensions { get; }
-
- public override RazorLanguageVersion LanguageVersion { get; }
- }
-}
diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/FallbackRazorExtension.cs b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/FallbackRazorExtension.cs
deleted file mode 100644
index 5080b0705dca..000000000000
--- a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/FallbackRazorExtension.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using Microsoft.AspNetCore.Razor.Language;
-
-namespace Microsoft.CodeAnalysis.Razor.ProjectSystem
-{
- internal class FallbackRazorExtension : RazorExtension
- {
- public FallbackRazorExtension(string extensionName)
- {
- if (extensionName == null)
- {
- throw new ArgumentNullException(nameof(extensionName));
- }
-
- ExtensionName = extensionName;
- }
-
- public override string ExtensionName { get; }
- }
-}
diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/HostProject.cs b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/HostProject.cs
deleted file mode 100644
index cf3c1524b6ed..000000000000
--- a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/HostProject.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using Microsoft.AspNetCore.Razor.Language;
-
-namespace Microsoft.CodeAnalysis.Razor.ProjectSystem
-{
- internal class HostProject
- {
- public HostProject(string projectFilePath, RazorConfiguration razorConfiguration)
- {
- if (projectFilePath == null)
- {
- throw new ArgumentNullException(nameof(projectFilePath));
- }
-
- if (razorConfiguration == null)
- {
- throw new ArgumentNullException(nameof(razorConfiguration));
- }
-
- FilePath = projectFilePath;
- Configuration = razorConfiguration;
- }
-
- public RazorConfiguration Configuration { get; }
-
- public string FilePath { get; }
- }
-}
\ No newline at end of file
diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/ProjectChangeEventArgs.cs b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/ProjectChangeEventArgs.cs
deleted file mode 100644
index eca6b56774c1..000000000000
--- a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/ProjectChangeEventArgs.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-
-namespace Microsoft.CodeAnalysis.Razor.ProjectSystem
-{
- internal class ProjectChangeEventArgs : EventArgs
- {
- public ProjectChangeEventArgs(ProjectSnapshot project, ProjectChangeKind kind)
- {
- Project = project;
- Kind = kind;
- }
-
- public ProjectSnapshot Project { get; }
-
- public ProjectChangeKind Kind { get; }
- }
-}
diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/ProjectChangeKind.cs b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/ProjectChangeKind.cs
deleted file mode 100644
index c2ff3feacf86..000000000000
--- a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/ProjectChangeKind.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-namespace Microsoft.CodeAnalysis.Razor.ProjectSystem
-{
- internal enum ProjectChangeKind
- {
- Added,
- Removed,
- Changed,
- TagHelpersChanged,
- }
-}
diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/ProjectExtensibilityAssembly.cs b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/ProjectExtensibilityAssembly.cs
deleted file mode 100644
index 43839f366485..000000000000
--- a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/ProjectExtensibilityAssembly.cs
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-
-namespace Microsoft.CodeAnalysis.Razor.ProjectSystem
-{
- internal sealed class ProjectExtensibilityAssembly : IEquatable
- {
- public ProjectExtensibilityAssembly(AssemblyIdentity identity)
- {
- if (identity == null)
- {
- throw new ArgumentNullException(nameof(identity));
- }
-
- Identity = identity;
- }
-
- public AssemblyIdentity Identity { get; }
-
- public bool Equals(ProjectExtensibilityAssembly other)
- {
- if (other == null)
- {
- return false;
- }
-
- return Identity.Equals(other.Identity);
- }
-
- public override int GetHashCode()
- {
- return Identity.GetHashCode();
- }
-
- public override bool Equals(object obj)
- {
- return base.Equals(obj as ProjectExtensibilityAssembly);
- }
- }
-}
diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/ProjectSnapshot.cs b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/ProjectSnapshot.cs
deleted file mode 100644
index 538b3cb9fa03..000000000000
--- a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/ProjectSnapshot.cs
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.Collections.Generic;
-using Microsoft.AspNetCore.Razor.Language;
-
-namespace Microsoft.CodeAnalysis.Razor.ProjectSystem
-{
- internal abstract class ProjectSnapshot
- {
- public abstract RazorConfiguration Configuration { get; }
-
- public abstract string FilePath { get; }
-
- public abstract bool IsInitialized { get; }
-
- public abstract IReadOnlyList TagHelpers { get; }
-
- public abstract VersionStamp Version { get; }
-
- public abstract Project WorkspaceProject { get; }
-
- public abstract HostProject HostProject { get; }
- }
-}
\ No newline at end of file
diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/ProjectSnapshotChangeTrigger.cs b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/ProjectSnapshotChangeTrigger.cs
deleted file mode 100644
index da27aefe0ce2..000000000000
--- a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/ProjectSnapshotChangeTrigger.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-namespace Microsoft.CodeAnalysis.Razor.ProjectSystem
-{
- internal abstract class ProjectSnapshotChangeTrigger
- {
- public abstract void Initialize(ProjectSnapshotManagerBase projectManager);
- }
-}
diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/ProjectSnapshotManager.cs b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/ProjectSnapshotManager.cs
deleted file mode 100644
index b9e39e00b184..000000000000
--- a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/ProjectSnapshotManager.cs
+++ /dev/null
@@ -1,16 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.Collections.Generic;
-using Microsoft.CodeAnalysis.Host;
-
-namespace Microsoft.CodeAnalysis.Razor.ProjectSystem
-{
- internal abstract class ProjectSnapshotManager : ILanguageService
- {
- public abstract event EventHandler Changed;
-
- public abstract IReadOnlyList Projects { get; }
- }
-}
diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/ProjectSnapshotManagerBase.cs b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/ProjectSnapshotManagerBase.cs
deleted file mode 100644
index 026b27956f48..000000000000
--- a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/ProjectSnapshotManagerBase.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-
-namespace Microsoft.CodeAnalysis.Razor.ProjectSystem
-{
- internal abstract class ProjectSnapshotManagerBase : ProjectSnapshotManager
- {
- public abstract Workspace Workspace { get; }
-
- public abstract void ProjectUpdated(ProjectSnapshotUpdateContext update);
-
- public abstract void HostProjectAdded(HostProject hostProject);
-
- public abstract void HostProjectChanged(HostProject hostProject);
-
- public abstract void HostProjectRemoved(HostProject hostProject);
-
- public abstract void HostProjectBuildComplete(HostProject hostProject);
-
- public abstract void WorkspaceProjectAdded(Project workspaceProject);
-
- public abstract void WorkspaceProjectChanged(Project workspaceProject);
-
- public abstract void WorkspaceProjectRemoved(Project workspaceProject);
-
- public abstract void ReportError(Exception exception);
-
- public abstract void ReportError(Exception exception, ProjectSnapshot project);
-
- public abstract void ReportError(Exception exception, HostProject hostProject);
-
- public abstract void ReportError(Exception exception, Project workspaceProject);
- }
-}
\ No newline at end of file
diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/ProjectSnapshotManagerExtensions.cs b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/ProjectSnapshotManagerExtensions.cs
deleted file mode 100644
index d6299717ca49..000000000000
--- a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/ProjectSnapshotManagerExtensions.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-
-namespace Microsoft.CodeAnalysis.Razor.ProjectSystem
-{
- internal static class ProjectSnapshotManagerExtensions
- {
- public static ProjectSnapshot GetProjectWithFilePath(this ProjectSnapshotManager snapshotManager, string filePath)
- {
- var projects = snapshotManager.Projects;
- for (var i = 0; i< projects.Count; i++)
- {
- var project = projects[i];
- if (FilePathComparer.Instance.Equals(filePath, project.FilePath))
- {
- return project;
- }
- }
-
- return null;
- }
- }
-}
diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/ProjectSnapshotUpdateContext.cs b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/ProjectSnapshotUpdateContext.cs
deleted file mode 100644
index cddb3b08c157..000000000000
--- a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/ProjectSnapshotUpdateContext.cs
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.Collections.Generic;
-using Microsoft.AspNetCore.Razor.Language;
-
-namespace Microsoft.CodeAnalysis.Razor.ProjectSystem
-{
- internal class ProjectSnapshotUpdateContext
- {
- public ProjectSnapshotUpdateContext(string filePath, HostProject hostProject, Project workspaceProject, VersionStamp version)
- {
- if (filePath == null)
- {
- throw new ArgumentNullException(nameof(filePath));
- }
-
- if (hostProject == null)
- {
- throw new ArgumentNullException(nameof(hostProject));
- }
-
- if (workspaceProject == null)
- {
- throw new ArgumentNullException(nameof(workspaceProject));
- }
-
- FilePath = filePath;
- HostProject = hostProject;
- WorkspaceProject = workspaceProject;
- Version = version;
- }
-
- public string FilePath { get; }
-
- public HostProject HostProject { get; }
-
- public Project WorkspaceProject { get; }
-
- public IReadOnlyList TagHelpers { get; set; }
-
- public VersionStamp Version { get; }
- }
-}
diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/ProjectSnapshotWorker.cs b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/ProjectSnapshotWorker.cs
deleted file mode 100644
index 5c6288ee2244..000000000000
--- a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/ProjectSnapshotWorker.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System.Threading;
-using System.Threading.Tasks;
-using Microsoft.CodeAnalysis.Host;
-
-namespace Microsoft.CodeAnalysis.Razor.ProjectSystem
-{
- internal abstract class ProjectSnapshotWorker : ILanguageService
- {
- public abstract Task ProcessUpdateAsync(ProjectSnapshotUpdateContext update, CancellationToken cancellationToken = default(CancellationToken));
- }
-}
diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/ProjectSnapshotWorkerQueue.cs b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/ProjectSnapshotWorkerQueue.cs
deleted file mode 100644
index 69c0062f0525..000000000000
--- a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/ProjectSnapshotWorkerQueue.cs
+++ /dev/null
@@ -1,203 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace Microsoft.CodeAnalysis.Razor.ProjectSystem
-{
- internal class ProjectSnapshotWorkerQueue
- {
- private readonly ForegroundDispatcher _foregroundDispatcher;
- private readonly DefaultProjectSnapshotManager _projectManager;
- private readonly ProjectSnapshotWorker _projectWorker;
-
- private readonly Dictionary _projects;
- private Timer _timer;
-
- public ProjectSnapshotWorkerQueue(ForegroundDispatcher foregroundDispatcher, DefaultProjectSnapshotManager projectManager, ProjectSnapshotWorker projectWorker)
- {
- if (foregroundDispatcher == null)
- {
- throw new ArgumentNullException(nameof(foregroundDispatcher));
- }
-
- if (projectManager == null)
- {
- throw new ArgumentNullException(nameof(projectManager));
- }
-
- if (projectWorker == null)
- {
- throw new ArgumentNullException(nameof(projectWorker));
- }
-
- _foregroundDispatcher = foregroundDispatcher;
- _projectManager = projectManager;
- _projectWorker = projectWorker;
-
- _projects = new Dictionary(FilePathComparer.Instance);
- }
-
- public bool HasPendingNotifications
- {
- get
- {
- lock (_projects)
- {
- return _projects.Count > 0;
- }
- }
- }
-
- // Used in unit tests to control the timer delay.
- public TimeSpan Delay { get; set; } = TimeSpan.FromSeconds(2);
-
- public bool IsScheduledOrRunning => _timer != null;
-
- // Used in unit tests to ensure we can control when background work starts.
- public ManualResetEventSlim BlockBackgroundWorkStart { get; set; }
-
- // Used in unit tests to ensure we can know when background work finishes.
- public ManualResetEventSlim NotifyBackgroundWorkFinish { get; set; }
-
- // Used in unit tests to ensure we can be notified when all completes.
- public ManualResetEventSlim NotifyForegroundWorkFinish { get; set; }
-
- private void OnStartingBackgroundWork()
- {
- if (BlockBackgroundWorkStart != null)
- {
- BlockBackgroundWorkStart.Wait();
- BlockBackgroundWorkStart.Reset();
- }
- }
-
- private void OnFinishingBackgroundWork()
- {
- if (NotifyBackgroundWorkFinish != null)
- {
- NotifyBackgroundWorkFinish.Set();
- }
- }
-
- private void OnFinishingForegroundWork()
- {
- if (NotifyForegroundWorkFinish != null)
- {
- NotifyForegroundWorkFinish.Set();
- }
- }
-
- public void Enqueue(ProjectSnapshotUpdateContext context)
- {
- if (context == null)
- {
- throw new ArgumentNullException(nameof(context));
- }
-
- _foregroundDispatcher.AssertForegroundThread();
-
- lock (_projects)
- {
- // We only want to store the last 'seen' version of any given project. That way when we pick one to process
- // it's always the best version to use.
- _projects[context.FilePath] = context;
-
- StartWorker();
- }
- }
-
- protected virtual void StartWorker()
- {
- // Access to the timer is protected by the lock in Enqueue and in Timer_Tick
- if (_timer == null)
- {
- // Timer will fire after a fixed delay, but only once.
- _timer = new Timer(Timer_Tick, null, Delay, Timeout.InfiniteTimeSpan);
- }
- }
-
- private async void Timer_Tick(object state) // Yeah I know.
- {
- try
- {
- _foregroundDispatcher.AssertBackgroundThread();
-
- // Timer is stopped.
- _timer.Change(Timeout.Infinite, Timeout.Infinite);
-
- OnStartingBackgroundWork();
-
- ProjectSnapshotUpdateContext[] work;
- lock (_projects)
- {
- work = _projects.Values.ToArray();
- _projects.Clear();
- }
-
- var updates = new(ProjectSnapshotUpdateContext context, Exception exception)[work.Length];
- for (var i = 0; i < work.Length; i++)
- {
- try
- {
- updates[i] = (work[i], null);
- await _projectWorker.ProcessUpdateAsync(updates[i].context);
- }
- catch (Exception projectException)
- {
- updates[i] = (updates[i].context, projectException);
- }
- }
-
- OnFinishingBackgroundWork();
-
- // We need to get back to the UI thread to update the project system.
- await Task.Factory.StartNew(PersistUpdates, updates, CancellationToken.None, TaskCreationOptions.None, _foregroundDispatcher.ForegroundScheduler);
-
- lock (_projects)
- {
- // Resetting the timer allows another batch of work to start.
- _timer.Dispose();
- _timer = null;
-
- // If more work came in while we were running start the worker again.
- if (_projects.Count > 0)
- {
- StartWorker();
- }
- }
-
- OnFinishingForegroundWork();
- }
- catch (Exception ex)
- {
- // This is something totally unexpected, let's just send it over to the workspace.
- await Task.Factory.StartNew(() => _projectManager.ReportError(ex), CancellationToken.None, TaskCreationOptions.None, _foregroundDispatcher.ForegroundScheduler);
- }
- }
-
- private void PersistUpdates(object state)
- {
- _foregroundDispatcher.AssertForegroundThread();
-
- var updates = ((ProjectSnapshotUpdateContext context, Exception exception)[])state;
-
- for (var i = 0; i < updates.Length; i++)
- {
- var update = updates[i];
- if (update.exception == null)
- {
- _projectManager.ProjectUpdated(update.context);
- }
- else
- {
- _projectManager.ReportError(update.exception, update.context?.WorkspaceProject);
- }
- }
- }
- }
-}
diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/ProjectSystemRazorConfiguration.cs b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/ProjectSystemRazorConfiguration.cs
deleted file mode 100644
index 43dfebe86445..000000000000
--- a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/ProjectSystemRazorConfiguration.cs
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.Collections.Generic;
-using Microsoft.AspNetCore.Razor.Language;
-
-namespace Microsoft.CodeAnalysis.Razor.ProjectSystem
-{
- internal class ProjectSystemRazorConfiguration : RazorConfiguration
- {
- public ProjectSystemRazorConfiguration(
- RazorLanguageVersion languageVersion,
- string configurationName,
- RazorExtension[] extensions)
- {
- if (languageVersion == null)
- {
- throw new ArgumentNullException(nameof(languageVersion));
- }
-
- if (configurationName == null)
- {
- throw new ArgumentNullException(nameof(configurationName));
- }
-
- if (extensions == null)
- {
- throw new ArgumentNullException(nameof(extensions));
- }
-
- LanguageVersion = languageVersion;
- ConfigurationName = configurationName;
- Extensions = extensions;
- }
-
- public override string ConfigurationName { get; }
-
- public override IReadOnlyList Extensions { get; }
-
- public override RazorLanguageVersion LanguageVersion { get; }
- }
-}
diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/ProjectSystemRazorExtension.cs b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/ProjectSystemRazorExtension.cs
deleted file mode 100644
index 77f742c5639a..000000000000
--- a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/ProjectSystemRazorExtension.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using Microsoft.AspNetCore.Razor.Language;
-
-namespace Microsoft.CodeAnalysis.Razor.ProjectSystem
-{
- internal class ProjectSystemRazorExtension : RazorExtension
- {
- public ProjectSystemRazorExtension(string extensionName)
- {
- if (extensionName == null)
- {
- throw new ArgumentNullException(nameof(extensionName));
- }
-
- ExtensionName = extensionName;
- }
-
- public override string ExtensionName { get; }
- }
-}
diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/WorkspaceProjectSnapshotChangeTrigger.cs b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/WorkspaceProjectSnapshotChangeTrigger.cs
deleted file mode 100644
index fb2deeec32c1..000000000000
--- a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/ProjectSystem/WorkspaceProjectSnapshotChangeTrigger.cs
+++ /dev/null
@@ -1,85 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System.Composition;
-using System.Diagnostics;
-
-namespace Microsoft.CodeAnalysis.Razor.ProjectSystem
-{
- [Export(typeof(ProjectSnapshotChangeTrigger))]
- internal class WorkspaceProjectSnapshotChangeTrigger : ProjectSnapshotChangeTrigger
- {
- private ProjectSnapshotManagerBase _projectManager;
-
- public override void Initialize(ProjectSnapshotManagerBase projectManager)
- {
- _projectManager = projectManager;
- _projectManager.Workspace.WorkspaceChanged += Workspace_WorkspaceChanged;
-
- InitializeSolution(_projectManager.Workspace.CurrentSolution);
- }
-
- private void InitializeSolution(Solution solution)
- {
- Debug.Assert(solution != null);
-
- foreach (var project in solution.Projects)
- {
- _projectManager.WorkspaceProjectAdded(project);
- }
- }
-
- // Internal for testing
- internal void Workspace_WorkspaceChanged(object sender, WorkspaceChangeEventArgs e)
- {
- Project project;
- switch (e.Kind)
- {
- case WorkspaceChangeKind.ProjectAdded:
- {
- project = e.NewSolution.GetProject(e.ProjectId);
- Debug.Assert(project != null);
-
- _projectManager.WorkspaceProjectAdded(project);
- break;
- }
-
- case WorkspaceChangeKind.ProjectChanged:
- case WorkspaceChangeKind.ProjectReloaded:
- {
- project = e.NewSolution.GetProject(e.ProjectId);
- Debug.Assert(project != null);
-
- _projectManager.WorkspaceProjectChanged(project);
- break;
- }
-
- case WorkspaceChangeKind.ProjectRemoved:
- {
- project = e.OldSolution.GetProject(e.ProjectId);
- Debug.Assert(project != null);
-
- _projectManager.WorkspaceProjectRemoved(project);
- break;
- }
-
- case WorkspaceChangeKind.SolutionAdded:
- case WorkspaceChangeKind.SolutionChanged:
- case WorkspaceChangeKind.SolutionCleared:
- case WorkspaceChangeKind.SolutionReloaded:
- case WorkspaceChangeKind.SolutionRemoved:
-
- if (e.OldSolution != null)
- {
- foreach (var p in e.OldSolution.Projects)
- {
- _projectManager.WorkspaceProjectRemoved(p);
- }
- }
-
- InitializeSolution(e.NewSolution);
- break;
- }
- }
- }
-}
diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/Properties/AssemblyInfo.cs b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/Properties/AssemblyInfo.cs
deleted file mode 100644
index e70ec9920f94..000000000000
--- a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System.Runtime.CompilerServices;
-[assembly: InternalsVisibleTo("Microsoft.AspNetCore.Razor.Performance, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
-[assembly: InternalsVisibleTo("Microsoft.VisualStudio.Mac.RazorAddin, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
-[assembly: InternalsVisibleTo("Microsoft.CodeAnalysis.Razor.Workspaces.Test, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
-[assembly: InternalsVisibleTo("Microsoft.CodeAnalysis.Remote.Razor, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
-[assembly: InternalsVisibleTo("Microsoft.VisualStudio.Editor.Razor, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
-[assembly: InternalsVisibleTo("Microsoft.VisualStudio.Editor.Razor.Test, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
-[assembly: InternalsVisibleTo("Microsoft.VisualStudio.Editor.Razor.Test.Common, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
-[assembly: InternalsVisibleTo("Microsoft.VisualStudio.Mac.LanguageServices.Razor, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
-[assembly: InternalsVisibleTo("Microsoft.VisualStudio.Mac.LanguageServices.Razor.Test, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
-[assembly: InternalsVisibleTo("Microsoft.VisualStudio.LanguageServices.Razor, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
-[assembly: InternalsVisibleTo("Microsoft.VisualStudio.LanguageServices.Razor.Test, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
-[assembly: InternalsVisibleTo("Microsoft.VisualStudio.RazorExtension, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
-[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7")]
diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/Properties/Resources.Designer.cs b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/Properties/Resources.Designer.cs
deleted file mode 100644
index 058b78c6ed93..000000000000
--- a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/Properties/Resources.Designer.cs
+++ /dev/null
@@ -1,86 +0,0 @@
-//
-namespace Microsoft.CodeAnalysis.Razor.Workspaces
-{
- using System.Globalization;
- using System.Reflection;
- using System.Resources;
-
- internal static class Resources
- {
- private static readonly ResourceManager _resourceManager
- = new ResourceManager("Microsoft.CodeAnalysis.Razor.Workspaces.Resources", typeof(Resources).GetTypeInfo().Assembly);
-
- ///
- /// Value cannot be null or an empty string.
- ///
- internal static string ArgumentCannotBeNullOrEmpty
- {
- get => GetString("ArgumentCannotBeNullOrEmpty");
- }
-
- ///
- /// Value cannot be null or an empty string.
- ///
- internal static string FormatArgumentCannotBeNullOrEmpty()
- => GetString("ArgumentCannotBeNullOrEmpty");
-
- ///
- /// {0} must be called on a background thread.
- ///
- internal static string ForegroundDispatcher_AssertBackgroundThread
- {
- get => GetString("ForegroundDispatcher_AssertBackgroundThread");
- }
-
- ///
- /// {0} must be called on a background thread.
- ///
- internal static string FormatForegroundDispatcher_AssertBackgroundThread(object p0)
- => string.Format(CultureInfo.CurrentCulture, GetString("ForegroundDispatcher_AssertBackgroundThread"), p0);
-
- ///
- /// {0} must be called on the foreground thread.
- ///
- internal static string ForegroundDispatcher_AssertForegroundThread
- {
- get => GetString("ForegroundDispatcher_AssertForegroundThread");
- }
-
- ///
- /// {0} must be called on the foreground thread.
- ///
- internal static string FormatForegroundDispatcher_AssertForegroundThread(object p0)
- => string.Format(CultureInfo.CurrentCulture, GetString("ForegroundDispatcher_AssertForegroundThread"), p0);
-
- ///
- /// The method
- ///
- internal static string ForegroundDispatcher_NoMethodNamePlaceholder
- {
- get => GetString("ForegroundDispatcher_NoMethodNamePlaceholder");
- }
-
- ///
- /// The method
- ///
- internal static string FormatForegroundDispatcher_NoMethodNamePlaceholder()
- => GetString("ForegroundDispatcher_NoMethodNamePlaceholder");
-
- private static string GetString(string name, params string[] formatterNames)
- {
- var value = _resourceManager.GetString(name);
-
- System.Diagnostics.Debug.Assert(value != null);
-
- if (formatterNames != null)
- {
- for (var i = 0; i < formatterNames.Length; i++)
- {
- value = value.Replace("{" + formatterNames[i] + "}", "{" + i + "}");
- }
- }
-
- return value;
- }
- }
-}
diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/RazorProjectEngineFactoryService.cs b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/RazorProjectEngineFactoryService.cs
deleted file mode 100644
index 4defb2194746..000000000000
--- a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/RazorProjectEngineFactoryService.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using Microsoft.AspNetCore.Razor.Language;
-using Microsoft.CodeAnalysis.Host;
-using Microsoft.CodeAnalysis.Razor.ProjectSystem;
-
-namespace Microsoft.CodeAnalysis.Razor
-{
- internal abstract class RazorProjectEngineFactoryService : ILanguageService
- {
- public abstract IProjectEngineFactory FindFactory(ProjectSnapshot project);
-
- public abstract IProjectEngineFactory FindSerializableFactory(ProjectSnapshot project);
-
- public abstract RazorProjectEngine Create(ProjectSnapshot project, Action configure);
-
- public abstract RazorProjectEngine Create(ProjectSnapshot project, RazorProjectFileSystem fileSystem, Action configure);
-
- public abstract RazorProjectEngine Create(string directoryPath, Action configure);
- }
-}
\ No newline at end of file
diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/Resources.resx b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/Resources.resx
deleted file mode 100644
index fca5a30e158d..000000000000
--- a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/Resources.resx
+++ /dev/null
@@ -1,132 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 2.0
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- Value cannot be null or an empty string.
-
-
- {0} must be called on a background thread.
-
-
- {0} must be called on the foreground thread.
-
-
- The method
-
-
\ No newline at end of file
diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/TagHelperResolutionResult.cs b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/TagHelperResolutionResult.cs
deleted file mode 100644
index 0e8c7b19efc7..000000000000
--- a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/TagHelperResolutionResult.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.Collections.Generic;
-using Microsoft.AspNetCore.Razor.Language;
-
-namespace Microsoft.CodeAnalysis.Razor
-{
- public sealed class TagHelperResolutionResult
- {
- internal static TagHelperResolutionResult Empty = new TagHelperResolutionResult(Array.Empty(), Array.Empty());
-
- public TagHelperResolutionResult(IReadOnlyList descriptors, IReadOnlyList diagnostics)
- {
- Descriptors = descriptors;
- Diagnostics = diagnostics;
- }
-
- public IReadOnlyList Descriptors { get; }
-
- public IReadOnlyList Diagnostics { get; }
- }
-}
\ No newline at end of file
diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/TagHelperResolver.cs b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/TagHelperResolver.cs
deleted file mode 100644
index 847e22a67454..000000000000
--- a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/TagHelperResolver.cs
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading;
-using System.Threading.Tasks;
-using Microsoft.AspNetCore.Razor.Language;
-using Microsoft.CodeAnalysis.Host;
-using Microsoft.CodeAnalysis.Razor.ProjectSystem;
-
-namespace Microsoft.CodeAnalysis.Razor
-{
- internal abstract class TagHelperResolver : ILanguageService
- {
- public abstract Task GetTagHelpersAsync(ProjectSnapshot project, CancellationToken cancellationToken = default);
-
- protected virtual async Task GetTagHelpersAsync(ProjectSnapshot project, RazorProjectEngine engine)
- {
- if (project == null)
- {
- throw new ArgumentNullException(nameof(project));
- }
-
- if (engine == null)
- {
- throw new ArgumentNullException(nameof(engine));
- }
-
- if (project.WorkspaceProject == null)
- {
- return TagHelperResolutionResult.Empty;
- }
-
- var providers = engine.Engine.Features.OfType().ToArray();
- if (providers.Length == 0)
- {
- return TagHelperResolutionResult.Empty;
- }
-
- var results = new List();
- var context = TagHelperDescriptorProviderContext.Create(results);
- context.ExcludeHidden = true;
- context.IncludeDocumentation = true;
-
- var compilation = await project.WorkspaceProject.GetCompilationAsync().ConfigureAwait(false);
- context.SetCompilation(compilation);
-
- for (var i = 0; i < providers.Length; i++)
- {
- var provider = providers[i];
- provider.Execute(context);
- }
-
- return new TagHelperResolutionResult(results, Array.Empty());
- }
- }
-}
diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Razor/Properties/AssemblyInfo.cs b/src/Razor/src/Microsoft.CodeAnalysis.Razor/Properties/AssemblyInfo.cs
index a43f1d9aa4f4..2a41d968e366 100644
--- a/src/Razor/src/Microsoft.CodeAnalysis.Razor/Properties/AssemblyInfo.cs
+++ b/src/Razor/src/Microsoft.CodeAnalysis.Razor/Properties/AssemblyInfo.cs
@@ -5,9 +5,4 @@
[assembly: InternalsVisibleTo("Microsoft.CodeAnalysis.Razor.Test, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
[assembly: InternalsVisibleTo("Microsoft.AspNetCore.Mvc.Razor.Extensions.Test, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
-[assembly: InternalsVisibleTo("Microsoft.CodeAnalysis.Razor.Workspaces, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
-[assembly: InternalsVisibleTo("Microsoft.CodeAnalysis.Razor.Workspaces.Test, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
-[assembly: InternalsVisibleTo("Microsoft.CodeAnalysis.Remote.Razor, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
-[assembly: InternalsVisibleTo("Microsoft.VisualStudio.LanguageServices.Razor, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
-[assembly: InternalsVisibleTo("Microsoft.VisualStudio.RazorExtension, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7")]
diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/GeneratedDocument.cs b/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/GeneratedDocument.cs
deleted file mode 100644
index 8299fce59564..000000000000
--- a/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/GeneratedDocument.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-namespace Microsoft.CodeAnalysis.Remote.Razor
-{
- internal class GeneratedDocument
- {
- public string Text { get; set; }
- }
-}
diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/Microsoft.CodeAnalysis.Remote.Razor.csproj b/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/Microsoft.CodeAnalysis.Remote.Razor.csproj
deleted file mode 100644
index 369dd8202089..000000000000
--- a/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/Microsoft.CodeAnalysis.Remote.Razor.csproj
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
-
- Razor is a markup syntax for adding server-side logic to web pages. This package contains the Razor design-time infrastructure.
- net46
- false
-
-
-
-
- Serialization\%(FileName)%(Extension)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/Properties/AssemblyInfo.cs b/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/Properties/AssemblyInfo.cs
deleted file mode 100644
index fd7f2d2f87ce..000000000000
--- a/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System.Runtime.CompilerServices;
-
-[assembly: InternalsVisibleTo("Microsoft.CodeAnalysis.Remote.Razor.Test, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
-[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7")]
diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RazorLanguageService.cs b/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RazorLanguageService.cs
deleted file mode 100644
index ecde04c7528f..000000000000
--- a/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RazorLanguageService.cs
+++ /dev/null
@@ -1,68 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Text;
-using System.Threading;
-using System.Threading.Tasks;
-using Microsoft.AspNetCore.Razor.Language;
-using Microsoft.CodeAnalysis.Razor;
-using Microsoft.CodeAnalysis.Razor.ProjectSystem;
-
-namespace Microsoft.CodeAnalysis.Remote.Razor
-{
- internal class RazorLanguageService : RazorServiceBase
- {
- public RazorLanguageService(Stream stream, IServiceProvider serviceProvider)
- : base(stream, serviceProvider)
- {
- }
-
- public async Task GetTagHelpersAsync(ProjectSnapshotHandle projectHandle, string factoryTypeName, CancellationToken cancellationToken = default)
- {
- var project = await GetProjectSnapshotAsync(projectHandle, cancellationToken).ConfigureAwait(false);
-
- return await RazorServices.TagHelperResolver.GetTagHelpersAsync(project, factoryTypeName, cancellationToken);
- }
-
- public Task> GetDirectivesAsync(Guid projectIdBytes, string projectDebugName, CancellationToken cancellationToken = default(CancellationToken))
- {
- var projectId = ProjectId.CreateFromSerialized(projectIdBytes, projectDebugName);
-
- var projectEngine = RazorProjectEngine.Create();
- var directives = projectEngine.EngineFeatures.OfType().FirstOrDefault()?.Directives;
- return Task.FromResult(directives ?? Enumerable.Empty());
- }
-
- public Task GenerateDocumentAsync(Guid projectIdBytes, string projectDebugName, string filePath, string text, CancellationToken cancellationToken = default(CancellationToken))
- {
- var projectId = ProjectId.CreateFromSerialized(projectIdBytes, projectDebugName);
-
- var projectEngine = RazorProjectEngine.Create();
-
- RazorSourceDocument source;
- using (var stream = new MemoryStream())
- {
- var bytes = Encoding.UTF8.GetBytes(text);
- stream.Write(bytes, 0, bytes.Length);
-
- stream.Seek(0L, SeekOrigin.Begin);
- source = RazorSourceDocument.ReadFrom(stream, filePath, Encoding.UTF8);
- }
-
- var code = RazorCodeDocument.Create(source);
- projectEngine.Engine.Process(code);
-
- var csharp = code.GetCSharpDocument();
- if (csharp == null)
- {
- throw new InvalidOperationException();
- }
-
- return Task.FromResult(new GeneratedDocument() { Text = csharp.GeneratedCode, });
- }
- }
-}
diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RazorServiceBase.cs b/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RazorServiceBase.cs
deleted file mode 100644
index 8fdbdd81da0f..000000000000
--- a/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RazorServiceBase.cs
+++ /dev/null
@@ -1,74 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-using System.Threading.Tasks;
-using Microsoft.AspNetCore.Razor.Language;
-using Microsoft.CodeAnalysis.Razor;
-using Microsoft.CodeAnalysis.Razor.ProjectSystem;
-
-namespace Microsoft.CodeAnalysis.Remote.Razor
-{
- internal abstract class RazorServiceBase : ServiceHubServiceBase
- {
- public RazorServiceBase(Stream stream, IServiceProvider serviceProvider)
- : base(serviceProvider, stream)
- {
- RazorServices = new RazorServices();
-
- Rpc.JsonSerializer.Converters.RegisterRazorConverters();
-
- // Due to this issue - https://github.com/dotnet/roslyn/issues/16900#issuecomment-277378950
- // We need to manually start the RPC connection. Otherwise we'd be opting ourselves into
- // race condition prone call paths.
- Rpc.StartListening();
- }
-
- protected RazorServices RazorServices { get; }
-
- protected virtual async Task GetProjectSnapshotAsync(ProjectSnapshotHandle projectHandle, CancellationToken cancellationToken)
- {
- if (projectHandle == null)
- {
- throw new ArgumentNullException(nameof(projectHandle));
- }
-
- var solution = await GetSolutionAsync(cancellationToken).ConfigureAwait(false);
- var workspaceProject = solution.GetProject(projectHandle.WorkspaceProjectId);
-
- return new SerializedProjectSnapshot(projectHandle.FilePath, projectHandle.Configuration, workspaceProject);
- }
-
- private class SerializedProjectSnapshot : ProjectSnapshot
- {
- public SerializedProjectSnapshot(string filePath, RazorConfiguration configuration, Project workspaceProject)
- {
- FilePath = filePath;
- Configuration = configuration;
- HostProject = new HostProject(filePath, configuration);
- WorkspaceProject = workspaceProject;
- TagHelpers = Array.Empty();
-
- IsInitialized = true;
- Version = VersionStamp.Default;
- }
-
- public override RazorConfiguration Configuration { get; }
-
- public override string FilePath { get; }
-
- public override bool IsInitialized { get; }
-
- public override VersionStamp Version { get; }
-
- public override Project WorkspaceProject { get; }
-
- public override HostProject HostProject { get; }
-
- public override IReadOnlyList TagHelpers { get; }
- }
- }
-}
diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RazorServices.cs b/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RazorServices.cs
deleted file mode 100644
index d3a60a400c88..000000000000
--- a/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RazorServices.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-namespace Microsoft.CodeAnalysis.Razor
-{
- // Provides access to Razor language and workspace services that are avialable in the OOP host.
- //
- // Since we don't have access to the workspace we only have access to some specific things
- // that we can construct directly.
- internal class RazorServices
- {
- public RazorServices()
- {
- FallbackProjectEngineFactory = new FallbackProjectEngineFactory();
- TagHelperResolver = new RemoteTagHelperResolver(FallbackProjectEngineFactory);
- }
-
- public IFallbackProjectEngineFactory FallbackProjectEngineFactory { get; }
-
- public RemoteTagHelperResolver TagHelperResolver { get; }
- }
-}
diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RemoteTagHelperResolver.cs b/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RemoteTagHelperResolver.cs
deleted file mode 100644
index f4ccaf775505..000000000000
--- a/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RemoteTagHelperResolver.cs
+++ /dev/null
@@ -1,80 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.Threading;
-using System.Threading.Tasks;
-using Microsoft.AspNetCore.Razor.Language;
-using Microsoft.CodeAnalysis.Razor.ProjectSystem;
-
-namespace Microsoft.CodeAnalysis.Razor
-{
- internal class RemoteTagHelperResolver : TagHelperResolver
- {
- private readonly static RazorConfiguration DefaultConfiguration = FallbackRazorConfiguration.MVC_2_0;
-
- private readonly IFallbackProjectEngineFactory _fallbackFactory;
-
- public RemoteTagHelperResolver(IFallbackProjectEngineFactory fallbackFactory)
- {
- if (fallbackFactory == null)
- {
- throw new ArgumentNullException(nameof(fallbackFactory));
- }
-
- _fallbackFactory = fallbackFactory;
- }
-
- public override Task GetTagHelpersAsync(ProjectSnapshot project, CancellationToken cancellationToken = default)
- {
- throw new NotImplementedException();
- }
-
- public Task GetTagHelpersAsync(ProjectSnapshot project, string factoryTypeName, CancellationToken cancellationToken = default)
- {
- if (project == null)
- {
- throw new ArgumentNullException(nameof(project));
- }
-
- if (project.Configuration == null || project.WorkspaceProject == null)
- {
- return Task.FromResult(TagHelperResolutionResult.Empty);
- }
-
- var engine = CreateProjectEngine(project, factoryTypeName);
- return GetTagHelpersAsync(project, engine);
- }
-
- internal RazorProjectEngine CreateProjectEngine(ProjectSnapshot project, string factoryTypeName)
- {
- // This section is really similar to the code DefaultProjectEngineFactoryService
- // but with a few differences that are significant in the remote scenario
- //
- // Most notably, we are going to find the Tag Helpers using a compilation, and we have
- // no editor settings.
- //
- // The default configuration currently matches MVC-2.0. Beyond MVC-2.0 we added SDK support for
- // properly detecting project versions, so that's a good version to assume when we can't find a
- // configuration.
- var configuration = project?.Configuration ?? DefaultConfiguration;
-
- // If there's no factory to handle the configuration then fall back to a very basic configuration.
- //
- // This will stop a crash from happening in this case (misconfigured project), but will still make
- // it obvious to the user that something is wrong.
- var factory = CreateFactory(configuration, factoryTypeName) ?? _fallbackFactory;
- return factory.Create(configuration, RazorProjectFileSystem.Empty, b => { });
- }
-
- private IProjectEngineFactory CreateFactory(RazorConfiguration configuration, string factoryTypeName)
- {
- if (factoryTypeName == null)
- {
- return null;
- }
-
- return (IProjectEngineFactory)Activator.CreateInstance(Type.GetType(factoryTypeName, throwOnError: true));
- }
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/AcceptedCharacters.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/AcceptedCharacters.cs
deleted file mode 100644
index 1d9ba282e9ba..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/AcceptedCharacters.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- [Flags]
- public enum AcceptedCharacters
- {
- None = 0,
- NewLine = 1,
- WhiteSpace = 2,
-
- NonWhiteSpace = 4,
-
- AllWhiteSpace = NewLine | WhiteSpace,
- Any = AllWhiteSpace | NonWhiteSpace,
-
- AnyExceptNewline = NonWhiteSpace | WhiteSpace
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/AttributeCompletionContext.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/AttributeCompletionContext.cs
deleted file mode 100644
index 08b4ffe03253..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/AttributeCompletionContext.cs
+++ /dev/null
@@ -1,73 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.Collections.Generic;
-using Microsoft.AspNetCore.Razor.Language;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- public class AttributeCompletionContext
- {
- public AttributeCompletionContext(
- TagHelperDocumentContext documentContext,
- IEnumerable existingCompletions,
- string currentTagName,
- string currentAttributeName,
- IEnumerable> attributes,
- string currentParentTagName,
- bool currentParentIsTagHelper,
- Func inHTMLSchema)
- {
- if (documentContext == null)
- {
- throw new ArgumentNullException(nameof(documentContext));
- }
-
- if (existingCompletions == null)
- {
- throw new ArgumentNullException(nameof(existingCompletions));
- }
-
- if (currentTagName == null)
- {
- throw new ArgumentNullException(nameof(currentTagName));
- }
-
- if (attributes == null)
- {
- throw new ArgumentNullException(nameof(attributes));
- }
-
- if (inHTMLSchema == null)
- {
- throw new ArgumentNullException(nameof(inHTMLSchema));
- }
-
- DocumentContext = documentContext;
- ExistingCompletions = existingCompletions;
- CurrentTagName = currentTagName;
- CurrentAttributeName = currentAttributeName;
- Attributes = attributes;
- CurrentParentTagName = currentParentTagName;
- CurrentParentIsTagHelper = currentParentIsTagHelper;
- InHTMLSchema = inHTMLSchema;
- }
-
- public TagHelperDocumentContext DocumentContext { get; }
-
- public IEnumerable ExistingCompletions { get; }
-
- public string CurrentTagName { get; }
-
- public string CurrentAttributeName { get; }
-
- public IEnumerable> Attributes { get; }
-
- public string CurrentParentTagName { get; }
-
- public bool CurrentParentIsTagHelper { get; }
-
- public Func InHTMLSchema { get; }
- }
-}
\ No newline at end of file
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/AttributeCompletionResult.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/AttributeCompletionResult.cs
deleted file mode 100644
index c6a11d67ed98..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/AttributeCompletionResult.cs
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System.Collections.Generic;
-using System.Linq;
-using Microsoft.AspNetCore.Razor.Language;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- public abstract class AttributeCompletionResult
- {
- private AttributeCompletionResult()
- {
- }
-
- public abstract IReadOnlyDictionary> Completions { get; }
-
- internal static AttributeCompletionResult Create(Dictionary> completions)
- {
- var readonlyCompletions = completions.ToDictionary(
- key => key.Key,
- value => (IEnumerable)value.Value,
- completions.Comparer);
- var result = new DefaultAttributeCompletionResult(readonlyCompletions);
-
- return result;
- }
-
- private class DefaultAttributeCompletionResult : AttributeCompletionResult
- {
- private readonly IReadOnlyDictionary> _completions;
-
- public DefaultAttributeCompletionResult(IReadOnlyDictionary> completions)
- {
- _completions = completions;
- }
-
- public override IReadOnlyDictionary> Completions => _completions;
- }
- }
-}
\ No newline at end of file
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/BackgroundParser.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/BackgroundParser.cs
deleted file mode 100644
index 9a7cabb8e13c..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/BackgroundParser.cs
+++ /dev/null
@@ -1,405 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.IO;
-using System.Linq;
-using System.Text;
-using System.Threading;
-using Microsoft.AspNetCore.Razor.Language;
-using Microsoft.AspNetCore.Razor.Language.Legacy;
-using Microsoft.VisualStudio.Text;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- internal class BackgroundParser : IDisposable
- {
- private MainThreadState _main;
- private BackgroundThread _bg;
-
- public BackgroundParser(RazorProjectEngine projectEngine, string filePath, string projectDirectory)
- {
- _main = new MainThreadState(filePath);
- _bg = new BackgroundThread(_main, projectEngine, filePath, projectDirectory);
-
- _main.ResultsReady += (sender, args) => OnResultsReady(args);
- }
-
- ///
- /// Fired on the main thread.
- ///
- public event EventHandler ResultsReady;
-
- public bool IsIdle
- {
- get { return _main.IsIdle; }
- }
-
- public void Start()
- {
- _bg.Start();
- }
-
- public void Cancel()
- {
- _main.Cancel();
- }
-
- public void QueueChange(SourceChange change, ITextSnapshot snapshot)
- {
- var edit = new Edit(change, snapshot);
- _main.QueueChange(edit);
- }
-
- public void Dispose()
- {
- _main.Cancel();
- }
-
- public IDisposable SynchronizeMainThreadState()
- {
- return _main.Lock();
- }
-
- protected virtual void OnResultsReady(DocumentStructureChangedEventArgs args)
- {
- using (SynchronizeMainThreadState())
- {
- ResultsReady?.Invoke(this, args);
- }
- }
-
- private abstract class ThreadStateBase
- {
-#if DEBUG
- private int _id = -1;
-#endif
- protected ThreadStateBase()
- {
- }
-
- [Conditional("DEBUG")]
- protected void SetThreadId(int id)
- {
-#if DEBUG
- _id = id;
-#endif
- }
-
- [Conditional("DEBUG")]
- protected void EnsureOnThread()
- {
-#if DEBUG
- Debug.Assert(_id != -1, "SetThreadId was never called!");
- Debug.Assert(Thread.CurrentThread.ManagedThreadId == _id, "Called from an unexpected thread!");
-#endif
- }
-
- [Conditional("DEBUG")]
- protected void EnsureNotOnThread()
- {
-#if DEBUG
- Debug.Assert(_id != -1, "SetThreadId was never called!");
- Debug.Assert(Thread.CurrentThread.ManagedThreadId != _id, "Called from an unexpected thread!");
-#endif
- }
- }
-
- private class MainThreadState : ThreadStateBase, IDisposable
- {
- private readonly CancellationTokenSource _cancelSource = new CancellationTokenSource();
- private readonly ManualResetEventSlim _hasParcel = new ManualResetEventSlim(false);
- private CancellationTokenSource _currentParcelCancelSource;
-
- private string _fileName;
- private readonly object _stateLock = new object();
- private IList _changes = new List();
-
- public MainThreadState(string fileName)
- {
- _fileName = fileName;
-
- SetThreadId(Thread.CurrentThread.ManagedThreadId);
- }
-
- public event EventHandler ResultsReady;
-
- public CancellationToken CancelToken
- {
- get { return _cancelSource.Token; }
- }
-
- public bool IsIdle
- {
- get
- {
- lock (_stateLock)
- {
- return _currentParcelCancelSource == null;
- }
- }
- }
-
- public void Cancel()
- {
- EnsureOnThread();
- _cancelSource.Cancel();
- }
-
- public IDisposable Lock()
- {
- Monitor.Enter(_stateLock);
- return new DisposableAction(() => Monitor.Exit(_stateLock));
- }
-
- public void QueueChange(Edit edit)
- {
- // Any thread can queue a change.
-
- lock (_stateLock)
- {
- // CurrentParcel token source is not null ==> There's a parse underway
- if (_currentParcelCancelSource != null)
- {
- _currentParcelCancelSource.Cancel();
- }
-
- _changes.Add(edit);
- _hasParcel.Set();
- }
- }
-
- public WorkParcel GetParcel()
- {
- EnsureNotOnThread(); // Only the background thread can get a parcel
- _hasParcel.Wait(_cancelSource.Token);
- _hasParcel.Reset();
- lock (_stateLock)
- {
- // Create a cancellation source for this parcel
- _currentParcelCancelSource = new CancellationTokenSource();
-
- var changes = _changes;
- _changes = new List();
- return new WorkParcel(changes, _currentParcelCancelSource.Token);
- }
- }
-
- public void ReturnParcel(DocumentStructureChangedEventArgs args)
- {
- lock (_stateLock)
- {
- // Clear the current parcel cancellation source
- if (_currentParcelCancelSource != null)
- {
- _currentParcelCancelSource.Dispose();
- _currentParcelCancelSource = null;
- }
-
- // If there are things waiting to be parsed, just don't fire the event because we're already out of date
- if (_changes.Any())
- {
- return;
- }
- }
- var handler = ResultsReady;
- if (handler != null)
- {
- handler(this, args);
- }
- }
-
- public void Dispose()
- {
- Dispose(true);
- GC.SuppressFinalize(this);
- }
-
- protected virtual void Dispose(bool disposing)
- {
- if (disposing)
- {
- if (_currentParcelCancelSource != null)
- {
- _currentParcelCancelSource.Dispose();
- _currentParcelCancelSource = null;
- }
- _cancelSource.Dispose();
- _hasParcel.Dispose();
- }
- }
- }
-
- private class BackgroundThread : ThreadStateBase
- {
- private readonly string _filePath;
- private readonly string _relativeFilePath;
- private readonly string _projectDirectory;
- private MainThreadState _main;
- private Thread _backgroundThread;
- private CancellationToken _shutdownToken;
- private RazorProjectEngine _projectEngine;
- private RazorSyntaxTree _currentSyntaxTree;
- private IList _previouslyDiscarded = new List();
-
- public BackgroundThread(MainThreadState main, RazorProjectEngine projectEngine, string filePath, string projectDirectory)
- {
- // Run on MAIN thread!
- _main = main;
- _shutdownToken = _main.CancelToken;
- _projectEngine = projectEngine;
- _filePath = filePath;
- _relativeFilePath = GetNormalizedRelativeFilePath(filePath, projectDirectory);
- _projectDirectory = projectDirectory;
- _backgroundThread = new Thread(WorkerLoop);
- SetThreadId(_backgroundThread.ManagedThreadId);
- }
-
- // **** ANY THREAD ****
- public void Start()
- {
- _backgroundThread.Start();
- }
-
- // **** BACKGROUND THREAD ****
- private void WorkerLoop()
- {
- try
- {
- EnsureOnThread();
-
- while (!_shutdownToken.IsCancellationRequested)
- {
- // Grab the parcel of work to do
- var parcel = _main.GetParcel();
- if (parcel.Edits.Any())
- {
- try
- {
- DocumentStructureChangedEventArgs args = null;
- using (var linkedCancel = CancellationTokenSource.CreateLinkedTokenSource(_shutdownToken, parcel.CancelToken))
- {
- if (!linkedCancel.IsCancellationRequested)
- {
- // Collect ALL changes
- List allEdits;
-
- if (_previouslyDiscarded != null)
- {
- allEdits = Enumerable.Concat(_previouslyDiscarded, parcel.Edits).ToList();
- }
- else
- {
- allEdits = parcel.Edits.ToList();
- }
-
- var finalEdit = allEdits.Last();
-
- var results = ParseChange(finalEdit.Snapshot, linkedCancel.Token);
-
- if (results != null && !linkedCancel.IsCancellationRequested)
- {
- // Clear discarded changes list
- _previouslyDiscarded = null;
-
- _currentSyntaxTree = results.GetSyntaxTree();
-
- // Build Arguments
- args = new DocumentStructureChangedEventArgs(
- finalEdit.Change,
- finalEdit.Snapshot,
- results);
- }
- else
- {
- // Parse completed but we were cancelled in the mean time. Add these to the discarded changes set
- _previouslyDiscarded = allEdits;
- }
- }
- }
- if (args != null)
- {
- _main.ReturnParcel(args);
- }
- }
- catch (OperationCanceledException)
- {
- }
- }
- else
- {
- Thread.Yield();
- }
- }
- }
- catch (OperationCanceledException)
- {
- // Do nothing. Just shut down.
- }
- finally
- {
- // Clean up main thread resources
- _main.Dispose();
- }
- }
-
- private RazorCodeDocument ParseChange(ITextSnapshot snapshot, CancellationToken token)
- {
- EnsureOnThread();
-
- var projectItem = new TextSnapshotProjectItem(snapshot, _projectDirectory, _relativeFilePath, _filePath);
- var codeDocument = _projectEngine.ProcessDesignTime(projectItem);
-
- return codeDocument;
- }
-
- private string GetNormalizedRelativeFilePath(string filePath, string projectDirectory)
- {
- if (filePath.StartsWith(projectDirectory, StringComparison.OrdinalIgnoreCase))
- {
- filePath = filePath.Substring(projectDirectory.Length);
- }
-
- if (filePath.Length > 1)
- {
- filePath = filePath.Replace('\\', '/');
-
- if (filePath[0] != '/')
- {
- filePath = "/" + filePath;
- }
- }
-
- return filePath;
- }
- }
-
- private class WorkParcel
- {
- public WorkParcel(IList changes, CancellationToken cancelToken)
- {
- Edits = changes;
- CancelToken = cancelToken;
- }
-
- public CancellationToken CancelToken { get; }
-
- public IList Edits { get; }
- }
-
- private class Edit
- {
- public Edit(SourceChange change, ITextSnapshot snapshot)
- {
- Change = change;
- Snapshot = snapshot;
- }
-
- public SourceChange Change { get; }
-
- public ITextSnapshot Snapshot { get; set; }
- }
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/BlockKind.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/BlockKind.cs
deleted file mode 100644
index 255923132961..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/BlockKind.cs
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- public enum BlockKind
- {
- // Code
- Statement,
- Directive,
- Functions,
- Expression,
- Helper,
-
- // Markup
- Markup,
- Section,
- Template,
-
- // Special
- Comment,
- Tag,
-
- HtmlComment
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/BraceSmartIndenter.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/BraceSmartIndenter.cs
deleted file mode 100644
index ff9c69c4e2bf..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/BraceSmartIndenter.cs
+++ /dev/null
@@ -1,259 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.Diagnostics;
-using System.Text;
-using Microsoft.AspNetCore.Razor.Language.Legacy;
-using Microsoft.CodeAnalysis.Razor;
-using Microsoft.VisualStudio.Text;
-using Microsoft.VisualStudio.Text.Editor;
-using Microsoft.VisualStudio.Text.Operations;
-using ITextBuffer = Microsoft.VisualStudio.Text.ITextBuffer;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- ///
- /// This class is responsible for handling situations where Roslyn and the HTML editor cannot auto-indent Razor code.
- ///
- ///
- /// Attempting to insert a newline (pipe indicates the cursor):
- /// @{ |}
- /// Should result in the text buffer looking like the following:
- /// @{
- /// |
- /// }
- /// This is also true for directive block scenarios.
- ///
- internal class BraceSmartIndenter : IDisposable
- {
- private readonly ForegroundDispatcher _dispatcher;
- private readonly ITextBuffer _textBuffer;
- private readonly VisualStudioDocumentTracker _documentTracker;
- private readonly IEditorOperationsFactoryService _editorOperationsFactory;
- private readonly StringBuilder _indentBuilder = new StringBuilder();
- private BraceIndentationContext _context;
-
- // Internal for testing
- internal BraceSmartIndenter()
- {
- }
-
- public BraceSmartIndenter(
- ForegroundDispatcher dispatcher,
- VisualStudioDocumentTracker documentTracker,
- IEditorOperationsFactoryService editorOperationsFactory)
- {
- if (dispatcher == null)
- {
- throw new ArgumentNullException(nameof(dispatcher));
- }
-
- if (documentTracker == null)
- {
- throw new ArgumentNullException(nameof(documentTracker));
- }
-
- if (editorOperationsFactory == null)
- {
- throw new ArgumentNullException(nameof(editorOperationsFactory));
- }
-
- _dispatcher = dispatcher;
- _documentTracker = documentTracker;
- _editorOperationsFactory = editorOperationsFactory;
- _textBuffer = _documentTracker.TextBuffer;
- _textBuffer.Changed += TextBuffer_OnChanged;
- _textBuffer.PostChanged += TextBuffer_OnPostChanged;
- }
-
- public void Dispose()
- {
- _dispatcher.AssertForegroundThread();
-
- _textBuffer.Changed -= TextBuffer_OnChanged;
- _textBuffer.PostChanged -= TextBuffer_OnPostChanged;
- }
-
- // Internal for testing
- internal void TriggerSmartIndent(ITextView textView)
- {
- // This forces the smart indent. For example attempting to enter a newline between the functions directive:
- // @functions {} will not auto-indent in between the braces unless we forcefully move to end of line.
- var editorOperations = _editorOperationsFactory.GetEditorOperations(textView);
- editorOperations.MoveToEndOfLine(false);
- }
-
- // Internal for testing
- internal void TextBuffer_OnChanged(object sender, TextContentChangedEventArgs args)
- {
- _dispatcher.AssertForegroundThread();
-
- if (!args.TextChangeOccurred(out var changeInformation))
- {
- return;
- }
-
- var newText = changeInformation.newText;
- if (TryCreateIndentationContext(changeInformation.firstChange.NewPosition, newText.Length, newText, _documentTracker, out var context))
- {
- _context = context;
- }
- }
-
- private void TextBuffer_OnPostChanged(object sender, EventArgs e)
- {
- _dispatcher.AssertForegroundThread();
-
- var context = _context;
- _context = null;
-
- if (context != null)
- {
- // Save the current caret position
- var textView = context.FocusedTextView;
- var caret = textView.Caret.Position.BufferPosition;
- var textViewBuffer = textView.TextBuffer;
- var indent = CalculateIndent(textViewBuffer, context.ChangePosition);
-
- // Current state, pipe is cursor:
- // @{
- // |}
-
- // Insert the completion text, i.e. "\r\n "
- InsertIndent(caret.Position, indent, textViewBuffer);
-
- // @{
- //
- // |}
-
- // Place the caret inbetween the braces (before our indent).
- RestoreCaretTo(caret.Position, textView);
-
- // @{
- // |
- // }
-
- // For Razor metacode cases the editor's smart indent wont kick in automatically.
- TriggerSmartIndent(textView);
-
- // @{
- // |
- // }
- }
- }
-
- private string CalculateIndent(ITextBuffer buffer, int from)
- {
- // Get the line text of the block start
- var currentSnapshotPoint = new SnapshotPoint(buffer.CurrentSnapshot, from);
- var line = buffer.CurrentSnapshot.GetLineFromPosition(currentSnapshotPoint);
- var lineText = line.GetText();
-
- // Gather up the indent from the start block
- _indentBuilder.Append(line.GetLineBreakText());
- foreach (var ch in lineText)
- {
- if (!char.IsWhiteSpace(ch))
- {
- break;
- }
- _indentBuilder.Append(ch);
- }
-
- var indent = _indentBuilder.ToString();
- _indentBuilder.Clear();
-
- return indent;
- }
-
- // Internal for testing
- internal static void InsertIndent(int insertLocation, string indent, ITextBuffer textBuffer)
- {
- var edit = textBuffer.CreateEdit();
- edit.Insert(insertLocation, indent);
- edit.Apply();
- }
-
- // Internal for testing
- internal static void RestoreCaretTo(int caretPosition, ITextView textView)
- {
- var currentSnapshotPoint = new SnapshotPoint(textView.TextBuffer.CurrentSnapshot, caretPosition);
- textView.Caret.MoveTo(currentSnapshotPoint);
- }
-
- // Internal for testing
- internal static bool TryCreateIndentationContext(int changePosition, int changeLength, string finalText, VisualStudioDocumentTracker documentTracker, out BraceIndentationContext context)
- {
- var focusedTextView = documentTracker.GetFocusedTextView();
- if (focusedTextView != null && ParserHelpers.IsNewLine(finalText))
- {
- var currentSnapshot = documentTracker.TextBuffer.CurrentSnapshot;
- var preChangeLineSnapshot = currentSnapshot.GetLineFromPosition(changePosition);
-
- // Handle the case where the \n comes through separately from the \r and the position
- // on the line is beyond what the GetText call above gives back.
- var linePosition = Math.Min(preChangeLineSnapshot.Length, changePosition - preChangeLineSnapshot.Start) - 1;
-
- if (AfterOpeningBrace(linePosition, preChangeLineSnapshot))
- {
- var afterChangePosition = changePosition + changeLength;
- var afterChangeLineSnapshot = currentSnapshot.GetLineFromPosition(afterChangePosition);
- var afterChangeLinePosition = afterChangePosition - afterChangeLineSnapshot.Start;
-
- if (BeforeClosingBrace(afterChangeLinePosition, afterChangeLineSnapshot))
- {
- context = new BraceIndentationContext(focusedTextView, changePosition);
- return true;
- }
- }
- }
-
- context = null;
- return false;
- }
-
- internal static bool BeforeClosingBrace(int linePosition, ITextSnapshotLine lineSnapshot)
- {
- var lineText = lineSnapshot.GetText();
- for (; linePosition < lineSnapshot.Length; linePosition++)
- {
- if (!char.IsWhiteSpace(lineText[linePosition]))
- {
- break;
- }
- }
-
- var beforeClosingBrace = linePosition < lineSnapshot.Length && lineText[linePosition] == '}';
- return beforeClosingBrace;
- }
-
- internal static bool AfterOpeningBrace(int linePosition, ITextSnapshotLine lineSnapshot)
- {
- var lineText = lineSnapshot.GetText();
- for (; linePosition >= 0; linePosition--)
- {
- if (!char.IsWhiteSpace(lineText[linePosition]))
- {
- break;
- }
- }
-
- var afterClosingBrace = linePosition >= 0 && lineText[linePosition] == '{';
- return afterClosingBrace;
- }
-
- internal class BraceIndentationContext
- {
- public BraceIndentationContext(ITextView focusedTextView, int changePosition)
- {
- FocusedTextView = focusedTextView;
- ChangePosition = changePosition;
- }
-
- public ITextView FocusedTextView { get; }
-
- public int ChangePosition { get; }
- }
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/BraceSmartIndenterFactory.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/BraceSmartIndenterFactory.cs
deleted file mode 100644
index 691181df6953..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/BraceSmartIndenterFactory.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using Microsoft.CodeAnalysis.Host;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- internal abstract class BraceSmartIndenterFactory : ILanguageService
- {
- public abstract BraceSmartIndenter Create(VisualStudioDocumentTracker documentTracker);
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/BufferGraphExtensions.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/BufferGraphExtensions.cs
deleted file mode 100644
index 1d16e0f0822c..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/BufferGraphExtensions.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.Collections.ObjectModel;
-using Microsoft.VisualStudio.Text.Projection;
-
-namespace Microsoft.VisualStudio.Text
-{
- internal static class BufferGraphExtensions
- {
- public static Collection GetRazorBuffers(this IBufferGraph bufferGraph)
- {
- if (bufferGraph == null)
- {
- throw new ArgumentNullException(nameof(bufferGraph));
- }
-
- return bufferGraph.GetTextBuffers(TextBufferExtensions.IsRazorBuffer);
- }
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/ClassifiedSpan.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/ClassifiedSpan.cs
deleted file mode 100644
index dc066c8fce8c..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/ClassifiedSpan.cs
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using Microsoft.AspNetCore.Razor.Language;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- public struct ClassifiedSpan
- {
- public ClassifiedSpan(SourceSpan span, SourceSpan blockSpan, SpanKind spanKind, BlockKind blockKind, AcceptedCharacters acceptedCharacters)
- {
- Span = span;
- BlockSpan = blockSpan;
- SpanKind = spanKind;
- BlockKind = blockKind;
- AcceptedCharacters = acceptedCharacters;
- }
-
- public AcceptedCharacters AcceptedCharacters { get; }
-
- public BlockKind BlockKind { get; }
-
- public SourceSpan BlockSpan { get; }
-
- public SourceSpan Span { get; }
-
- public SpanKind SpanKind { get; }
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/ContextChangeEventArgs.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/ContextChangeEventArgs.cs
deleted file mode 100644
index ad28406a15a6..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/ContextChangeEventArgs.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- public sealed class ContextChangeEventArgs : EventArgs
- {
- public ContextChangeEventArgs(ContextChangeKind kind)
- {
- Kind = kind;
- }
-
- public ContextChangeKind Kind { get; }
- }
-}
\ No newline at end of file
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/ContextChangeKind.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/ContextChangeKind.cs
deleted file mode 100644
index 2a9509967638..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/ContextChangeKind.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- public enum ContextChangeKind
- {
- ProjectChanged,
- EditorSettingsChanged,
- TagHelpersChanged,
- ImportsChanged,
- }
-}
\ No newline at end of file
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultBraceSmartIndenterFactory.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultBraceSmartIndenterFactory.cs
deleted file mode 100644
index 9f8a0f91d24e..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultBraceSmartIndenterFactory.cs
+++ /dev/null
@@ -1,47 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using Microsoft.CodeAnalysis.Razor;
-using Microsoft.VisualStudio.Text.Operations;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- internal class DefaultBraceSmartIndenterFactory : BraceSmartIndenterFactory
- {
- private readonly IEditorOperationsFactoryService _editorOperationsFactory;
- private readonly ForegroundDispatcher _dispatcher;
-
- public DefaultBraceSmartIndenterFactory(
- ForegroundDispatcher dispatcher,
- IEditorOperationsFactoryService editorOperationsFactory)
- {
- if (dispatcher == null)
- {
- throw new ArgumentNullException(nameof(dispatcher));
- }
-
- if (editorOperationsFactory == null)
- {
- throw new ArgumentNullException(nameof(editorOperationsFactory));
- }
-
- _dispatcher = dispatcher;
- _editorOperationsFactory = editorOperationsFactory;
- }
-
- public override BraceSmartIndenter Create(VisualStudioDocumentTracker documentTracker)
- {
- if (documentTracker == null)
- {
- throw new ArgumentNullException(nameof(documentTracker));
- }
-
- _dispatcher.AssertForegroundThread();
-
- var braceSmartIndenter = new BraceSmartIndenter(_dispatcher, documentTracker, _editorOperationsFactory);
-
- return braceSmartIndenter;
- }
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultBraceSmartIndenterFactoryFactory.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultBraceSmartIndenterFactoryFactory.cs
deleted file mode 100644
index 7657e1599fb1..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultBraceSmartIndenterFactoryFactory.cs
+++ /dev/null
@@ -1,47 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.Composition;
-using Microsoft.CodeAnalysis.Host;
-using Microsoft.CodeAnalysis.Host.Mef;
-using Microsoft.CodeAnalysis.Razor;
-using Microsoft.VisualStudio.Text.Operations;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- [Shared]
- [ExportLanguageServiceFactory(typeof(BraceSmartIndenterFactory), RazorLanguage.Name, ServiceLayer.Default)]
- internal class DefaultBraceSmartIndenterFactoryFactory : ILanguageServiceFactory
- {
- private readonly ForegroundDispatcher _foregroundDispatcher;
- private readonly IEditorOperationsFactoryService _editorOperationsFactory;
-
- [ImportingConstructor]
- public DefaultBraceSmartIndenterFactoryFactory(ForegroundDispatcher foregroundDispatcher, IEditorOperationsFactoryService editorOperationsFactory)
- {
- if (foregroundDispatcher == null)
- {
- throw new ArgumentNullException(nameof(foregroundDispatcher));
- }
-
- if (editorOperationsFactory == null)
- {
- throw new ArgumentNullException(nameof(editorOperationsFactory));
- }
-
- _foregroundDispatcher = foregroundDispatcher;
- _editorOperationsFactory = editorOperationsFactory;
- }
-
- public ILanguageService CreateLanguageService(HostLanguageServices languageServices)
- {
- if (languageServices == null)
- {
- throw new ArgumentNullException(nameof(languageServices));
- }
-
- return new DefaultBraceSmartIndenterFactory(_foregroundDispatcher, _editorOperationsFactory);
- }
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultCodeDocumentProvider.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultCodeDocumentProvider.cs
deleted file mode 100644
index 61fafc8a847a..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultCodeDocumentProvider.cs
+++ /dev/null
@@ -1,62 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.ComponentModel.Composition;
-using Microsoft.AspNetCore.Razor.Language;
-using Microsoft.CodeAnalysis;
-using Microsoft.CodeAnalysis.Razor;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- [System.Composition.Shared]
- [Export(typeof(RazorCodeDocumentProvider))]
- internal class DefaultCodeDocumentProvider : RazorCodeDocumentProvider
- {
- private readonly RazorTextBufferProvider _bufferProvider;
- private readonly TextBufferCodeDocumentProvider _codeDocumentProvider;
-
- [ImportingConstructor]
- public DefaultCodeDocumentProvider(
- RazorTextBufferProvider bufferProvider,
- TextBufferCodeDocumentProvider codeDocumentProvider)
- {
- if (bufferProvider == null)
- {
- throw new ArgumentNullException(nameof(bufferProvider));
- }
-
- if (codeDocumentProvider == null)
- {
- throw new ArgumentNullException(nameof(codeDocumentProvider));
- }
-
- _bufferProvider = bufferProvider;
- _codeDocumentProvider = codeDocumentProvider;
- }
-
- public override bool TryGetFromDocument(TextDocument document, out RazorCodeDocument codeDocument)
- {
- if (document == null)
- {
- throw new ArgumentNullException(nameof(document));
- }
-
- if (!_bufferProvider.TryGetFromDocument(document, out var textBuffer))
- {
- // Could not find a Razor buffer associated with the document.
- codeDocument = null;
- return false;
- }
-
- if (_codeDocumentProvider.TryGetFromBuffer(textBuffer, out codeDocument))
- {
- return true;
- }
-
- // A Razor code document has not yet been associated with the buffer yet.
- codeDocument = null;
- return false;
- }
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultEditorSettingsManager.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultEditorSettingsManager.cs
deleted file mode 100644
index cba58513084b..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultEditorSettingsManager.cs
+++ /dev/null
@@ -1,67 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.Collections.Generic;
-using System.ComponentModel.Composition;
-using Microsoft.CodeAnalysis.Razor;
-using Microsoft.CodeAnalysis.Razor.Editor;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- [System.Composition.Shared]
- [Export(typeof(EditorSettingsManager))]
- internal class DefaultEditorSettingsManager : EditorSettingsManager
- {
- public override event EventHandler Changed;
-
- private readonly object SettingsAccessorLock = new object();
- private readonly ForegroundDispatcher _foregroundDispatcher;
- private EditorSettings _settings;
-
- [ImportingConstructor]
- public DefaultEditorSettingsManager(ForegroundDispatcher foregroundDispatcher)
- {
- _foregroundDispatcher = foregroundDispatcher;
- _settings = EditorSettings.Default;
- }
-
- public override EditorSettings Current
- {
- get
- {
- lock (SettingsAccessorLock)
- {
- return _settings;
- }
- }
- }
-
- public override void Update(EditorSettings updatedSettings)
- {
- if (updatedSettings == null)
- {
- throw new ArgumentNullException(nameof(updatedSettings));
- }
-
- _foregroundDispatcher.AssertForegroundThread();
-
- lock (SettingsAccessorLock)
- {
- if (!_settings.Equals(updatedSettings))
- {
- _settings = updatedSettings;
- OnChanged();
- }
- }
- }
-
- private void OnChanged()
- {
- _foregroundDispatcher.AssertForegroundThread();
-
- var args = new EditorSettingsChangedEventArgs(Current);
- Changed?.Invoke(this, args);
- }
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultImportDocumentManager.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultImportDocumentManager.cs
deleted file mode 100644
index 2e8c5a450a64..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultImportDocumentManager.cs
+++ /dev/null
@@ -1,170 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.IO;
-using System.Linq;
-using Microsoft.AspNetCore.Razor.Language;
-using Microsoft.CodeAnalysis.Razor;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- internal class DefaultImportDocumentManager : ImportDocumentManager
- {
- private readonly FileChangeTrackerFactory _fileChangeTrackerFactory;
- private readonly ForegroundDispatcher _foregroundDispatcher;
- private readonly ErrorReporter _errorReporter;
- private readonly RazorProjectEngineFactoryService _projectEngineFactoryService;
- private readonly Dictionary _importTrackerCache;
-
- public override event EventHandler Changed;
-
- public DefaultImportDocumentManager(
- ForegroundDispatcher foregroundDispatcher,
- ErrorReporter errorReporter,
- FileChangeTrackerFactory fileChangeTrackerFactory,
- RazorProjectEngineFactoryService projectEngineFactoryService)
- {
- if (foregroundDispatcher == null)
- {
- throw new ArgumentNullException(nameof(foregroundDispatcher));
- }
-
- if (errorReporter == null)
- {
- throw new ArgumentNullException(nameof(errorReporter));
- }
-
- if (fileChangeTrackerFactory == null)
- {
- throw new ArgumentNullException(nameof(fileChangeTrackerFactory));
- }
-
- if (projectEngineFactoryService == null)
- {
- throw new ArgumentNullException(nameof(projectEngineFactoryService));
- }
-
- _foregroundDispatcher = foregroundDispatcher;
- _errorReporter = errorReporter;
- _fileChangeTrackerFactory = fileChangeTrackerFactory;
- _projectEngineFactoryService = projectEngineFactoryService;
- _importTrackerCache = new Dictionary(StringComparer.OrdinalIgnoreCase);
- }
-
- public override void OnSubscribed(VisualStudioDocumentTracker tracker)
- {
- if (tracker == null)
- {
- throw new ArgumentNullException(nameof(tracker));
- }
-
- _foregroundDispatcher.AssertForegroundThread();
-
- var imports = GetImportItems(tracker);
- foreach (var import in imports)
- {
- var importFilePath = import.PhysicalPath;
- Debug.Assert(importFilePath != null);
-
- if (!_importTrackerCache.TryGetValue(importFilePath, out var importTracker))
- {
- // First time seeing this import. Start tracking it.
- var fileChangeTracker = _fileChangeTrackerFactory.Create(importFilePath);
- importTracker = new ImportTracker(fileChangeTracker);
- _importTrackerCache[importFilePath] = importTracker;
-
- fileChangeTracker.Changed += FileChangeTracker_Changed;
- fileChangeTracker.StartListening();
- }
-
- importTracker.AssociatedDocuments.Add(tracker.FilePath);
- }
- }
-
- public override void OnUnsubscribed(VisualStudioDocumentTracker tracker)
- {
- if (tracker == null)
- {
- throw new ArgumentNullException(nameof(tracker));
- }
-
- _foregroundDispatcher.AssertForegroundThread();
-
- var imports = GetImportItems(tracker);
- foreach (var import in imports)
- {
- var importFilePath = import.PhysicalPath;
- Debug.Assert(importFilePath != null);
-
- if (_importTrackerCache.TryGetValue(importFilePath, out var importTracker))
- {
- importTracker.AssociatedDocuments.Remove(tracker.FilePath);
-
- if (importTracker.AssociatedDocuments.Count == 0)
- {
- // There are no open documents that care about this import. We no longer need to track it.
- importTracker.FileChangeTracker.StopListening();
- _importTrackerCache.Remove(importFilePath);
- }
- }
- }
- }
-
- private IEnumerable GetImportItems(VisualStudioDocumentTracker tracker)
- {
- var projectDirectory = Path.GetDirectoryName(tracker.ProjectPath);
- var projectEngine = _projectEngineFactoryService.Create(projectDirectory, _ => { });
- var trackerItem = projectEngine.FileSystem.GetItem(tracker.FilePath);
- var importFeature = projectEngine.ProjectFeatures.OfType().FirstOrDefault();
-
- // There should always be an import feature unless someone has misconfigured their RazorProjectEngine.
- // In that case once we attempt to parse the Razor file we'll explode and give the a user a decent
- // error message; for now, lets just be extra protective and assume 0 imports to not give a bad error.
- var importItems = importFeature?.GetImports(trackerItem) ?? Enumerable.Empty();
- var physicalImports = importItems.Where(import => import.FilePath != null);
-
- return physicalImports;
- }
-
- private void OnChanged(ImportTracker importTracker, FileChangeKind changeKind)
- {
- _foregroundDispatcher.AssertForegroundThread();
-
- if (Changed == null)
- {
- return;
- }
-
- var args = new ImportChangedEventArgs(importTracker.FilePath, changeKind, importTracker.AssociatedDocuments);
- Changed.Invoke(this, args);
- }
-
- private void FileChangeTracker_Changed(object sender, FileChangeEventArgs args)
- {
- _foregroundDispatcher.AssertForegroundThread();
-
- if (_importTrackerCache.TryGetValue(args.FilePath, out var importTracker))
- {
- OnChanged(importTracker, args.Kind);
- }
- }
-
- private class ImportTracker
- {
- public ImportTracker(FileChangeTracker fileChangeTracker)
- {
- FileChangeTracker = fileChangeTracker;
- AssociatedDocuments = new HashSet(StringComparer.OrdinalIgnoreCase);
- }
-
- public string FilePath => FileChangeTracker.FilePath;
-
- public FileChangeTracker FileChangeTracker { get; }
-
- public HashSet AssociatedDocuments { get; }
- }
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultImportDocumentManagerFactory.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultImportDocumentManagerFactory.cs
deleted file mode 100644
index 47efa8b96c19..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultImportDocumentManagerFactory.cs
+++ /dev/null
@@ -1,47 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.Composition;
-using Microsoft.CodeAnalysis.Host;
-using Microsoft.CodeAnalysis.Host.Mef;
-using Microsoft.CodeAnalysis.Razor;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- [Shared]
- [ExportLanguageServiceFactory(typeof(ImportDocumentManager), RazorLanguage.Name, ServiceLayer.Default)]
- internal class DefaultImportDocumentManagerFactory : ILanguageServiceFactory
- {
- private readonly ForegroundDispatcher _foregroundDispatcher;
-
- [ImportingConstructor]
- public DefaultImportDocumentManagerFactory(ForegroundDispatcher foregroundDispatcher)
- {
- if (foregroundDispatcher == null)
- {
- throw new ArgumentNullException(nameof(foregroundDispatcher));
- }
-
- _foregroundDispatcher = foregroundDispatcher;
- }
-
- public ILanguageService CreateLanguageService(HostLanguageServices languageServices)
- {
- if (languageServices == null)
- {
- throw new ArgumentNullException(nameof(languageServices));
- }
-
- var errorReporter = languageServices.WorkspaceServices.GetRequiredService();
- var fileChangeTrackerFactory = languageServices.GetRequiredService();
- var projectEngineFactoryService = languageServices.GetRequiredService();
-
- return new DefaultImportDocumentManager(
- _foregroundDispatcher,
- errorReporter,
- fileChangeTrackerFactory,
- projectEngineFactoryService);
- }
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultProjectEngineFactoryService.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultProjectEngineFactoryService.cs
deleted file mode 100644
index d70f82619e8a..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultProjectEngineFactoryService.cs
+++ /dev/null
@@ -1,196 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.IO;
-using Microsoft.AspNetCore.Razor.Language;
-using Microsoft.CodeAnalysis;
-using Microsoft.CodeAnalysis.Razor;
-using Microsoft.CodeAnalysis.Razor.ProjectSystem;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- internal class DefaultProjectEngineFactoryService : RazorProjectEngineFactoryService
- {
- private readonly static RazorConfiguration DefaultConfiguration = FallbackRazorConfiguration.MVC_2_1;
-
- private readonly Workspace _workspace;
- private readonly IFallbackProjectEngineFactory _defaultFactory;
- private readonly Lazy[] _customFactories;
- private ProjectSnapshotManager _projectManager;
-
- public DefaultProjectEngineFactoryService(
- Workspace workspace,
- IFallbackProjectEngineFactory defaultFactory,
- Lazy[] customFactories)
- {
- if (workspace == null)
- {
- throw new ArgumentNullException(nameof(workspace));
- }
-
- if (defaultFactory == null)
- {
- throw new ArgumentNullException(nameof(defaultFactory));
- }
-
- if (customFactories == null)
- {
- throw new ArgumentNullException(nameof(customFactories));
- }
-
- _workspace = workspace;
- _defaultFactory = defaultFactory;
- _customFactories = customFactories;
- }
-
- // Internal for testing
- internal DefaultProjectEngineFactoryService(
- ProjectSnapshotManager projectManager,
- IFallbackProjectEngineFactory defaultFactory,
- Lazy[] customFactories)
- {
- if (projectManager == null)
- {
- throw new ArgumentNullException(nameof(projectManager));
- }
-
- if (defaultFactory == null)
- {
- throw new ArgumentNullException(nameof(defaultFactory));
- }
-
- if (customFactories == null)
- {
- throw new ArgumentNullException(nameof(customFactories));
- }
-
- _projectManager = projectManager;
- _defaultFactory = defaultFactory;
- _customFactories = customFactories;
- }
-
- public override IProjectEngineFactory FindFactory(ProjectSnapshot project)
- {
- if (project == null)
- {
- throw new ArgumentNullException(nameof(project));
- }
-
- return SelectFactory(project.Configuration ?? DefaultConfiguration, requireSerializable: false);
- }
-
- public override IProjectEngineFactory FindSerializableFactory(ProjectSnapshot project)
- {
- if (project == null)
- {
- throw new ArgumentNullException(nameof(project));
- }
-
- return SelectFactory(project.Configuration ?? DefaultConfiguration, requireSerializable: true);
- }
-
- public override RazorProjectEngine Create(ProjectSnapshot project, Action configure)
- {
- if (project == null)
- {
- throw new ArgumentNullException(nameof(project));
- }
-
- return CreateCore(project, RazorProjectFileSystem.Create(Path.GetDirectoryName(project.FilePath)), configure);
- }
-
- public override RazorProjectEngine Create(string directoryPath, Action configure)
- {
- if (directoryPath == null)
- {
- throw new ArgumentNullException(nameof(directoryPath));
- }
-
- var project = FindProjectByDirectory(directoryPath);
- return CreateCore(project, RazorProjectFileSystem.Create(directoryPath), configure);
- }
-
- public override RazorProjectEngine Create(ProjectSnapshot project, RazorProjectFileSystem fileSystem, Action configure)
- {
- if (project == null)
- {
- throw new ArgumentNullException(nameof(project));
- }
-
- if (fileSystem == null)
- {
- throw new ArgumentNullException(nameof(fileSystem));
- }
-
- return CreateCore(project, fileSystem, configure);
- }
-
- private RazorProjectEngine CreateCore(ProjectSnapshot project, RazorProjectFileSystem fileSystem, Action configure)
- {
- // When we're running in the editor, the editor provides a configure delegate that will include
- // the editor settings and tag helpers.
- //
- // This service is only used in process in Visual Studio, and any other callers should provide these
- // things also.
- configure = configure ?? ((b) => { });
-
- // The default configuration currently matches the newest MVC configuration.
- //
- // We typically want this because the language adds features over time - we don't want to a bunch of errors
- // to show up when a document is first opened, and then go away when the configuration loads, we'd prefer the opposite.
- var configuration = project?.Configuration ?? DefaultConfiguration;
-
- // If there's no factory to handle the configuration then fall back to a very basic configuration.
- //
- // This will stop a crash from happening in this case (misconfigured project), but will still make
- // it obvious to the user that something is wrong.
- var factory = SelectFactory(configuration) ?? _defaultFactory;
- return factory.Create(configuration, fileSystem, configure);
- }
-
- private IProjectEngineFactory SelectFactory(RazorConfiguration configuration, bool requireSerializable = false)
- {
- for (var i = 0; i < _customFactories.Length; i++)
- {
- var factory = _customFactories[i];
- if (string.Equals(configuration.ConfigurationName, factory.Metadata.ConfigurationName))
- {
- return requireSerializable && !factory.Metadata.SupportsSerialization ? null : factory.Value;
- }
- }
-
- return null;
- }
-
- private ProjectSnapshot FindProjectByDirectory(string directory)
- {
- directory = NormalizeDirectoryPath(directory);
-
- if (_projectManager == null)
- {
- _projectManager = _workspace.Services.GetLanguageServices(RazorLanguage.Name).GetRequiredService();
- }
-
- var projects = _projectManager.Projects;
- for (var i = 0; i < projects.Count; i++)
- {
- var project = projects[i];
- if (project.FilePath != null)
- {
- if (string.Equals(directory, NormalizeDirectoryPath(Path.GetDirectoryName(project.FilePath)), StringComparison.OrdinalIgnoreCase))
- {
- return project;
- }
- }
- }
-
- return null;
- }
-
- private string NormalizeDirectoryPath(string path)
- {
- return path.Replace('\\', '/').TrimEnd('/');
- }
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultProjectEngineFactoryServiceFactory.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultProjectEngineFactoryServiceFactory.cs
deleted file mode 100644
index 7f2213447955..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultProjectEngineFactoryServiceFactory.cs
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.Collections.Generic;
-using System.Composition;
-using System.Linq;
-using Microsoft.CodeAnalysis.Host;
-using Microsoft.CodeAnalysis.Host.Mef;
-using Microsoft.CodeAnalysis.Razor;
-using Microsoft.CodeAnalysis.Razor.ProjectSystem;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- [ExportLanguageServiceFactory(typeof(RazorProjectEngineFactoryService), RazorLanguage.Name, ServiceLayer.Default)]
- internal class DefaultProjectEngineFactoryServiceFactory : ILanguageServiceFactory
- {
- private readonly Lazy[] _customFactories;
- private readonly IFallbackProjectEngineFactory _fallbackFactory;
-
- [ImportingConstructor]
- public DefaultProjectEngineFactoryServiceFactory(
- IFallbackProjectEngineFactory fallbackFactory,
- [ImportMany] IEnumerable> customFactories)
- {
- if (fallbackFactory == null)
- {
- throw new ArgumentNullException(nameof(fallbackFactory));
- }
-
- if (customFactories == null)
- {
- throw new ArgumentNullException(nameof(customFactories));
- }
-
- _fallbackFactory = fallbackFactory;
- _customFactories = customFactories.ToArray();
- }
-
- public ILanguageService CreateLanguageService(HostLanguageServices languageServices)
- {
- return new DefaultProjectEngineFactoryService(
- languageServices.WorkspaceServices.Workspace,
- _fallbackFactory,
- _customFactories);
- }
- }
-}
\ No newline at end of file
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultRazorDocumentManager.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultRazorDocumentManager.cs
deleted file mode 100644
index 6be7e06fa913..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultRazorDocumentManager.cs
+++ /dev/null
@@ -1,144 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.Collections.Generic;
-using System.ComponentModel.Composition;
-using System.Diagnostics;
-using Microsoft.CodeAnalysis.Razor;
-using Microsoft.VisualStudio.Text;
-using Microsoft.VisualStudio.Text.Editor;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- [System.Composition.Shared]
- [Export(typeof(RazorDocumentManager))]
- internal class DefaultRazorDocumentManager : RazorDocumentManager
- {
- private readonly ForegroundDispatcher _foregroundDispatcher;
- private readonly RazorEditorFactoryService _editorFactoryService;
- private readonly TextBufferProjectService _projectService;
-
- [ImportingConstructor]
- public DefaultRazorDocumentManager(
- ForegroundDispatcher dispatcher,
- RazorEditorFactoryService editorFactoryService,
- TextBufferProjectService projectService)
- {
- if (dispatcher == null)
- {
- throw new ArgumentNullException(nameof(dispatcher));
- }
-
- if (editorFactoryService == null)
- {
- throw new ArgumentNullException(nameof(editorFactoryService));
- }
-
- if (projectService == null)
- {
- throw new ArgumentNullException(nameof(projectService));
- }
-
- _foregroundDispatcher = dispatcher;
- _editorFactoryService = editorFactoryService;
- _projectService = projectService;
- }
-
- public override void OnTextViewOpened(ITextView textView, IEnumerable subjectBuffers)
- {
- if (textView == null)
- {
- throw new ArgumentNullException(nameof(textView));
- }
-
- if (subjectBuffers == null)
- {
- throw new ArgumentNullException(nameof(subjectBuffers));
- }
-
- _foregroundDispatcher.AssertForegroundThread();
-
- foreach (var textBuffer in subjectBuffers)
- {
- if (!textBuffer.IsRazorBuffer())
- {
- continue;
- }
-
- if (!IsSupportedProject(textBuffer))
- {
- return;
- }
-
- if (!_editorFactoryService.TryGetDocumentTracker(textBuffer, out var documentTracker) ||
- !(documentTracker is DefaultVisualStudioDocumentTracker tracker))
- {
- Debug.Fail("Tracker should always be available given our expectations of the VS workflow.");
- return;
- }
-
- tracker.AddTextView(textView);
-
- if (documentTracker.TextViews.Count == 1)
- {
- tracker.Subscribe();
- }
- }
- }
-
- public override void OnTextViewClosed(ITextView textView, IEnumerable subjectBuffers)
- {
- if (textView == null)
- {
- throw new ArgumentNullException(nameof(textView));
- }
-
- if (subjectBuffers == null)
- {
- throw new ArgumentNullException(nameof(subjectBuffers));
- }
-
- _foregroundDispatcher.AssertForegroundThread();
-
- // This means a Razor buffer has be detached from this ITextView or the ITextView is closing. Since we keep a
- // list of all of the open text views for each text buffer, we need to update the tracker.
- //
- // Notice that this method is called *after* changes are applied to the text buffer(s). We need to check every
- // one of them for a tracker because the content type could have changed.
- foreach (var textBuffer in subjectBuffers)
- {
- DefaultVisualStudioDocumentTracker documentTracker;
- if (textBuffer.Properties.TryGetProperty(typeof(VisualStudioDocumentTracker), out documentTracker))
- {
- documentTracker.RemoveTextView(textView);
-
- if (documentTracker.TextViews.Count == 0)
- {
- documentTracker.Unsubscribe();
- }
- }
- }
- }
-
- private bool IsSupportedProject(ITextBuffer textBuffer)
- {
- // Fundamentally we have a Razor half of the world as soon as the document is open - and then later
- // the C# half of the world will be initialized. This code is in general pretty tolerant of
- // unexpected /impossible states.
- //
- // We also want to successfully shut down if the buffer is something other than .cshtml.
- object project = null;
- var isSupportedProject = false;
-
- // We expect the document to have a hierarchy even if it's not a real 'project'.
- // However the hierarchy can be null when the document is in the process of closing.
- if ((project = _projectService.GetHostProject(textBuffer)) != null)
- {
- isSupportedProject = _projectService.IsSupportedProject(project);
- }
-
- return isSupportedProject;
- }
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultRazorEditorFactoryService.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultRazorEditorFactoryService.cs
deleted file mode 100644
index 66f624d02d20..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultRazorEditorFactoryService.cs
+++ /dev/null
@@ -1,151 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.ComponentModel.Composition;
-using System.Diagnostics;
-using Microsoft.CodeAnalysis.Razor;
-using Microsoft.VisualStudio.Text;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- [System.Composition.Shared]
- [Export(typeof(RazorEditorFactoryService))]
- internal class DefaultRazorEditorFactoryService : RazorEditorFactoryService
- {
- private static readonly object RazorTextBufferInitializationKey = new object();
- private readonly VisualStudioWorkspaceAccessor _workspaceAccessor;
-
- [ImportingConstructor]
- public DefaultRazorEditorFactoryService(VisualStudioWorkspaceAccessor workspaceAccessor)
- {
- if (workspaceAccessor == null)
- {
- throw new ArgumentNullException(nameof(workspaceAccessor));
- }
-
- _workspaceAccessor = workspaceAccessor;
- }
-
- public override bool TryGetDocumentTracker(ITextBuffer textBuffer, out VisualStudioDocumentTracker documentTracker)
- {
- if (textBuffer == null)
- {
- throw new ArgumentNullException(nameof(textBuffer));
- }
-
- if (!textBuffer.IsRazorBuffer())
- {
- documentTracker = null;
- return false;
- }
-
- var textBufferInitialized = TryInitializeTextBuffer(textBuffer);
- if (!textBufferInitialized)
- {
- documentTracker = null;
- return false;
- }
-
- if (!textBuffer.Properties.TryGetProperty(typeof(VisualStudioDocumentTracker), out documentTracker))
- {
- Debug.Fail("Document tracker should have been stored on the text buffer during initialization.");
- return false;
- }
-
- return true;
- }
-
- public override bool TryGetParser(ITextBuffer textBuffer, out VisualStudioRazorParser parser)
- {
- if (textBuffer == null)
- {
- throw new ArgumentNullException(nameof(textBuffer));
- }
-
- if (!textBuffer.IsRazorBuffer())
- {
- parser = null;
- return false;
- }
-
- var textBufferInitialized = TryInitializeTextBuffer(textBuffer);
- if (!textBufferInitialized)
- {
- parser = null;
- return false;
- }
-
- if (!textBuffer.Properties.TryGetProperty(typeof(VisualStudioRazorParser), out parser))
- {
- Debug.Fail("Parser should have been stored on the text buffer during initialization.");
- return false;
- }
-
- return true;
- }
-
- internal override bool TryGetSmartIndenter(ITextBuffer textBuffer, out BraceSmartIndenter braceSmartIndenter)
- {
- if (textBuffer == null)
- {
- throw new ArgumentNullException(nameof(textBuffer));
- }
-
- if (!textBuffer.IsRazorBuffer())
- {
- braceSmartIndenter = null;
- return false;
- }
-
- var textBufferInitialized = TryInitializeTextBuffer(textBuffer);
- if (!textBufferInitialized)
- {
- braceSmartIndenter = null;
- return false;
- }
-
- if (!textBuffer.Properties.TryGetProperty(typeof(BraceSmartIndenter), out braceSmartIndenter))
- {
- Debug.Fail("Brace smart indenter should have been stored on the text buffer during initialization.");
- return false;
- }
-
- return true;
- }
-
- // Internal for testing
- internal bool TryInitializeTextBuffer(ITextBuffer textBuffer)
- {
- if (textBuffer.Properties.ContainsProperty(RazorTextBufferInitializationKey))
- {
- // Buffer already initialized.
- return true;
- }
-
- if (!_workspaceAccessor.TryGetWorkspace(textBuffer, out var workspace))
- {
- // Could not locate workspace for given text buffer.
- return false;
- }
-
- var razorLanguageServices = workspace.Services.GetLanguageServices(RazorLanguage.Name);
- var documentTrackerFactory = razorLanguageServices.GetRequiredService();
- var parserFactory = razorLanguageServices.GetRequiredService();
- var braceSmartIndenterFactory = razorLanguageServices.GetRequiredService();
-
- var tracker = documentTrackerFactory.Create(textBuffer);
- textBuffer.Properties[typeof(VisualStudioDocumentTracker)] = tracker;
-
- var parser = parserFactory.Create(tracker);
- textBuffer.Properties[typeof(VisualStudioRazorParser)] = parser;
-
- var braceSmartIndenter = braceSmartIndenterFactory.Create(tracker);
- textBuffer.Properties[typeof(BraceSmartIndenter)] = braceSmartIndenter;
-
- textBuffer.Properties.AddProperty(RazorTextBufferInitializationKey, RazorTextBufferInitializationKey);
-
- return true;
- }
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultRazorIndentationFactsService.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultRazorIndentationFactsService.cs
deleted file mode 100644
index c0ed95ad11f5..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultRazorIndentationFactsService.cs
+++ /dev/null
@@ -1,150 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.ComponentModel.Composition;
-using Microsoft.AspNetCore.Razor.Language;
-using Microsoft.AspNetCore.Razor.Language.Legacy;
-using Microsoft.VisualStudio.Text;
-using Span = Microsoft.AspNetCore.Razor.Language.Legacy.Span;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- [System.Composition.Shared]
- [Export(typeof(RazorIndentationFactsService))]
- internal class DefaultRazorIndentationFactsService : RazorIndentationFactsService
- {
- // This method dives down a syntax tree looking for open curly braces, every time
- // it finds one it increments its indent until it finds the provided "line".
- //
- // Examples:
- // @{
- // Hello World
- // }
- // Asking for desired indentation of the @{ or } lines should result in a desired indentation of 4.
- //
- //
- // @{
- // Hello World
- // }
- //
- // Asking for desired indentation of the @{ or } lines should result in a desired indentation of 8.
- public override int? GetDesiredIndentation(
- RazorSyntaxTree syntaxTree,
- ITextSnapshot syntaxTreeSnapshot,
- ITextSnapshotLine line,
- int indentSize,
- int tabSize)
- {
- if (syntaxTree == null)
- {
- throw new ArgumentNullException(nameof(syntaxTree));
- }
-
- if (syntaxTreeSnapshot == null)
- {
- throw new ArgumentNullException(nameof(syntaxTreeSnapshot));
- }
-
- if (line == null)
- {
- throw new ArgumentNullException(nameof(line));
- }
-
- if (indentSize < 0)
- {
- throw new ArgumentOutOfRangeException(nameof(indentSize));
- }
-
- if (tabSize < 0)
- {
- throw new ArgumentOutOfRangeException(nameof(tabSize));
- }
-
- var previousLineEndIndex = GetPreviousLineEndIndex(syntaxTreeSnapshot, line);
- var simulatedChange = new SourceChange(previousLineEndIndex, 0, string.Empty);
- var owningSpan = syntaxTree.Root.LocateOwner(simulatedChange);
- if (owningSpan.Kind == SpanKindInternal.Code)
- {
- // Example,
- // @{\n
- // ^ - The newline here is a code span and we should just let the default c# editor take care of indentation.
-
- return null;
- }
-
- int? desiredIndentation = null;
- SyntaxTreeNode owningChild = owningSpan;
- while (owningChild.Parent != null)
- {
- var owningParent = owningChild.Parent;
- for (var i = 0; i < owningParent.Children.Count; i++)
- {
- var currentChild = owningParent.Children[i];
- if (IsCSharpOpenCurlyBrace(currentChild))
- {
- var lineText = line.Snapshot.GetLineFromLineNumber(currentChild.Start.LineIndex).GetText();
- desiredIndentation = GetIndentLevelOfLine(lineText, tabSize) + indentSize;
- }
-
- if (currentChild == owningChild)
- {
- break;
- }
- }
-
- if (desiredIndentation.HasValue)
- {
- return desiredIndentation;
- }
-
- owningChild = owningParent;
- }
-
- // Couldn't determine indentation
- return null;
- }
-
- // Internal for testing
- internal int GetIndentLevelOfLine(string line, int tabSize)
- {
- var indentLevel = 0;
-
- foreach (var c in line)
- {
- if (!char.IsWhiteSpace(c))
- {
- break;
- }
- else if (c == '\t')
- {
- indentLevel += tabSize;
- }
- else
- {
- indentLevel++;
- }
- }
-
- return indentLevel;
- }
-
- // Internal for testing
- internal static int GetPreviousLineEndIndex(ITextSnapshot syntaxTreeSnapshot, ITextSnapshotLine line)
- {
- var previousLine = line.Snapshot.GetLineFromLineNumber(line.LineNumber - 1);
- var trackingPoint = previousLine.Snapshot.CreateTrackingPoint(previousLine.End, PointTrackingMode.Negative);
- var previousLineEndIndex = trackingPoint.GetPosition(syntaxTreeSnapshot);
- return previousLineEndIndex;
- }
-
- // Internal for testing
- internal static bool IsCSharpOpenCurlyBrace(SyntaxTreeNode currentChild)
- {
- return currentChild is Span currentSpan &&
- currentSpan.Symbols.Count == 1 &&
- currentSpan.Symbols[0] is CSharpSymbol symbol &&
- symbol.Type == CSharpSymbolType.LeftBrace;
- }
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultRazorSyntaxFactsService.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultRazorSyntaxFactsService.cs
deleted file mode 100644
index b6cbfe50af0a..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultRazorSyntaxFactsService.cs
+++ /dev/null
@@ -1,141 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.Collections.Generic;
-using System.ComponentModel.Composition;
-using System.Linq;
-using Microsoft.AspNetCore.Razor.Language;
-using Microsoft.AspNetCore.Razor.Language.Legacy;
-using Span = Microsoft.AspNetCore.Razor.Language.Legacy.Span;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- [System.Composition.Shared]
- [Export(typeof(RazorSyntaxFactsService))]
- internal class DefaultRazorSyntaxFactsService : RazorSyntaxFactsService
- {
- public override IReadOnlyList GetClassifiedSpans(RazorSyntaxTree syntaxTree)
- {
- if (syntaxTree == null)
- {
- throw new ArgumentNullException(nameof(syntaxTree));
- }
-
- var spans = Flatten(syntaxTree);
-
- var result = new ClassifiedSpan[spans.Count];
- for (var i = 0; i < spans.Count; i++)
- {
- var span = spans[i];
- result[i] = new ClassifiedSpan(
- new SourceSpan(
- span.Start.FilePath ?? syntaxTree.Source.FilePath,
- span.Start.AbsoluteIndex,
- span.Start.LineIndex,
- span.Start.CharacterIndex,
- span.Length),
- new SourceSpan(
- span.Parent.Start.FilePath ?? syntaxTree.Source.FilePath,
- span.Parent.Start.AbsoluteIndex,
- span.Parent.Start.LineIndex,
- span.Parent.Start.CharacterIndex,
- span.Parent.Length),
- (SpanKind)span.Kind,
- (BlockKind)span.Parent.Type,
- (AcceptedCharacters)span.EditHandler.AcceptedCharacters);
- }
-
- return result;
- }
-
- private List Flatten(RazorSyntaxTree syntaxTree)
- {
- var result = new List();
- AppendFlattenedSpans(syntaxTree.Root, result);
- return result;
-
- void AppendFlattenedSpans(SyntaxTreeNode node, List foundSpans)
- {
- Span spanNode = node as Span;
- if (spanNode != null)
- {
- foundSpans.Add(spanNode);
- }
- else
- {
- TagHelperBlock tagHelperNode = node as TagHelperBlock;
- if (tagHelperNode != null)
- {
- // These aren't in document order, sort them first and then dig in
- List attributeNodes = tagHelperNode.Attributes.Select(kvp => kvp.Value).Where(att => att != null).ToList();
- attributeNodes.Sort((x, y) => x.Start.AbsoluteIndex.CompareTo(y.Start.AbsoluteIndex));
-
- foreach (SyntaxTreeNode curNode in attributeNodes)
- {
- AppendFlattenedSpans(curNode, foundSpans);
- }
- }
-
- Block blockNode = node as Block;
- if (blockNode != null)
- {
- foreach (SyntaxTreeNode curNode in blockNode.Children)
- {
- AppendFlattenedSpans(curNode, foundSpans);
- }
- }
- }
- }
- }
-
- public override IReadOnlyList GetTagHelperSpans(RazorSyntaxTree syntaxTree)
- {
- if (syntaxTree == null)
- {
- throw new ArgumentNullException(nameof(syntaxTree));
- }
-
- var results = new List();
-
- List toProcess = new List();
- List blockChildren = new List();
- toProcess.Add(syntaxTree.Root);
-
- for (var i = 0; i < toProcess.Count; i++)
- {
- var blockNode = toProcess[i];
- TagHelperBlock tagHelperNode = blockNode as TagHelperBlock;
- if (tagHelperNode != null)
- {
- results.Add(new TagHelperSpan(
- new SourceSpan(
- tagHelperNode.Start.FilePath ?? syntaxTree.Source.FilePath,
- tagHelperNode.Start.AbsoluteIndex,
- tagHelperNode.Start.LineIndex,
- tagHelperNode.Start.CharacterIndex,
- tagHelperNode.Length),
- tagHelperNode.Binding));
- }
-
- // collect all child blocks and inject into toProcess as a single InsertRange
- foreach (SyntaxTreeNode curNode in blockNode.Children)
- {
- Block curBlock = curNode as Block;
- if (curBlock != null)
- {
- blockChildren.Add(curBlock);
- }
- }
-
- if (blockChildren.Count > 0)
- {
- toProcess.InsertRange(i + 1, blockChildren);
- blockChildren.Clear();
- }
- }
-
- return results;
- }
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultTagHelperCompletionService.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultTagHelperCompletionService.cs
deleted file mode 100644
index dc8d55cb0326..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultTagHelperCompletionService.cs
+++ /dev/null
@@ -1,299 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.Collections.Generic;
-using System.ComponentModel.Composition;
-using System.Diagnostics;
-using System.Linq;
-using Microsoft.AspNetCore.Razor.Language;
-using Microsoft.CodeAnalysis.Razor;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- [System.Composition.Shared]
- [Export(typeof(TagHelperCompletionService))]
- internal class DefaultTagHelperCompletionService : TagHelperCompletionService
- {
- private readonly TagHelperFactsService _tagHelperFactsService;
- private static readonly HashSet _emptyHashSet = new HashSet();
-
- [ImportingConstructor]
- public DefaultTagHelperCompletionService(TagHelperFactsService tagHelperFactsService)
- {
- if (tagHelperFactsService == null)
- {
- throw new ArgumentNullException(nameof(tagHelperFactsService));
- }
-
- _tagHelperFactsService = tagHelperFactsService;
- }
-
- /*
- * This API attempts to understand a users context as they're typing in a Razor file to provide TagHelper based attribute IntelliSense.
- *
- * Scenarios for TagHelper attribute IntelliSense follows:
- * 1. TagHelperDescriptor's have matching required attribute names
- * -> Provide IntelliSense for the required attributes of those descriptors to lead users towards a TagHelperified element.
- * 2. TagHelperDescriptor entirely applies to current element. Tag name, attributes, everything is fulfilled.
- * -> Provide IntelliSense for the bound attributes for the applied descriptors.
- *
- * Within each of the above scenarios if an attribute completion has a corresponding bound attribute we associate it with the corresponding
- * BoundAttributeDescriptor. By doing this a user can see what C# type a TagHelper expects for the attribute.
- */
- public override AttributeCompletionResult GetAttributeCompletions(AttributeCompletionContext completionContext)
- {
- if (completionContext == null)
- {
- throw new ArgumentNullException(nameof(completionContext));
- }
-
- var attributeCompletions = completionContext.ExistingCompletions.ToDictionary(
- completion => completion,
- _ => new HashSet(),
- StringComparer.OrdinalIgnoreCase);
-
- var documentContext = completionContext.DocumentContext;
- var descriptorsForTag = _tagHelperFactsService.GetTagHelpersGivenTag(documentContext, completionContext.CurrentTagName, completionContext.CurrentParentTagName);
- if (descriptorsForTag.Count == 0)
- {
- // If the current tag has no possible descriptors then we can't have any additional attributes.
- var defaultResult = AttributeCompletionResult.Create(attributeCompletions);
- return defaultResult;
- }
-
- var prefix = documentContext.Prefix ?? string.Empty;
- Debug.Assert(completionContext.CurrentTagName.StartsWith(prefix, StringComparison.OrdinalIgnoreCase));
-
- var applicableTagHelperBinding = _tagHelperFactsService.GetTagHelperBinding(
- documentContext,
- completionContext.CurrentTagName,
- completionContext.Attributes,
- completionContext.CurrentParentTagName,
- completionContext.CurrentParentIsTagHelper);
-
- var applicableDescriptors = applicableTagHelperBinding?.Descriptors ?? Enumerable.Empty();
- var unprefixedTagName = completionContext.CurrentTagName.Substring(prefix.Length);
-
- if (!completionContext.InHTMLSchema(unprefixedTagName) &&
- applicableDescriptors.All(descriptor => descriptor.TagOutputHint == null))
- {
- // This isn't a known HTML tag and no descriptor has an output element hint. Remove all previous completions.
- attributeCompletions.Clear();
- }
-
- for (var i = 0; i < descriptorsForTag.Count; i++)
- {
- var descriptor = descriptorsForTag[i];
-
- if (applicableDescriptors.Contains(descriptor))
- {
- foreach (var attributeDescriptor in descriptor.BoundAttributes)
- {
- UpdateCompletions(attributeDescriptor.Name, attributeDescriptor);
- }
- }
- else
- {
- var htmlNameToBoundAttribute = descriptor.BoundAttributes.ToDictionary(attribute => attribute.Name, StringComparer.OrdinalIgnoreCase);
-
- foreach (var rule in descriptor.TagMatchingRules)
- {
- foreach (var requiredAttribute in rule.Attributes)
- {
- if (htmlNameToBoundAttribute.TryGetValue(requiredAttribute.Name, out var attributeDescriptor))
- {
- UpdateCompletions(requiredAttribute.Name, attributeDescriptor);
- }
- else
- {
- UpdateCompletions(requiredAttribute.Name, possibleDescriptor: null);
- }
- }
- }
- }
- }
-
- var completionResult = AttributeCompletionResult.Create(attributeCompletions);
- return completionResult;
-
- void UpdateCompletions(string attributeName, BoundAttributeDescriptor possibleDescriptor)
- {
- if (completionContext.Attributes.Any(attribute => string.Equals(attribute.Key, attributeName, StringComparison.OrdinalIgnoreCase)) &&
- (completionContext.CurrentAttributeName == null ||
- !string.Equals(attributeName, completionContext.CurrentAttributeName, StringComparison.OrdinalIgnoreCase)))
- {
- // Attribute is already present on this element and it is not the attribute in focus.
- // It shouldn't exist in the completion list.
- return;
- }
-
- if (!attributeCompletions.TryGetValue(attributeName, out var rules))
- {
- rules = new HashSet();
- attributeCompletions[attributeName] = rules;
- }
-
- if (possibleDescriptor != null)
- {
- rules.Add(possibleDescriptor);
- }
- }
- }
-
- public override ElementCompletionResult GetElementCompletions(ElementCompletionContext completionContext)
- {
- if (completionContext == null)
- {
- throw new ArgumentNullException(nameof(completionContext));
- }
-
- var elementCompletions = new Dictionary>(StringComparer.OrdinalIgnoreCase);
-
- AddAllowedChildrenCompletions(completionContext, elementCompletions);
-
- if (elementCompletions.Count > 0)
- {
- // If the containing element is already a TagHelper and only allows certain children.
- var emptyResult = ElementCompletionResult.Create(elementCompletions);
- return emptyResult;
- }
-
- elementCompletions = completionContext.ExistingCompletions.ToDictionary(
- completion => completion,
- _ => new HashSet(),
- StringComparer.OrdinalIgnoreCase);
-
- var catchAllDescriptors = new HashSet();
- var prefix = completionContext.DocumentContext.Prefix ?? string.Empty;
- var possibleChildDescriptors = _tagHelperFactsService.GetTagHelpersGivenParent(completionContext.DocumentContext, completionContext.ContainingTagName);
- foreach (var possibleDescriptor in possibleChildDescriptors)
- {
- var addRuleCompletions = false;
- var outputHint = possibleDescriptor.TagOutputHint;
-
- foreach (var rule in possibleDescriptor.TagMatchingRules)
- {
- if (!TagHelperMatchingConventions.SatisfiesParentTag(completionContext.ContainingTagName, rule))
- {
- continue;
- }
-
- if (rule.TagName == TagHelperMatchingConventions.ElementCatchAllName)
- {
- catchAllDescriptors.Add(possibleDescriptor);
- }
- else if (elementCompletions.ContainsKey(rule.TagName))
- {
- addRuleCompletions = true;
- }
- else if (outputHint != null)
- {
- // If the current descriptor has an output hint we need to make sure it shows up only when its output hint would normally show up.
- // Example: We have a MyTableTagHelper that has an output hint of "table" and a MyTrTagHelper that has an output hint of "tr".
- // If we try typing in a situation like this: |
- // We'd expect to only get "my-table" as a completion because the "body" tag doesn't allow "tr" tags.
- addRuleCompletions = elementCompletions.ContainsKey(outputHint);
- }
- else if (!completionContext.InHTMLSchema(rule.TagName))
- {
- // If there is an unknown HTML schema tag that doesn't exist in the current completion we should add it. This happens for
- // TagHelpers that target non-schema oriented tags.
- addRuleCompletions = true;
- }
-
- if (addRuleCompletions)
- {
- UpdateCompletions(prefix + rule.TagName, possibleDescriptor);
- }
- }
- }
-
- // We needed to track all catch-alls and update their completions after all other completions have been completed.
- // This way, any TagHelper added completions will also have catch-alls listed under their entries.
- foreach (var catchAllDescriptor in catchAllDescriptors)
- {
- foreach (var completionTagName in elementCompletions.Keys)
- {
- if (elementCompletions[completionTagName].Count > 0 ||
- !string.IsNullOrEmpty(prefix) && completionTagName.StartsWith(prefix, StringComparison.OrdinalIgnoreCase))
- {
- // The current completion either has other TagHelper's associated with it or is prefixed with a non-empty
- // TagHelper prefix.
- UpdateCompletions(completionTagName, catchAllDescriptor);
- }
- }
- }
-
- var result = ElementCompletionResult.Create(elementCompletions);
- return result;
-
- void UpdateCompletions(string tagName, TagHelperDescriptor possibleDescriptor)
- {
- if (!elementCompletions.TryGetValue(tagName, out var existingRuleDescriptors))
- {
- existingRuleDescriptors = new HashSet();
- elementCompletions[tagName] = existingRuleDescriptors;
- }
-
- existingRuleDescriptors.Add(possibleDescriptor);
- }
- }
-
- private void AddAllowedChildrenCompletions(
- ElementCompletionContext completionContext,
- Dictionary> elementCompletions)
- {
- if (completionContext.ContainingTagName == null)
- {
- // If we're at the root then there's no containing TagHelper to specify allowed children.
- return;
- }
-
- var prefix = completionContext.DocumentContext.Prefix ?? string.Empty;
-
- var binding = _tagHelperFactsService.GetTagHelperBinding(
- completionContext.DocumentContext,
- completionContext.ContainingTagName,
- completionContext.Attributes,
- completionContext.ContainingParentTagName,
- completionContext.ContainingParentIsTagHelper);
-
- if (binding == null)
- {
- // Containing tag is not a TagHelper; therefore, it allows any children.
- return;
- }
-
- foreach (var descriptor in binding.Descriptors)
- {
- foreach (var childTag in descriptor.AllowedChildTags)
- {
- var prefixedName = string.Concat(prefix, childTag.Name);
- var descriptors = _tagHelperFactsService.GetTagHelpersGivenTag(
- completionContext.DocumentContext,
- prefixedName,
- completionContext.ContainingTagName);
-
- if (descriptors.Count == 0)
- {
- if (!elementCompletions.ContainsKey(prefixedName))
- {
- elementCompletions[prefixedName] = _emptyHashSet;
- }
-
- continue;
- }
-
- if (!elementCompletions.TryGetValue(prefixedName, out var existingRuleDescriptors))
- {
- existingRuleDescriptors = new HashSet();
- elementCompletions[prefixedName] = existingRuleDescriptors;
- }
-
- existingRuleDescriptors.UnionWith(descriptors);
- }
- }
- }
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultTagHelperFactsService.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultTagHelperFactsService.cs
deleted file mode 100644
index 1d23ce02317f..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultTagHelperFactsService.cs
+++ /dev/null
@@ -1,166 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.Collections.Generic;
-using System.ComponentModel.Composition;
-using System.Linq;
-using Microsoft.AspNetCore.Razor.Language;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- [System.Composition.Shared]
- [Export(typeof(TagHelperFactsService))]
- internal class DefaultTagHelperFactsService : TagHelperFactsService
- {
- public override TagHelperBinding GetTagHelperBinding(
- TagHelperDocumentContext documentContext,
- string tagName,
- IEnumerable> attributes,
- string parentTag,
- bool parentIsTagHelper)
- {
- if (documentContext == null)
- {
- throw new ArgumentNullException(nameof(documentContext));
- }
-
- if (tagName == null)
- {
- throw new ArgumentNullException(nameof(tagName));
- }
-
- if (attributes == null)
- {
- throw new ArgumentNullException(nameof(attributes));
- }
-
- var descriptors = documentContext.TagHelpers;
- if (descriptors == null || descriptors.Count == 0)
- {
- return null;
- }
-
- var prefix = documentContext.Prefix;
- var tagHelperBinder = new TagHelperBinder(prefix, descriptors);
- var binding = tagHelperBinder.GetBinding(tagName, attributes.ToList(), parentTag, parentIsTagHelper);
-
- return binding;
- }
-
- public override IEnumerable GetBoundTagHelperAttributes(
- TagHelperDocumentContext documentContext,
- string attributeName,
- TagHelperBinding binding)
- {
- if (documentContext == null)
- {
- throw new ArgumentNullException(nameof(documentContext));
- }
-
- if (attributeName == null)
- {
- throw new ArgumentNullException(nameof(attributeName));
- }
-
- if (binding == null)
- {
- throw new ArgumentNullException(nameof(binding));
- }
-
- var matchingBoundAttributes = new List();
- foreach (var descriptor in binding.Descriptors)
- {
- foreach (var boundAttributeDescriptor in descriptor.BoundAttributes)
- {
- if (TagHelperMatchingConventions.CanSatisfyBoundAttribute(attributeName, boundAttributeDescriptor))
- {
- matchingBoundAttributes.Add(boundAttributeDescriptor);
-
- // Only one bound attribute can match an attribute
- break;
- }
- }
- }
-
- return matchingBoundAttributes;
- }
-
- public override IReadOnlyList GetTagHelpersGivenTag(
- TagHelperDocumentContext documentContext,
- string tagName,
- string parentTag)
- {
- if (documentContext == null)
- {
- throw new ArgumentNullException(nameof(documentContext));
- }
-
- if (tagName == null)
- {
- throw new ArgumentNullException(nameof(tagName));
- }
-
- var matchingDescriptors = new List();
- var descriptors = documentContext?.TagHelpers;
- if (descriptors?.Count == 0)
- {
- return matchingDescriptors;
- }
-
- var prefix = documentContext.Prefix ?? string.Empty;
- if (!tagName.StartsWith(prefix, StringComparison.OrdinalIgnoreCase))
- {
- // Can't possibly match TagHelpers, it doesn't start with the TagHelperPrefix.
- return matchingDescriptors;
- }
-
- var tagNameWithoutPrefix = tagName.Substring(prefix.Length);
- for (var i = 0; i < descriptors.Count; i++)
- {
- var descriptor = descriptors[i];
- foreach (var rule in descriptor.TagMatchingRules)
- {
- if (TagHelperMatchingConventions.SatisfiesTagName(tagNameWithoutPrefix, rule) &&
- TagHelperMatchingConventions.SatisfiesParentTag(parentTag, rule))
- {
- matchingDescriptors.Add(descriptor);
- break;
- }
- }
- }
-
- return matchingDescriptors;
- }
-
- public override IReadOnlyList GetTagHelpersGivenParent(TagHelperDocumentContext documentContext, string parentTag)
- {
- if (documentContext == null)
- {
- throw new ArgumentNullException(nameof(documentContext));
- }
-
- var matchingDescriptors = new List();
- var descriptors = documentContext?.TagHelpers;
- if (descriptors?.Count == 0)
- {
- return matchingDescriptors;
- }
-
- for (var i = 0; i < descriptors.Count; i++)
- {
- var descriptor = descriptors[i];
- foreach (var rule in descriptor.TagMatchingRules)
- {
- if (TagHelperMatchingConventions.SatisfiesParentTag(parentTag, rule))
- {
- matchingDescriptors.Add(descriptor);
- break;
- }
- }
- }
-
- return matchingDescriptors;
- }
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultTagHelperResolver.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultTagHelperResolver.cs
deleted file mode 100644
index 47453f6f80d4..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultTagHelperResolver.cs
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.Threading;
-using System.Threading.Tasks;
-using Microsoft.AspNetCore.Razor.Language;
-using Microsoft.CodeAnalysis.Razor;
-using Microsoft.CodeAnalysis.Razor.ProjectSystem;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- internal class DefaultTagHelperResolver : TagHelperResolver
- {
- private readonly RazorProjectEngineFactoryService _engineFactory;
-
- public DefaultTagHelperResolver(RazorProjectEngineFactoryService engineFactory)
- {
- if (engineFactory == null)
- {
- throw new ArgumentNullException(nameof(engineFactory));
- }
-
- _engineFactory = engineFactory;
- }
-
- public override Task GetTagHelpersAsync(ProjectSnapshot project, CancellationToken cancellationToken = default)
- {
- if (project == null)
- {
- throw new ArgumentNullException(nameof(project));
- }
-
- if (project.Configuration == null || project.WorkspaceProject == null)
- {
- return Task.FromResult(TagHelperResolutionResult.Empty);
- }
-
- var engine = _engineFactory.Create(project, RazorProjectFileSystem.Empty, b => { });
- return GetTagHelpersAsync(project, engine);
- }
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultTagHelperResolverFactory.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultTagHelperResolverFactory.cs
deleted file mode 100644
index 1a238ad473e4..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultTagHelperResolverFactory.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System.Composition;
-using Microsoft.CodeAnalysis.Host;
-using Microsoft.CodeAnalysis.Host.Mef;
-using Microsoft.CodeAnalysis.Razor;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- [Shared]
- [ExportLanguageServiceFactory(typeof(TagHelperResolver), RazorLanguage.Name, ServiceLayer.Default)]
- internal class DefaultTagHelperResolverFactory : ILanguageServiceFactory
- {
- public ILanguageService CreateLanguageService(HostLanguageServices languageServices)
- {
- return new DefaultTagHelperResolver(languageServices.GetRequiredService());
- }
- }
-}
\ No newline at end of file
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultTextBufferCodeDocumentProvider.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultTextBufferCodeDocumentProvider.cs
deleted file mode 100644
index a9df7a9c45fe..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultTextBufferCodeDocumentProvider.cs
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.ComponentModel.Composition;
-using Microsoft.AspNetCore.Razor.Language;
-using Microsoft.VisualStudio.Text;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- [System.Composition.Shared]
- [Export(typeof(TextBufferCodeDocumentProvider))]
- internal class DefaultTextBufferCodeDocumentProvider : TextBufferCodeDocumentProvider
- {
- public override bool TryGetFromBuffer(ITextBuffer textBuffer, out RazorCodeDocument codeDocument)
- {
- if (textBuffer == null)
- {
- throw new ArgumentNullException(nameof(textBuffer));
- }
-
- if (textBuffer.Properties.TryGetProperty(typeof(VisualStudioRazorParser), out VisualStudioRazorParser parser) && parser.CodeDocument != null)
- {
- codeDocument = parser.CodeDocument;
- return true;
- }
-
- codeDocument = null;
- return false;
- }
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultTextBufferProvider.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultTextBufferProvider.cs
deleted file mode 100644
index 22efa0ec08b5..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultTextBufferProvider.cs
+++ /dev/null
@@ -1,71 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.ComponentModel.Composition;
-using System.Linq;
-using Microsoft.CodeAnalysis;
-using Microsoft.CodeAnalysis.Text;
-using Microsoft.VisualStudio.Text;
-using Microsoft.VisualStudio.Text.Projection;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- [System.Composition.Shared]
- [Export(typeof(RazorTextBufferProvider))]
- internal class DefaultTextBufferProvider : RazorTextBufferProvider
- {
- private readonly IBufferGraphFactoryService _bufferGraphService;
-
- [ImportingConstructor]
- public DefaultTextBufferProvider(IBufferGraphFactoryService bufferGraphService)
- {
- if (bufferGraphService == null)
- {
- throw new ArgumentNullException(nameof(bufferGraphService));
- }
-
- _bufferGraphService = bufferGraphService;
- }
-
- public override bool TryGetFromDocument(TextDocument document, out ITextBuffer textBuffer)
- {
- if (document == null)
- {
- throw new ArgumentNullException(nameof(document));
- }
-
- textBuffer = null;
-
- if (!document.TryGetText(out var sourceText))
- {
- // Could not retrieve source text from the document. We have no way have locating an ITextBuffer.
- return false;
- }
-
- var container = sourceText.Container;
- ITextBuffer buffer;
- try
- {
- buffer = container.GetTextBuffer();
- }
- catch (ArgumentException)
- {
- // The source text container was not built from an ITextBuffer.
- return false;
- }
-
- var bufferGraph = _bufferGraphService.CreateBufferGraph(buffer);
- var razorBuffer = bufferGraph.GetRazorBuffers().FirstOrDefault();
-
- if (razorBuffer == null)
- {
- // Could not find a text buffer associated with the text document.
- return false;
- }
-
- textBuffer = razorBuffer;
- return true;
- }
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultVisualStudioDocumentTracker.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultVisualStudioDocumentTracker.cs
deleted file mode 100644
index c6e6937b18d9..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultVisualStudioDocumentTracker.cs
+++ /dev/null
@@ -1,231 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.Collections.Generic;
-using Microsoft.AspNetCore.Razor.Language;
-using Microsoft.CodeAnalysis;
-using Microsoft.CodeAnalysis.Razor;
-using Microsoft.CodeAnalysis.Razor.Editor;
-using Microsoft.CodeAnalysis.Razor.ProjectSystem;
-using Microsoft.VisualStudio.Text;
-using Microsoft.VisualStudio.Text.Editor;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- internal class DefaultVisualStudioDocumentTracker : VisualStudioDocumentTracker
- {
- private readonly ForegroundDispatcher _foregroundDispatcher;
- private readonly string _filePath;
- private readonly string _projectPath;
- private readonly ProjectSnapshotManager _projectManager;
- private readonly WorkspaceEditorSettings _workspaceEditorSettings;
- private readonly ITextBuffer _textBuffer;
- private readonly ImportDocumentManager _importDocumentManager;
- private readonly List _textViews;
- private readonly Workspace _workspace;
- private bool _isSupportedProject;
- private ProjectSnapshot _project;
-
- public override event EventHandler ContextChanged;
-
- public DefaultVisualStudioDocumentTracker(
- ForegroundDispatcher dispatcher,
- string filePath,
- string projectPath,
- ProjectSnapshotManager projectManager,
- WorkspaceEditorSettings workspaceEditorSettings,
- Workspace workspace,
- ITextBuffer textBuffer,
- ImportDocumentManager importDocumentManager)
- {
- if (dispatcher == null)
- {
- throw new ArgumentNullException(nameof(dispatcher));
- }
-
- if (string.IsNullOrEmpty(filePath))
- {
- throw new ArgumentException(Resources.ArgumentCannotBeNullOrEmpty, nameof(filePath));
- }
-
- if (projectPath == null)
- {
- throw new ArgumentNullException(nameof(projectPath));
- }
-
- if (projectManager == null)
- {
- throw new ArgumentNullException(nameof(projectManager));
- }
-
- if (workspaceEditorSettings == null)
- {
- throw new ArgumentNullException(nameof(workspaceEditorSettings));
- }
-
- if (workspace == null)
- {
- throw new ArgumentNullException(nameof(workspace));
- }
-
- if (textBuffer == null)
- {
- throw new ArgumentNullException(nameof(textBuffer));
- }
-
- if (importDocumentManager == null)
- {
- throw new ArgumentNullException(nameof(importDocumentManager));
- }
-
- _foregroundDispatcher = dispatcher;
- _filePath = filePath;
- _projectPath = projectPath;
- _projectManager = projectManager;
- _workspaceEditorSettings = workspaceEditorSettings;
- _textBuffer = textBuffer;
- _importDocumentManager = importDocumentManager;
- _workspace = workspace; // For now we assume that the workspace is the always default VS workspace.
-
- _textViews = new List();
- }
-
- public override RazorConfiguration Configuration => _project?.Configuration;
-
- public override EditorSettings EditorSettings => _workspaceEditorSettings.Current;
-
- public override IReadOnlyList TagHelpers => _project?.TagHelpers ?? Array.Empty();
-
- public override bool IsSupportedProject => _isSupportedProject;
-
- public override Project Project => _workspace.CurrentSolution.GetProject(_project.WorkspaceProject.Id);
-
- public override ITextBuffer TextBuffer => _textBuffer;
-
- public override IReadOnlyList TextViews => _textViews;
-
- public override Workspace Workspace => _workspace;
-
- public override string FilePath => _filePath;
-
- public override string ProjectPath => _projectPath;
-
- internal void AddTextView(ITextView textView)
- {
- if (textView == null)
- {
- throw new ArgumentNullException(nameof(textView));
- }
-
- if (!_textViews.Contains(textView))
- {
- _textViews.Add(textView);
- }
- }
-
- internal void RemoveTextView(ITextView textView)
- {
- if (textView == null)
- {
- throw new ArgumentNullException(nameof(textView));
- }
-
- if (_textViews.Contains(textView))
- {
- _textViews.Remove(textView);
- }
- }
-
- public override ITextView GetFocusedTextView()
- {
- for (var i = 0; i < TextViews.Count; i++)
- {
- if (TextViews[i].HasAggregateFocus)
- {
- return TextViews[i];
- }
- }
-
- return null;
- }
-
- public void Subscribe()
- {
- _importDocumentManager.OnSubscribed(this);
-
- _workspaceEditorSettings.Changed += EditorSettingsManager_Changed;
- _projectManager.Changed += ProjectManager_Changed;
- _importDocumentManager.Changed += Import_Changed;
-
- _isSupportedProject = true;
- _project = _projectManager.GetProjectWithFilePath(_projectPath);
-
- OnContextChanged(_project, ContextChangeKind.ProjectChanged);
- }
-
- public void Unsubscribe()
- {
- _importDocumentManager.OnUnsubscribed(this);
-
- _projectManager.Changed -= ProjectManager_Changed;
- _workspaceEditorSettings.Changed -= EditorSettingsManager_Changed;
- _importDocumentManager.Changed -= Import_Changed;
-
- // Detached from project.
- _isSupportedProject = false;
- _project = null;
-
- OnContextChanged(project: null, kind: ContextChangeKind.ProjectChanged);
- }
-
- private void OnContextChanged(ProjectSnapshot project, ContextChangeKind kind)
- {
- _foregroundDispatcher.AssertForegroundThread();
-
- _project = project;
-
- var handler = ContextChanged;
- if (handler != null)
- {
- handler(this, new ContextChangeEventArgs(kind));
- }
- }
-
- // Internal for testing
- internal void ProjectManager_Changed(object sender, ProjectChangeEventArgs e)
- {
- if (_projectPath != null &&
- string.Equals(_projectPath, e.Project.FilePath, StringComparison.OrdinalIgnoreCase))
- {
- if (e.Kind == ProjectChangeKind.TagHelpersChanged)
- {
- OnContextChanged(e.Project, ContextChangeKind.TagHelpersChanged);
- }
- else
- {
- OnContextChanged(e.Project, ContextChangeKind.ProjectChanged);
- }
- }
- }
-
- // Internal for testing
- internal void EditorSettingsManager_Changed(object sender, EditorSettingsChangedEventArgs args)
- {
- OnContextChanged(_project, ContextChangeKind.EditorSettingsChanged);
- }
-
- // Internal for testing
- internal void Import_Changed(object sender, ImportChangedEventArgs args)
- {
- foreach (var path in args.AssociatedDocuments)
- {
- if (string.Equals(_filePath, path, StringComparison.OrdinalIgnoreCase))
- {
- OnContextChanged(_project, ContextChangeKind.ImportsChanged);
- break;
- }
- }
- }
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultVisualStudioDocumentTrackerFactory.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultVisualStudioDocumentTrackerFactory.cs
deleted file mode 100644
index 7005ce059ea4..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultVisualStudioDocumentTrackerFactory.cs
+++ /dev/null
@@ -1,105 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.Diagnostics;
-using Microsoft.CodeAnalysis;
-using Microsoft.CodeAnalysis.Razor;
-using Microsoft.CodeAnalysis.Razor.Editor;
-using Microsoft.CodeAnalysis.Razor.ProjectSystem;
-using Microsoft.VisualStudio.Text;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- internal class DefaultVisualStudioDocumentTrackerFactory : VisualStudioDocumentTrackerFactory
- {
- private readonly TextBufferProjectService _projectService;
- private readonly ITextDocumentFactoryService _textDocumentFactory;
- private readonly Workspace _workspace;
- private readonly ImportDocumentManager _importDocumentManager;
- private readonly ForegroundDispatcher _foregroundDispatcher;
- private readonly ProjectSnapshotManager _projectManager;
- private readonly WorkspaceEditorSettings _workspaceEditorSettings;
-
- public DefaultVisualStudioDocumentTrackerFactory(
- ForegroundDispatcher foregroundDispatcher,
- ProjectSnapshotManager projectManager,
- WorkspaceEditorSettings workspaceEditorSettings,
- TextBufferProjectService projectService,
- ITextDocumentFactoryService textDocumentFactory,
- ImportDocumentManager importDocumentManager,
- Workspace workspace)
- {
- if (foregroundDispatcher == null)
- {
- throw new ArgumentNullException(nameof(foregroundDispatcher));
- }
-
- if (projectManager == null)
- {
- throw new ArgumentNullException(nameof(projectManager));
- }
-
- if (workspaceEditorSettings == null)
- {
- throw new ArgumentNullException(nameof(workspaceEditorSettings));
- }
-
- if (projectService == null)
- {
- throw new ArgumentNullException(nameof(projectService));
- }
-
- if (textDocumentFactory == null)
- {
- throw new ArgumentNullException(nameof(textDocumentFactory));
- }
-
- if (importDocumentManager == null)
- {
- throw new ArgumentNullException(nameof(importDocumentManager));
- }
-
- if (workspace == null)
- {
- throw new ArgumentNullException(nameof(workspace));
- }
-
- _foregroundDispatcher = foregroundDispatcher;
- _projectManager = projectManager;
- _workspaceEditorSettings = workspaceEditorSettings;
- _projectService = projectService;
- _textDocumentFactory = textDocumentFactory;
- _importDocumentManager = importDocumentManager;
- _workspace = workspace;
- }
-
- public override VisualStudioDocumentTracker Create(ITextBuffer textBuffer)
- {
- if (textBuffer == null)
- {
- throw new ArgumentNullException(nameof(textBuffer));
- }
-
- if (!_textDocumentFactory.TryGetTextDocument(textBuffer, out var textDocument))
- {
- Debug.Fail("Text document should be available from the text buffer.");
- return null;
- }
-
- var filePath = textDocument.FilePath;
- var project = _projectService.GetHostProject(textBuffer);
- if (project == null)
- {
- Debug.Fail("Text buffer should belong to a project.");
- return null;
- }
-
- var projectPath = _projectService.GetProjectPath(project);
-
- var tracker = new DefaultVisualStudioDocumentTracker(_foregroundDispatcher, filePath, projectPath, _projectManager, _workspaceEditorSettings, _workspace, textBuffer, _importDocumentManager);
-
- return tracker;
- }
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultVisualStudioDocumentTrackerFactoryFactory.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultVisualStudioDocumentTrackerFactoryFactory.cs
deleted file mode 100644
index a2af5b8d17ec..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultVisualStudioDocumentTrackerFactoryFactory.cs
+++ /dev/null
@@ -1,70 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.Composition;
-using Microsoft.CodeAnalysis.Host;
-using Microsoft.CodeAnalysis.Host.Mef;
-using Microsoft.CodeAnalysis.Razor;
-using Microsoft.CodeAnalysis.Razor.Editor;
-using Microsoft.CodeAnalysis.Razor.ProjectSystem;
-using Microsoft.VisualStudio.Text;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- [Shared]
- [ExportLanguageServiceFactory(typeof(VisualStudioDocumentTrackerFactory), RazorLanguage.Name, ServiceLayer.Default)]
- internal class DefaultVisualStudioDocumentTrackerFactoryFactory : ILanguageServiceFactory
- {
- private readonly ForegroundDispatcher _foregroundDispatcher;
- private readonly TextBufferProjectService _projectService;
- private readonly ITextDocumentFactoryService _textDocumentFactory;
-
- [ImportingConstructor]
- public DefaultVisualStudioDocumentTrackerFactoryFactory(
- ForegroundDispatcher foregroundDispatcher,
- TextBufferProjectService projectService,
- ITextDocumentFactoryService textDocumentFactory)
- {
- if (foregroundDispatcher == null)
- {
- throw new ArgumentNullException(nameof(foregroundDispatcher));
- }
-
- if (projectService == null)
- {
- throw new ArgumentNullException(nameof(projectService));
- }
-
- if (textDocumentFactory == null)
- {
- throw new ArgumentNullException(nameof(textDocumentFactory));
- }
-
- _foregroundDispatcher = foregroundDispatcher;
- _projectService = projectService;
- _textDocumentFactory = textDocumentFactory;
- }
-
- public ILanguageService CreateLanguageService(HostLanguageServices languageServices)
- {
- if (languageServices == null)
- {
- throw new ArgumentNullException(nameof(languageServices));
- }
-
- var projectManager = languageServices.GetRequiredService();
- var workspaceEditorSettings = languageServices.GetRequiredService();
- var importDocumentManager = languageServices.GetRequiredService();
-
- return new DefaultVisualStudioDocumentTrackerFactory(
- _foregroundDispatcher,
- projectManager,
- workspaceEditorSettings,
- _projectService,
- _textDocumentFactory,
- importDocumentManager,
- languageServices.WorkspaceServices.Workspace);
- }
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultVisualStudioRazorParser.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultVisualStudioRazorParser.cs
deleted file mode 100644
index ddbd000f0b10..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultVisualStudioRazorParser.cs
+++ /dev/null
@@ -1,445 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-using System.Threading.Tasks;
-using Microsoft.AspNetCore.Razor.Language;
-using Microsoft.AspNetCore.Razor.Language.Legacy;
-using Microsoft.CodeAnalysis.Razor;
-using Microsoft.CodeAnalysis.Razor.Editor;
-using Microsoft.VisualStudio.Text;
-using ITextBuffer = Microsoft.VisualStudio.Text.ITextBuffer;
-using Timer = System.Threading.Timer;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- internal class DefaultVisualStudioRazorParser : VisualStudioRazorParser, IDisposable
- {
- public override event EventHandler DocumentStructureChanged;
-
- // Internal for testing.
- internal TimeSpan IdleDelay = TimeSpan.FromSeconds(3);
- internal Timer _idleTimer;
- internal BackgroundParser _parser;
- internal ChangeReference _latestChangeReference;
- internal RazorSyntaxTreePartialParser _partialParser;
-
- private readonly object IdleLock = new object();
- private readonly VisualStudioCompletionBroker _completionBroker;
- private readonly VisualStudioDocumentTracker _documentTracker;
- private readonly ForegroundDispatcher _dispatcher;
- private readonly RazorProjectEngineFactoryService _projectEngineFactory;
- private readonly ErrorReporter _errorReporter;
- private RazorProjectEngine _projectEngine;
- private RazorCodeDocument _codeDocument;
- private ITextSnapshot _snapshot;
- private bool _disposed;
-
- // For testing only
- internal DefaultVisualStudioRazorParser(RazorCodeDocument codeDocument)
- {
- _codeDocument = codeDocument;
- }
-
- public DefaultVisualStudioRazorParser(
- ForegroundDispatcher dispatcher,
- VisualStudioDocumentTracker documentTracker,
- RazorProjectEngineFactoryService projectEngineFactory,
- ErrorReporter errorReporter,
- VisualStudioCompletionBroker completionBroker)
- {
- if (dispatcher == null)
- {
- throw new ArgumentNullException(nameof(dispatcher));
- }
-
- if (documentTracker == null)
- {
- throw new ArgumentNullException(nameof(documentTracker));
- }
-
- if (projectEngineFactory == null)
- {
- throw new ArgumentNullException(nameof(projectEngineFactory));
- }
-
- if (errorReporter == null)
- {
- throw new ArgumentNullException(nameof(errorReporter));
- }
-
- if (completionBroker == null)
- {
- throw new ArgumentNullException(nameof(completionBroker));
- }
-
- _dispatcher = dispatcher;
- _projectEngineFactory = projectEngineFactory;
- _errorReporter = errorReporter;
- _completionBroker = completionBroker;
- _documentTracker = documentTracker;
-
- _documentTracker.ContextChanged += DocumentTracker_ContextChanged;
- }
-
- public override string FilePath => _documentTracker.FilePath;
-
- public override RazorCodeDocument CodeDocument => _codeDocument;
-
- public override ITextSnapshot Snapshot => _snapshot;
-
- public override ITextBuffer TextBuffer => _documentTracker.TextBuffer;
-
- public override bool HasPendingChanges => _latestChangeReference != null;
-
- // Used in unit tests to ensure we can be notified when idle starts.
- internal ManualResetEventSlim NotifyForegroundIdleStart { get; set; }
-
- // Used in unit tests to ensure we can block background idle work.
- internal ManualResetEventSlim BlockBackgroundIdleWork { get; set; }
-
- public override void QueueReparse()
- {
- // Can be called from any thread
-
- if (_dispatcher.IsForegroundThread)
- {
- ReparseOnForeground(null);
- }
- else
- {
- Task.Factory.StartNew(ReparseOnForeground, null, CancellationToken.None, TaskCreationOptions.None, _dispatcher.ForegroundScheduler);
- }
- }
-
- public void Dispose()
- {
- _dispatcher.AssertForegroundThread();
-
- StopParser();
-
- _documentTracker.ContextChanged -= DocumentTracker_ContextChanged;
-
- StopIdleTimer();
-
- _disposed = true;
- }
-
- // Internal for testing
- internal void DocumentTracker_ContextChanged(object sender, ContextChangeEventArgs args)
- {
- _dispatcher.AssertForegroundThread();
-
- if (!TryReinitializeParser())
- {
- return;
- }
-
- // We have a new parser, force a reparse to generate new document information. Note that this
- // only blocks until the reparse change has been queued.
- QueueReparse();
- }
-
- // Internal for testing
- internal bool TryReinitializeParser()
- {
- _dispatcher.AssertForegroundThread();
-
- StopParser();
-
- if (!_documentTracker.IsSupportedProject)
- {
- // Tracker is either starting up, tearing down or wrongfully instantiated.
- // Either way, the tracker can't act on its associated project, neither can we.
- return false;
- }
-
- StartParser();
-
- return true;
- }
-
- // Internal for testing
- internal void StartParser()
- {
- _dispatcher.AssertForegroundThread();
-
- var projectDirectory = Path.GetDirectoryName(_documentTracker.ProjectPath);
- _projectEngine = _projectEngineFactory.Create(projectDirectory, ConfigureProjectEngine);
- _parser = new BackgroundParser(_projectEngine, FilePath, projectDirectory);
- _parser.ResultsReady += OnResultsReady;
- _parser.Start();
-
- TextBuffer.Changed += TextBuffer_OnChanged;
- }
-
- // Internal for testing
- internal void StopParser()
- {
- _dispatcher.AssertForegroundThread();
-
- if (_parser != null)
- {
- // Detatch from the text buffer until we have a new parser to handle changes.
- TextBuffer.Changed -= TextBuffer_OnChanged;
-
- _parser.ResultsReady -= OnResultsReady;
- _parser.Dispose();
- _parser = null;
- }
- }
-
- // Internal for testing
- internal void StartIdleTimer()
- {
- _dispatcher.AssertForegroundThread();
-
- lock (IdleLock)
- {
- if (_idleTimer == null)
- {
- // Timer will fire after a fixed delay, but only once.
- _idleTimer = new Timer(Timer_Tick, null, IdleDelay, Timeout.InfiniteTimeSpan);
- }
- }
- }
-
- // Internal for testing
- internal void StopIdleTimer()
- {
- // Can be called from any thread.
-
- lock (IdleLock)
- {
- if (_idleTimer != null)
- {
- _idleTimer.Dispose();
- _idleTimer = null;
- }
- }
- }
-
- private void TextBuffer_OnChanged(object sender, TextContentChangedEventArgs args)
- {
- _dispatcher.AssertForegroundThread();
-
- if (args.Changes.Count > 0)
- {
- // Idle timers are used to track provisional changes. Provisional changes only last for a single text change. After that normal
- // partial parsing rules apply (stop the timer).
- StopIdleTimer();
- }
-
- if (!args.TextChangeOccurred(out var changeInformation))
- {
- return;
- }
-
- var change = new SourceChange(changeInformation.firstChange.OldPosition, changeInformation.oldText.Length, changeInformation.newText);
- var snapshot = args.After;
- var result = PartialParseResultInternal.Rejected;
-
- using (_parser.SynchronizeMainThreadState())
- {
- // Check if we can partial-parse
- if (_partialParser != null && _parser.IsIdle)
- {
- result = _partialParser.Parse(change);
- }
- }
-
- // If partial parsing failed or there were outstanding parser tasks, start a full reparse
- if ((result & PartialParseResultInternal.Rejected) == PartialParseResultInternal.Rejected)
- {
- QueueChange(change, snapshot);
- }
-
- if ((result & PartialParseResultInternal.Provisional) == PartialParseResultInternal.Provisional)
- {
- StartIdleTimer();
- }
- }
-
- // Internal for testing
- internal void OnIdle(object state)
- {
- _dispatcher.AssertForegroundThread();
-
- if (_disposed)
- {
- return;
- }
-
- OnNotifyForegroundIdle();
-
- foreach (var textView in _documentTracker.TextViews)
- {
- if (_completionBroker.IsCompletionActive(textView))
- {
- // Completion list is still active, need to re-start timer.
- StartIdleTimer();
- return;
- }
- }
-
- QueueReparse();
- }
-
- // Internal for testing
- internal void ReparseOnForeground(object state)
- {
- _dispatcher.AssertForegroundThread();
-
- if (_disposed)
- {
- return;
- }
-
- var snapshot = TextBuffer.CurrentSnapshot;
- QueueChange(null, snapshot);
- }
-
- private void QueueChange(SourceChange change, ITextSnapshot snapshot)
- {
- _dispatcher.AssertForegroundThread();
-
- _latestChangeReference = new ChangeReference(change, snapshot);
- _parser.QueueChange(change, snapshot);
- }
-
- private void OnNotifyForegroundIdle()
- {
- if (NotifyForegroundIdleStart != null)
- {
- NotifyForegroundIdleStart.Set();
- }
- }
-
- private void OnStartingBackgroundIdleWork()
- {
- if (BlockBackgroundIdleWork != null)
- {
- BlockBackgroundIdleWork.Wait();
- }
- }
-
- private void Timer_Tick(object state)
- {
- try
- {
- _dispatcher.AssertBackgroundThread();
-
- OnStartingBackgroundIdleWork();
-
- StopIdleTimer();
-
- // We need to get back to the UI thread to properly check if a completion is active.
- Task.Factory.StartNew(OnIdle, null, CancellationToken.None, TaskCreationOptions.None, _dispatcher.ForegroundScheduler);
- }
- catch (Exception ex)
- {
- // This is something totally unexpected, let's just send it over to the workspace.
- Task.Factory.StartNew(() => _errorReporter.ReportError(ex), CancellationToken.None, TaskCreationOptions.None, _dispatcher.ForegroundScheduler);
- }
- }
-
- private void OnResultsReady(object sender, DocumentStructureChangedEventArgs args)
- {
- _dispatcher.AssertBackgroundThread();
-
- // Jump back to UI thread to notify structure changes.
- Task.Factory.StartNew(OnDocumentStructureChanged, args, CancellationToken.None, TaskCreationOptions.None, _dispatcher.ForegroundScheduler);
- }
-
- // Internal for testing
- internal void OnDocumentStructureChanged(object state)
- {
- _dispatcher.AssertForegroundThread();
-
- if (_disposed)
- {
- return;
- }
-
- var args = (DocumentStructureChangedEventArgs)state;
- if (_latestChangeReference == null || // extra hardening
- !_latestChangeReference.IsAssociatedWith(args) ||
- args.Snapshot != TextBuffer.CurrentSnapshot)
- {
- // In the middle of parsing a newer change or about to parse a newer change.
- return;
- }
-
- _latestChangeReference = null;
- _codeDocument = args.CodeDocument;
- _snapshot = args.Snapshot;
- _partialParser = new RazorSyntaxTreePartialParser(CodeDocument.GetSyntaxTree());
-
- DocumentStructureChanged?.Invoke(this, args);
- }
-
- private void ConfigureProjectEngine(RazorProjectEngineBuilder builder)
- {
- builder.Features.Add(new VisualStudioParserOptionsFeature(_documentTracker.EditorSettings));
- builder.Features.Add(new VisualStudioTagHelperFeature(_documentTracker.TagHelpers));
- }
-
- private class VisualStudioParserOptionsFeature : RazorEngineFeatureBase, IConfigureRazorCodeGenerationOptionsFeature
- {
- private readonly EditorSettings _settings;
-
- public VisualStudioParserOptionsFeature(EditorSettings settings)
- {
- _settings = settings;
- }
-
- public int Order { get; set; }
-
- public void Configure(RazorCodeGenerationOptionsBuilder options)
- {
- options.IndentSize = _settings.IndentSize;
- options.IndentWithTabs = _settings.IndentWithTabs;
- }
- }
-
- private class VisualStudioTagHelperFeature : ITagHelperFeature
- {
- private readonly IReadOnlyList _tagHelpers;
-
- public VisualStudioTagHelperFeature(IReadOnlyList tagHelpers)
- {
- _tagHelpers = tagHelpers;
- }
-
- public RazorEngine Engine { get; set; }
-
- public IReadOnlyList GetDescriptors()
- {
- return _tagHelpers;
- }
- }
-
- // Internal for testing
- internal class ChangeReference
- {
- public ChangeReference(SourceChange change, ITextSnapshot snapshot)
- {
- Change = change;
- Snapshot = snapshot;
- }
-
- public SourceChange Change { get; }
-
- public ITextSnapshot Snapshot { get; }
-
- public bool IsAssociatedWith(DocumentStructureChangedEventArgs other)
- {
- return Change == other.SourceChange &&
- Snapshot == other.Snapshot;
- }
- }
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultVisualStudioRazorParserFactory.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultVisualStudioRazorParserFactory.cs
deleted file mode 100644
index 5318ede59667..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultVisualStudioRazorParserFactory.cs
+++ /dev/null
@@ -1,66 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using Microsoft.CodeAnalysis.Razor;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- internal class DefaultVisualStudioRazorParserFactory : VisualStudioRazorParserFactory
- {
- private readonly ForegroundDispatcher _dispatcher;
- private readonly RazorProjectEngineFactoryService _projectEngineFactoryService;
- private readonly VisualStudioCompletionBroker _completionBroker;
- private readonly ErrorReporter _errorReporter;
-
- public DefaultVisualStudioRazorParserFactory(
- ForegroundDispatcher dispatcher,
- ErrorReporter errorReporter,
- VisualStudioCompletionBroker completionBroker,
- RazorProjectEngineFactoryService projectEngineFactoryService)
- {
- if (dispatcher == null)
- {
- throw new ArgumentNullException(nameof(dispatcher));
- }
-
- if (errorReporter == null)
- {
- throw new ArgumentNullException(nameof(errorReporter));
- }
-
- if (completionBroker == null)
- {
- throw new ArgumentNullException(nameof(completionBroker));
- }
-
- if (projectEngineFactoryService == null)
- {
- throw new ArgumentNullException(nameof(projectEngineFactoryService));
- }
-
- _dispatcher = dispatcher;
- _errorReporter = errorReporter;
- _completionBroker = completionBroker;
- _projectEngineFactoryService = projectEngineFactoryService;
- }
-
- public override VisualStudioRazorParser Create(VisualStudioDocumentTracker documentTracker)
- {
- if (documentTracker == null)
- {
- throw new ArgumentNullException(nameof(documentTracker));
- }
-
- _dispatcher.AssertForegroundThread();
-
- var parser = new DefaultVisualStudioRazorParser(
- _dispatcher,
- documentTracker,
- _projectEngineFactoryService,
- _errorReporter,
- _completionBroker);
- return parser;
- }
- }
-}
\ No newline at end of file
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultVisualStudioRazorParserFactoryFactory.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultVisualStudioRazorParserFactoryFactory.cs
deleted file mode 100644
index 38cfe5f189ef..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultVisualStudioRazorParserFactoryFactory.cs
+++ /dev/null
@@ -1,47 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.Composition;
-using Microsoft.CodeAnalysis.Host;
-using Microsoft.CodeAnalysis.Host.Mef;
-using Microsoft.CodeAnalysis.Razor;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- [Shared]
- [ExportLanguageServiceFactory(typeof(VisualStudioRazorParserFactory), RazorLanguage.Name, ServiceLayer.Default)]
- internal class DefaultVisualStudioRazorParserFactoryFactory : ILanguageServiceFactory
- {
- private readonly ForegroundDispatcher _foregroundDispatcher;
-
- [ImportingConstructor]
- public DefaultVisualStudioRazorParserFactoryFactory(ForegroundDispatcher foregroundDispatcher)
- {
- if (foregroundDispatcher == null)
- {
- throw new ArgumentNullException(nameof(foregroundDispatcher));
- }
-
- _foregroundDispatcher = foregroundDispatcher;
- }
- public ILanguageService CreateLanguageService(HostLanguageServices languageServices)
- {
- if (languageServices == null)
- {
- throw new ArgumentNullException(nameof(languageServices));
- }
-
- var workspaceServices = languageServices.WorkspaceServices;
- var errorReporter = workspaceServices.GetRequiredService();
- var completionBroker = languageServices.GetRequiredService();
- var projectEngineFactoryService = languageServices.GetRequiredService();
-
- return new DefaultVisualStudioRazorParserFactory(
- _foregroundDispatcher,
- errorReporter,
- completionBroker,
- projectEngineFactoryService);
- }
- }
-}
\ No newline at end of file
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultWorkspaceEditorSettings.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultWorkspaceEditorSettings.cs
deleted file mode 100644
index 0e49fbb8f4b1..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultWorkspaceEditorSettings.cs
+++ /dev/null
@@ -1,94 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.Diagnostics;
-using Microsoft.CodeAnalysis.Razor;
-using Microsoft.CodeAnalysis.Razor.Editor;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- internal class DefaultWorkspaceEditorSettings : WorkspaceEditorSettings
- {
- private readonly EditorSettingsManager _editorSettingsManager;
- private readonly EventHandler _onChanged;
- private EventHandler _changed;
- private readonly ForegroundDispatcher _foregroundDispatcher;
- private int _listenerCount = 0;
-
- public DefaultWorkspaceEditorSettings(ForegroundDispatcher foregroundDispatcher, EditorSettingsManager editorSettingsManager)
- {
- if (foregroundDispatcher == null)
- {
- throw new ArgumentNullException(nameof(foregroundDispatcher));
- }
-
- if (editorSettingsManager == null)
- {
- throw new ArgumentNullException(nameof(editorSettingsManager));
- }
-
- _foregroundDispatcher = foregroundDispatcher;
- _editorSettingsManager = editorSettingsManager;
- _onChanged = OnChanged;
- }
-
- public override event EventHandler Changed
- {
- add
- {
- _foregroundDispatcher.AssertForegroundThread();
-
- _listenerCount++;
- _changed += value;
-
- if (_listenerCount == 1)
- {
- // We bind to the editor settings manager only when we have listeners to avoid leaking memory.
- // Basically we're relying on anyone listening to us to have an understanding of when they're going
- // to be torn down. In Razor's case this will just be the document tracker factory (which does know).
- AttachToEditorSettingsManager();
- }
- }
- remove
- {
- _foregroundDispatcher.AssertForegroundThread();
-
- _listenerCount--;
- _changed -= value;
-
- if (_listenerCount == 0)
- {
- // We detatch from the editor settings manager when no one is listening to allow us to be garbage
- // collected in the case that the workspace is tearing down.
- DetachFromEditorSettingsManager();
- }
- }
- }
-
- // Internal for testing
- internal virtual void AttachToEditorSettingsManager()
- {
- _editorSettingsManager.Changed += _onChanged;
- }
-
- // Internal for testing
- internal virtual void DetachFromEditorSettingsManager()
- {
- _editorSettingsManager.Changed -= _onChanged;
- }
-
- public override EditorSettings Current => _editorSettingsManager.Current;
-
- // Internal for testing
- internal void OnChanged(object sender, EditorSettingsChangedEventArgs e)
- {
- _foregroundDispatcher.AssertForegroundThread();
-
- Debug.Assert(_changed != null, nameof(OnChanged) + " should not be invoked when there are no listeners.");
-
- var args = new EditorSettingsChangedEventArgs(Current);
- _changed?.Invoke(this, args);
- }
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultWorkspaceEditorSettingsFactory.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultWorkspaceEditorSettingsFactory.cs
deleted file mode 100644
index 6bc448b43fb6..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DefaultWorkspaceEditorSettingsFactory.cs
+++ /dev/null
@@ -1,47 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.Composition;
-using Microsoft.CodeAnalysis.Host;
-using Microsoft.CodeAnalysis.Host.Mef;
-using Microsoft.CodeAnalysis.Razor;
-using Microsoft.CodeAnalysis.Razor.Editor;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- [Shared]
- [ExportLanguageServiceFactory(typeof(WorkspaceEditorSettings), RazorLanguage.Name)]
- internal class DefaultWorkspaceEditorSettingsFactory : ILanguageServiceFactory
- {
- private readonly ForegroundDispatcher _foregroundDispatcher;
- private readonly EditorSettingsManager _editorSettingsManager;
-
- [ImportingConstructor]
- public DefaultWorkspaceEditorSettingsFactory(ForegroundDispatcher foregroundDispatcher, EditorSettingsManager editorSettingsManager)
- {
- if (foregroundDispatcher == null)
- {
- throw new ArgumentNullException(nameof(foregroundDispatcher));
- }
-
- if (editorSettingsManager == null)
- {
- throw new ArgumentNullException(nameof(editorSettingsManager));
- }
-
- _foregroundDispatcher = foregroundDispatcher;
- _editorSettingsManager = editorSettingsManager;
- }
-
- public ILanguageService CreateLanguageService(HostLanguageServices languageServices)
- {
- if (languageServices == null)
- {
- throw new ArgumentNullException(nameof(languageServices));
- }
-
- return new DefaultWorkspaceEditorSettings(_foregroundDispatcher, _editorSettingsManager);
- }
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DocumentStructureChangedEventArgs.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DocumentStructureChangedEventArgs.cs
deleted file mode 100644
index 4cd5e5c7dc84..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/DocumentStructureChangedEventArgs.cs
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using Microsoft.AspNetCore.Razor.Language;
-using Microsoft.VisualStudio.Text;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- public sealed class DocumentStructureChangedEventArgs : EventArgs
- {
- public DocumentStructureChangedEventArgs(
- SourceChange change,
- ITextSnapshot snapshot,
- RazorCodeDocument codeDocument)
- {
- SourceChange = change;
- Snapshot = snapshot;
- CodeDocument = codeDocument;
- }
-
- ///
- /// The which triggered the re-parse.
- ///
- public SourceChange SourceChange { get; }
-
- ///
- /// The text snapshot used in the re-parse.
- ///
- public ITextSnapshot Snapshot { get; }
-
- ///
- /// The result of the parsing and code generation.
- ///
- public RazorCodeDocument CodeDocument { get; }
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/EditorSettingsManager.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/EditorSettingsManager.cs
deleted file mode 100644
index c3e0399bde25..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/EditorSettingsManager.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using Microsoft.CodeAnalysis.Razor.Editor;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- public abstract class EditorSettingsManager
- {
- public abstract event EventHandler Changed;
-
- public abstract EditorSettings Current { get; }
-
- public abstract void Update(EditorSettings updateSettings);
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/ElementCompletionContext.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/ElementCompletionContext.cs
deleted file mode 100644
index 6d2c3965f590..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/ElementCompletionContext.cs
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.Collections.Generic;
-using Microsoft.AspNetCore.Razor.Language;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- public sealed class ElementCompletionContext
- {
- public ElementCompletionContext(
- TagHelperDocumentContext documentContext,
- IEnumerable existingCompletions,
- string containingTagName,
- IEnumerable> attributes,
- string containingParentTagName,
- bool containingParentIsTagHelper,
- Func inHTMLSchema)
- {
- if (documentContext == null)
- {
- throw new ArgumentNullException(nameof(documentContext));
- }
-
- if (existingCompletions == null)
- {
- throw new ArgumentNullException(nameof(existingCompletions));
- }
-
- if (inHTMLSchema == null)
- {
- throw new ArgumentNullException(nameof(inHTMLSchema));
- }
-
- DocumentContext = documentContext;
- ExistingCompletions = existingCompletions;
- ContainingTagName = containingTagName;
- Attributes = attributes;
- ContainingParentTagName = containingParentTagName;
- ContainingParentIsTagHelper = containingParentIsTagHelper;
- InHTMLSchema = inHTMLSchema;
- }
-
- public TagHelperDocumentContext DocumentContext { get; }
-
- public IEnumerable ExistingCompletions { get; }
-
- public string ContainingTagName { get; }
-
- public IEnumerable> Attributes { get; }
-
- public string ContainingParentTagName { get; }
-
- public bool ContainingParentIsTagHelper { get; }
-
- public Func InHTMLSchema { get; }
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/ElementCompletionResult.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/ElementCompletionResult.cs
deleted file mode 100644
index 3f5a9ad2d799..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/ElementCompletionResult.cs
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System.Collections.Generic;
-using System.Linq;
-using Microsoft.AspNetCore.Razor.Language;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- public abstract class ElementCompletionResult
- {
- private ElementCompletionResult()
- {
- }
-
- public abstract IReadOnlyDictionary> Completions { get; }
-
- internal static ElementCompletionResult Create(Dictionary> completions)
- {
- var readonlyCompletions = completions.ToDictionary(
- key => key.Key,
- value => (IEnumerable)value.Value,
- completions.Comparer);
- var result = new DefaultElementCompletionResult(readonlyCompletions);
-
- return result;
- }
-
- private class DefaultElementCompletionResult : ElementCompletionResult
- {
- private readonly IReadOnlyDictionary> _completions;
-
- public DefaultElementCompletionResult(IReadOnlyDictionary> completions)
- {
- _completions = completions;
- }
-
- public override IReadOnlyDictionary> Completions => _completions;
- }
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/FileChangeEventArgs.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/FileChangeEventArgs.cs
deleted file mode 100644
index 508c27381a78..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/FileChangeEventArgs.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- internal sealed class FileChangeEventArgs : EventArgs
- {
- public FileChangeEventArgs(string filePath, FileChangeKind kind)
- {
- FilePath = filePath;
- Kind = kind;
- }
-
- public string FilePath { get; }
-
- public FileChangeKind Kind { get; }
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/FileChangeKind.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/FileChangeKind.cs
deleted file mode 100644
index f5be58db77a0..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/FileChangeKind.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- internal enum FileChangeKind
- {
- Added,
- Removed,
- Changed,
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/FileChangeTracker.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/FileChangeTracker.cs
deleted file mode 100644
index 3c51bebdf6b6..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/FileChangeTracker.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- internal abstract class FileChangeTracker
- {
- public abstract event EventHandler Changed;
-
- public abstract string FilePath { get; }
-
- public abstract void StartListening();
-
- public abstract void StopListening();
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/FileChangeTrackerFactory.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/FileChangeTrackerFactory.cs
deleted file mode 100644
index f3b57f72a02f..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/FileChangeTrackerFactory.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using Microsoft.CodeAnalysis.Host;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- internal abstract class FileChangeTrackerFactory : ILanguageService
- {
- public abstract FileChangeTracker Create(string filePath);
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/ImportChangedEventArgs.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/ImportChangedEventArgs.cs
deleted file mode 100644
index 8444943bd6b0..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/ImportChangedEventArgs.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.Collections.Generic;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- internal class ImportChangedEventArgs : EventArgs
- {
- public ImportChangedEventArgs(string filePath, FileChangeKind kind, IEnumerable associatedDocuments)
- {
- FilePath = filePath;
- Kind = kind;
- AssociatedDocuments = associatedDocuments;
- }
-
- public string FilePath { get; }
-
- public FileChangeKind Kind { get; }
-
- public IEnumerable AssociatedDocuments { get; }
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/ImportDocumentManager.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/ImportDocumentManager.cs
deleted file mode 100644
index 0dbc93a21b95..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/ImportDocumentManager.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using Microsoft.CodeAnalysis.Host;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- internal abstract class ImportDocumentManager : ILanguageService
- {
- public abstract event EventHandler Changed;
-
- public abstract void OnSubscribed(VisualStudioDocumentTracker tracker);
-
- public abstract void OnUnsubscribed(VisualStudioDocumentTracker tracker);
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/LegacyProjectEngineFactory_1_0.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/LegacyProjectEngineFactory_1_0.cs
deleted file mode 100644
index 9b3b92eb898e..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/LegacyProjectEngineFactory_1_0.cs
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.Reflection;
-using Microsoft.AspNetCore.Razor.Language;
-using Microsoft.CodeAnalysis.Razor;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- [ExportCustomProjectEngineFactory("MVC-1.0", SupportsSerialization = true)]
- internal class LegacyProjectEngineFactory_1_0 : IProjectEngineFactory
- {
- private const string AssemblyName = "Microsoft.AspNetCore.Mvc.Razor.Extensions.Version1_X";
-
- public RazorProjectEngine Create(RazorConfiguration configuration, RazorProjectFileSystem fileSystem, Action configure)
- {
- // Rewrite the assembly name into a full name just like this one, but with the name of the MVC design time assembly.
- var assemblyName = new AssemblyName(typeof(LegacyProjectEngineFactory_1_0).Assembly.FullName);
- assemblyName.Name = AssemblyName;
-
- var extension = new AssemblyExtension(configuration.ConfigurationName, Assembly.Load(assemblyName));
- var initializer = extension.CreateInitializer();
-
- return RazorProjectEngine.Create(configuration, fileSystem, b =>
- {
- initializer.Initialize(b);
- configure?.Invoke(b);
- });
- }
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/LegacyProjectEngineFactory_1_1.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/LegacyProjectEngineFactory_1_1.cs
deleted file mode 100644
index d01e6999a82c..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/LegacyProjectEngineFactory_1_1.cs
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.Reflection;
-using Microsoft.AspNetCore.Razor.Language;
-using Microsoft.CodeAnalysis.Razor;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- [ExportCustomProjectEngineFactory("MVC-1.1", SupportsSerialization = true)]
- internal class LegacyProjectEngineFactory_1_1 : IProjectEngineFactory
- {
- private const string AssemblyName = "Microsoft.AspNetCore.Mvc.Razor.Extensions.Version1_X";
-
- public RazorProjectEngine Create(RazorConfiguration configuration, RazorProjectFileSystem fileSystem, Action configure)
- {
- // Rewrite the assembly name into a full name just like this one, but with the name of the MVC design time assembly.
- var assemblyName = new AssemblyName(typeof(LegacyProjectEngineFactory_1_1).Assembly.FullName);
- assemblyName.Name = AssemblyName;
-
- var extension = new AssemblyExtension(configuration.ConfigurationName, Assembly.Load(assemblyName));
- var initializer = extension.CreateInitializer();
-
- return RazorProjectEngine.Create(configuration, fileSystem, b =>
- {
- initializer.Initialize(b);
- configure?.Invoke(b);
- });
- }
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/LegacyProjectEngineFactory_2_0.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/LegacyProjectEngineFactory_2_0.cs
deleted file mode 100644
index ebf9e144f5cb..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/LegacyProjectEngineFactory_2_0.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.Reflection;
-using Microsoft.AspNetCore.Razor.Language;
-using Microsoft.CodeAnalysis.Razor;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- [ExportCustomProjectEngineFactory("MVC-2.0", SupportsSerialization = true)]
- internal class LegacyProjectEngineFactory_2_0 : IProjectEngineFactory
- {
- private const string AssemblyName = "Microsoft.AspNetCore.Mvc.Razor.Extensions";
- public RazorProjectEngine Create(RazorConfiguration configuration, RazorProjectFileSystem fileSystem, Action configure)
- {
- // Rewrite the assembly name into a full name just like this one, but with the name of the MVC design time assembly.
- var assemblyName = new AssemblyName(typeof(LegacyProjectEngineFactory_2_0).Assembly.FullName);
- assemblyName.Name = AssemblyName;
-
- var extension = new AssemblyExtension(configuration.ConfigurationName, Assembly.Load(assemblyName));
- var initializer = extension.CreateInitializer();
-
- return RazorProjectEngine.Create(configuration, fileSystem, b =>
- {
- initializer.Initialize(b);
- configure?.Invoke(b);
- });
- }
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/LegacyProjectEngineFactory_2_1.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/LegacyProjectEngineFactory_2_1.cs
deleted file mode 100644
index df8d04667ccf..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/LegacyProjectEngineFactory_2_1.cs
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.Reflection;
-using Microsoft.AspNetCore.Razor.Language;
-using Microsoft.CodeAnalysis.Razor;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- // Currently we provide a fixed configuration for 2.1, but this is a point-in-time issue. We plan
- // to make the 2.1 configuration more flexible and less hardcoded.
- [ExportCustomProjectEngineFactory("MVC-2.1", SupportsSerialization = true)]
- internal class LegacyProjectEngineFactory_2_1 : IProjectEngineFactory
- {
- private const string AssemblyName = "Microsoft.AspNetCore.Mvc.Razor.Extensions";
- public RazorProjectEngine Create(RazorConfiguration configuration, RazorProjectFileSystem fileSystem, Action configure)
- {
- // Rewrite the assembly name into a full name just like this one, but with the name of the MVC design time assembly.
- var assemblyName = new AssemblyName(typeof(LegacyProjectEngineFactory_2_1).Assembly.FullName);
- assemblyName.Name = AssemblyName;
-
- var extension = new AssemblyExtension(configuration.ConfigurationName, Assembly.Load(assemblyName));
- var initializer = extension.CreateInitializer();
-
- return RazorProjectEngine.Create(configuration, fileSystem, b =>
- {
- initializer.Initialize(b);
- configure?.Invoke(b);
- });
- }
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/Microsoft.VisualStudio.Editor.Razor.csproj b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/Microsoft.VisualStudio.Editor.Razor.csproj
deleted file mode 100644
index aa50d399657f..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/Microsoft.VisualStudio.Editor.Razor.csproj
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
- net46
- Razor is a markup syntax for adding server-side logic to web pages. This package contains the Visual Studio agnostic Razor design-time infrastructure.
- false
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/Properties/AssemblyInfo.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/Properties/AssemblyInfo.cs
deleted file mode 100644
index fce64fd49bdd..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System.Runtime.CompilerServices;
-
-[assembly: InternalsVisibleTo("Microsoft.VisualStudio.Editor.Razor.Test, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
-[assembly: InternalsVisibleTo("Microsoft.VisualStudio.Mac.LanguageServices.Razor, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
-[assembly: InternalsVisibleTo("Microsoft.VisualStudio.Mac.LanguageServices.Razor.Test, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
-[assembly: InternalsVisibleTo("Microsoft.VisualStudio.LanguageServices.Razor, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
-[assembly: InternalsVisibleTo("Microsoft.VisualStudio.LanguageServices.Razor.Test, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
-[assembly: InternalsVisibleTo("Microsoft.VisualStudio.RazorExtension, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
-[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7")]
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/Properties/Resources.Designer.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/Properties/Resources.Designer.cs
deleted file mode 100644
index 922d049da8e2..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/Properties/Resources.Designer.cs
+++ /dev/null
@@ -1,44 +0,0 @@
-//
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- using System.Globalization;
- using System.Reflection;
- using System.Resources;
-
- internal static class Resources
- {
- private static readonly ResourceManager _resourceManager
- = new ResourceManager("Microsoft.VisualStudio.Editor.Razor.Resources", typeof(Resources).GetTypeInfo().Assembly);
-
- ///
- /// Value cannot be null or an empty string.
- ///
- internal static string ArgumentCannotBeNullOrEmpty
- {
- get => GetString("ArgumentCannotBeNullOrEmpty");
- }
-
- ///
- /// Value cannot be null or an empty string.
- ///
- internal static string FormatArgumentCannotBeNullOrEmpty()
- => GetString("ArgumentCannotBeNullOrEmpty");
-
- private static string GetString(string name, params string[] formatterNames)
- {
- var value = _resourceManager.GetString(name);
-
- System.Diagnostics.Debug.Assert(value != null);
-
- if (formatterNames != null)
- {
- for (var i = 0; i < formatterNames.Length; i++)
- {
- value = value.Replace("{" + formatterNames[i] + "}", "{" + i + "}");
- }
- }
-
- return value;
- }
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/RazorCodeDocumentProvider.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/RazorCodeDocumentProvider.cs
deleted file mode 100644
index be30691363e6..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/RazorCodeDocumentProvider.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using Microsoft.AspNetCore.Razor.Language;
-using Microsoft.CodeAnalysis;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- internal abstract class RazorCodeDocumentProvider
- {
- public abstract bool TryGetFromDocument(TextDocument document, out RazorCodeDocument codeDocument);
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/RazorDirectiveCompletionProvider.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/RazorDirectiveCompletionProvider.cs
deleted file mode 100644
index c55dcc377602..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/RazorDirectiveCompletionProvider.cs
+++ /dev/null
@@ -1,218 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.Collections.Generic;
-using System.Collections.Immutable;
-using System.ComponentModel.Composition;
-using System.Linq;
-using System.Runtime.CompilerServices;
-using System.Threading;
-using System.Threading.Tasks;
-using Microsoft.AspNetCore.Razor.Language;
-using Microsoft.AspNetCore.Razor.Language.Legacy;
-using Microsoft.CodeAnalysis;
-using Microsoft.CodeAnalysis.Completion;
-using Microsoft.CodeAnalysis.Razor;
-using Microsoft.CodeAnalysis.Text;
-using Microsoft.VisualStudio.Text;
-using Microsoft.VisualStudio.Text.Projection;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- [System.Composition.Shared]
- [Export(typeof(CompletionProvider))]
- [ExportMetadata("Language", LanguageNames.CSharp)]
- internal class RazorDirectiveCompletionProvider : CompletionProvider
- {
- // Internal for testing
- internal static readonly string DescriptionKey = "Razor.Description";
-
- private static readonly IEnumerable DefaultDirectives = new[]
- {
- CSharpCodeParser.AddTagHelperDirectiveDescriptor,
- CSharpCodeParser.RemoveTagHelperDirectiveDescriptor,
- CSharpCodeParser.TagHelperPrefixDirectiveDescriptor,
- };
- private readonly Lazy _codeDocumentProvider;
-
- [ImportingConstructor]
- public RazorDirectiveCompletionProvider([Import(typeof(RazorCodeDocumentProvider))] Lazy codeDocumentProvider)
- {
- if (codeDocumentProvider == null)
- {
- throw new ArgumentNullException(nameof(codeDocumentProvider));
- }
-
- _codeDocumentProvider = codeDocumentProvider;
- }
-
- public override Task GetDescriptionAsync(Document document, CompletionItem item, CancellationToken cancellationToken)
- {
- if (document == null)
- {
- throw new ArgumentNullException(nameof(document));
- }
-
- if (item == null)
- {
- throw new ArgumentNullException(nameof(item));
- }
-
- var descriptionContent = new List();
- if (item.Properties.TryGetValue(DescriptionKey, out var directiveDescription))
- {
- var descriptionText = new TaggedText(TextTags.Text, directiveDescription);
- descriptionContent.Add(descriptionText);
- }
-
- var completionDescription = CompletionDescription.Create(descriptionContent.ToImmutableArray());
- return Task.FromResult(completionDescription);
- }
-
- public override Task ProvideCompletionsAsync(CompletionContext context)
- {
- if (context == null)
- {
- throw new ArgumentNullException(nameof(context));
- }
-
- // FilePath will be null when the editor is open for cases where we don't have a file on disk (C# interactive window and others).
- if (context.Document?.FilePath == null ||
- !context.Document.FilePath.EndsWith(".cshtml", StringComparison.OrdinalIgnoreCase))
- {
- // Not a Razor file.
- return Task.CompletedTask;
- }
-
- var result = AddCompletionItems(context);
-
- return result;
- }
-
- // We do not want this inlined because the work done in this method requires Razor.Workspaces and Razor.Language assemblies.
- // If those two assemblies were to load you'd have them load in every C# editor completion scenario.
- [MethodImpl(MethodImplOptions.NoInlining)]
- private Task AddCompletionItems(CompletionContext context)
- {
- if (!_codeDocumentProvider.Value.TryGetFromDocument(context.Document, out var codeDocument))
- {
- // A Razor code document has not yet been associated with the document.
- return Task.CompletedTask;
- }
-
- var syntaxTree = codeDocument.GetSyntaxTree();
- if (syntaxTree == null)
- {
- // No syntax tree has been computed for the current document.
- return Task.CompletedTask;
- }
-
- if (!AtDirectiveCompletionPoint(syntaxTree, context))
- {
- // Can't have a valid directive at the current location.
- return Task.CompletedTask;
- }
-
- var completionItems = GetCompletionItems(syntaxTree);
- context.AddItems(completionItems);
-
- return Task.CompletedTask;
- }
-
- // Internal virtual for testing
- internal virtual IEnumerable GetCompletionItems(RazorSyntaxTree syntaxTree)
- {
- var directives = syntaxTree.Options.Directives.Concat(DefaultDirectives);
- var completionItems = new List();
- foreach (var directive in directives)
- {
- var propertyDictionary = new Dictionary(StringComparer.Ordinal);
-
- if (!string.IsNullOrEmpty(directive.Description))
- {
- propertyDictionary[DescriptionKey] = directive.Description;
- }
-
- var completionItem = CompletionItem.Create(
- directive.Directive,
- // This groups all Razor directives together
- sortText: "_RazorDirective_",
- rules: CompletionItemRules.Create(formatOnCommit: false),
- tags: ImmutableArray.Create(CompletionTags.Intrinsic),
- properties: propertyDictionary.ToImmutableDictionary());
- completionItems.Add(completionItem);
- }
-
- return completionItems;
- }
-
- // Internal for testing
- internal bool AtDirectiveCompletionPoint(RazorSyntaxTree syntaxTree, CompletionContext context)
- {
- if (TryGetRazorSnapshotPoint(context, out var razorSnapshotPoint))
- {
- var change = new SourceChange(razorSnapshotPoint.Position, 0, string.Empty);
- var owner = syntaxTree.Root.LocateOwner(change);
-
- if (owner == null)
- {
- return false;
- }
-
- if (owner.ChunkGenerator is ExpressionChunkGenerator &&
- owner.Symbols.All(IsDirectiveCompletableSymbol) &&
- // Do not provide IntelliSense for explicit expressions. Explicit expressions will usually look like:
- // [@] [(] [DateTime.Now] [)]
- owner.Parent?.Children.Count > 1 &&
- owner.Parent.Children[1] == owner)
- {
- return true;
- }
- }
-
- return false;
- }
-
- protected virtual bool TryGetRazorSnapshotPoint(CompletionContext context, out SnapshotPoint snapshotPoint)
- {
- snapshotPoint = default(SnapshotPoint);
-
- if (context.Document.TryGetText(out var sourceText))
- {
- var textSnapshot = sourceText.FindCorrespondingEditorTextSnapshot();
- var projectionSnapshot = textSnapshot as IProjectionSnapshot;
-
- if (projectionSnapshot == null)
- {
- return false;
- }
-
- var mappedPoints = projectionSnapshot.MapToSourceSnapshots(context.CompletionListSpan.Start);
- var htmlSnapshotPoints = mappedPoints.Where(p => p.Snapshot.TextBuffer.IsRazorBuffer());
-
- if (!htmlSnapshotPoints.Any())
- {
- return false;
- }
-
- snapshotPoint = htmlSnapshotPoints.First();
- return true;
- }
-
- return false;
- }
-
- private static bool IsDirectiveCompletableSymbol(AspNetCore.Razor.Language.Legacy.ISymbol symbol)
- {
- if (!(symbol is CSharpSymbol csharpSymbol))
- {
- return false;
- }
-
- return csharpSymbol.Type == CSharpSymbolType.Identifier ||
- // Marker symbol
- csharpSymbol.Type == CSharpSymbolType.Unknown;
- }
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/RazorDocumentManager.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/RazorDocumentManager.cs
deleted file mode 100644
index 2f4dd3c577b4..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/RazorDocumentManager.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System.Collections.Generic;
-using Microsoft.CodeAnalysis.Host;
-using Microsoft.VisualStudio.Text;
-using Microsoft.VisualStudio.Text.Editor;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- internal abstract class RazorDocumentManager : ILanguageService
- {
- public abstract void OnTextViewOpened(ITextView textView, IEnumerable subjectBuffers);
-
- public abstract void OnTextViewClosed(ITextView textView, IEnumerable subjectBuffers);
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/RazorEditorFactoryService.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/RazorEditorFactoryService.cs
deleted file mode 100644
index 8f298aed95e6..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/RazorEditorFactoryService.cs
+++ /dev/null
@@ -1,16 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using Microsoft.VisualStudio.Text;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- public abstract class RazorEditorFactoryService
- {
- public abstract bool TryGetDocumentTracker(ITextBuffer textBuffer, out VisualStudioDocumentTracker documentTracker);
-
- public abstract bool TryGetParser(ITextBuffer textBuffer, out VisualStudioRazorParser parser);
-
- internal abstract bool TryGetSmartIndenter(ITextBuffer textBuffer, out BraceSmartIndenter braceSmartIndenter);
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/RazorIndentationFactsService.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/RazorIndentationFactsService.cs
deleted file mode 100644
index 01f7e6f126dc..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/RazorIndentationFactsService.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using Microsoft.AspNetCore.Razor.Language;
-using Microsoft.CodeAnalysis.Host;
-using Microsoft.VisualStudio.Text;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- public abstract class RazorIndentationFactsService : ILanguageService
- {
- public abstract int? GetDesiredIndentation(RazorSyntaxTree syntaxTree, ITextSnapshot syntaxTreeSnapshot, ITextSnapshotLine line, int indentSize, int tabSize);
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/RazorSyntaxFactsService.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/RazorSyntaxFactsService.cs
deleted file mode 100644
index fc47c8199191..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/RazorSyntaxFactsService.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System.Collections.Generic;
-using Microsoft.AspNetCore.Razor.Language;
-using Microsoft.CodeAnalysis.Host;
-using Microsoft.CodeAnalysis.Razor;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- public abstract class RazorSyntaxFactsService : ILanguageService
- {
- public abstract IReadOnlyList GetClassifiedSpans(RazorSyntaxTree syntaxTree);
-
- public abstract IReadOnlyList GetTagHelperSpans(RazorSyntaxTree syntaxTree);
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/RazorSyntaxFactsServiceExtensions.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/RazorSyntaxFactsServiceExtensions.cs
deleted file mode 100644
index c64a0210d18f..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/RazorSyntaxFactsServiceExtensions.cs
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using Microsoft.AspNetCore.Razor.Language;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- public static class RazorSyntaxFactsServiceExtensions
- {
- public static bool IsTagHelperSpan(this RazorSyntaxFactsService syntaxFactsService, RazorSyntaxTree syntaxTree, SourceSpan span)
- {
- if (syntaxFactsService == null)
- {
- throw new ArgumentNullException(nameof(syntaxFactsService));
- }
-
- if (syntaxTree == null)
- {
- // Extra hardening for the case that tooling hasn't retrieved a SyntaxTree yet.
- return false;
- }
-
- var tagHelperSpans = syntaxFactsService.GetTagHelperSpans(syntaxTree);
- for (var i = 0; i < tagHelperSpans.Count; i++)
- {
- var tagHelperSpan = tagHelperSpans[i].Span;
- if (tagHelperSpan.AbsoluteIndex == span.AbsoluteIndex && tagHelperSpan.Length == span.Length)
- {
- return true;
- }
- }
-
- return false;
- }
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/RazorSyntaxTreePartialParser.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/RazorSyntaxTreePartialParser.cs
deleted file mode 100644
index 377351c95909..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/RazorSyntaxTreePartialParser.cs
+++ /dev/null
@@ -1,79 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using Microsoft.AspNetCore.Razor.Language;
-using Microsoft.AspNetCore.Razor.Language.Legacy;
-using Span = Microsoft.AspNetCore.Razor.Language.Legacy.Span;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- internal class RazorSyntaxTreePartialParser
- {
- private Span _lastChangeOwner;
- private bool _lastResultProvisional;
-
- public RazorSyntaxTreePartialParser(RazorSyntaxTree syntaxTree)
- {
- if (syntaxTree == null)
- {
- throw new ArgumentNullException(nameof(syntaxTree));
- }
-
- // We mutate the existing syntax tree so we need to clone the one passed in so our mutations don't
- // impact external state.
- SyntaxTreeRoot = (Block)syntaxTree.Root.Clone();
- }
-
- // Internal for testing
- internal Block SyntaxTreeRoot { get; }
-
- public PartialParseResultInternal Parse(SourceChange change)
- {
- var result = GetPartialParseResult(change);
-
- // Remember if this was provisionally accepted for next partial parse.
- _lastResultProvisional = (result & PartialParseResultInternal.Provisional) == PartialParseResultInternal.Provisional;
-
- return result;
- }
-
- private PartialParseResultInternal GetPartialParseResult(SourceChange change)
- {
- var result = PartialParseResultInternal.Rejected;
-
- // Try the last change owner
- if (_lastChangeOwner != null && _lastChangeOwner.EditHandler.OwnsChange(_lastChangeOwner, change))
- {
- var editResult = _lastChangeOwner.EditHandler.ApplyChange(_lastChangeOwner, change);
- result = editResult.Result;
- if ((editResult.Result & PartialParseResultInternal.Rejected) != PartialParseResultInternal.Rejected)
- {
- _lastChangeOwner.ReplaceWith(editResult.EditedSpan);
- }
-
- return result;
- }
-
- // Locate the span responsible for this change
- _lastChangeOwner = SyntaxTreeRoot.LocateOwner(change);
-
- if (_lastResultProvisional)
- {
- // Last change owner couldn't accept this, so we must do a full reparse
- result = PartialParseResultInternal.Rejected;
- }
- else if (_lastChangeOwner != null)
- {
- var editResult = _lastChangeOwner.EditHandler.ApplyChange(_lastChangeOwner, change);
- result = editResult.Result;
- if ((editResult.Result & PartialParseResultInternal.Rejected) != PartialParseResultInternal.Rejected)
- {
- _lastChangeOwner.ReplaceWith(editResult.EditedSpan);
- }
- }
-
- return result;
- }
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/RazorTextBufferProvider.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/RazorTextBufferProvider.cs
deleted file mode 100644
index ed3479671b51..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/RazorTextBufferProvider.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using Microsoft.CodeAnalysis;
-using Microsoft.CodeAnalysis.Host;
-using Microsoft.VisualStudio.Text;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- internal abstract class RazorTextBufferProvider : ILanguageService
- {
- public abstract bool TryGetFromDocument(TextDocument document, out ITextBuffer textBuffer);
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/RazorTextViewConnectionListener.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/RazorTextViewConnectionListener.cs
deleted file mode 100644
index 53a4464b459f..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/RazorTextViewConnectionListener.cs
+++ /dev/null
@@ -1,73 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.Collections.Generic;
-using System.ComponentModel.Composition;
-using Microsoft.CodeAnalysis.Razor;
-using Microsoft.VisualStudio.Text;
-using Microsoft.VisualStudio.Text.Editor;
-using Microsoft.VisualStudio.Utilities;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- [ContentType(RazorLanguage.CoreContentType)]
- [TextViewRole(PredefinedTextViewRoles.Document)]
- [Export(typeof(ITextViewConnectionListener))]
- internal class RazorTextViewConnectionListener : ITextViewConnectionListener
- {
- private readonly ForegroundDispatcher _foregroundDispatcher;
- private readonly RazorDocumentManager _documentManager;
-
- [ImportingConstructor]
- public RazorTextViewConnectionListener(ForegroundDispatcher foregroundDispatcher, RazorDocumentManager documentManager)
- {
- if (foregroundDispatcher == null)
- {
- throw new ArgumentNullException(nameof(foregroundDispatcher));
- }
-
- if (documentManager == null)
- {
- throw new ArgumentNullException(nameof(documentManager));
- }
-
- _foregroundDispatcher = foregroundDispatcher;
- _documentManager = documentManager;
- }
-
- public void SubjectBuffersConnected(ITextView textView, ConnectionReason reason, IReadOnlyCollection subjectBuffers)
- {
- if (textView == null)
- {
- throw new ArgumentException(nameof(textView));
- }
-
- if (subjectBuffers == null)
- {
- throw new ArgumentNullException(nameof(subjectBuffers));
- }
-
- _foregroundDispatcher.AssertForegroundThread();
-
- _documentManager.OnTextViewOpened(textView, subjectBuffers);
- }
-
- public void SubjectBuffersDisconnected(ITextView textView, ConnectionReason reason, IReadOnlyCollection subjectBuffers)
- {
- if (textView == null)
- {
- throw new ArgumentException(nameof(textView));
- }
-
- if (subjectBuffers == null)
- {
- throw new ArgumentNullException(nameof(subjectBuffers));
- }
-
- _foregroundDispatcher.AssertForegroundThread();
-
- _documentManager.OnTextViewClosed(textView, subjectBuffers);
- }
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/Resources.resx b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/Resources.resx
deleted file mode 100644
index 55a253ebbe32..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/Resources.resx
+++ /dev/null
@@ -1,123 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 2.0
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- Value cannot be null or an empty string.
-
-
\ No newline at end of file
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/SpanKind.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/SpanKind.cs
deleted file mode 100644
index 8e66d134085a..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/SpanKind.cs
+++ /dev/null
@@ -1,15 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- public enum SpanKind
- {
- Transition,
- MetaCode,
- Comment,
- Code,
- Markup,
- None
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/TagHelperCompletionService.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/TagHelperCompletionService.cs
deleted file mode 100644
index 61eb7517960a..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/TagHelperCompletionService.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- public abstract class TagHelperCompletionService
- {
- public abstract AttributeCompletionResult GetAttributeCompletions(AttributeCompletionContext completionContext);
-
- public abstract ElementCompletionResult GetElementCompletions(ElementCompletionContext completionContext);
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/TagHelperFactsService.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/TagHelperFactsService.cs
deleted file mode 100644
index e7fd77279d32..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/TagHelperFactsService.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System.Collections.Generic;
-using Microsoft.AspNetCore.Razor.Language;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- public abstract class TagHelperFactsService
- {
- public abstract TagHelperBinding GetTagHelperBinding(TagHelperDocumentContext documentContext, string tagName, IEnumerable> attributes, string parentTag, bool parentIsTagHelper);
-
- public abstract IEnumerable GetBoundTagHelperAttributes(TagHelperDocumentContext documentContext, string attributeName, TagHelperBinding binding);
-
- public abstract IReadOnlyList GetTagHelpersGivenTag(TagHelperDocumentContext documentContext, string tagName, string parentTag);
-
- public abstract IReadOnlyList GetTagHelpersGivenParent(TagHelperDocumentContext documentContext, string parentTag);
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/TagHelperSpan.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/TagHelperSpan.cs
deleted file mode 100644
index 15a88dee7a71..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/TagHelperSpan.cs
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.Collections.Generic;
-using Microsoft.AspNetCore.Razor.Language;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- public struct TagHelperSpan
- {
- public TagHelperSpan(SourceSpan span, TagHelperBinding binding)
- {
- if (binding == null)
- {
- throw new ArgumentNullException(nameof(binding));
- }
-
- Span = span;
- Binding = binding;
- }
-
- public TagHelperBinding Binding { get; }
-
- public IEnumerable TagHelpers => Binding.Descriptors;
-
- public SourceSpan Span { get; }
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/TextBufferCodeDocumentProvider.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/TextBufferCodeDocumentProvider.cs
deleted file mode 100644
index ac05e6d91217..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/TextBufferCodeDocumentProvider.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using Microsoft.AspNetCore.Razor.Language;
-using Microsoft.VisualStudio.Text;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- internal abstract class TextBufferCodeDocumentProvider
- {
- public abstract bool TryGetFromBuffer(ITextBuffer textBuffer, out RazorCodeDocument codeDocument);
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/TextBufferExtensions.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/TextBufferExtensions.cs
deleted file mode 100644
index fcfefeb874d3..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/TextBufferExtensions.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using Microsoft.CodeAnalysis.Razor;
-
-namespace Microsoft.VisualStudio.Text
-{
- internal static class TextBufferExtensions
- {
- public static bool IsRazorBuffer(this ITextBuffer textBuffer)
- {
- if (textBuffer == null)
- {
- throw new ArgumentNullException(nameof(textBuffer));
- }
-
- return textBuffer.ContentType.IsOfType(RazorLanguage.CoreContentType);
- }
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/TextBufferProjectService.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/TextBufferProjectService.cs
deleted file mode 100644
index 30ba31714c70..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/TextBufferProjectService.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using Microsoft.VisualStudio.Text;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- internal abstract class TextBufferProjectService
- {
- public abstract object GetHostProject(ITextBuffer textBuffer);
-
- public abstract bool IsSupportedProject(object project);
-
- public abstract string GetProjectPath(object project);
-
- public abstract string GetProjectName(object project);
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/TextContentChangedEventArgsExtensions.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/TextContentChangedEventArgsExtensions.cs
deleted file mode 100644
index 2e274ee88576..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/TextContentChangedEventArgsExtensions.cs
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-
-namespace Microsoft.VisualStudio.Text
-{
- internal static class TextContentChangedEventArgsExtensions
- {
- public static bool TextChangeOccurred(this TextContentChangedEventArgs args, out (ITextChange firstChange, ITextChange lastChange, string newText, string oldText) changeInformation)
- {
- if (args.Changes.Count > 0)
- {
- var firstChange = args.Changes[0];
- var lastChange = args.Changes[args.Changes.Count - 1];
- var oldLength = lastChange.OldEnd - firstChange.OldPosition;
- var newLength = lastChange.NewEnd - firstChange.NewPosition;
- var newText = args.After.GetText(firstChange.NewPosition, newLength);
- var oldText = args.Before.GetText(firstChange.OldPosition, oldLength);
-
- var wasChanged = true;
- if (oldLength == newLength)
- {
- wasChanged = !string.Equals(oldText, newText, StringComparison.Ordinal);
- }
-
- if (wasChanged)
- {
- changeInformation = (firstChange, lastChange, newText, oldText);
- return true;
- }
- }
-
- changeInformation = default((ITextChange, ITextChange, string, string));
- return false;
- }
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/TextSnapshotProjectItem.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/TextSnapshotProjectItem.cs
deleted file mode 100644
index 4a605fd4a44e..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/TextSnapshotProjectItem.cs
+++ /dev/null
@@ -1,65 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.IO;
-using System.Text;
-using Microsoft.AspNetCore.Razor.Language;
-using Microsoft.VisualStudio.Text;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- internal class TextSnapshotProjectItem : RazorProjectItem
- {
- private readonly ITextSnapshot _snapshot;
-
- public TextSnapshotProjectItem(ITextSnapshot snapshot, string projectDirectory, string relativeFilePath, string filePath)
- {
- if (snapshot == null)
- {
- throw new ArgumentNullException(nameof(snapshot));
- }
-
- if (string.IsNullOrEmpty(projectDirectory))
- {
- throw new ArgumentException(Resources.ArgumentCannotBeNullOrEmpty, nameof(projectDirectory));
- }
-
- if (string.IsNullOrEmpty(relativeFilePath))
- {
- throw new ArgumentException(Resources.ArgumentCannotBeNullOrEmpty, nameof(relativeFilePath));
- }
-
- if (string.IsNullOrEmpty(filePath))
- {
- throw new ArgumentException(Resources.ArgumentCannotBeNullOrEmpty, nameof(filePath));
- }
-
- _snapshot = snapshot;
- BasePath = projectDirectory;
- FilePath = relativeFilePath;
- PhysicalPath = filePath;
- }
-
- public override string BasePath { get; }
-
- public override string FilePath { get; }
-
- public override string PhysicalPath { get; }
-
- public override bool Exists => true;
-
- public override Stream Read()
- {
- var charArray = _snapshot.ToCharArray(0, _snapshot.Length);
-
- // We can assume UTF8 because the call path that reads from RazorProjectItem => SourceDocument
- // can't determine the encoding and always assumes Encoding.UTF8. This is something that we might
- // want to revisit in the future.
- var bytes = Encoding.UTF8.GetBytes(charArray);
- var memoryStream = new MemoryStream(bytes);
- return memoryStream;
- }
- }
-
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/VisualStudioCompletionBroker.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/VisualStudioCompletionBroker.cs
deleted file mode 100644
index a86810b290d5..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/VisualStudioCompletionBroker.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using Microsoft.CodeAnalysis.Host;
-using Microsoft.VisualStudio.Text.Editor;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- internal abstract class VisualStudioCompletionBroker : ILanguageService
- {
- public abstract bool IsCompletionActive(ITextView textView);
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/VisualStudioDocumentTracker.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/VisualStudioDocumentTracker.cs
deleted file mode 100644
index 7cde4da7163f..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/VisualStudioDocumentTracker.cs
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.Collections.Generic;
-using Microsoft.AspNetCore.Razor.Language;
-using Microsoft.CodeAnalysis;
-using Microsoft.CodeAnalysis.Razor.Editor;
-using Microsoft.VisualStudio.Text;
-using Microsoft.VisualStudio.Text.Editor;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- public abstract class VisualStudioDocumentTracker
- {
- public abstract event EventHandler ContextChanged;
-
- public abstract RazorConfiguration Configuration { get; }
-
- public abstract EditorSettings EditorSettings { get; }
-
- public abstract IReadOnlyList TagHelpers { get; }
-
- public abstract bool IsSupportedProject { get; }
-
- public abstract string FilePath { get; }
-
- public abstract string ProjectPath { get; }
-
- public abstract Project Project { get; }
-
- public abstract Workspace Workspace { get; }
-
- public abstract ITextBuffer TextBuffer { get; }
-
- public abstract IReadOnlyList TextViews { get; }
-
- public abstract ITextView GetFocusedTextView();
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/VisualStudioDocumentTrackerFactory.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/VisualStudioDocumentTrackerFactory.cs
deleted file mode 100644
index c17565dd7285..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/VisualStudioDocumentTrackerFactory.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using Microsoft.CodeAnalysis.Host;
-using Microsoft.VisualStudio.Text;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- internal abstract class VisualStudioDocumentTrackerFactory : ILanguageService
- {
- public abstract VisualStudioDocumentTracker Create(ITextBuffer textBuffer);
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/VisualStudioRazorParser.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/VisualStudioRazorParser.cs
deleted file mode 100644
index c1d71a6111f2..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/VisualStudioRazorParser.cs
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using Microsoft.AspNetCore.Razor.Language;
-using Microsoft.VisualStudio.Text;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- public abstract class VisualStudioRazorParser
- {
- public abstract event EventHandler DocumentStructureChanged;
-
- public abstract string FilePath { get; }
-
- public abstract RazorCodeDocument CodeDocument { get; }
-
- public abstract ITextSnapshot Snapshot { get; }
-
- public abstract ITextBuffer TextBuffer { get; }
-
- public abstract bool HasPendingChanges { get; }
-
- public abstract void QueueReparse();
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/VisualStudioRazorParserFactory.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/VisualStudioRazorParserFactory.cs
deleted file mode 100644
index 7d30a460271d..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/VisualStudioRazorParserFactory.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using Microsoft.CodeAnalysis.Host;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- internal abstract class VisualStudioRazorParserFactory : ILanguageService
- {
- public abstract VisualStudioRazorParser Create(VisualStudioDocumentTracker documentTracker);
- }
-}
\ No newline at end of file
diff --git a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/VisualStudioWorkspaceAccessor.cs b/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/VisualStudioWorkspaceAccessor.cs
deleted file mode 100644
index 70016569c226..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.Editor.Razor/VisualStudioWorkspaceAccessor.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using Microsoft.CodeAnalysis;
-using Microsoft.VisualStudio.Text;
-
-namespace Microsoft.VisualStudio.Editor.Razor
-{
- internal abstract class VisualStudioWorkspaceAccessor
- {
- public abstract bool TryGetWorkspace(ITextBuffer textBuffer, out Workspace workspace);
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/DefaultFileChangeTracker.cs b/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/DefaultFileChangeTracker.cs
deleted file mode 100644
index e2d164e8063f..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/DefaultFileChangeTracker.cs
+++ /dev/null
@@ -1,141 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.Diagnostics;
-using System.Runtime.InteropServices;
-using Microsoft.CodeAnalysis.Razor;
-using Microsoft.VisualStudio.Editor.Razor;
-using Microsoft.VisualStudio.Shell.Interop;
-
-namespace Microsoft.VisualStudio.LanguageServices.Razor
-{
- internal class DefaultFileChangeTracker : FileChangeTracker, IVsFileChangeEvents
- {
- private const uint FileChangeFlags = (uint)(_VSFILECHANGEFLAGS.VSFILECHG_Time | _VSFILECHANGEFLAGS.VSFILECHG_Size | _VSFILECHANGEFLAGS.VSFILECHG_Del | _VSFILECHANGEFLAGS.VSFILECHG_Add);
-
- private readonly ForegroundDispatcher _foregroundDispatcher;
- private readonly ErrorReporter _errorReporter;
- private readonly IVsFileChangeEx _fileChangeService;
- private uint _fileChangeCookie;
-
- public override event EventHandler Changed;
-
- public DefaultFileChangeTracker(
- string filePath,
- ForegroundDispatcher foregroundDispatcher,
- ErrorReporter errorReporter,
- IVsFileChangeEx fileChangeService)
- {
- if (string.IsNullOrEmpty(filePath))
- {
- throw new ArgumentException(Resources.ArgumentCannotBeNullOrEmpty, nameof(filePath));
- }
-
- if (foregroundDispatcher == null)
- {
- throw new ArgumentNullException(nameof(foregroundDispatcher));
- }
-
- if (errorReporter == null)
- {
- throw new ArgumentNullException(nameof(errorReporter));
- }
-
- if (fileChangeService == null)
- {
- throw new ArgumentNullException(nameof(fileChangeService));
- }
-
- FilePath = filePath;
- _foregroundDispatcher = foregroundDispatcher;
- _errorReporter = errorReporter;
- _fileChangeService = fileChangeService;
- _fileChangeCookie = VSConstants.VSCOOKIE_NIL;
- }
-
- public override string FilePath { get; }
-
- public override void StartListening()
- {
- _foregroundDispatcher.AssertForegroundThread();
-
- try
- {
- if (_fileChangeCookie == VSConstants.VSCOOKIE_NIL)
- {
- var hr = _fileChangeService.AdviseFileChange(
- FilePath,
- FileChangeFlags,
- this,
- out _fileChangeCookie);
-
- Marshal.ThrowExceptionForHR(hr);
- }
- }
- catch (Exception exception)
- {
- _errorReporter.ReportError(exception);
- }
- }
-
- public override void StopListening()
- {
- _foregroundDispatcher.AssertForegroundThread();
-
- try
- {
- if (_fileChangeCookie != VSConstants.VSCOOKIE_NIL)
- {
- var hr = _fileChangeService.UnadviseFileChange(_fileChangeCookie);
- Marshal.ThrowExceptionForHR(hr);
- _fileChangeCookie = VSConstants.VSCOOKIE_NIL;
- }
- }
- catch (Exception exception)
- {
- _errorReporter.ReportError(exception);
- }
- }
-
- public int FilesChanged(uint fileCount, string[] filePaths, uint[] fileChangeFlags)
- {
- _foregroundDispatcher.AssertForegroundThread();
-
- foreach (var fileChangeFlag in fileChangeFlags)
- {
- var fileChangeKind = FileChangeKind.Changed;
- var changeFlag = (_VSFILECHANGEFLAGS)fileChangeFlag;
- if ((changeFlag & _VSFILECHANGEFLAGS.VSFILECHG_Del) == _VSFILECHANGEFLAGS.VSFILECHG_Del)
- {
- fileChangeKind = FileChangeKind.Removed;
- }
- else if ((changeFlag & _VSFILECHANGEFLAGS.VSFILECHG_Add) == _VSFILECHANGEFLAGS.VSFILECHG_Add)
- {
- fileChangeKind = FileChangeKind.Added;
- }
-
- // Purposefully not passing through the file paths here because we know this change has to do with this trackers FilePath.
- // We use that FilePath instead so any path normalization the file service did does not impact callers.
- OnChanged(fileChangeKind);
- }
-
- return VSConstants.S_OK;
- }
-
- public int DirectoryChanged(string pszDirectory) => VSConstants.S_OK;
-
- private void OnChanged(FileChangeKind changeKind)
- {
- _foregroundDispatcher.AssertForegroundThread();
-
- if (Changed == null)
- {
- return;
- }
-
- var args = new FileChangeEventArgs(FilePath, changeKind);
- Changed.Invoke(this, args);
- }
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/DefaultFileChangeTrackerFactory.cs b/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/DefaultFileChangeTrackerFactory.cs
deleted file mode 100644
index 6c6515be4a50..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/DefaultFileChangeTrackerFactory.cs
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using Microsoft.CodeAnalysis.Razor;
-using Microsoft.VisualStudio.Editor.Razor;
-using Microsoft.VisualStudio.Shell.Interop;
-
-namespace Microsoft.VisualStudio.LanguageServices.Razor
-{
- internal partial class DefaultFileChangeTrackerFactory : FileChangeTrackerFactory
- {
- private readonly ForegroundDispatcher _foregroundDispatcher;
- private readonly ErrorReporter _errorReporter;
- private readonly IVsFileChangeEx _fileChangeService;
-
- public DefaultFileChangeTrackerFactory(
- ForegroundDispatcher foregroundDispatcher,
- ErrorReporter errorReporter,
- IVsFileChangeEx fileChangeService)
- {
- if (foregroundDispatcher == null)
- {
- throw new ArgumentNullException(nameof(foregroundDispatcher));
- }
-
- if (errorReporter == null)
- {
- throw new ArgumentNullException(nameof(errorReporter));
- }
-
- if (fileChangeService == null)
- {
- throw new ArgumentNullException(nameof(fileChangeService));
- }
-
- _foregroundDispatcher = foregroundDispatcher;
- _errorReporter = errorReporter;
- _fileChangeService = fileChangeService;
- }
-
- public override FileChangeTracker Create(string filePath)
- {
- if (string.IsNullOrEmpty(filePath))
- {
- throw new ArgumentException(Resources.ArgumentCannotBeNullOrEmpty, nameof(filePath));
- }
-
- var fileChangeTracker = new DefaultFileChangeTracker(filePath, _foregroundDispatcher, _errorReporter, _fileChangeService);
- return fileChangeTracker;
- }
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/DefaultFileChangeTrackerFactoryFactory.cs b/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/DefaultFileChangeTrackerFactoryFactory.cs
deleted file mode 100644
index 4ecc2a72303b..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/DefaultFileChangeTrackerFactoryFactory.cs
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.Composition;
-using Microsoft.CodeAnalysis.Host;
-using Microsoft.CodeAnalysis.Host.Mef;
-using Microsoft.CodeAnalysis.Razor;
-using Microsoft.VisualStudio.Editor.Razor;
-using Microsoft.VisualStudio.Shell;
-using Microsoft.VisualStudio.Shell.Interop;
-
-namespace Microsoft.VisualStudio.LanguageServices.Razor
-{
- [Shared]
- [ExportLanguageServiceFactory(typeof(FileChangeTrackerFactory), RazorLanguage.Name, ServiceLayer.Default)]
- internal class DefaultFileChangeTrackerFactoryFactory : ILanguageServiceFactory
- {
- private readonly IVsFileChangeEx _fileChangeService;
- private readonly ForegroundDispatcher _foregroundDispatcher;
-
- [ImportingConstructor]
- public DefaultFileChangeTrackerFactoryFactory(ForegroundDispatcher foregroundDispatcher, SVsServiceProvider serviceProvider)
- {
- if (foregroundDispatcher == null)
- {
- throw new ArgumentNullException(nameof(foregroundDispatcher));
- }
-
- if (serviceProvider == null)
- {
- throw new ArgumentNullException(nameof(serviceProvider));
- }
-
- _foregroundDispatcher = foregroundDispatcher;
- _fileChangeService = serviceProvider.GetService(typeof(SVsFileChangeEx)) as IVsFileChangeEx;
- }
-
- public ILanguageService CreateLanguageService(HostLanguageServices languageServices)
- {
- if (languageServices == null)
- {
- throw new ArgumentNullException(nameof(languageServices));
- }
-
- var errorReporter = languageServices.WorkspaceServices.GetRequiredService();
- return new DefaultFileChangeTrackerFactory(_foregroundDispatcher, errorReporter, _fileChangeService);
- }
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/DefaultRazorEngineDirectiveResolver.cs b/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/DefaultRazorEngineDirectiveResolver.cs
deleted file mode 100644
index 9c1eadae8875..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/DefaultRazorEngineDirectiveResolver.cs
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-#if RAZOR_EXTENSION_DEVELOPER_MODE
-using System;
-using System.Collections.Generic;
-using System.Composition;
-using System.Threading;
-using System.Threading.Tasks;
-using Microsoft.AspNetCore.Razor.Language;
-using Microsoft.CodeAnalysis;
-
-namespace Microsoft.VisualStudio.LanguageServices.Razor
-{
- [Export(typeof(IRazorEngineDirectiveResolver))]
- internal class DefaultRazorEngineDirectiveResolver : IRazorEngineDirectiveResolver
- {
- public async Task> GetRazorEngineDirectivesAsync(Workspace workspace, Project project, CancellationToken cancellationToken = default(CancellationToken))
- {
- try
- {
- var client = await RazorLanguageServiceClientFactory.CreateAsync(workspace, cancellationToken);
-
- using (var session = await client.CreateSessionAsync(project.Solution))
- {
- var directives = await session.InvokeAsync>("GetDirectivesAsync", new object[] { project.Id.Id, "Foo", }, cancellationToken).ConfigureAwait(false);
- return directives;
- }
- }
- catch (Exception exception)
- {
- throw new InvalidOperationException(
- Resources.FormatUnexpectedException(
- typeof(DefaultRazorEngineDirectiveResolver).FullName,
- nameof(GetRazorEngineDirectivesAsync)),
- exception);
- }
- }
- }
-}
-#endif
\ No newline at end of file
diff --git a/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/DefaultRazorEngineDocumentGenerator.cs b/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/DefaultRazorEngineDocumentGenerator.cs
deleted file mode 100644
index b7c0cce06142..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/DefaultRazorEngineDocumentGenerator.cs
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-#if RAZOR_EXTENSION_DEVELOPER_MODE
-using System;
-using System.Composition;
-using System.Threading;
-using System.Threading.Tasks;
-using Microsoft.CodeAnalysis;
-
-namespace Microsoft.VisualStudio.LanguageServices.Razor
-{
- [Export(typeof(IRazorEngineDocumentGenerator))]
- internal class DefaultRazorEngineDocumentGenerator : IRazorEngineDocumentGenerator
- {
- public async Task GenerateDocumentAsync(Workspace workspace, Project project, string filePath, string text, CancellationToken cancellationToken = default(CancellationToken))
- {
- try
- {
- var client = await RazorLanguageServiceClientFactory.CreateAsync(workspace, cancellationToken);
-
- using (var session = await client.CreateSessionAsync(project.Solution))
- {
- var document = await session.InvokeAsync("GenerateDocumentAsync", new object[] { project.Id.Id, "Foo", filePath, text }, cancellationToken).ConfigureAwait(false);
- return document;
- }
- }
- catch (Exception exception)
- {
- throw new InvalidOperationException(
- Resources.FormatUnexpectedException(
- typeof(DefaultRazorEngineDocumentGenerator).FullName,
- nameof(GenerateDocumentAsync)),
- exception);
- }
- }
- }
-}
-#endif
\ No newline at end of file
diff --git a/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/DefaultVisualStudioWorkspaceAccessor.cs b/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/DefaultVisualStudioWorkspaceAccessor.cs
deleted file mode 100644
index 0e9079b84e38..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/DefaultVisualStudioWorkspaceAccessor.cs
+++ /dev/null
@@ -1,118 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.ComponentModel.Composition;
-using System.Linq;
-using Microsoft.CodeAnalysis;
-using Microsoft.CodeAnalysis.Text;
-using Microsoft.VisualStudio.Editor.Razor;
-using Microsoft.VisualStudio.Text;
-using Microsoft.VisualStudio.Text.Projection;
-
-namespace Microsoft.VisualStudio.LanguageServices.Razor
-{
- [System.Composition.Shared]
- [Export(typeof(VisualStudioWorkspaceAccessor))]
- internal class DefaultVisualStudioWorkspaceAccessor : VisualStudioWorkspaceAccessor
- {
- private readonly IBufferGraphFactoryService _bufferGraphService;
- private readonly TextBufferProjectService _projectService;
- private readonly Workspace _defaultWorkspace;
-
- [ImportingConstructor]
- public DefaultVisualStudioWorkspaceAccessor(
- IBufferGraphFactoryService bufferGraphService,
- TextBufferProjectService projectService,
- [Import(typeof(VisualStudioWorkspace))] Workspace defaultWorkspace)
- {
- if (bufferGraphService == null)
- {
- throw new ArgumentNullException(nameof(bufferGraphService));
- }
-
- if (projectService == null)
- {
- throw new ArgumentNullException(nameof(projectService));
- }
-
- if (defaultWorkspace == null)
- {
- throw new ArgumentNullException(nameof(defaultWorkspace));
- }
-
- _bufferGraphService = bufferGraphService;
- _projectService = projectService;
- _defaultWorkspace = defaultWorkspace;
- }
-
- public override bool TryGetWorkspace(ITextBuffer textBuffer, out Workspace workspace)
- {
- if (textBuffer == null)
- {
- throw new ArgumentNullException(nameof(textBuffer));
- }
-
- // We do a best effort approach in this method to get the workspace that belongs to the TextBuffer.
- // The approaches we take to find the workspace are:
- //
- // 1. Look for a C# projection buffer associated with the Razor buffer. If we can find one we let
- // Roslyn take control of finding the Workspace (projectionBuffer.GetWorkspace()). If not,
- // fall back to determining if we can use the default workspace.
- // 2. Look to see if this ITextBuffer is associated with a host project. If we find that our Razor
- // buffer has a host project, we make the assumption that we should use the default VisualStudioWorkspace.
-
- if (TryGetWorkspaceFromProjectionBuffer(textBuffer, out workspace))
- {
- return true;
- }
-
- if (TryGetWorkspaceFromHostProject(textBuffer, out workspace))
- {
- return true;
- }
-
- workspace = null;
- return false;
- }
-
- // Internal virtual for testing
- internal virtual bool TryGetWorkspaceFromProjectionBuffer(ITextBuffer textBuffer, out Workspace workspace)
- {
- var graph = _bufferGraphService.CreateBufferGraph(textBuffer);
- var projectedCSharpBuffer = graph.GetTextBuffers(buffer => buffer.ContentType.IsOfType("CSharp")).FirstOrDefault();
-
- if (projectedCSharpBuffer == null)
- {
- workspace = null;
- return false;
- }
-
- workspace = projectedCSharpBuffer.GetWorkspace();
- if (workspace == null)
- {
- // Couldn't resolve a workspace for the projected csharp buffer.
- return false;
- }
-
- return true;
- }
-
- // Internal virtual for testing
- internal virtual bool TryGetWorkspaceFromHostProject(ITextBuffer textBuffer, out Workspace workspace)
- {
- var project = _projectService.GetHostProject(textBuffer);
-
- if (project == null)
- {
- // Could not locate a project for the given text buffer.
- workspace = null;
- return false;
- }
-
- // We have a host project, assume default workspace.
- workspace = _defaultWorkspace;
- return true;
- }
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/Editor/DefaultTextBufferProjectService.cs b/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/Editor/DefaultTextBufferProjectService.cs
deleted file mode 100644
index aeafcec34533..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/Editor/DefaultTextBufferProjectService.cs
+++ /dev/null
@@ -1,125 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.ComponentModel.Composition;
-using System.Diagnostics;
-using Microsoft.VisualStudio.Editor.Razor;
-using Microsoft.VisualStudio.Shell;
-using Microsoft.VisualStudio.Shell.Interop;
-using Microsoft.VisualStudio.Text;
-
-namespace Microsoft.VisualStudio.LanguageServices.Razor.Editor
-{
- ///
- /// Infrastructure methods to find project information from an .
- ///
- [System.Composition.Shared]
- [Export(typeof(TextBufferProjectService))]
- internal class DefaultTextBufferProjectService : TextBufferProjectService
- {
- private const string DotNetCoreCapability = "(CSharp|VB)&CPS";
-
- private readonly RunningDocumentTable _documentTable;
- private readonly ITextDocumentFactoryService _documentFactory;
-
- [ImportingConstructor]
- public DefaultTextBufferProjectService(
- [Import(typeof(SVsServiceProvider))] IServiceProvider services,
- ITextDocumentFactoryService documentFactory)
- {
- if (services == null)
- {
- throw new ArgumentNullException(nameof(services));
- }
-
- if (documentFactory == null)
- {
- throw new ArgumentNullException(nameof(documentFactory));
- }
-
- _documentFactory = documentFactory;
- _documentTable = new RunningDocumentTable(services);
- }
-
- public override object GetHostProject(ITextBuffer textBuffer)
- {
- if (textBuffer == null)
- {
- throw new ArgumentNullException(nameof(textBuffer));
- }
-
- // If there's no document we can't find the FileName, or look for a matching hierarchy.
- if (!_documentFactory.TryGetTextDocument(textBuffer, out var textDocument))
- {
- return null;
- }
-
- _documentTable.FindDocument(textDocument.FilePath, out var hierarchy, out uint itemId, out uint cookie);
-
- // We don't currently try to look a Roslyn ProjectId at this point, we just want to know some
- // basic things.
- // See https://github.com/dotnet/roslyn/blob/4e3db2b7a0732d45a720e9ed00c00cd22ab67a14/src/VisualStudio/Core/SolutionExplorerShim/HierarchyItemToProjectIdMap.cs#L47
- // for a more complete implementation.
- return hierarchy;
- }
-
- public override string GetProjectPath(object project)
- {
- if (project == null)
- {
- throw new ArgumentNullException(nameof(project));
- }
-
- var hierarchy = project as IVsHierarchy;
- Debug.Assert(hierarchy != null);
-
- ErrorHandler.ThrowOnFailure(((IVsProject)hierarchy).GetMkDocument((uint)VSConstants.VSITEMID.Root, out var path), VSConstants.E_NOTIMPL);
- return path;
- }
-
- public override bool IsSupportedProject(object project)
- {
- if (project == null)
- {
- throw new ArgumentNullException(nameof(project));
- }
-
- var hierarchy = project as IVsHierarchy;
- Debug.Assert(hierarchy != null);
-
- try
- {
- return hierarchy.IsCapabilityMatch(DotNetCoreCapability);
- }
- catch (NotSupportedException)
- {
- // IsCapabilityMatch throws a NotSupportedException if it can't create a BooleanSymbolExpressionEvaluator COM object
- }
- catch (ObjectDisposedException)
- {
- // IsCapabilityMatch throws an ObjectDisposedException if the underlying hierarchy has been disposed.
- }
-
- return false;
- }
-
- public override string GetProjectName(object project)
- {
- if (project == null)
- {
- throw new ArgumentNullException(nameof(project));
- }
-
- var hierarchy = project as IVsHierarchy;
- Debug.Assert(hierarchy != null);
-
- if (ErrorHandler.Failed(hierarchy.GetProperty((uint)VSConstants.VSITEMID.Root, (int)__VSHPROPID.VSHPROPID_Name, out var name)))
- {
- return null;
- }
-
- return (string)name;
- }
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/Editor/DefaultVisualStudioCompletionBroker.cs b/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/Editor/DefaultVisualStudioCompletionBroker.cs
deleted file mode 100644
index 577035aa9d61..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/Editor/DefaultVisualStudioCompletionBroker.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using Microsoft.VisualStudio.Editor.Razor;
-using Microsoft.VisualStudio.Language.Intellisense;
-using Microsoft.VisualStudio.Text.Editor;
-
-namespace Microsoft.VisualStudio.LanguageServices.Razor.Editor
-{
- internal class DefaultVisualStudioCompletionBroker : VisualStudioCompletionBroker
- {
- private readonly ICompletionBroker _completionBroker;
-
- public DefaultVisualStudioCompletionBroker(ICompletionBroker completionBroker)
- {
- if (completionBroker == null)
- {
- throw new ArgumentNullException(nameof(completionBroker));
- }
-
- _completionBroker = completionBroker;
- }
-
- public override bool IsCompletionActive(ITextView textView)
- {
- if (textView == null)
- {
- throw new ArgumentNullException(nameof(textView));
- }
-
- var completionIsActive = _completionBroker.IsCompletionActive(textView);
- return completionIsActive;
- }
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/Editor/DefaultVisualStudioCompletionBrokerFactory.cs b/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/Editor/DefaultVisualStudioCompletionBrokerFactory.cs
deleted file mode 100644
index f0c6086f99e8..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/Editor/DefaultVisualStudioCompletionBrokerFactory.cs
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.Composition;
-using Microsoft.CodeAnalysis.Host;
-using Microsoft.CodeAnalysis.Host.Mef;
-using Microsoft.CodeAnalysis.Razor;
-using Microsoft.VisualStudio.Editor.Razor;
-using Microsoft.VisualStudio.Language.Intellisense;
-
-namespace Microsoft.VisualStudio.LanguageServices.Razor.Editor
-{
- [Shared]
- [ExportLanguageServiceFactory(typeof(VisualStudioCompletionBroker), RazorLanguage.Name, ServiceLayer.Default)]
- internal class DefaultVisualStudioCompletionBrokerFactory : ILanguageServiceFactory
- {
- private readonly ICompletionBroker _completionBroker;
-
- [ImportingConstructor]
- public DefaultVisualStudioCompletionBrokerFactory(ICompletionBroker completionBroker)
- {
- if (completionBroker == null)
- {
- throw new ArgumentNullException(nameof(completionBroker));
- }
-
- _completionBroker = completionBroker;
- }
-
- public ILanguageService CreateLanguageService(HostLanguageServices languageServices)
- {
- if (languageServices == null)
- {
- throw new ArgumentNullException(nameof(languageServices));
- }
-
- return new DefaultVisualStudioCompletionBroker(_completionBroker);
- }
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/IRazorEngineDirectiveResolver.cs b/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/IRazorEngineDirectiveResolver.cs
deleted file mode 100644
index c884eedca136..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/IRazorEngineDirectiveResolver.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-#if RAZOR_EXTENSION_DEVELOPER_MODE
-using System.Collections.Generic;
-using System.Threading;
-using System.Threading.Tasks;
-using Microsoft.AspNetCore.Razor.Language;
-using Microsoft.CodeAnalysis;
-
-namespace Microsoft.VisualStudio.LanguageServices.Razor
-{
- internal interface IRazorEngineDirectiveResolver
- {
- Task> GetRazorEngineDirectivesAsync(Workspace workspace, Project project, CancellationToken cancellationToken = default(CancellationToken));
- }
-}
-#endif
\ No newline at end of file
diff --git a/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/IRazorEngineDocumentGenerator.cs b/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/IRazorEngineDocumentGenerator.cs
deleted file mode 100644
index 4b39c82bdbf0..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/IRazorEngineDocumentGenerator.cs
+++ /dev/null
@@ -1,16 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-#if RAZOR_EXTENSION_DEVELOPER_MODE
-using System.Threading;
-using System.Threading.Tasks;
-using Microsoft.CodeAnalysis;
-
-namespace Microsoft.VisualStudio.LanguageServices.Razor
-{
- internal interface IRazorEngineDocumentGenerator
- {
- Task GenerateDocumentAsync(Workspace workspace, Project project, string filePath, string text, CancellationToken cancellationToken = default(CancellationToken));
- }
-}
-#endif
\ No newline at end of file
diff --git a/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/Microsoft.VisualStudio.LanguageServices.Razor.csproj b/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/Microsoft.VisualStudio.LanguageServices.Razor.csproj
deleted file mode 100644
index a3bbd0f3c910..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/Microsoft.VisualStudio.LanguageServices.Razor.csproj
+++ /dev/null
@@ -1,117 +0,0 @@
-
-
-
- net46
- Razor is a markup syntax for adding server-side logic to web pages. This package contains the Razor design-time infrastructure for Visual Studio.
- false
- ..\Microsoft.NET.Sdk.Razor\build\netstandard2.0\Rules\
-
-
-
- $(DefineConstants);RAZOR_EXTENSION_DEVELOPER_MODE
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ProjectSystem\Rules\RazorConfiguration.xaml
-
-
- ProjectSystem\Rules\RazorExtension.xaml
-
-
- ProjectSystem\Rules\RazorGeneral.xaml
-
-
- XamlRuleToCode:RazorConfiguration.xaml
-
-
- XamlRuleToCode:RazorExtension.xaml
-
-
- XamlRuleToCode:RazorGeneral.xaml
-
-
-
-
- Designer
- MSBuild:GenerateRuleSourceFromXaml
- Microsoft.CodeAnalysis.Razor.ProjectSystem.Rules
- RazorProjectProperties
-
- ProjectSystem\Rules\
-
-
- Designer
- MSBuild:GenerateRuleSourceFromXaml
- Microsoft.CodeAnalysis.Razor.ProjectSystem.Rules
- RazorProjectProperties
- ProjectSystem\Rules\
-
-
- Designer
- MSBuild:GenerateRuleSourceFromXaml
- Microsoft.CodeAnalysis.Razor.ProjectSystem.Rules
- RazorProjectProperties
- ProjectSystem\Rules\
-
-
-
-
- ProjectSystem\Rules\RazorConfiguration.xaml
-
-
- ProjectSystem\Rules\RazorExtension.xaml
-
-
- ProjectSystem\Rules\RazorGeneral.xaml
-
-
-
-
-
-
-
-
-
-
diff --git a/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/OOPTagHelperResolver.cs b/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/OOPTagHelperResolver.cs
deleted file mode 100644
index c1e2ae56c76a..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/OOPTagHelperResolver.cs
+++ /dev/null
@@ -1,156 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.Threading;
-using System.Threading.Tasks;
-using Microsoft.CodeAnalysis;
-using Microsoft.CodeAnalysis.Razor;
-using Microsoft.CodeAnalysis.Razor.ProjectSystem;
-using Microsoft.VisualStudio.Editor.Razor;
-using Newtonsoft.Json;
-using Newtonsoft.Json.Linq;
-
-namespace Microsoft.VisualStudio.LanguageServices.Razor
-{
- internal class OOPTagHelperResolver : TagHelperResolver
- {
- private readonly DefaultTagHelperResolver _defaultResolver;
- private readonly RazorProjectEngineFactoryService _engineFactory;
- private readonly ErrorReporter _errorReporter;
- private readonly Workspace _workspace;
-
- public OOPTagHelperResolver(RazorProjectEngineFactoryService engineFactory, ErrorReporter errorReporter, Workspace workspace)
- {
- if (engineFactory == null)
- {
- throw new ArgumentNullException(nameof(engineFactory));
- }
-
- if (errorReporter == null)
- {
- throw new ArgumentNullException(nameof(errorReporter));
- }
-
- if (workspace == null)
- {
- throw new ArgumentNullException(nameof(workspace));
- }
-
- _engineFactory = engineFactory;
- _errorReporter = errorReporter;
- _workspace = workspace;
-
- _defaultResolver = new DefaultTagHelperResolver(_engineFactory);
- }
-
- public override async Task GetTagHelpersAsync(ProjectSnapshot project, CancellationToken cancellationToken = default)
- {
- if (project == null)
- {
- throw new ArgumentNullException(nameof(project));
- }
-
- if (project.Configuration == null || project.WorkspaceProject == null)
- {
- return TagHelperResolutionResult.Empty;
- }
-
- // Not every custom factory supports the OOP host. Our priority system should work like this:
- //
- // 1. Use custom factory out of process
- // 2. Use custom factory in process
- // 3. Use fallback factory in process
- //
- // Calling into RazorTemplateEngineFactoryService.Create will accomplish #2 and #3 in one step.
- var factory = _engineFactory.FindSerializableFactory(project);
-
- try
- {
- TagHelperResolutionResult result = null;
- if (factory != null)
- {
- result = await ResolveTagHelpersOutOfProcessAsync(factory, project);
- }
-
- if (result == null)
- {
- // Was unable to get tag helpers OOP, fallback to default behavior.
- result = await ResolveTagHelpersInProcessAsync(project);
- }
-
- return result;
- }
- catch (Exception exception)
- {
- throw new InvalidOperationException(
- Resources.FormatUnexpectedException(
- typeof(DefaultTagHelperResolver).FullName,
- nameof(GetTagHelpersAsync)),
- exception);
- }
- }
-
- protected virtual async Task ResolveTagHelpersOutOfProcessAsync(IProjectEngineFactory factory, ProjectSnapshot project)
- {
- // We're being overly defensive here because the OOP host can return null for the client/session/operation
- // when it's disconnected (user stops the process).
- //
- // This will change in the future to an easier to consume API but for VS RTM this is what we have.
- try
- {
- var client = await RazorLanguageServiceClientFactory.CreateAsync(_workspace, CancellationToken.None);
- if (client != null)
- {
- using (var session = await client.CreateSessionAsync(project.WorkspaceProject.Solution))
- {
- if (session != null)
- {
- var args = new object[]
- {
- Serialize(project),
- factory == null ? null : factory.GetType().AssemblyQualifiedName,
- };
-
- var json = await session.InvokeAsync("GetTagHelpersAsync", args, CancellationToken.None).ConfigureAwait(false);
- return Deserialize(json);
- }
- }
- }
- }
- catch (Exception ex)
- {
- // We silence exceptions from the OOP host because we don't want to bring down VS for an OOP failure.
- // We will retry all failures in process anyway, so if there's a real problem that isn't unique to OOP
- // then it will report a crash in VS.
- _errorReporter.ReportError(ex, project);
- }
-
- return null;
- }
-
- protected virtual Task ResolveTagHelpersInProcessAsync(ProjectSnapshot project)
- {
- return _defaultResolver.GetTagHelpersAsync(project);
- }
-
- private JObject Serialize(ProjectSnapshot snapshot)
- {
- var serializer = new JsonSerializer();
- serializer.Converters.RegisterRazorConverters();
-
- return JObject.FromObject(snapshot, serializer);
- }
-
- private TagHelperResolutionResult Deserialize(JObject jsonObject)
- {
- var serializer = new JsonSerializer();
- serializer.Converters.RegisterRazorConverters();
-
- using (var reader = jsonObject.CreateReader())
- {
- return serializer.Deserialize(reader);
- }
- }
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/OOPTagHelperResolverFactory.cs b/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/OOPTagHelperResolverFactory.cs
deleted file mode 100644
index b6b4e93d5249..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/OOPTagHelperResolverFactory.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System.Composition;
-using Microsoft.CodeAnalysis.Host;
-using Microsoft.CodeAnalysis.Host.Mef;
-using Microsoft.CodeAnalysis.Razor;
-
-namespace Microsoft.VisualStudio.LanguageServices.Razor
-{
- [Shared]
- [ExportLanguageServiceFactory(typeof(TagHelperResolver), RazorLanguage.Name, ServiceLayer.Host)]
- internal class OOPTagHelperResolverFactory : ILanguageServiceFactory
- {
- public ILanguageService CreateLanguageService(HostLanguageServices languageServices)
- {
- return new OOPTagHelperResolver(
- languageServices.GetRequiredService(),
- languageServices.WorkspaceServices.GetRequiredService(),
- languageServices.WorkspaceServices.Workspace);
- }
- }
-}
\ No newline at end of file
diff --git a/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/ProjectSystem/DefaultRazorProjectHost.cs b/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/ProjectSystem/DefaultRazorProjectHost.cs
deleted file mode 100644
index 5e45f9821f86..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/ProjectSystem/DefaultRazorProjectHost.cs
+++ /dev/null
@@ -1,266 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.Collections.Generic;
-using System.Collections.Immutable;
-using System.ComponentModel.Composition;
-using System.Linq;
-using System.Threading;
-using System.Threading.Tasks;
-using System.Threading.Tasks.Dataflow;
-using Microsoft.AspNetCore.Razor.Language;
-using Microsoft.VisualStudio.LanguageServices;
-using Microsoft.VisualStudio.ProjectSystem;
-using Microsoft.VisualStudio.ProjectSystem.Properties;
-using ProjectState = System.Collections.Immutable.IImmutableDictionary;
-using ProjectStateItem = System.Collections.Generic.KeyValuePair>;
-
-namespace Microsoft.CodeAnalysis.Razor.ProjectSystem
-{
- // Somewhat similar to https://github.com/dotnet/project-system/blob/fa074d228dcff6dae9e48ce43dd4a3a5aa22e8f0/src/Microsoft.VisualStudio.ProjectSystem.Managed/ProjectSystem/LanguageServices/LanguageServiceHost.cs
- //
- // This class is responsible for intializing the Razor ProjectSnapshotManager for cases where
- // MSBuild provides configuration support (>= 2.1).
- [AppliesTo("DotNetCoreRazor & DotNetCoreRazorConfiguration")]
- [Export(ExportContractNames.Scopes.UnconfiguredProject, typeof(IProjectDynamicLoadComponent))]
- internal class DefaultRazorProjectHost : RazorProjectHostBase
- {
- private IDisposable _subscription;
-
- [ImportingConstructor]
- public DefaultRazorProjectHost(
- IUnconfiguredProjectCommonServices commonServices,
- [Import(typeof(VisualStudioWorkspace))] Workspace workspace)
- : base(commonServices, workspace)
- {
- }
-
- // Internal for testing
- internal DefaultRazorProjectHost(
- IUnconfiguredProjectCommonServices commonServices,
- Workspace workspace,
- ProjectSnapshotManagerBase projectManager)
- : base(commonServices, workspace, projectManager)
- {
- }
-
- protected override async Task InitializeCoreAsync(CancellationToken cancellationToken)
- {
- await base.InitializeCoreAsync(cancellationToken).ConfigureAwait(false);
-
- // Don't try to evaluate any properties here since the project is still loading and we require access
- // to the UI thread to push our updates.
- //
- // Just subscribe and handle the notification later.
- // Don't try to evaluate any properties here since the project is still loading and we require access
- // to the UI thread to push our updates.
- //
- // Just subscribe and handle the notification later.
- var receiver = new ActionBlock>(OnProjectChanged);
- _subscription = CommonServices.ActiveConfiguredProjectSubscription.JointRuleSource.SourceBlock.LinkTo(
- receiver,
- initialDataAsNew: true,
- suppressVersionOnlyUpdates: true,
- ruleNames: new string[] { Rules.RazorGeneral.SchemaName, Rules.RazorConfiguration.SchemaName, Rules.RazorExtension.SchemaName });
- }
-
- protected override async Task DisposeCoreAsync(bool initialized)
- {
- await base.DisposeCoreAsync(initialized).ConfigureAwait(false);
-
- if (initialized)
- {
- _subscription.Dispose();
- }
- }
-
- // Internal for testing
- internal async Task OnProjectChanged(IProjectVersionedValue update)
- {
- if (IsDisposing || IsDisposed)
- {
- return;
- }
-
- await CommonServices.TasksService.LoadedProjectAsync(async () =>
- {
- await ExecuteWithLock(async () =>
- {
- if (TryGetConfiguration(update.Value.CurrentState, out var configuration))
- {
- var hostProject = new HostProject(CommonServices.UnconfiguredProject.FullPath, configuration);
- await UpdateProjectUnsafeAsync(hostProject).ConfigureAwait(false);
- }
- else
- {
- // Ok we can't find a configuration. Let's assume this project isn't using Razor then.
- await UpdateProjectUnsafeAsync(null).ConfigureAwait(false);
- }
- });
- }, registerFaultHandler: true);
- }
-
- // Internal for testing
- internal static bool TryGetConfiguration(
- ProjectState projectState,
- out RazorConfiguration configuration)
- {
- if (!TryGetDefaultConfiguration(projectState, out var defaultConfiguration))
- {
- configuration = null;
- return false;
- }
-
- if (!TryGetLanguageVersion(projectState, out var languageVersion))
- {
- configuration = null;
- return false;
- }
-
- if (!TryGetConfigurationItem(defaultConfiguration, projectState, out var configurationItem))
- {
- configuration = null;
- return false;
- }
-
- if (!TryGetConfiguredExtensionNames(configurationItem, out var configuredExtensionNames))
- {
- configuration = null;
- return false;
- }
-
- if (!TryGetExtensions(configuredExtensionNames, projectState, out var extensions))
- {
- configuration = null;
- return false;
- }
-
- configuration = new ProjectSystemRazorConfiguration(languageVersion, configurationItem.Key, extensions);
- return true;
- }
-
-
- // Internal for testing
- internal static bool TryGetDefaultConfiguration(ProjectState projectState, out string defaultConfiguration)
- {
- if (!projectState.TryGetValue(Rules.RazorGeneral.SchemaName, out var rule))
- {
- defaultConfiguration = null;
- return false;
- }
-
- if (!rule.Properties.TryGetValue(Rules.RazorGeneral.RazorDefaultConfigurationProperty, out defaultConfiguration))
- {
- defaultConfiguration = null;
- return false;
- }
-
- if (string.IsNullOrEmpty(defaultConfiguration))
- {
- defaultConfiguration = null;
- return false;
- }
-
- return true;
- }
-
- // Internal for testing
- internal static bool TryGetLanguageVersion(ProjectState projectState, out RazorLanguageVersion languageVersion)
- {
- if (!projectState.TryGetValue(Rules.RazorGeneral.SchemaName, out var rule))
- {
- languageVersion = null;
- return false;
- }
-
- if (!rule.Properties.TryGetValue(Rules.RazorGeneral.RazorLangVersionProperty, out var languageVersionValue))
- {
- languageVersion = null;
- return false;
- }
-
- if (string.IsNullOrEmpty(languageVersionValue))
- {
- languageVersion = null;
- return false;
- }
-
- if (!RazorLanguageVersion.TryParse(languageVersionValue, out languageVersion))
- {
- languageVersion = RazorLanguageVersion.Latest;
- }
-
- return true;
- }
-
- // Internal for testing
- internal static bool TryGetConfigurationItem(
- string configuration,
- ProjectState projectState,
- out ProjectStateItem configurationItem)
- {
- if (!projectState.TryGetValue(Rules.RazorConfiguration.PrimaryDataSourceItemType, out var configurationState))
- {
- configurationItem = default(ProjectStateItem);
- return false;
- }
-
- var razorConfigurationItems = configurationState.Items;
- foreach (var item in razorConfigurationItems)
- {
- if (item.Key == configuration)
- {
- configurationItem = item;
- return true;
- }
- }
-
- configurationItem = default(ProjectStateItem);
- return false;
- }
-
- // Internal for testing
- internal static bool TryGetConfiguredExtensionNames(ProjectStateItem configurationItem, out string[] configuredExtensionNames)
- {
- if (!configurationItem.Value.TryGetValue(Rules.RazorConfiguration.ExtensionsProperty, out var extensionNamesValue))
- {
- configuredExtensionNames = null;
- return false;
- }
-
- if (string.IsNullOrEmpty(extensionNamesValue))
- {
- configuredExtensionNames = null;
- return false;
- }
-
- configuredExtensionNames = extensionNamesValue.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
- return true;
- }
-
- // Internal for testing
- internal static bool TryGetExtensions(string[] configuredExtensionNames, ProjectState projectState, out ProjectSystemRazorExtension[] extensions)
- {
- if (!projectState.TryGetValue(Rules.RazorExtension.PrimaryDataSourceItemType, out var extensionState))
- {
- extensions = null;
- return false;
- }
-
- var extensionItems = extensionState.Items;
- var extensionList = new List();
- foreach (var item in extensionItems)
- {
- var extensionName = item.Key;
- if (configuredExtensionNames.Contains(extensionName))
- {
- extensionList.Add(new ProjectSystemRazorExtension(extensionName));
- }
- }
-
- extensions = extensionList.ToArray();
- return true;
- }
- }
-}
\ No newline at end of file
diff --git a/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/ProjectSystem/FallbackRazorProjectHost.cs b/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/ProjectSystem/FallbackRazorProjectHost.cs
deleted file mode 100644
index 8e7fb4d49376..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/ProjectSystem/FallbackRazorProjectHost.cs
+++ /dev/null
@@ -1,146 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.ComponentModel.Composition;
-using System.IO;
-using System.Reflection.Metadata;
-using System.Reflection.PortableExecutable;
-using System.Threading;
-using System.Threading.Tasks;
-using System.Threading.Tasks.Dataflow;
-using Microsoft.VisualStudio.LanguageServices;
-using Microsoft.VisualStudio.ProjectSystem;
-using ResolvedCompilationReference = Microsoft.CodeAnalysis.Razor.ProjectSystem.ManageProjectSystemSchema.ResolvedCompilationReference;
-
-namespace Microsoft.CodeAnalysis.Razor.ProjectSystem
-{
- // Somewhat similar to https://github.com/dotnet/project-system/blob/fa074d228dcff6dae9e48ce43dd4a3a5aa22e8f0/src/Microsoft.VisualStudio.ProjectSystem.Managed/ProjectSystem/LanguageServices/LanguageServiceHost.cs
- //
- // This class is responsible for intializing the Razor ProjectSnapshotManager for cases where
- // MSBuild does not provides configuration support (SDK < 2.1).
- [AppliesTo("(DotNetCoreRazor | DotNetCoreWeb) & !DotNetCoreRazorConfiguration")]
- [Export(ExportContractNames.Scopes.UnconfiguredProject, typeof(IProjectDynamicLoadComponent))]
- internal class FallbackRazorProjectHost : RazorProjectHostBase
- {
- private const string MvcAssemblyName = "Microsoft.AspNetCore.Mvc.Razor";
- private const string MvcAssemblyFileName = "Microsoft.AspNetCore.Mvc.Razor.dll";
-
- private IDisposable _subscription;
-
- [ImportingConstructor]
- public FallbackRazorProjectHost(
- IUnconfiguredProjectCommonServices commonServices,
- [Import(typeof(VisualStudioWorkspace))] Workspace workspace)
- : base(commonServices, workspace)
- {
- }
-
- // Internal for testing
- internal FallbackRazorProjectHost(
- IUnconfiguredProjectCommonServices commonServices,
- Workspace workspace,
- ProjectSnapshotManagerBase projectManager)
- : base(commonServices, workspace, projectManager)
- {
- }
-
- protected override async Task InitializeCoreAsync(CancellationToken cancellationToken)
- {
- await base.InitializeCoreAsync(cancellationToken).ConfigureAwait(false);
-
- // Don't try to evaluate any properties here since the project is still loading and we require access
- // to the UI thread to push our updates.
- //
- // Just subscribe and handle the notification later.
- var receiver = new ActionBlock>(OnProjectChanged);
- _subscription = CommonServices.ActiveConfiguredProjectSubscription.JointRuleSource.SourceBlock.LinkTo(
- receiver,
- initialDataAsNew: true,
- suppressVersionOnlyUpdates: true,
- ruleNames: new string[] { ResolvedCompilationReference.SchemaName },
- linkOptions: new DataflowLinkOptions() { PropagateCompletion = true });
- }
-
- protected override async Task DisposeCoreAsync(bool initialized)
- {
- await base.DisposeCoreAsync(initialized).ConfigureAwait(false);
-
- if (initialized)
- {
- _subscription.Dispose();
- }
- }
-
- // Internal for testing
- internal async Task OnProjectChanged(IProjectVersionedValue update)
- {
- if (IsDisposing || IsDisposed)
- {
- return;
- }
-
- await CommonServices.TasksService.LoadedProjectAsync(async () =>
- {
- await ExecuteWithLock(async () =>
- {
- string mvcReferenceFullPath = null;
- var references = update.Value.CurrentState[ResolvedCompilationReference.SchemaName].Items;
- foreach (var reference in references)
- {
- if (reference.Key.EndsWith(MvcAssemblyFileName, StringComparison.OrdinalIgnoreCase))
- {
- mvcReferenceFullPath = reference.Key;
- break;
- }
- }
-
- if (mvcReferenceFullPath == null)
- {
- // Ok we can't find an MVC version. Let's assume this project isn't using Razor then.
- await UpdateProjectUnsafeAsync(null).ConfigureAwait(false);
- return;
- }
-
- var version = GetAssemblyVersion(mvcReferenceFullPath);
- if (version == null)
- {
- // Ok we can't find an MVC version. Let's assume this project isn't using Razor then.
- await UpdateProjectUnsafeAsync(null).ConfigureAwait(false);
- return;
- }
-
- var configuration = FallbackRazorConfiguration.SelectConfiguration(version);
- var hostProject = new HostProject(CommonServices.UnconfiguredProject.FullPath, configuration);
- await UpdateProjectUnsafeAsync(hostProject).ConfigureAwait(false);
- });
- }, registerFaultHandler: true);
- }
-
- // virtual for overriding in tests
- protected virtual Version GetAssemblyVersion(string filePath)
- {
- return ReadAssemblyVersion(filePath);
- }
-
- private static Version ReadAssemblyVersion(string filePath)
- {
- try
- {
- using (var stream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite | FileShare.Delete))
- using (var reader = new PEReader(stream))
- {
- var metadataReader = reader.GetMetadataReader();
-
- var assemblyDefinition = metadataReader.GetAssemblyDefinition();
- return assemblyDefinition.Version;
- }
- }
- catch
- {
- // We're purposely silencing any kinds of I/O exceptions here, just in case something wacky is going on.
- return null;
- }
- }
- }
-}
\ No newline at end of file
diff --git a/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/ProjectSystem/IUnconfiguredProjectCommonServices.cs b/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/ProjectSystem/IUnconfiguredProjectCommonServices.cs
deleted file mode 100644
index f520a6e0461b..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/ProjectSystem/IUnconfiguredProjectCommonServices.cs
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using Microsoft.VisualStudio.ProjectSystem;
-using Microsoft.VisualStudio.ProjectSystem.References;
-
-namespace Microsoft.CodeAnalysis.Razor.ProjectSystem
-{
- // This defines the set of services that we frequently need for working with UnconfiguredProject.
- //
- // We're following a somewhat common pattern for code that uses CPS. It's really easy to end up
- // relying on service location inside CPS, which can be hard to test. This approach makes it easy
- // for us to build reusable mocks instead.
- internal interface IUnconfiguredProjectCommonServices
- {
- ConfiguredProject ActiveConfiguredProject { get; }
-
- IAssemblyReferencesService ActiveConfiguredProjectAssemblyReferences { get; }
-
- IPackageReferencesService ActiveConfiguredProjectPackageReferences { get; }
-
- Rules.RazorProjectProperties ActiveConfiguredProjectRazorProperties { get; }
-
- IActiveConfiguredProjectSubscriptionService ActiveConfiguredProjectSubscription { get; }
-
- IProjectAsynchronousTasksService TasksService { get; }
-
- IProjectThreadingService ThreadingService { get; }
-
- UnconfiguredProject UnconfiguredProject { get; }
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/ProjectSystem/ManageProjectSystemSchema.cs b/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/ProjectSystem/ManageProjectSystemSchema.cs
deleted file mode 100644
index 79138c8ac6cb..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/ProjectSystem/ManageProjectSystemSchema.cs
+++ /dev/null
@@ -1,16 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-namespace Microsoft.CodeAnalysis.Razor.ProjectSystem
-{
- // Well-Known Schema and property names defined by the ManagedProjectSystem
- internal static class ManageProjectSystemSchema
- {
- public static class ResolvedCompilationReference
- {
- public static readonly string SchemaName = "ResolvedCompilationReference";
-
- public static readonly string ItemName = "ResolvedCompilationReference";
- }
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/ProjectSystem/RazorProjectHostBase.cs b/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/ProjectSystem/RazorProjectHostBase.cs
deleted file mode 100644
index 5419eb73aff6..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/ProjectSystem/RazorProjectHostBase.cs
+++ /dev/null
@@ -1,190 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.ComponentModel.Composition;
-using System.Threading;
-using System.Threading.Tasks;
-using Microsoft.VisualStudio.LanguageServices;
-using Microsoft.VisualStudio.ProjectSystem;
-using Microsoft.VisualStudio.Threading;
-
-namespace Microsoft.CodeAnalysis.Razor.ProjectSystem
-{
- internal abstract class RazorProjectHostBase : OnceInitializedOnceDisposedAsync, IProjectDynamicLoadComponent
- {
- private readonly Workspace _workspace;
- private readonly AsyncSemaphore _lock;
-
- private ProjectSnapshotManagerBase _projectManager;
- private HostProject _current;
-
- public RazorProjectHostBase(
- IUnconfiguredProjectCommonServices commonServices,
- [Import(typeof(VisualStudioWorkspace))] Workspace workspace)
- : base(commonServices.ThreadingService.JoinableTaskContext)
- {
- if (commonServices == null)
- {
- throw new ArgumentNullException(nameof(commonServices));
- }
-
- if (workspace == null)
- {
- throw new ArgumentNullException(nameof(workspace));
- }
-
- CommonServices = commonServices;
- _workspace = workspace;
-
- _lock = new AsyncSemaphore(initialCount: 1);
- }
-
- // Internal for testing
- protected RazorProjectHostBase(
- IUnconfiguredProjectCommonServices commonServices,
- Workspace workspace,
- ProjectSnapshotManagerBase projectManager)
- : base(commonServices.ThreadingService.JoinableTaskContext)
- {
- if (commonServices == null)
- {
- throw new ArgumentNullException(nameof(commonServices));
- }
-
- if (workspace == null)
- {
- throw new ArgumentNullException(nameof(workspace));
- }
-
- if (projectManager == null)
- {
- throw new ArgumentNullException(nameof(projectManager));
- }
-
- CommonServices = commonServices;
- _workspace = workspace;
- _projectManager = projectManager;
-
- _lock = new AsyncSemaphore(initialCount: 1);
- }
-
- protected IUnconfiguredProjectCommonServices CommonServices { get; }
-
- // internal for tests. The product will call through the IProjectDynamicLoadComponent interface.
- internal Task LoadAsync()
- {
- return InitializeAsync();
- }
-
- protected override Task InitializeCoreAsync(CancellationToken cancellationToken)
- {
- CommonServices.UnconfiguredProject.ProjectRenaming += UnconfiguredProject_ProjectRenaming;
-
- return Task.CompletedTask;
- }
-
- protected override async Task DisposeCoreAsync(bool initialized)
- {
- if (initialized)
- {
- CommonServices.UnconfiguredProject.ProjectRenaming -= UnconfiguredProject_ProjectRenaming;
-
- await ExecuteWithLock(async () =>
- {
- if (_current != null)
- {
- await UpdateProjectUnsafeAsync(null).ConfigureAwait(false);
- }
- });
- }
- }
-
- // Internal for tests
- internal async Task OnProjectRenamingAsync()
- {
- // When a project gets renamed we expect any rules watched by the derived class to fire.
- //
- // However, the project snapshot manager uses the project Fullpath as the key. We want to just
- // reinitialize the HostProject with the same configuration and settings here, but the updated
- // FilePath.
- await ExecuteWithLock(async () =>
- {
- if (_current != null)
- {
- var old = _current;
- await UpdateProjectUnsafeAsync(null).ConfigureAwait(false);
-
- var filePath = CommonServices.UnconfiguredProject.FullPath;
- await UpdateProjectUnsafeAsync(new HostProject(filePath, old.Configuration)).ConfigureAwait(false);
- }
- });
- }
-
- // Should only be called from the UI thread.
- private ProjectSnapshotManagerBase GetProjectManager()
- {
- CommonServices.ThreadingService.VerifyOnUIThread();
-
- if (_projectManager == null)
- {
- _projectManager = (ProjectSnapshotManagerBase)_workspace.Services.GetLanguageServices(RazorLanguage.Name).GetRequiredService();
- }
-
- return _projectManager;
- }
-
- // Must be called inside the lock.
- protected async Task UpdateProjectUnsafeAsync(HostProject project)
- {
- await CommonServices.ThreadingService.SwitchToUIThread();
- var projectManager = GetProjectManager();
-
- if (_current == null && project == null)
- {
- // This is a no-op. This project isn't using Razor.
- }
- else if (_current == null && project != null)
- {
- projectManager.HostProjectAdded(project);
- }
- else if (_current != null && project == null)
- {
- projectManager.HostProjectRemoved(_current);
- }
- else
- {
- projectManager.HostProjectChanged(project);
- }
-
- _current = project;
- }
-
- protected async Task ExecuteWithLock(Func func)
- {
- using (JoinableCollection.Join())
- {
- using (await _lock.EnterAsync().ConfigureAwait(false))
- {
- var task = JoinableFactory.RunAsync(func);
- await task.Task.ConfigureAwait(false);
- }
- }
- }
-
- Task IProjectDynamicLoadComponent.LoadAsync()
- {
- return InitializeAsync();
- }
-
- Task IProjectDynamicLoadComponent.UnloadAsync()
- {
- return DisposeAsync();
- }
-
- private async Task UnconfiguredProject_ProjectRenaming(object sender, ProjectRenamedEventArgs args)
- {
- await OnProjectRenamingAsync().ConfigureAwait(false);
- }
- }
-}
\ No newline at end of file
diff --git a/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/ProjectSystem/Rules/RazorConfiguration.cs b/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/ProjectSystem/Rules/RazorConfiguration.cs
deleted file mode 100644
index d8c2484f5ba4..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/ProjectSystem/Rules/RazorConfiguration.cs
+++ /dev/null
@@ -1,212 +0,0 @@
-//------------------------------------------------------------------------------
-//
-// This code was generated by a tool.
-// Runtime Version:4.0.30319.42000
-//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
-//
-//------------------------------------------------------------------------------
-
-namespace Microsoft.CodeAnalysis.Razor.ProjectSystem.Rules {
-
-
- internal partial class RazorConfiguration {
-
- /// Backing field for deserialized rule..
- private static Microsoft.Build.Framework.XamlTypes.Rule deserializedFallbackRule;
-
- /// The name of the schema to look for at runtime to fulfill property access.
- internal const string SchemaName = "RazorConfiguration";
-
- /// The ItemType given in the Rule.DataSource property. May not apply to every Property's individual DataSource.
- internal const string PrimaryDataSourceItemType = "RazorConfiguration";
-
- /// The Label given in the Rule.DataSource property. May not apply to every Property's individual DataSource.
- internal const string PrimaryDataSourceLabel = "";
-
- /// Razor Extensions (The "Extensions" property).
- internal const string ExtensionsProperty = "Extensions";
-
- /// Backing field for the property.
- private Microsoft.VisualStudio.ProjectSystem.Properties.IRule rule;
-
- /// Backing field for the file name of the rule property.
- private string file;
-
- /// Backing field for the ItemType property.
- private string itemType;
-
- /// Backing field for the ItemName property.
- private string itemName;
-
- /// Configured Project
- private Microsoft.VisualStudio.ProjectSystem.ConfiguredProject configuredProject;
-
- /// The dictionary of named catalogs.
- private System.Collections.Immutable.IImmutableDictionary catalogs;
-
- /// Backing field for the property.
- private Microsoft.VisualStudio.ProjectSystem.Properties.IRule fallbackRule;
-
- /// Thread locking object
- private object locker = new object();
-
- /// Initializes a new instance of the RazorConfiguration class.
- internal RazorConfiguration(Microsoft.VisualStudio.ProjectSystem.Properties.IRule rule) {
- this.rule = rule;
- }
-
- /// Initializes a new instance of the RazorConfiguration class.
- internal RazorConfiguration(Microsoft.VisualStudio.ProjectSystem.ConfiguredProject configuredProject, System.Collections.Immutable.IImmutableDictionary catalogs, string context, string file, string itemType, string itemName) :
- this(GetRule(System.Collections.Immutable.ImmutableDictionary.GetValueOrDefault(catalogs, context), file, itemType, itemName)) {
- if ((configuredProject == null)) {
- throw new System.ArgumentNullException("configuredProject");
- }
- this.configuredProject = configuredProject;
- this.catalogs = catalogs;
- this.file = file;
- this.itemType = itemType;
- this.itemName = itemName;
- }
-
- /// Initializes a new instance of the RazorConfiguration class.
- internal RazorConfiguration(Microsoft.VisualStudio.ProjectSystem.Properties.IRule rule, Microsoft.VisualStudio.ProjectSystem.ConfiguredProject configuredProject) :
- this(rule) {
- if ((rule == null)) {
- throw new System.ArgumentNullException("rule");
- }
- if ((configuredProject == null)) {
- throw new System.ArgumentNullException("configuredProject");
- }
- this.configuredProject = configuredProject;
- this.rule = rule;
- this.file = this.rule.File;
- this.itemType = this.rule.ItemType;
- this.itemName = this.rule.ItemName;
- }
-
- /// Initializes a new instance of the RazorConfiguration class.
- internal RazorConfiguration(Microsoft.VisualStudio.ProjectSystem.ConfiguredProject configuredProject, System.Collections.Immutable.IImmutableDictionary catalogs, string context, Microsoft.VisualStudio.ProjectSystem.Properties.IProjectPropertiesContext propertyContext) :
- this(configuredProject, catalogs, context, GetContextFile(propertyContext), propertyContext.ItemType, propertyContext.ItemName) {
- }
-
- /// Initializes a new instance of the RazorConfiguration class that assumes a project context (neither property sheet nor items).
- internal RazorConfiguration(Microsoft.VisualStudio.ProjectSystem.ConfiguredProject configuredProject, System.Collections.Immutable.IImmutableDictionary catalogs) :
- this(configuredProject, catalogs, "Project", null, null, null) {
- }
-
- /// Gets the IRule used to get and set properties.
- public Microsoft.VisualStudio.ProjectSystem.Properties.IRule Rule {
- get {
- return this.rule;
- }
- }
-
- /// Razor Extensions
- internal Microsoft.VisualStudio.ProjectSystem.Properties.IEvaluatedProperty Extensions {
- get {
- Microsoft.VisualStudio.ProjectSystem.Properties.IRule localRule = this.rule;
- if ((localRule == null)) {
- localRule = this.GeneratedFallbackRule;
- }
- if ((localRule == null)) {
- return null;
- }
- Microsoft.VisualStudio.ProjectSystem.Properties.IEvaluatedProperty property = ((Microsoft.VisualStudio.ProjectSystem.Properties.IEvaluatedProperty)(localRule.GetProperty(ExtensionsProperty)));
- if (((property == null)
- && (this.GeneratedFallbackRule != null))) {
- localRule = this.GeneratedFallbackRule;
- property = ((Microsoft.VisualStudio.ProjectSystem.Properties.IEvaluatedProperty)(localRule.GetProperty(ExtensionsProperty)));
- }
- return property;
- }
- }
-
- /// Get the fallback rule if the current rule on disk is missing or a property in the rule on disk is missing
- private Microsoft.VisualStudio.ProjectSystem.Properties.IRule GeneratedFallbackRule {
- get {
- if (((this.fallbackRule == null)
- && (this.configuredProject != null))) {
- System.Threading.Monitor.Enter(this.locker);
- try {
- if ((this.fallbackRule == null)) {
- this.InitializeFallbackRule();
- }
- }
- finally {
- System.Threading.Monitor.Exit(this.locker);
- }
- }
- return this.fallbackRule;
- }
- }
-
- private static Microsoft.VisualStudio.ProjectSystem.Properties.IRule GetRule(Microsoft.VisualStudio.ProjectSystem.Properties.IPropertyPagesCatalog catalog, string file, string itemType, string itemName) {
- if ((catalog == null)) {
- return null;
- }
- return catalog.BindToContext(SchemaName, file, itemType, itemName);
- }
-
- private static string GetContextFile(Microsoft.VisualStudio.ProjectSystem.Properties.IProjectPropertiesContext propertiesContext) {
- if ((propertiesContext.IsProjectFile == true)) {
- return null;
- }
- else {
- return propertiesContext.File;
- }
- }
-
- private void InitializeFallbackRule() {
- if ((this.configuredProject == null)) {
- return;
- }
- Microsoft.Build.Framework.XamlTypes.Rule unboundRule = RazorConfiguration.deserializedFallbackRule;
- if ((unboundRule == null)) {
- System.IO.Stream xamlStream = null;
- System.Reflection.Assembly thisAssembly = System.Reflection.Assembly.GetExecutingAssembly();
- try {
- xamlStream = thisAssembly.GetManifestResourceStream("XamlRuleToCode:RazorConfiguration.xaml");
- Microsoft.Build.Framework.XamlTypes.IProjectSchemaNode root = ((Microsoft.Build.Framework.XamlTypes.IProjectSchemaNode)(System.Xaml.XamlServices.Load(xamlStream)));
- System.Collections.Generic.IEnumerator ruleEnumerator = root.GetSchemaObjects(typeof(Microsoft.Build.Framework.XamlTypes.Rule)).GetEnumerator();
- for (
- ; ((unboundRule == null)
- && ruleEnumerator.MoveNext());
- ) {
- Microsoft.Build.Framework.XamlTypes.Rule t = ((Microsoft.Build.Framework.XamlTypes.Rule)(ruleEnumerator.Current));
- if (System.StringComparer.OrdinalIgnoreCase.Equals(t.Name, SchemaName)) {
- unboundRule = t;
- unboundRule.Name = "30e71838-2cb8-4c67-ab28-7670763124af";
- RazorConfiguration.deserializedFallbackRule = unboundRule;
- }
- }
- }
- finally {
- if ((xamlStream != null)) {
- ((System.IDisposable)(xamlStream)).Dispose();
- }
- }
- }
- this.configuredProject.Services.AdditionalRuleDefinitions.AddRuleDefinition(unboundRule, "FallbackRuleCodeGenerationContext");
- Microsoft.VisualStudio.ProjectSystem.Properties.IPropertyPagesCatalog catalog = this.configuredProject.Services.PropertyPagesCatalog.GetMemoryOnlyCatalog("FallbackRuleCodeGenerationContext");
- this.fallbackRule = catalog.BindToContext(unboundRule.Name, this.file, this.itemType, this.itemName);
- }
- }
-
- internal partial class RazorProjectProperties {
-
- private static System.Func>, object, RazorConfiguration> CreateRazorConfigurationPropertiesDelegate = new System.Func>, object, RazorConfiguration>(CreateRazorConfigurationProperties);
-
- private static RazorConfiguration CreateRazorConfigurationProperties(System.Threading.Tasks.Task> namedCatalogs, object state) {
- RazorProjectProperties that = ((RazorProjectProperties)(state));
- return new RazorConfiguration(that.ConfiguredProject, namedCatalogs.Result, "Project", that.File, that.ItemType, that.ItemName);
- }
-
- /// Gets the strongly-typed property accessor used to get and set Configuration Properties properties.
- internal System.Threading.Tasks.Task GetRazorConfigurationPropertiesAsync() {
- System.Threading.Tasks.Task> namedCatalogsTask = this.GetNamedCatalogsAsync();
- return namedCatalogsTask.ContinueWith(CreateRazorConfigurationPropertiesDelegate, this, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskContinuationOptions.ExecuteSynchronously, System.Threading.Tasks.TaskScheduler.Default);
- }
- }
-}
diff --git a/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/ProjectSystem/Rules/RazorConfiguration.xaml b/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/ProjectSystem/Rules/RazorConfiguration.xaml
deleted file mode 100644
index 9632054a7538..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/ProjectSystem/Rules/RazorConfiguration.xaml
+++ /dev/null
@@ -1,29 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/ProjectSystem/Rules/RazorExtension.cs b/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/ProjectSystem/Rules/RazorExtension.cs
deleted file mode 100644
index 0ce503811bc6..000000000000
--- a/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/ProjectSystem/Rules/RazorExtension.cs
+++ /dev/null
@@ -1,235 +0,0 @@
-//------------------------------------------------------------------------------
-//
-// This code was generated by a tool.
-// Runtime Version:4.0.30319.42000
-//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
-//
-//------------------------------------------------------------------------------
-
-namespace Microsoft.CodeAnalysis.Razor.ProjectSystem.Rules {
-
-
- internal partial class RazorExtension {
-
- /// Backing field for deserialized rule..
- private static Microsoft.Build.Framework.XamlTypes.Rule deserializedFallbackRule;
-
- /// The name of the schema to look for at runtime to fulfill property access.
- internal const string SchemaName = "RazorExtension";
-
- /// The ItemType given in the Rule.DataSource property. May not apply to every Property's individual DataSource.
- internal const string PrimaryDataSourceItemType = "RazorExtension";
-
- /// The Label given in the Rule.DataSource property. May not apply to every Property's individual DataSource.
- internal const string PrimaryDataSourceLabel = "";
-
- /// Razor Extension Assembly Name (The "AssemblyName" property).
- internal const string AssemblyNameProperty = "AssemblyName";
-
- /// Razor Extension Assembly File Path (The "AssemblyFilePath" property).
- internal const string AssemblyFilePathProperty = "AssemblyFilePath";
-
- /// Backing field for the property.
- private Microsoft.VisualStudio.ProjectSystem.Properties.IRule rule;
-
- /// Backing field for the file name of the rule property.
- private string file;
-
- /// Backing field for the ItemType property.
- private string itemType;
-
- /// Backing field for the ItemName property.
- private string itemName;
-
- /// Configured Project
- private Microsoft.VisualStudio.ProjectSystem.ConfiguredProject configuredProject;
-
- /// The dictionary of named catalogs.
- private System.Collections.Immutable.IImmutableDictionary catalogs;
-
- /// Backing field for the property.
- private Microsoft.VisualStudio.ProjectSystem.Properties.IRule fallbackRule;
-
- /// Thread locking object
- private object locker = new object();
-
- /// Initializes a new instance of the RazorExtension class.
- internal RazorExtension(Microsoft.VisualStudio.ProjectSystem.Properties.IRule rule) {
- this.rule = rule;
- }
-
- /// Initializes a new instance of the RazorExtension class.
- internal RazorExtension(Microsoft.VisualStudio.ProjectSystem.ConfiguredProject configuredProject, System.Collections.Immutable.IImmutableDictionary catalogs, string context, string file, string itemType, string itemName) :
- this(GetRule(System.Collections.Immutable.ImmutableDictionary.GetValueOrDefault(catalogs, context), file, itemType, itemName)) {
- if ((configuredProject == null)) {
- throw new System.ArgumentNullException("configuredProject");
- }
- this.configuredProject = configuredProject;
- this.catalogs = catalogs;
- this.file = file;
- this.itemType = itemType;
- this.itemName = itemName;
- }
-
- /// Initializes a new instance of the RazorExtension class.
- internal RazorExtension(Microsoft.VisualStudio.ProjectSystem.Properties.IRule rule, Microsoft.VisualStudio.ProjectSystem.ConfiguredProject configuredProject) :
- this(rule) {
- if ((rule == null)) {
- throw new System.ArgumentNullException("rule");
- }
- if ((configuredProject == null)) {
- throw new System.ArgumentNullException("configuredProject");
- }
- this.configuredProject = configuredProject;
- this.rule = rule;
- this.file = this.rule.File;
- this.itemType = this.rule.ItemType;
- this.itemName = this.rule.ItemName;
- }
-
- /// Initializes a new instance of the RazorExtension class.
- internal RazorExtension(Microsoft.VisualStudio.ProjectSystem.ConfiguredProject configuredProject, System.Collections.Immutable.IImmutableDictionary catalogs, string context, Microsoft.VisualStudio.ProjectSystem.Properties.IProjectPropertiesContext propertyContext) :
- this(configuredProject, catalogs, context, GetContextFile(propertyContext), propertyContext.ItemType, propertyContext.ItemName) {
- }
-
- /// Initializes a new instance of the RazorExtension class that assumes a project context (neither property sheet nor items).
- internal RazorExtension(Microsoft.VisualStudio.ProjectSystem.ConfiguredProject configuredProject, System.Collections.Immutable.IImmutableDictionary catalogs) :
- this(configuredProject, catalogs, "Project", null, null, null) {
- }
-
- /// Gets the IRule used to get and set properties.
- public Microsoft.VisualStudio.ProjectSystem.Properties.IRule Rule {
- get {
- return this.rule;
- }
- }
-
- /// Razor Extension Assembly Name
- internal Microsoft.VisualStudio.ProjectSystem.Properties.IEvaluatedProperty AssemblyName {
- get {
- Microsoft.VisualStudio.ProjectSystem.Properties.IRule localRule = this.rule;
- if ((localRule == null)) {
- localRule = this.GeneratedFallbackRule;
- }
- if ((localRule == null)) {
- return null;
- }
- Microsoft.VisualStudio.ProjectSystem.Properties.IEvaluatedProperty property = ((Microsoft.VisualStudio.ProjectSystem.Properties.IEvaluatedProperty)(localRule.GetProperty(AssemblyNameProperty)));
- if (((property == null)
- && (this.GeneratedFallbackRule != null))) {
- localRule = this.GeneratedFallbackRule;
- property = ((Microsoft.VisualStudio.ProjectSystem.Properties.IEvaluatedProperty)(localRule.GetProperty(AssemblyNameProperty)));
- }
- return property;
- }
- }
-
- /// Razor Extension Assembly File Path
- internal Microsoft.VisualStudio.ProjectSystem.Properties.IEvaluatedProperty AssemblyFilePath {
- get {
- Microsoft.VisualStudio.ProjectSystem.Properties.IRule localRule = this.rule;
- if ((localRule == null)) {
- localRule = this.GeneratedFallbackRule;
- }
- if ((localRule == null)) {
- return null;
- }
- Microsoft.VisualStudio.ProjectSystem.Properties.IEvaluatedProperty property = ((Microsoft.VisualStudio.ProjectSystem.Properties.IEvaluatedProperty)(localRule.GetProperty(AssemblyFilePathProperty)));
- if (((property == null)
- && (this.GeneratedFallbackRule != null))) {
- localRule = this.GeneratedFallbackRule;
- property = ((Microsoft.VisualStudio.ProjectSystem.Properties.IEvaluatedProperty)(localRule.GetProperty(AssemblyFilePathProperty)));
- }
- return property;
- }
- }
-
- /// Get the fallback rule if the current rule on disk is missing or a property in the rule on disk is missing
- private Microsoft.VisualStudio.ProjectSystem.Properties.IRule GeneratedFallbackRule {
- get {
- if (((this.fallbackRule == null)
- && (this.configuredProject != null))) {
- System.Threading.Monitor.Enter(this.locker);
- try {
- if ((this.fallbackRule == null)) {
- this.InitializeFallbackRule();
- }
- }
- finally {
- System.Threading.Monitor.Exit(this.locker);
- }
- }
- return this.fallbackRule;
- }
- }
-
- private static Microsoft.VisualStudio.ProjectSystem.Properties.IRule GetRule(Microsoft.VisualStudio.ProjectSystem.Properties.IPropertyPagesCatalog catalog, string file, string itemType, string itemName) {
- if ((catalog == null)) {
- return null;
- }
- return catalog.BindToContext(SchemaName, file, itemType, itemName);
- }
-
- private static string GetContextFile(Microsoft.VisualStudio.ProjectSystem.Properties.IProjectPropertiesContext propertiesContext) {
- if ((propertiesContext.IsProjectFile == true)) {
- return null;
- }
- else {
- return propertiesContext.File;
- }
- }
-
- private void InitializeFallbackRule() {
- if ((this.configuredProject == null)) {
- return;
- }
- Microsoft.Build.Framework.XamlTypes.Rule unboundRule = RazorExtension.deserializedFallbackRule;
- if ((unboundRule == null)) {
- System.IO.Stream xamlStream = null;
- System.Reflection.Assembly thisAssembly = System.Reflection.Assembly.GetExecutingAssembly();
- try {
- xamlStream = thisAssembly.GetManifestResourceStream("XamlRuleToCode:RazorExtension.xaml");
- Microsoft.Build.Framework.XamlTypes.IProjectSchemaNode root = ((Microsoft.Build.Framework.XamlTypes.IProjectSchemaNode)(System.Xaml.XamlServices.Load(xamlStream)));
- System.Collections.Generic.IEnumerator ruleEnumerator = root.GetSchemaObjects(typeof(Microsoft.Build.Framework.XamlTypes.Rule)).GetEnumerator();
- for (
- ; ((unboundRule == null)
- && ruleEnumerator.MoveNext());
- ) {
- Microsoft.Build.Framework.XamlTypes.Rule t = ((Microsoft.Build.Framework.XamlTypes.Rule)(ruleEnumerator.Current));
- if (System.StringComparer.OrdinalIgnoreCase.Equals(t.Name, SchemaName)) {
- unboundRule = t;
- unboundRule.Name = "6b577687-703b-41a1-8f5f-c44644f65f2a";
- RazorExtension.deserializedFallbackRule = unboundRule;
- }
- }
- }
- finally {
- if ((xamlStream != null)) {
- ((System.IDisposable)(xamlStream)).Dispose();
- }
- }
- }
- this.configuredProject.Services.AdditionalRuleDefinitions.AddRuleDefinition(unboundRule, "FallbackRuleCodeGenerationContext");
- Microsoft.VisualStudio.ProjectSystem.Properties.IPropertyPagesCatalog catalog = this.configuredProject.Services.PropertyPagesCatalog.GetMemoryOnlyCatalog("FallbackRuleCodeGenerationContext");
- this.fallbackRule = catalog.BindToContext(unboundRule.Name, this.file, this.itemType, this.itemName);
- }
- }
-
- internal partial class RazorProjectProperties {
-
- private static System.Func>, object, RazorExtension> CreateRazorExtensionPropertiesDelegate = new System.Func>, object, RazorExtension>(CreateRazorExtensionProperties);
-
- private static RazorExtension CreateRazorExtensionProperties(System.Threading.Tasks.Task> namedCatalogs, object state) {
- RazorProjectProperties that = ((RazorProjectProperties)(state));
- return new RazorExtension(that.ConfiguredProject, namedCatalogs.Result, "Project", that.File, that.ItemType, that.ItemName);
- }
-
- ///