private static INamedTypeSymbol GetPageModel(RazorPageItem razorPage, Compilation compilation, Dictionary <string, List <string> > usingsByDirectory) { if (razorPage.Model == null) { return(null); } // First try to get the page model based on the usings in this file var explicitUsings = PagesFacts.ExtractUsings(razorPage); var pageModel = FindPageModel(compilation, razorPage.Model, explicitUsings); if (pageModel != null) { return(pageModel); } // Walk up the path and try to get the page model based on usings in the implicitly included files foreach (var path in EnumerateUpPath(razorPage.AdditionalText.Path)) { if (usingsByDirectory.TryGetValue(path, out var usings)) { pageModel = FindPageModel(compilation, razorPage.Model, usings); if (pageModel != null) { return(pageModel); } } } // Last try to get the page model based on what is in @model without a using return(FindPageModel(compilation, razorPage.Model, new List <string> { "" }));
public void ExtractUsings_ReturnsEmpty_WhenNoUsings() { var file = new InMemoryAdditionalText("", ""); var pageData = new RazorPageItem(file); // Act var result = PagesFacts.ExtractUsings(pageData); // Assert result.Should().BeEmpty(); }
public void ExtractUsings_ReturnsUsings() { var file = new InMemoryAdditionalText("", @"@using System @using System.Text"); var pageData = new RazorPageItem(file); // Act var result = PagesFacts.ExtractUsings(pageData); // Assert result.Should().BeEquivalentTo(new[] { "System", "System.Text", }); }