diff --git a/src/Microsoft.CodeAnalysis.Razor.Workspaces/DefaultTagHelperCompletionService.cs b/src/Microsoft.CodeAnalysis.Razor.Workspaces/DefaultTagHelperCompletionService.cs index 92daeecb12..65a99fa85b 100644 --- a/src/Microsoft.CodeAnalysis.Razor.Workspaces/DefaultTagHelperCompletionService.cs +++ b/src/Microsoft.CodeAnalysis.Razor.Workspaces/DefaultTagHelperCompletionService.cs @@ -11,10 +11,10 @@ namespace Microsoft.CodeAnalysis.Razor { internal class DefaultTagHelperCompletionService : TagHelperCompletionService { - private readonly TagHelperFactsService _tagHelperFactsService; + private readonly TagHelperFactsServiceInternal _tagHelperFactsService; private static readonly HashSet _emptyHashSet = new HashSet(); - public DefaultTagHelperCompletionService(TagHelperFactsService tagHelperFactsService) + public DefaultTagHelperCompletionService(TagHelperFactsServiceInternal tagHelperFactsService) { _tagHelperFactsService = tagHelperFactsService; } diff --git a/src/Microsoft.CodeAnalysis.Razor.Workspaces/DefaultTagHelperCompletionServiceFactory.cs b/src/Microsoft.CodeAnalysis.Razor.Workspaces/DefaultTagHelperCompletionServiceFactory.cs index 3dd4ea4e4c..aaa4f7dc2b 100644 --- a/src/Microsoft.CodeAnalysis.Razor.Workspaces/DefaultTagHelperCompletionServiceFactory.cs +++ b/src/Microsoft.CodeAnalysis.Razor.Workspaces/DefaultTagHelperCompletionServiceFactory.cs @@ -11,7 +11,7 @@ namespace Microsoft.CodeAnalysis.Razor { public ILanguageService CreateLanguageService(HostLanguageServices languageServices) { - var tagHelperFactsService = languageServices.GetRequiredService(); + var tagHelperFactsService = languageServices.GetRequiredService(); return new DefaultTagHelperCompletionService(tagHelperFactsService); } } diff --git a/src/Microsoft.CodeAnalysis.Razor.Workspaces/DefaultTagHelperFactsService.cs b/src/Microsoft.CodeAnalysis.Razor.Workspaces/DefaultTagHelperFactsServiceInternal.cs similarity index 98% rename from src/Microsoft.CodeAnalysis.Razor.Workspaces/DefaultTagHelperFactsService.cs rename to src/Microsoft.CodeAnalysis.Razor.Workspaces/DefaultTagHelperFactsServiceInternal.cs index 3b0943b055..99cf4f6d12 100644 --- a/src/Microsoft.CodeAnalysis.Razor.Workspaces/DefaultTagHelperFactsService.cs +++ b/src/Microsoft.CodeAnalysis.Razor.Workspaces/DefaultTagHelperFactsServiceInternal.cs @@ -8,7 +8,7 @@ using Microsoft.AspNetCore.Razor.Language; namespace Microsoft.CodeAnalysis.Razor { - internal class DefaultTagHelperFactsService : TagHelperFactsService + internal class DefaultTagHelperFactsServiceInternal : TagHelperFactsServiceInternal { public override TagHelperBinding GetTagHelperBinding( TagHelperDocumentContext documentContext, diff --git a/src/Microsoft.CodeAnalysis.Razor.Workspaces/DefaultTagHelperFactsServiceFactory.cs b/src/Microsoft.CodeAnalysis.Razor.Workspaces/DefaultTagHelperFactsServiceInternalFactory.cs similarity index 60% rename from src/Microsoft.CodeAnalysis.Razor.Workspaces/DefaultTagHelperFactsServiceFactory.cs rename to src/Microsoft.CodeAnalysis.Razor.Workspaces/DefaultTagHelperFactsServiceInternalFactory.cs index adfbeb2dc5..4e89fcdff1 100644 --- a/src/Microsoft.CodeAnalysis.Razor.Workspaces/DefaultTagHelperFactsServiceFactory.cs +++ b/src/Microsoft.CodeAnalysis.Razor.Workspaces/DefaultTagHelperFactsServiceInternalFactory.cs @@ -6,12 +6,12 @@ using Microsoft.CodeAnalysis.Host.Mef; namespace Microsoft.CodeAnalysis.Razor { - [ExportLanguageServiceFactory(typeof(TagHelperFactsService), RazorLanguage.Name, ServiceLayer.Default)] - internal class DefaultTagHelperFactsServiceFactory : ILanguageServiceFactory + [ExportLanguageServiceFactory(typeof(TagHelperFactsServiceInternal), RazorLanguage.Name, ServiceLayer.Default)] + internal class DefaultTagHelperFactsServiceInternalFactory : ILanguageServiceFactory { public ILanguageService CreateLanguageService(HostLanguageServices languageServices) { - return new DefaultTagHelperFactsService(); + return new DefaultTagHelperFactsServiceInternal(); } } } \ No newline at end of file diff --git a/src/Microsoft.CodeAnalysis.Razor.Workspaces/TagHelperFactsServiceInternal.cs b/src/Microsoft.CodeAnalysis.Razor.Workspaces/TagHelperFactsServiceInternal.cs new file mode 100644 index 0000000000..78d26cfdbb --- /dev/null +++ b/src/Microsoft.CodeAnalysis.Razor.Workspaces/TagHelperFactsServiceInternal.cs @@ -0,0 +1,20 @@ +// 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; + +namespace Microsoft.CodeAnalysis.Razor +{ + internal abstract class TagHelperFactsServiceInternal : ILanguageService + { + 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/Microsoft.VisualStudio.Editor.Razor/DefaultTagHelperFactsService.cs b/src/Microsoft.VisualStudio.Editor.Razor/DefaultTagHelperFactsService.cs new file mode 100644 index 0000000000..2769d59657 --- /dev/null +++ b/src/Microsoft.VisualStudio.Editor.Razor/DefaultTagHelperFactsService.cs @@ -0,0 +1,56 @@ +// 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.AspNetCore.Razor.Language; +using Microsoft.CodeAnalysis.Razor; + +namespace Microsoft.VisualStudio.Editor.Razor +{ + [System.Composition.Shared] + [Export(typeof(TagHelperFactsService))] + internal class DefaultTagHelperFactsService : TagHelperFactsService + { + private readonly TagHelperFactsServiceInternal _tagHelperFactsService; + + [ImportingConstructor] + public DefaultTagHelperFactsService(VisualStudioWorkspaceAccessor workspaceAccessor) + { + var razorLanguageServices = workspaceAccessor.Workspace.Services.GetLanguageServices(RazorLanguage.Name); + _tagHelperFactsService = razorLanguageServices.GetRequiredService(); + } + + public override TagHelperBinding GetTagHelperBinding( + TagHelperDocumentContext documentContext, + string tagName, + IEnumerable> attributes, + string parentTag, + bool parentIsTagHelper) + { + return _tagHelperFactsService.GetTagHelperBinding(documentContext, tagName, attributes, parentTag, parentIsTagHelper); + } + + public override IEnumerable GetBoundTagHelperAttributes( + TagHelperDocumentContext documentContext, + string attributeName, + TagHelperBinding binding) + { + return _tagHelperFactsService.GetBoundTagHelperAttributes(documentContext, attributeName, binding); + } + + public override IReadOnlyList GetTagHelpersGivenTag( + TagHelperDocumentContext documentContext, + string tagName, + string parentTag) + { + return _tagHelperFactsService.GetTagHelpersGivenTag(documentContext, tagName, parentTag); + } + + public override IReadOnlyList GetTagHelpersGivenParent(TagHelperDocumentContext documentContext, string parentTag) + { + return _tagHelperFactsService.GetTagHelpersGivenParent(documentContext, parentTag); + } + } +} diff --git a/src/Microsoft.CodeAnalysis.Razor.Workspaces/TagHelperFactsService.cs b/src/Microsoft.VisualStudio.Editor.Razor/TagHelperFactsService.cs similarity index 87% rename from src/Microsoft.CodeAnalysis.Razor.Workspaces/TagHelperFactsService.cs rename to src/Microsoft.VisualStudio.Editor.Razor/TagHelperFactsService.cs index 7022e2e36e..e7fd77279d 100644 --- a/src/Microsoft.CodeAnalysis.Razor.Workspaces/TagHelperFactsService.cs +++ b/src/Microsoft.VisualStudio.Editor.Razor/TagHelperFactsService.cs @@ -3,11 +3,10 @@ using System.Collections.Generic; using Microsoft.AspNetCore.Razor.Language; -using Microsoft.CodeAnalysis.Host; -namespace Microsoft.CodeAnalysis.Razor +namespace Microsoft.VisualStudio.Editor.Razor { - public abstract class TagHelperFactsService : ILanguageService + public abstract class TagHelperFactsService { public abstract TagHelperBinding GetTagHelperBinding(TagHelperDocumentContext documentContext, string tagName, IEnumerable> attributes, string parentTag, bool parentIsTagHelper); diff --git a/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/DefaultTagHelperCompletionServiceTest.cs b/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/DefaultTagHelperCompletionServiceTest.cs index 9e4a114a7f..c37f51a79e 100644 --- a/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/DefaultTagHelperCompletionServiceTest.cs +++ b/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/DefaultTagHelperCompletionServiceTest.cs @@ -994,8 +994,8 @@ namespace Microsoft.CodeAnalysis.Razor private static DefaultTagHelperCompletionService CreateTagHelperCompletionFactsService() { - var tagHelperFactService = new DefaultTagHelperFactsService(); - var completionFactService = new DefaultTagHelperCompletionService(tagHelperFactService); + var tagHelperFactsService = new DefaultTagHelperFactsServiceInternal(); + var completionFactService = new DefaultTagHelperCompletionService(tagHelperFactsService); return completionFactService; } diff --git a/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/DefaultTagHelperFactsServiceTest.cs b/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/DefaultTagHelperFactsServiceInternalTest.cs similarity index 94% rename from test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/DefaultTagHelperFactsServiceTest.cs rename to test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/DefaultTagHelperFactsServiceInternalTest.cs index fe6222d517..5001398a36 100644 --- a/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/DefaultTagHelperFactsServiceTest.cs +++ b/test/Microsoft.CodeAnalysis.Razor.Workspaces.Test/DefaultTagHelperFactsServiceInternalTest.cs @@ -8,7 +8,7 @@ using Xunit; namespace Microsoft.CodeAnalysis.Razor { - public class DefaultTagHelperFactsServiceTest + public class DefaultTagHelperFactsServiceInternalTest { // Purposefully not thoroughly testing DefaultTagHelperFactsService.GetTagHelperBinding because it's a pass through // into TagHelperDescriptorProvider.GetTagHelperBinding. @@ -24,7 +24,7 @@ namespace Microsoft.CodeAnalysis.Razor .Build() }; var documentContext = TagHelperDocumentContext.Create(string.Empty, documentDescriptors); - var service = new DefaultTagHelperFactsService(); + var service = new DefaultTagHelperFactsServiceInternal(); // Act var binding = service.GetTagHelperBinding(documentContext, "!a", Enumerable.Empty>(), parentTag: null, parentIsTagHelper: false); @@ -66,7 +66,7 @@ namespace Microsoft.CodeAnalysis.Razor .Build(), }; var documentContext = TagHelperDocumentContext.Create(string.Empty, documentDescriptors); - var service = new DefaultTagHelperFactsService(); + var service = new DefaultTagHelperFactsServiceInternal(); var attributes = new[] { new KeyValuePair("asp-for", "Name") @@ -108,7 +108,7 @@ namespace Microsoft.CodeAnalysis.Razor documentDescriptors[0].BoundAttributes.Last() }; var documentContext = TagHelperDocumentContext.Create(string.Empty, documentDescriptors); - var service = new DefaultTagHelperFactsService(); + var service = new DefaultTagHelperFactsServiceInternal(); var binding = service.GetTagHelperBinding(documentContext, "a", Enumerable.Empty>(), parentTag: null, parentIsTagHelper: false); // Act @@ -143,7 +143,7 @@ namespace Microsoft.CodeAnalysis.Razor documentDescriptors[0].BoundAttributes.First() }; var documentContext = TagHelperDocumentContext.Create(string.Empty, documentDescriptors); - var service = new DefaultTagHelperFactsService(); + var service = new DefaultTagHelperFactsServiceInternal(); var binding = service.GetTagHelperBinding(documentContext, "input", Enumerable.Empty>(), parentTag: null, parentIsTagHelper: false); // Act @@ -164,7 +164,7 @@ namespace Microsoft.CodeAnalysis.Razor .Build() }; var documentContext = TagHelperDocumentContext.Create(string.Empty, documentDescriptors); - var service = new DefaultTagHelperFactsService(); + var service = new DefaultTagHelperFactsServiceInternal(); // Act var descriptors = service.GetTagHelpersGivenTag(documentContext, "!strong", parentTag: null); @@ -184,7 +184,7 @@ namespace Microsoft.CodeAnalysis.Razor .Build() }; var documentContext = TagHelperDocumentContext.Create(string.Empty, documentDescriptors); - var service = new DefaultTagHelperFactsService(); + var service = new DefaultTagHelperFactsServiceInternal(); // Act var descriptors = service.GetTagHelpersGivenTag(documentContext, "strong", "p"); @@ -217,7 +217,7 @@ namespace Microsoft.CodeAnalysis.Razor .Build() }; var documentContext = TagHelperDocumentContext.Create(string.Empty, documentDescriptors); - var service = new DefaultTagHelperFactsService(); + var service = new DefaultTagHelperFactsServiceInternal(); // Act var descriptors = service.GetTagHelpersGivenTag(documentContext, "a", "div"); @@ -244,7 +244,7 @@ namespace Microsoft.CodeAnalysis.Razor .Build() }; var documentContext = TagHelperDocumentContext.Create("th", documentDescriptors); - var service = new DefaultTagHelperFactsService(); + var service = new DefaultTagHelperFactsServiceInternal(); // Act var descriptors = service.GetTagHelpersGivenTag(documentContext, "thstrong", "div"); @@ -277,7 +277,7 @@ namespace Microsoft.CodeAnalysis.Razor .Build() }; var documentContext = TagHelperDocumentContext.Create(string.Empty, documentDescriptors); - var service = new DefaultTagHelperFactsService(); + var service = new DefaultTagHelperFactsServiceInternal(); // Act var descriptors = service.GetTagHelpersGivenTag(documentContext, "strong", "div"); @@ -297,7 +297,7 @@ namespace Microsoft.CodeAnalysis.Razor .Build() }; var documentContext = TagHelperDocumentContext.Create(string.Empty, documentDescriptors); - var service = new DefaultTagHelperFactsService(); + var service = new DefaultTagHelperFactsServiceInternal(); // Act var descriptors = service.GetTagHelpersGivenParent(documentContext, parentTag: null /* root */); @@ -322,7 +322,7 @@ namespace Microsoft.CodeAnalysis.Razor .Build() }; var documentContext = TagHelperDocumentContext.Create(string.Empty, documentDescriptors); - var service = new DefaultTagHelperFactsService(); + var service = new DefaultTagHelperFactsServiceInternal(); // Act var descriptors = service.GetTagHelpersGivenParent(documentContext, parentTag: null /* root */); @@ -343,7 +343,7 @@ namespace Microsoft.CodeAnalysis.Razor .Build() }; var documentContext = TagHelperDocumentContext.Create(string.Empty, documentDescriptors); - var service = new DefaultTagHelperFactsService(); + var service = new DefaultTagHelperFactsServiceInternal(); // Act var descriptors = service.GetTagHelpersGivenParent(documentContext, "p"); @@ -376,7 +376,7 @@ namespace Microsoft.CodeAnalysis.Razor .Build() }; var documentContext = TagHelperDocumentContext.Create(string.Empty, documentDescriptors); - var service = new DefaultTagHelperFactsService(); + var service = new DefaultTagHelperFactsServiceInternal(); // Act var descriptors = service.GetTagHelpersGivenParent(documentContext, "div");