Skip to content

Commit

Permalink
C#: Change source generated razor file paths to be relative to csproj
Browse files Browse the repository at this point in the history
  • Loading branch information
tamasvajk committed Jan 6, 2025
1 parent b0062fc commit c9fab0b
Show file tree
Hide file tree
Showing 5 changed files with 24 additions and 29 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -34,10 +34,25 @@ protected override void GenerateAnalyzerConfig(IEnumerable<string> cshtmls, stri
using var sw = new StreamWriter(analyzerConfigPath);
sw.WriteLine("is_global = true");

foreach (var f in cshtmls.Select(f => f.Replace('\\', '/')))
foreach (var cshtml in cshtmls)
{
sw.WriteLine($"\n[{f}]");
var base64 = Convert.ToBase64String(Encoding.UTF8.GetBytes(f)); // TODO: this should be the relative path of the file.
var adjustedPath = cshtml.Replace('\\', '/');
string? relativePath;

try
{
var csprojFolder = Path.GetDirectoryName(csprojFile);
relativePath = csprojFolder is not null ? Path.GetRelativePath(csprojFolder, cshtml) : cshtml;
relativePath = relativePath.Replace('\\', '/');
}
catch (Exception e)
{
logger.LogWarning($"Failed to get relative path for {cshtml}: {e.Message}");
relativePath = adjustedPath;
}

Check notice

Code scanning / CodeQL

Generic catch clause Note

Generic catch clause.

sw.WriteLine($"\n[{adjustedPath}]");
var base64 = Convert.ToBase64String(Encoding.UTF8.GetBytes(relativePath));
sw.WriteLine($"build_metadata.AdditionalFiles.TargetPath = {base64}");
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
| Program.cs |
| Views/Home/Index.cshtml |
| test-db/working/implicitUsings/GlobalUsings.g.cs |
| test-db/working/razor/EC52D77FE9BF67AD10C5C3F248392316/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/[...]_ql_csharp_ql_integration_tests_all_platforms_cshtml_standalone_test_test_Views_Home_Index_cshtml.g.cs |
| test-db/working/razor/EC52D77FE9BF67AD10C5C3F248392316/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Views_Home_Index_cshtml.g.cs |
Original file line number Diff line number Diff line change
@@ -1,21 +1,5 @@
import csharp

private string getPath(File f) {
result = f.getRelativePath() and
not exists(result.indexOf("_ql_csharp_ql_integration_tests_all_platforms_cshtml_standalone_"))
or
exists(int index1, int index2, string pattern |
pattern = "Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator" and
index1 = f.getRelativePath().indexOf(pattern) and
index2 =
f.getRelativePath()
.indexOf("_ql_csharp_ql_integration_tests_all_platforms_cshtml_standalone_") and
result =
f.getRelativePath().substring(0, index1 + pattern.length()) + "/[...]" +
f.getRelativePath().substring(index2, f.getRelativePath().length())
)
}

from File f
where f.fromSource() or f.getExtension() = "cshtml"
select getPath(f)
select f.getRelativePath()
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
| Program.cs |
| Views/Home/Index.cshtml |
| test-db/working/implicitUsings/GlobalUsings.g.cs |
| test-db/working/razor/EC52D77FE9BF67AD10C5C3F248392316/[...]/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/[...]_ql_csharp_ql_integration_tests_all_platforms_cshtml_standalone_net6_test_test_Views_Home_Index_cshtml.g.cs |
| test-db/working/razor/EC52D77FE9BF67AD10C5C3F248392316/[...]/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Views_Home_Index_cshtml.g.cs |
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,17 @@ import csharp

private string getPath(File f) {
result = f.getRelativePath() and
not exists(result.indexOf("_ql_csharp_ql_integration_tests_all_platforms_cshtml_standalone_"))
not exists(result.indexOf("EC52D77FE9BF67AD10C5C3F248392316"))
or
exists(int index0, int index1, int index2, string pattern0, string pattern1 |
exists(int index0, int index1, string pattern0, string pattern1 |
// TODO: Remove index0 and pattern0. Currently there's some instability in the path depending on which dotnet SDK is being used. (See issue #448)
pattern0 = "EC52D77FE9BF67AD10C5C3F248392316" and
index0 = f.getRelativePath().indexOf(pattern0) and
pattern1 = "Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator" and
index1 = f.getRelativePath().indexOf(pattern1) and
index2 =
f.getRelativePath()
.indexOf("_ql_csharp_ql_integration_tests_all_platforms_cshtml_standalone_") and
result =
f.getRelativePath().substring(0, index0 + pattern0.length()) + "/[...]/" +
f.getRelativePath().substring(index1, index1 + pattern1.length()) + "/[...]" +
f.getRelativePath().substring(index2, f.getRelativePath().length())
f.getRelativePath().substring(index1, f.getRelativePath().length())
)
}

Expand Down

0 comments on commit c9fab0b

Please sign in to comment.