mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
[Dependency Scanner] Add API to query emitted diagnostics during a scan
This commit is contained in:
@@ -534,6 +534,70 @@ swiftscan_compiler_supported_features_query() {
|
||||
return swift::c_string_utils::create_set(allFeatures);
|
||||
}
|
||||
|
||||
//=== Scanner Diagnostics -------------------------------------------------===//
|
||||
swiftscan_diagnostic_set_t*
|
||||
swiftscan_scanner_diagnostics_query(swiftscan_scanner_t scanner) {
|
||||
DependencyScanningTool *ScanningTool = unwrap(scanner);
|
||||
auto NumDiagnostics = ScanningTool->getDiagnostics().size();
|
||||
|
||||
swiftscan_diagnostic_set_t *Result = new swiftscan_diagnostic_set_t;
|
||||
Result->count = NumDiagnostics;
|
||||
Result->diagnostics = new swiftscan_diagnostic_info_t[NumDiagnostics];
|
||||
|
||||
for (size_t i = 0; i < NumDiagnostics; ++i) {
|
||||
const auto &Diagnostic = ScanningTool->getDiagnostics()[i];
|
||||
swiftscan_diagnostic_info_s *DiagnosticInfo = new swiftscan_diagnostic_info_s;
|
||||
DiagnosticInfo->message = swift::c_string_utils::create_clone(Diagnostic.Message.c_str());
|
||||
switch (Diagnostic.Severity) {
|
||||
case llvm::SourceMgr::DK_Error:
|
||||
DiagnosticInfo->severity = SWIFTSCAN_DIAGNOSTIC_SEVERITY_ERROR;
|
||||
break;
|
||||
case llvm::SourceMgr::DK_Warning:
|
||||
DiagnosticInfo->severity = SWIFTSCAN_DIAGNOSTIC_SEVERITY_WARNING;
|
||||
break;
|
||||
case llvm::SourceMgr::DK_Note:
|
||||
DiagnosticInfo->severity = SWIFTSCAN_DIAGNOSTIC_SEVERITY_NOTE;
|
||||
break;
|
||||
case llvm::SourceMgr::DK_Remark:
|
||||
DiagnosticInfo->severity = SWIFTSCAN_DIAGNOSTIC_SEVERITY_REMARK;
|
||||
break;
|
||||
}
|
||||
Result->diagnostics[i] = DiagnosticInfo;
|
||||
}
|
||||
|
||||
return Result;
|
||||
}
|
||||
|
||||
void
|
||||
swiftscan_scanner_diagnostics_reset(swiftscan_scanner_t scanner) {
|
||||
DependencyScanningTool *ScanningTool = unwrap(scanner);
|
||||
ScanningTool->resetDiagnostics();
|
||||
}
|
||||
|
||||
swiftscan_string_ref_t
|
||||
swiftscan_diagnostic_get_message(swiftscan_diagnostic_info_t diagnostic) {
|
||||
return diagnostic->message;
|
||||
}
|
||||
|
||||
swiftscan_diagnostic_severity_t
|
||||
swiftscan_diagnostic_get_severity(swiftscan_diagnostic_info_t diagnostic) {
|
||||
return diagnostic->severity;
|
||||
}
|
||||
|
||||
void swiftscan_diagnostic_dispose(swiftscan_diagnostic_info_t diagnostic) {
|
||||
swiftscan_string_dispose(diagnostic->message);
|
||||
delete diagnostic;
|
||||
}
|
||||
|
||||
void
|
||||
swiftscan_diagnostics_set_dispose(swiftscan_diagnostic_set_t* diagnostics){
|
||||
for (size_t i = 0; i < diagnostics->count; ++i) {
|
||||
swiftscan_diagnostic_dispose(diagnostics->diagnostics[i]);
|
||||
}
|
||||
delete[] diagnostics->diagnostics;
|
||||
delete diagnostics;
|
||||
}
|
||||
|
||||
//=== Experimental Compiler Invocation Functions ------------------------===//
|
||||
|
||||
int invoke_swift_compiler(int argc, const char **argv) {
|
||||
|
||||
Reference in New Issue
Block a user