-
-
Notifications
You must be signed in to change notification settings - Fork 724
/
FileDocumentWriter.cs
56 lines (46 loc) · 1.67 KB
/
FileDocumentWriter.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
using System.Collections.Generic;
using System.IO;
using System.Text;
using Microsoft.CodeAnalysis.Text;
using IOPath = System.IO.Path;
namespace StrawberryShake.CodeGeneration.CSharp.Analyzers
{
public class FileDocumentWriter : IDocumentWriter
{
private readonly HashSet<string> _directories = new();
public void WriteDocument(ClientGeneratorContext context, SourceDocument document)
{
string documentName = $"{document.Name}.{context.Settings.Name}.StrawberryShake.cs";
context.Log.WriteDocument(documentName);
var directory = document.Path is null
? context.OutputDirectory
: IOPath.Combine(context.OutputDirectory, document.Path);
if (_directories.Add(directory) &&
context.OutputFiles &&
!Directory.Exists(directory))
{
Directory.CreateDirectory(directory);
}
var fileName = IOPath.Combine(directory, documentName);
context.Execution.AddSource(
documentName,
SourceText.From(document.SourceText, Encoding.UTF8));
if (context.OutputFiles && context.Settings.EmitGeneratedCode)
{
context.FileNames.Add(fileName);
WriteFile(fileName, document.SourceText);
}
}
private void WriteFile(string fileName, string sourceText)
{
if (File.Exists(fileName))
{
File.Delete(fileName);
}
File.WriteAllText(fileName, sourceText, Encoding.UTF8);
}
public void Flush()
{
}
}
}