+# Preprocessor operators "#" and "##" should not be used
+# This poses portability issues, but we test on a large panel of architectures on purpose
+# Until after Augustin goes to rehab, we cannot remove them all
+sonar.issue.ignore.multicriteria.c2a.ruleKey=c:PPStringifyAndPastingUsage
+sonar.issue.ignore.multicriteria.c2a.resourceKey=**/*
+sonar.issue.ignore.multicriteria.c2b.ruleKey=cpp:PPStringifyAndPastingUsage
+sonar.issue.ignore.multicriteria.c2b.resourceKey=**/*
+
+# Macro names should comply with a naming convention
+# But the macros in this file are named after the MPI standard
+sonar.issue.ignore.multicriteria.c3.ruleKey=c:PPMacroName
+sonar.issue.ignore.multicriteria.c3.resourceKey=include/smpi/smpi_extended_traces.h
+
+# Replace alternative operator "not" with "!"
+# I like it better, so please leave me alone
+sonar.issue.ignore.multicriteria.c5a.ruleKey=cpp:S3659
+sonar.issue.ignore.multicriteria.c5a.resourceKey=**/*.cpp
+sonar.issue.ignore.multicriteria.c5b.ruleKey=cpp:S3659
+sonar.issue.ignore.multicriteria.c5b.resourceKey=**/*.hpp
+
+# Dynamically allocated memory should be released
+# We have better ways to detect memleaks in SimGrid
+# This is not disabled in example/ because our code should be nice looking
+sonar.issue.ignore.multicriteria.c6a.ruleKey=cpp:S3584
+sonar.issue.ignore.multicriteria.c6a.resourceKey=src/**/*.cpp
+sonar.issue.ignore.multicriteria.c6b.ruleKey=cpp:S3584
+sonar.issue.ignore.multicriteria.c6b.resourceKey=teshsuite/**/*.cpp
+
+# Macros should not be used to define constants
+# *.h includes are meant to be usable in C
+sonar.issue.ignore.multicriteria.c7.ruleKey=cpp:S5028
+sonar.issue.ignore.multicriteria.c7.resourceKey=**/*.h
+
+# Deprecated code should be removed
+# We do have a process to remove deprecated code
+sonar.issue.ignore.multicriteria.c8a.ruleKey=c:S1133
+sonar.issue.ignore.multicriteria.c8a.resourceKey=**/*
+sonar.issue.ignore.multicriteria.c8b.ruleKey=cpp:S1133
+sonar.issue.ignore.multicriteria.c8b.resourceKey=**/*
+
+# Lambda return types should be implicit
+# I don't see the point in general, plus we mostly use them when forced, to disambiguate
+sonar.issue.ignore.multicriteria.c9.ruleKey=cpp:S3574
+sonar.issue.ignore.multicriteria.c9.resourceKey=**/*
+
+# Standard outputs should not be used directly to log anything
+# Irrelevant for parsing examples
+sonar.issue.ignore.multicriteria.c10a.ruleKey=cpp:S106
+sonar.issue.ignore.multicriteria.c10a.resourceKey=teshsuite/s4u/evaluate-*-time/*.cpp
+sonar.issue.ignore.multicriteria.c10b.ruleKey=cpp:S106
+sonar.issue.ignore.multicriteria.c10b.resourceKey=teshsuite/s4u/is-router/*.cpp
+sonar.issue.ignore.multicriteria.c10c.ruleKey=cpp:S106
+sonar.issue.ignore.multicriteria.c10c.resourceKey=teshsuite/simdag/flatifier/*.cpp
+
+# Declarations should be placed in a namespace
+# But examples are intended to remain small and simple
+sonar.issue.ignore.multicriteria.cex1a.ruleKey=cpp:GlobalNamespaceMembers
+sonar.issue.ignore.multicriteria.cex1a.resourceKey=examples/**/*.cpp
+sonar.issue.ignore.multicriteria.cex1b.ruleKey=cpp:GlobalNamespaceMembers
+sonar.issue.ignore.multicriteria.cex1b.resourceKey=examples/**/*.hpp
+
+# Functions which do not return should be declared as "noreturn"
+# But examples are intended to remain small and simple
+sonar.issue.ignore.multicriteria.cex2a.ruleKey=c:S5271
+sonar.issue.ignore.multicriteria.cex2a.resourceKey=examples/**/*.c
+sonar.issue.ignore.multicriteria.cex2b.ruleKey=cpp:S5271
+sonar.issue.ignore.multicriteria.cex2b.resourceKey=examples/**/*.cpp
+
+# Unused function parameters should be removed, but not in examples
+sonar.issue.ignore.multicriteria.cex3.ruleKey=c:S1172
+sonar.issue.ignore.multicriteria.cex3.resourceKey=examples/**/*.c
+
+# no need for constness precision in examples
+sonar.issue.ignore.multicriteria.cex4.ruleKey=c:S995
+sonar.issue.ignore.multicriteria.cex4.resourceKey=examples/**/*.c
+
+# "reinterpret_cast" should not be used
+# But we need this to interface C and Fortran
+sonar.issue.ignore.multicriteria.f1.ruleKey=cpp:S3630
+sonar.issue.ignore.multicriteria.f1.resourceKey=src/smpi/bindings/smpi_f77*.cpp
+
+# In Python, Using command line arguments is security-sensitive
+# But we are cautionous with it
+sonar.issue.ignore.multicriteria.p1.ruleKey=python:S4823
+sonar.issue.ignore.multicriteria.p1.resourceKey=**/*.py
+
+# In MPI, there are C function pointers
+sonar.issue.ignore.multicriteria.s1.ruleKey=cpp:S5205
+sonar.issue.ignore.multicriteria.s1.resourceKey=src/smpi/**/*.cpp
+
+# MPI standard has long prototypes
+sonar.issue.ignore.multicriteria.s2.ruleKey=cpp:S107
+sonar.issue.ignore.multicriteria.s2.resourceKey=src/smpi/**/*.cpp
+
+# MPI standard uses void*
+sonar.issue.ignore.multicriteria.s3.ruleKey=cpp:S5008
+sonar.issue.ignore.multicriteria.s3.resourceKey=src/smpi/**/*.cpp
+
+# MPI standard uses const, sometimes const_cast is needed
+sonar.issue.ignore.multicriteria.s4.ruleKey=cpp:S859
+sonar.issue.ignore.multicriteria.s4.resourceKey=src/smpi/**/*.cpp
+
+# Pointer and reference parameters should be "const" if the corresponding object is not modified
+# AFAICT, the "constness" is required by the MPI standard and cannot be fixed.
+sonar.issue.ignore.multicriteria.s5.ruleKey=cpp:S995
+sonar.issue.ignore.multicriteria.s5.resourceKey=src/smpi/bindings/*.cpp
+