From 7958576b6a412bbc6a64af90d83ad5fa9eda3fbe Mon Sep 17 00:00:00 2001 From: Deukhoofd Date: Wed, 19 Jun 2019 13:37:39 +0200 Subject: [PATCH] Create entry point to get diagnostic string message --- src/Diagnostics/DiagnosticsHolder.cpp | 27 +++++++++++++++----------- src/Diagnostics/DiagnosticsHolder.hpp | 2 +- tests/integration/DiagnosticsTests.cpp | 2 +- 3 files changed, 18 insertions(+), 13 deletions(-) diff --git a/src/Diagnostics/DiagnosticsHolder.cpp b/src/Diagnostics/DiagnosticsHolder.cpp index 0139081..3891b19 100644 --- a/src/Diagnostics/DiagnosticsHolder.cpp +++ b/src/Diagnostics/DiagnosticsHolder.cpp @@ -97,25 +97,30 @@ const string PrettyDiagnostic ( const char * format, vector arguments) return result; } -std::string DiagnosticsHolder::GetFullErrorMessage(Diagnostic diagnostic) { +std::string DiagnosticsHolder::GetFullDiagnostic(Diagnostic* diagnostic) { stringstream stream; - stream << "[" << SeverityToString(diagnostic.GetSeverity()) << "] "; - auto startPos = diagnostic.GetStartPosition(); + stream << "[" << SeverityToString(diagnostic->GetSeverity()) << "] "; + auto startPos = diagnostic->GetStartPosition(); auto line = this -> GetLineFromPosition(startPos); auto linePos = startPos - this ->GetStartPositionForLine(line); stream << " (" << line + 1 << ", " << linePos + 1 << ") "; - auto unformatted = ErrorMessages.find(diagnostic.GetCode()); + auto unformatted = ErrorMessages.find(diagnostic->GetCode()); if (unformatted != ErrorMessages.end()){ - stream << PrettyDiagnostic(unformatted->second, diagnostic.GetArguments()); + stream << PrettyDiagnostic(unformatted->second, diagnostic->GetArguments()); } return stream.str(); } -extern "C" int GetDiagnosticsCount (DiagnosticsHolder* diagnostics){ - return diagnostics->DiagnosticsCount(); -} +extern "C" { + int GetDiagnosticsCount (DiagnosticsHolder* diagnostics){ + return diagnostics->DiagnosticsCount(); + } -extern "C" Diagnostic* GetDiagnosticAt(DiagnosticsHolder* diagnostics, int position){ - return diagnostics->GetDiagnosticAt(position); -} + Diagnostic* GetDiagnosticAt(DiagnosticsHolder* diagnostics, int position){ + return diagnostics->GetDiagnosticAt(position); + } + const char* GetFullDiagnostic(DiagnosticsHolder* diagnostics, Diagnostic* diag){ + return diagnostics ->GetFullDiagnostic(diag).c_str(); + } +} diff --git a/src/Diagnostics/DiagnosticsHolder.hpp b/src/Diagnostics/DiagnosticsHolder.hpp index fbdc795..695c279 100644 --- a/src/Diagnostics/DiagnosticsHolder.hpp +++ b/src/Diagnostics/DiagnosticsHolder.hpp @@ -58,7 +58,7 @@ namespace Porygon::Diagnostics { return _lineStarts[i]; } - std::string GetFullErrorMessage(Diagnostic diagnostic); + std::string GetFullDiagnostic(Diagnostic* diagnostic); }; } diff --git a/tests/integration/DiagnosticsTests.cpp b/tests/integration/DiagnosticsTests.cpp index 11c79e5..565dd05 100644 --- a/tests/integration/DiagnosticsTests.cpp +++ b/tests/integration/DiagnosticsTests.cpp @@ -47,7 +47,7 @@ TEST_CASE( "Get full diagnostic message", "[integration]" ) { )"); REQUIRE(script->Diagnostics -> HasErrors()); auto diags = script->Diagnostics -> GetDiagnostics(); - auto msg = script -> Diagnostics -> GetFullErrorMessage(diags[0]); + auto msg = script->Diagnostics->GetFullDiagnostic(&diags[0]); REQUIRE(msg == "[Error] (2, 2) '\\x' is not a valid control character."); delete script; }