11
11
using ClangSharp ;
12
12
using ClangSharp . Interop ;
13
13
using Silk . NET . SilkTouch . Scraper . Subagent ;
14
+ using Microsoft . Extensions . Logging ;
14
15
using Silk . NET . SilkTouch . Symbols ;
15
16
16
17
namespace Silk . NET . SilkTouch . Scraper ;
@@ -20,6 +21,7 @@ namespace Silk.NET.SilkTouch.Scraper;
20
21
/// </summary>
21
22
public sealed class ClangScraper
22
23
{
24
+ private readonly ILoggerFactory _loggerFactory ;
23
25
/// <summary>
24
26
/// Placeholder used in place of library paths
25
27
/// </summary>
@@ -30,6 +32,15 @@ public sealed class ClangScraper
30
32
/// </summary>
31
33
public static readonly string LibraryNamespacePlaceholder = "LIBRARY_NAMESPACE" ;
32
34
35
+ /// <summary>
36
+ /// Creates a ClangScraper given it's dependencies
37
+ /// </summary>
38
+ /// <param name="loggerFactory">A logger factory to create loggers from</param>
39
+ public ClangScraper ( ILoggerFactory loggerFactory )
40
+ {
41
+ _loggerFactory = loggerFactory ;
42
+ }
43
+
33
44
/// <summary>
34
45
/// Scrapes the given XML document for symbols
35
46
/// </summary>
@@ -44,7 +55,7 @@ public IEnumerable<Symbol> ScrapeXML(XmlDocument document)
44
55
return Enumerable . Empty < Symbol > ( ) ;
45
56
}
46
57
47
- var visitor = new XmlVisitor ( ) ;
58
+ var visitor = new XmlVisitor ( _loggerFactory . CreateLogger < XmlVisitor > ( ) ) ;
48
59
return visitor . Visit ( bindings ) ;
49
60
}
50
61
@@ -105,6 +116,7 @@ public IEnumerable<string> ResolveStandardIncludes()
105
116
/// <exception cref="InvalidOperationException">Will be thrown when errors during parsing are encountered</exception>
106
117
public XmlDocument ? GenerateXML ( string headerFile , string [ ] includedNames , string [ ] excludedNames , string [ ] includeDirectories , string [ ] definedMacros )
107
118
{
119
+ var logger = _loggerFactory . CreateLogger ( "ClangScraper.ScrapeXML" ) ;
108
120
var opts = PInvokeGeneratorConfigurationOptions . None ;
109
121
opts |= PInvokeGeneratorConfigurationOptions . NoDefaultRemappings ;
110
122
@@ -158,11 +170,11 @@ Stream OutputStreamFactory(string fileName)
158
170
try
159
171
{
160
172
using ( var pinvokeGenerator = new PInvokeGenerator ( config , OutputStreamFactory ) )
161
- GenerateBindings ( pinvokeGenerator , headerFile , commandLineArgs . ToArray ( ) , translationFlags ) ;
173
+ GenerateBindings ( pinvokeGenerator , headerFile , commandLineArgs . ToArray ( ) , translationFlags , logger ) ;
162
174
163
175
foreach ( var ( name , stream ) in files )
164
176
{
165
- Console . WriteLine ( name ) ;
177
+ logger . LogTrace ( "Outputting File \" {name} \" " , name ) ;
166
178
var doc = new XmlDocument ( ) ;
167
179
stream . Position = 0 ;
168
180
doc . Load ( stream ) ;
@@ -185,7 +197,8 @@ private static void GenerateBindings
185
197
PInvokeGenerator pinvokeGenerator ,
186
198
string headerFile ,
187
199
string [ ] commandLineArgs ,
188
- CXTranslationUnit_Flags translationFlags
200
+ CXTranslationUnit_Flags translationFlags ,
201
+ ILogger logger
189
202
)
190
203
{
191
204
var result = CXTranslationUnit . TryParse
@@ -221,10 +234,20 @@ out var handle
221
234
222
235
foreach ( var diagnostic in pinvokeGenerator . Diagnostics )
223
236
{
224
- if ( diagnostic . Level > DiagnosticLevel . Warning )
225
- {
226
- Console . WriteLine ( diagnostic . Message ) ;
227
- }
237
+ logger . Log
238
+ (
239
+ diagnostic . Level switch
240
+ {
241
+ DiagnosticLevel . Info => LogLevel . Debug ,
242
+ DiagnosticLevel . Warning => LogLevel . Information ,
243
+ DiagnosticLevel . Error => LogLevel . Warning ,
244
+ _ => LogLevel . Debug
245
+ } ,
246
+ "Clang Diagnostic: {level} at: {location} \" {message}\" " ,
247
+ diagnostic . Level ,
248
+ diagnostic . Level ,
249
+ diagnostic . Message
250
+ ) ;
228
251
}
229
252
}
230
253
finally
0 commit comments