From 59d34ca688d3d1f40e36e0918631a71ba5c2e46d Mon Sep 17 00:00:00 2001 From: Archi Date: Fri, 19 Nov 2021 23:39:12 +0100 Subject: [PATCH] Add UnconditionalSuppressMessageAttribute --- Directory.Build.props | 2 +- .../UnconditionalSuppressMessageAttribute.cs | 110 ++++++++++++++++++ 2 files changed, 111 insertions(+), 1 deletion(-) create mode 100644 JustArchiNET.Madness/UnconditionalSuppressMessageAttribute.cs diff --git a/Directory.Build.props b/Directory.Build.props index dd4b477..ee2ff41 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -1,6 +1,6 @@ - 2.2.1 + 2.3.0 diff --git a/JustArchiNET.Madness/UnconditionalSuppressMessageAttribute.cs b/JustArchiNET.Madness/UnconditionalSuppressMessageAttribute.cs new file mode 100644 index 0000000..9c77005 --- /dev/null +++ b/JustArchiNET.Madness/UnconditionalSuppressMessageAttribute.cs @@ -0,0 +1,110 @@ +// _ __ __ +// ___ ___ ___ _ __ __| | __ _ | \/ | +// / __|/ __| / _ \| '_ \ / _` | / _` || |\/| | +// \__ \\__ \| __/| | | || (_| || (_| || | | | +// |___/|___/ \___||_| |_| \__,_| \__,_||_| |_| +// | +// Copyright 2021-2021 Ɓukasz "JustArchi" Domeradzki +// Contact: JustArchi@JustArchi.net +// | +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// | +// http://www.apache.org/licenses/LICENSE-2.0 +// | +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +using System; +using System.Diagnostics; +using System.Diagnostics.CodeAnalysis; +using JetBrains.Annotations; +using JustArchiNET.Madness.Helpers; + +namespace JustArchiNET.Madness; + +/// +/// +/// Suppresses reporting of a specific rule violation, allowing multiple suppressions on a +/// single code artifact. +/// +/// +/// is different than +/// in that it doesn't have a +/// . So it is always preserved in the compiled assembly. +/// +[AttributeUsage(AttributeTargets.All, Inherited = false, AllowMultiple = true)] +[MadnessType(EMadnessType.Implementation)] +[PublicAPI] +public sealed class UnconditionalSuppressMessageAttribute : Attribute { + /// + /// Gets the category identifying the classification of the attribute. + /// + /// + /// The property describes the tool or tool analysis category + /// for which a message suppression attribute applies. + /// + public string Category { get; } + + /// + /// Gets the identifier of the analysis tool rule to be suppressed. + /// + /// + /// Concatenated together, the and + /// properties form a unique check identifier. + /// + public string CheckId { get; } + + /// + /// Gets or sets the justification for suppressing the code analysis message. + /// + public string? Justification { get; set; } + + /// + /// Gets or sets an optional argument expanding on exclusion criteria. + /// + /// + /// The property is an optional argument that specifies additional + /// exclusion where the literal metadata target is not sufficiently precise. For example, + /// the cannot be applied within a method, + /// and it may be desirable to suppress a violation against a statement in the method that will + /// give a rule violation, but not against all statements in the method. + /// + public string? MessageId { get; set; } + + /// + /// Gets or sets the scope of the code that is relevant for the attribute. + /// + /// + /// The Scope property is an optional argument that specifies the metadata scope for which + /// the attribute is relevant. + /// + public string? Scope { get; set; } + + /// + /// Gets or sets a fully qualified path that represents the target of the attribute. + /// + /// + /// The property is an optional argument identifying the analysis target + /// of the attribute. An example value is "System.IO.Stream.ctor():System.Void". + /// Because it is fully qualified, it can be long, particularly for targets such as parameters. + /// The analysis tool user interface should be capable of automatically formatting the parameter. + /// + public string? Target { get; set; } + + /// + /// + /// Initializes a new instance of the + /// class, specifying the category of the tool and the identifier for an analysis rule. + /// + /// The category for the attribute. + /// The identifier of the analysis rule the attribute applies to. + public UnconditionalSuppressMessageAttribute(string category, string checkId) { + Category = category; + CheckId = checkId; + } +}