diff options
| author | Alexey Panteleev <alpanteleev@nvidia.com> | 2022-05-17 15:05:44 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-05-17 15:05:44 -0700 |
| commit | d9fd0ff3f0fc7b775de1e05570f01798fbc8baa3 (patch) | |
| tree | 87943f11f924e3ae3713dc034312b925250ee5bb /source/compiler-core/slang-diagnostic-sink.cpp | |
| parent | 05c4c2679ae979cfcb61e4c2acdb432c34384ddb (diff) | |
Configuration for warnings (#2241)
* Added support for disabling specific warnings or turning them into errors.
* Added API entry points for adding diagnostic severity overrides and manipulating some sink flags.
Diffstat (limited to 'source/compiler-core/slang-diagnostic-sink.cpp')
| -rw-r--r-- | source/compiler-core/slang-diagnostic-sink.cpp | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/source/compiler-core/slang-diagnostic-sink.cpp b/source/compiler-core/slang-diagnostic-sink.cpp index db2885f05..314ec1c2c 100644 --- a/source/compiler-core/slang-diagnostic-sink.cpp +++ b/source/compiler-core/slang-diagnostic-sink.cpp @@ -525,8 +525,34 @@ void DiagnosticSink::diagnoseImpl(DiagnosticInfo const& info, const UnownedStrin } } -void DiagnosticSink::diagnoseImpl(SourceLoc const& pos, DiagnosticInfo const& info, int argCount, DiagnosticArg const* const* args) +Severity DiagnosticSink::getEffectiveMessageSeverity(DiagnosticInfo const& info) { + Severity effectiveSeverity = info.severity; + + Severity* pSeverityOverride = m_severityOverrides.TryGetValue(info.id); + + // See if there is an override + if (pSeverityOverride) + { + // Override the current severity, but don't allow lowering it if it's Error or Fatal + if (effectiveSeverity < Severity::Error || *pSeverityOverride >= effectiveSeverity) + effectiveSeverity = *pSeverityOverride; + } + + if (isFlagSet(Flag::TreatWarningsAsErrors) && info.severity == Severity::Warning) + effectiveSeverity = Severity::Error; + + return effectiveSeverity; +} + +void DiagnosticSink::diagnoseImpl(SourceLoc const& pos, DiagnosticInfo info, int argCount, DiagnosticArg const* const* args) +{ + // Override the severity in the 'info' structure to pass it further into formatDiagnostics + info.severity = getEffectiveMessageSeverity(info); + + if (info.severity == Severity::Disable) + return; + StringBuilder messageBuilder; { StringBuilder sb; |
