anchor.diff:  CA1308,NormalizeStringsToUppercase,System.Runtime,#N/A,Normalize strings to uppercase,Strings should be normalized to uppercase. A small group of characters cannot make a round trip when they are converted to lowercase.,Yes,465112,3117,0.006701612,845.7006816,Naming,,High,Yes,,"High noise, because it's perfectly valid to call ToLower; it's not always used for comparison.",None
   CA1053,StaticHolderTypesShouldNotHaveConstructors,Microsoft.ApiDesignGuidelines,#N/A,Static holder types should not have constructors,A public or nested public type declares only static members and has a public or protected default constructor. The constructor is unnecessary because calling static members does not require an instance of the type. The string overload should call the uniform resource identifier (URI) overload by using the string argument for safety and security.,Yes,1300683,3250,0.002498687,2446.953502,Design,,High,Ported,,,
   CA1400,PInvokeEntryPointsShouldExist,System.Runtime.InteropServices,#N/A,PInvoke entry points should exist,"No compile-time check is available to make sure that methods that are marked with DllImportAttribute are located in the referenced unmanaged DLL. If no function that has the specified name is in the library, or the arguments to the method do not match the function arguments, the common language runtime throws an exception.",Yes,19083,257,0.013467484,317.8505059,Interoperability,,Low,No,,Belongs in BinSkim? Easier to do in binary analysis.,
  -CA1058,TypesShouldNotExtendCertainBaseTypes,Desktop,#N/A,Types should not extend certain base types,An externally visible type extends certain base types. Use one of the alternatives.,Yes,134607,292,0.002169278,2364.412358,Design,Low,High,Porting (basoundr),,,None
  +CA1058,TypesShouldNotExtendCertainBaseTypes,Desktop,#N/A,Types should not extend certain base types,An externally visible type extends certain base types. Use one of the alternatives.,Yes,134607,292,0.002169278,2364.412358,Design,Low,High,Yes,,,None
   CA1402,AvoidOverloadsInComVisibleInterfaces,System.Runtime.InteropServices,#N/A,Avoid overloads in ComVisible interfaces,"When overloaded methods are exposed to COM clients, only the first method overload retains its name. Subsequent overloads are uniquely renamed by appending to the name an underscore character '_' and an integer that corresponds to the order of declaration of the overload.",Yes,36284,88,0.002425311,1880.053464,Interoperability,,Low,Yes,,,
   CA1403,AutoLayoutTypesShouldNotBeComVisible,System.Runtime.InteropServices,#N/A,Auto layout types should not be ComVisible,"Auto layout types are managed by the common language runtime. The layout of these types can change between versions of the .NET Framework, which will break COM clients that expect a specific layout. Note that if the StructLayoutAttribute attribute is not specified, the C#, Visual Basic, and C++ compilers specify the Sequential layout for value types.",Yes,46,0,0,,Interoperability,,Low,Yes,,,
   CA1404,CallGetLastErrorImmediatelyAfterPInvoke,System.Runtime.InteropServices,#N/A,Call GetLastError immediately after PInvoke,"A platform invoke method accesses unmanaged code and is defined by using the Declare keyword in Visual Basic or the System.Runtime.InteropServices.DllImportAttribute attribute. Generally, upon failure, unmanaged functions call the Win32 SetLastError function to set an error code that is associated with the failure. The caller of the failed function calls the Win32 GetLastError function to retrieve the error code and determine the cause of the failure. The error code is maintained on a per-thread basis and is overwritten by the next call to SetLastError. After a call to a failed platform invoke method, managed code can retrieve the error code by calling the GetLastWin32Error method. Because the error code can be overwritten by internal calls from other managed class library methods, the GetLastError or GetLastWin32Error method should be called immediately after the platform invoke method call.",Yes,32639,62,0.001899568,2376.19124,Interoperability,,Low,Yes,,,Control flow
  
