1. 18 6月, 2020 1 次提交
  2. 17 6月, 2020 1 次提交
  3. 08 6月, 2020 1 次提交
  4. 03 6月, 2020 1 次提交
  5. 28 5月, 2020 1 次提交
  6. 23 5月, 2020 1 次提交
    • F
      Changes from feedback: · 09b64623
      Fredric Silberberg 提交于
      * Significantly expanded testing.
      * Reworded exception messages.
      * Simplified handling of getting semantic information in the CSharpSemanticModel.
      * Added comments as appropriate.
      * Added linux support for running the IOperation test hook from cli.
      09b64623
  7. 21 5月, 2020 1 次提交
  8. 15 5月, 2020 1 次提交
  9. 23 4月, 2020 1 次提交
  10. 22 4月, 2020 1 次提交
    • M
      Skip execution of analyzers reporting info and hidden diagnostics during build · ffa7ab4e
      Manish Vasani 提交于
      Closes #42166
      
      This PR is aimed towards improving the build performance in presence of analyzers that report Info (Suggestion) and/or Hidden diagnostics. Hidden diagnostics are never reported in build and Info diagnostics are only officially supported in presence of /errorlog, we will retain this support. The command line compilers do report Info diagnostics on command line today, but these are filtered away by MSBuild and are effectively never visible to users. This makes this a non-breaking scenario in .NET core build environment and an extreme corner case breaking change on desktop (clients relying on info diagnostics from raw csc/vbc output). Note that such clients would still have a workaround to get the prior behavior by enabling /errorlog.
      
      This optimization should improve build performance when users install the new IDE CodeStyle NuGet package (mostly hidden diagnostics) and the upcoming .NET5 analyzers package (has large number of info/hidden diagnostics).
      ffa7ab4e
  11. 18 3月, 2020 2 次提交
  12. 14 3月, 2020 1 次提交
  13. 11 3月, 2020 1 次提交
  14. 10 3月, 2020 1 次提交
  15. 03 3月, 2020 1 次提交
  16. 15 2月, 2020 1 次提交
  17. 08 2月, 2020 1 次提交
  18. 06 2月, 2020 1 次提交
  19. 23 1月, 2020 1 次提交
  20. 09 1月, 2020 1 次提交
  21. 04 1月, 2020 1 次提交
  22. 02 1月, 2020 3 次提交
  23. 02 11月, 2019 1 次提交
  24. 15 10月, 2019 1 次提交
  25. 24 8月, 2019 1 次提交
  26. 20 8月, 2019 1 次提交
  27. 30 7月, 2019 1 次提交
  28. 26 7月, 2019 1 次提交
  29. 16 7月, 2019 1 次提交
  30. 12 7月, 2019 1 次提交
  31. 21 6月, 2019 1 次提交
  32. 20 6月, 2019 1 次提交
  33. 19 6月, 2019 1 次提交
  34. 07 6月, 2019 1 次提交
  35. 05 6月, 2019 1 次提交
  36. 31 5月, 2019 1 次提交
    • M
      Add new analyzer API (DiagnosticSuppressor) to allow programmatic suppression... · f2f7a069
      Manish Vasani 提交于
      Add new analyzer API (DiagnosticSuppressor) to allow programmatic suppression of analyzer and/or compiler non-error diagnostics
      
      Fixes #20242 and #30172
      
      Detailed design proposal [here](https://gist.github.com/mavasani/fcac17a9581b5c54cef8a689eeec954a).
      
      Added public APIs with documentation comments:
      ```cs
      namespace Microsoft.CodeAnalysis.Diagnostics
      {
          /// <summary>
          /// The base type for diagnostic suppressors that can programmatically suppress analyzer and/or compiler non-error diagnostics.
          /// </summary>
          public abstract class DiagnosticSuppressor : DiagnosticAnalyzer
          {
              // Disallow suppressors from reporting diagnostics or registering analysis actions.
              public sealed override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics => ImmutableArray<DiagnosticDescriptor>.Empty;
      
              public sealed override void Initialize(AnalysisContext context) { }
      
              /// <summary>
              /// Returns a set of descriptors for the suppressions that this suppressor is capable of producing.
              /// </summary>
              public abstract ImmutableArray<SuppressionDescriptor> SupportedSuppressions { get; }
      
              /// <summary>
              /// Suppress analyzer and/or compiler non-error diagnostics reported for the compilation.
              /// This may be a subset of the full set of reported diagnostics, as an optimization for
              /// supporting incremental and partial analysis scenarios.
              /// A diagnostic is considered suppressible by a DiagnosticSuppressor if *all* of the following conditions are met:
              ///     1. Diagnostic is not already suppressed in source via pragma/suppress message attribute.
              ///     2. Diagnostic's <see cref="Diagnostic.DefaultSeverity"/> is not <see cref="DiagnosticSeverity.Error"/>.
              ///     3. Diagnostic is not tagged with <see cref="WellKnownDiagnosticTags.NotConfigurable"/> custom tag.
              /// </summary>
              public abstract void ReportSuppressions(SuppressionAnalysisContext context);
          }
      
          /// <summary>
          /// Provides a description about a programmatic suppression of a <see cref="Diagnostic"/> by a <see cref="DiagnosticSuppressor"/>.
          /// </summary>
          public sealed class SuppressionDescriptor : IEquatable<SuppressionDescriptor>
          {
              /// <summary>
              /// An unique identifier for the suppression.
              /// </summary>
              public string Id { get; }
      
              /// <summary>
              /// Identifier of the suppressed diagnostic, i.e. <see cref="Diagnostic.Id"/>.
              /// </summary>
              public string SuppressedDiagnosticId { get; }
      
              /// <summary>
              /// A localizable description about the suppression.
              /// </summary>
              public LocalizableString Description { get; }
          }
      
          /// <summary>
          /// Context for suppressing analyzer and/or compiler non-error diagnostics reported for the compilation.
          /// </summary>
          public struct SuppressionAnalysisContext
          {
              /// <summary>
              /// Suppressible analyzer and/or compiler non-error diagnostics reported for the compilation.
              /// This may be a subset of the full set of reported diagnostics, as an optimization for
              /// supporting incremental and partial analysis scenarios.
              /// A diagnostic is considered suppressible by a DiagnosticSuppressor if *all* of the following conditions are met:
              ///     1. Diagnostic is not already suppressed in source via pragma/suppress message attribute.
              ///     2. Diagnostic's <see cref="Diagnostic.DefaultSeverity"/> is not <see cref="DiagnosticSeverity.Error"/>.
              ///     3. Diagnostic is not tagged with <see cref="WellKnownDiagnosticTags.NotConfigurable"/> custom tag.
              /// </summary>
              public ImmutableArray<Diagnostic> ReportedDiagnostics { get; }
      
              /// <summary>
              /// Report a <see cref="Suppression"/> for a reported diagnostic.
              /// </summary>
              public void ReportSuppression(Suppression suppression);
      
              /// <summary>
              /// Gets a <see cref="SemanticModel"/> for the given <see cref="SyntaxTree"/>, which is shared across all analyzers.
              /// </summary>
              public SemanticModel GetSemanticModel(SyntaxTree syntaxTree);
      
              /// <summary>
              /// <see cref="CodeAnalysis.Compilation"/> for the context.
              /// </summary>
              public Compilation Compilation { get; }
      
              /// <summary>
              /// Options specified for the analysis.
              /// </summary>
              public AnalyzerOptions Options { get; }
      
              /// <summary>
              /// Token to check for requested cancellation of the analysis.
              /// </summary>
              public CancellationToken CancellationToken { get; }
          }
      
          /// <summary>
          /// Programmatic suppression of a <see cref="Diagnostic"/> by a <see cref="DiagnosticSuppressor"/>.
          /// </summary>
          public struct Suppression
          {
              /// <summary>
              /// Creates a suppression of a <see cref="Diagnostic"/> with the given <see cref="SuppressionDescriptor"/>.
              /// </summary>
              /// <param name="descriptor">
              /// Descriptor for the suppression, which must be from <see cref="DiagnosticSuppressor.SupportedSuppressions"/>
              /// for the <see cref="DiagnosticSuppressor"/> creating this suppression.
              /// </param>
              /// <param name="suppressedDiagnostic">
              /// <see cref="Diagnostic"/> to be suppressed, which must be from <see cref="SuppressionAnalysisContext.ReportedDiagnostics"/>
              /// for the suppression context in which this suppression is being created.</param>
              public static Suppression Create(SuppressionDescriptor descriptor, Diagnostic suppressedDiagnostic);
      
              /// <summary>
              /// Descriptor for this suppression.
              /// </summary>
              public SuppressionDescriptor Descriptor { get; }
      
              /// <summary>
              /// Diagnostic suppressed by this suppression.
              /// </summary>
              public Diagnostic SuppressedDiagnostic { get; }
          }
      }
      ```
      
      For batch compilation, suppressors always run after all the analyzer diagnostics have been computed.
      For IDE partial/incremental analysis scenario, we may run the suppressors with partial diagnostics.
      Suppressed diagnostics from diagnostic suppressors are equivalent to source suppressed diagnostics: they show up in the error list with "Suppression State" column as "Suppressed" and are also output to errorlog as suppressed diagnostics.
      f2f7a069
  37. 17 4月, 2019 1 次提交