positive.code: CA1801,ReviewUnusedParameters,Microsoft.Maintainability,#N/A,Review unused parameters,A method signature includes a parameter that is not used in the method body.,Yes,2443403,26581,0.01087868,587.20313,Performance,High,Low,Yes,,Don't fire if the parameter comes from an interface you're implementing or a virtual method you're overriding.,"None, can be based on: https://github.com/dotnet/roslyn/blob/master/src/Samples/CSharp/Analyzers/CSharpAnalyzers/CSharpAnalyzers/StatefulAnalyzers/CodeBlockStartedAnalyzer.cs"
  CA1802,UseLiteralsWhereAppropriate,System.Runtime,#N/A,Use literals where appropriate,"A field is declared static and read-only (Shared and ReadOnly in Visual Basic), and is initialized by using a value that is computable at compile time. Because the value that is assigned to the targeted field is computable at compile time, change the declaration to a const (Const in Visual Basic) field so that the value is computed at compile time instead of at run?time.",Yes,156024,573,0.003672512,1414.070674,Performance,,High,Yes,,Does it fire on publics? That has versioning implications. Consider only firing on symbols not visible outside assembly.,None
  CA1804,RemoveUnusedLocals,Microsoft.Maintainability,#N/A,Remove unused locals,Unused local variables and unnecessary assignments increase the size of an assembly and decrease performance.,Yes,2660659,16292,0.006123295,1049.269911,Performance,,High,Yes,,"See if the compiler warns of this. At the least, it should have a fixer.",None
  CA1805,DoNotInitializeUnnecessarily,System.Runtime,#N/A,Do not initialize unnecessarily,"The common language runtime initializes all fields to their default values before running the constructor. In most cases, initializing a field to its default value in a constructor is redundant, which degrades performance and adds to maintenance costs. One case where it is not redundant occurs when the constructor calls another constructor of the same class or a base class constructor and that constructor initializes the field to a non-default value. In this case, changing the value of the field back to its default value can be appropriate.",,900111,3408,0.0037862,1572.631276,Performance,,High,Yes (lgolding),,,
  CA1806,DoNotIgnoreMethodResults,Microsoft.Maintainability,#N/A,Do not ignore method results,A new object is created but never used; or a method that creates and returns a new string is called and the new string is never used; or a COM or P/Invoke method returns an HRESULT or error code that is never used.,Yes,845078,3707,0.004386577,1351.143806,Performance,,High,Yes,,"Consider having a whitelist, like immutable types (including string), and also look for the Pure attribute",None
  CA1809,AvoidExcessiveLocals,Microsoft.Maintainability,#N/A,Avoid excessive locals,"A common performance optimization is to store a value in a processor register instead of memory, which is referred to as """"enregistering the value"""". To increase the chance that all local variables are enregistered, limit the number of local variables to?64.",Yes,136521,362,0.002651607,1936.636922,Performance,,High,No,,"This was created at a time when after a certain number of locals, the JITTer would stop trying to allocate them to registers. This is hard to do in source analysis because it's hard to know how many locals the compiler allocates.",None
  CA1720,IdentifiersShouldNotContainTypeNames,Microsoft.ApiDesignGuidelines,#N/A,Avoid type names in parameters,"The name of a parameter in an externally visible member contains a data type name, or the name of an externally visible member contains a language-specific data type name.",Yes,904982,5153,0.005694036,1046.11914,Naming,,High,Ported,,,None
  
negative.code: RS0003,#N/A,System.Threading.Tasks,Roslyn.Diagnostics.Analyzers,Do not directly await a Task,#N/A,,,,,,Reliability,,,Ported,,,
  RS0018,#N/A,System.Threading.Tasks,Roslyn.Diagnostics.Analyzers,Do not create tasks without passing a TaskScheduler,"Do not create tasks unless you are using one of the overloads that takes a TaskScheduler. The default is to schedule on TaskScheduler.Current, which would lead to deadlocks. Either use TaskScheduler.Default to schedule on the thread pool, or explicitly pass TaskScheduler.Current to make your intentions clear.",,,,,,Reliability,,,Ported,,,
  RS0010,#N/A,XmlDocumentationComments,Roslyn.Diagnostics.Analyzers,Avoid using cref tags with a prefix,"Use of cref tags with prefixes should be avoided, since it prevents the compiler from verifying references and the IDE from updating references during refactorings. It is permissible to suppress this error at a single documentation site if the cref must use a prefix because the type being mentioned is not findable by the compiler. For example, if a cref is mentioning a special attribute in the full framework but you're in a file that compiles against the portable framework, or if you want to reference a type at higher layer of Roslyn, you should suppress the error. You should not suppress the error just because you want to take a shortcut and avoid using the full syntax.",,,,,,Documentation,,,Ported,,,
  RS1001,#N/A,Microsoft.CodeAnalysis,Microsoft.CodeAnalysis.Analyzers,Missing diagnostic analyzer attribute,"Non-abstract sub-types of DiagnosticAnalyzer should be marked with DiagnosticAnalyzerAttribute(s). The argument to this attribute(s), if any, determine the supported languages for the analyzer. Analyzer types without this attribute will be ignored by the analysis engine.",,,,,,AnalyzerCorrectness,,,Ported,,,
  RS1002,#N/A,Microsoft.CodeAnalysis,Microsoft.CodeAnalysis.Analyzers,Missing kind argument while registering an analyzer action,"You must specify at least one syntax/symbol kinds of interest while registering a syntax/symbol analyzer action. Otherwise, the registered action will be dead code and will never be invoked during analysis.",,,,,,AnalyzerCorrectness,,,Ported,,,
  RS1003,#N/A,Microsoft.CodeAnalysis,Microsoft.CodeAnalysis.Analyzers,Unsupported SymbolKind argument while registering a symbol analyzer action,#N/A,,,,,,AnalyzerCorrectness,,,Ported,,,
  RS1004,#N/A,Microsoft.CodeAnalysis,Microsoft.CodeAnalysis.Analyzers,Recommend adding language support to diagnostic analyzer,"Diagnostic analyzer is marked as supporting only one language, but the analyzer assembly doesn't seem to refer to any language specific CodeAnalysis assemblies, and so is likely to work for more than one language. Consider adding an additional language argument to DiagnosticAnalyzerAttribute.",,,,,,AnalyzerCorrectness,,,Ported,,,
  RS1005,#N/A,Microsoft.CodeAnalysis,Microsoft.CodeAnalysis.Analyzers,ReportDiagnostic invoked with an unsupported DiagnosticDescriptor,"ReportDiagnostic should only be invoked with supported DiagnosticDescriptors that are returned from DiagnosticAnalyzer.SupportedDiagnostics property. Otherwise, the reported diagnostic will be filtered out by the analysis engine.",,,,,,AnalyzerCorrectness,,,Ported,,,
  RS1006,#N/A,Microsoft.CodeAnalysis,Microsoft.CodeAnalysis.Analyzers,Invalid type argument for DiagnosticAnalyzer's Register method,"DiagnosticAnalyzer's language-specific Register methods, such as RegisterSyntaxNodeAction, RegisterCodeBlockStartAction and RegisterCodeBlockEndAction, expect a language-specific 'SyntaxKind' type argument for it's 'TLanguageKindEnumName' type parameter. Otherwise, the registered analyzer action can never be invoked during analysis.",,,,,,AnalyzerCorrectness,,,Ported,,,
  RS1007,#N/A,Microsoft.CodeAnalysis,Microsoft.CodeAnalysis.Analyzers,Provide localizable arguments to diagnostic descriptor constructor,"If your diagnostic analyzer and it's reported diagnostics need to be localizable, then the supported DiagnosticDescriptors used for constructing the diagnostics must also be localizable. If so, then localizable argument(s) must be provided for parameter 'title' (and optionally 'description') to the diagnostic descriptor constructor to ensure that the descriptor is localizable.",,,,,,AnalyzerLocalization,,,Ported,,,
  RS1008,#N/A,Microsoft.CodeAnalysis,Microsoft.CodeAnalysis.Analyzers,Avoid storing per-compilation data into the fields of a diagnostic analyzer,"Instance of a diagnostic analyzer might outlive the lifetime of compilation. Hence, storing per-compilation data, such as symbols, into the fields of a diagnostic analyzer might cause stale compilations to stay alive and cause memory leaks. Instead, you should store this data on a separate type instantiated in a compilation start action, registered using 'AnalysisContext.RegisterCompilationStartAction' API. An instance of this type will be created per-compilation and it won't outlive compilation's lifetime, hence avoiding memory leaks.",,,,,,AnalyzerPerformance,,,Ported,,,
  RS1009,#N/A,Microsoft.CodeAnalysis,Microsoft.CodeAnalysis.Analyzers,Only internal implementations of this interface are allowed,The author of this interface did not intend to have third party implementations of this interface and reserves the right to change it. Implementing this interface could therefore result in a source or binary compatibility issue with a future version of this interface.,,,,,,Compatibility,,,Ported,,,
  RS1010,#N/A,Microsoft.CodeAnalysis,Microsoft.CodeAnalysis.Analyzers,Create code actions should have a unique EquivalenceKey for FixAll occurrences support,"A CodeFixProvider that intends to support fix all occurrences must classify the registered code actions into equivalence classes by assigning it an explicit, non-null equivalence key which is unique across all registered code actions by this fixer. This enables the FixAllProvider to fix all diagnostics in the required scope by applying code actions from this fixer that are in the equivalence class of the trigger code action.",,,,,,Correctness,,,Ported,,,
  RS1011,#N/A,Microsoft.CodeAnalysis,Microsoft.CodeAnalysis.Analyzers,Use code actions that have a unique EquivalenceKey for FixAll occurrences support,"A CodeFixProvider that intends to support fix all occurrences must classify the registered code actions into equivalence classes by assigning it an explicit, non-null equivalence key which is unique across all registered code actions by this fixer. This enables the FixAllProvider to fix all diagnostics in the required scope by applying code actions from this fixer that are in the equivalence class of the trigger code action.",,,,,,Correctness,,,Ported,,,
  RS1012,#N/A,Microsoft.CodeAnalysis,Microsoft.CodeAnalysis.Analyzers,Start action has no registered actions,"An analyzer start action enables performing stateful analysis over a given code unit, such as a code block, compilation, etc. Careful design is necessary to achieve efficient analyzer execution without memory leaks. Use the following guidelines for writing such analyzers: 1. Define a new scope for the registered start action, possibly with a private nested type for analyzing each code unit. 2. If required, define and initialize state in the start action. 3. Register at least one non-end action that refers to this state in the start action. If no such action is necessary, consider replacing the start action with a non-start action. For example, a CodeBlockStartAction with no registered actions or only a registered CodeBlockEndAction should be replaced with a CodeBlockAction. 4. If required, register an end action to report diagnostics based on the final state.",,,,,,AnalyzerPerformance,,,Ported,,,
  RS1013,#N/A,Microsoft.CodeAnalysis,Microsoft.CodeAnalysis.Analyzers,Start action has no registered non-end actions,"An analyzer start action enables performing stateful analysis over a given code unit, such as a code block, compilation, etc. Careful design is necessary to achieve efficient analyzer execution without memory leaks. Use the following guidelines for writing such analyzers: 1. Define a new scope for the registered start action, possibly with a private nested type for analyzing each code unit. 2. If required, define and initialize state in the start action. 3. Register at least one non-end action that refers to this state in the start action. If no such action is necessary, consider replacing the start action with a non-start action. For example, a CodeBlockStartAction with no registered actions or only a registered CodeBlockEndAction should be replaced with a CodeBlockAction. 4. If required, register an end action to report diagnostics based on the final state.",,,,,,AnalyzerPerformance,,,Ported,,,
  