Skip to content

Analyzers and Code Fixes ​

Analyzers let teams move coding guidance out of documents and into the compiler pipeline. Instead of hoping every developer remembers a rule, an analyzer can detect the issue automatically and report a diagnostic in the editor or build output.

Original Microsoft Learn reference: Tutorial: Write your first analyzer and code fix.

The basic workflow ​

mermaid
flowchart LR
    A["Code pattern"] --> B["Analyzer detects issue"]
    B --> C["Diagnostic shown to developer"]
    C --> D["Optional code fix repairs it"]

This flow is what makes analyzers practical rather than theoretical. The developer sees the issue where the code is being written.

What analyzers do ​

An analyzer inspects code and reports diagnostics when it finds a pattern worth flagging. That pattern might be:

  • a correctness issue
  • a performance risk
  • an API misuse
  • a style rule
  • a library-specific recommendation

Analyzers are valuable because they turn best practices into consistent feedback instead of depending only on memory or code review luck.

What code fixes do ​

A code fix is the guided repair for a diagnostic. It turns a warning or suggestion into an actionable refactoring the developer can apply directly.

This pairing matters because diagnostics without remediation can become noisy. A good code fix reduces friction and helps teams adopt rules instead of ignoring them.

Severity and intent ​

Not every rule should be an error. Some diagnostics are suggestions or informational hints. Choosing severity well is part of good engineering judgment.

If every rule is treated like a build-breaking failure, developers often stop trusting the tool. If every rule is too weak, important problems are ignored.

Practical examples ​

Common analyzer scenarios include:

  • discouraging synchronous blocking in async code
  • requiring StringComparison in string comparisons
  • preventing obsolete API usage
  • enforcing naming or design conventions

What makes a good diagnostic ​

A useful diagnostic usually has three qualities:

  • it identifies a real problem or meaningful improvement
  • it explains the issue clearly
  • it points the developer toward a safe next step

That means analyzer design is not only about detection logic. It is also about the clarity of the engineering feedback.

When a code fix is especially valuable ​

Code fixes are strongest when:

  • the repair is mechanical and safe
  • the correct intent is reasonably clear
  • many developers would otherwise make the same repetitive fix manually

Summary ​

  • analyzers detect patterns and report diagnostics
  • code fixes provide guided, often automated repairs
  • severity should match the real engineering importance of the rule
  • effective analyzer tooling depends on both accurate detection and useful messaging
  • the goal is not noise, but consistent and actionable guidance

Practice ​

Think of one mistake your team could detect automatically. Describe what the diagnostic message should say and whether the rule should be a suggestion, warning, or error.

As a second exercise, explain why a rule with a poor diagnostic message can still be frustrating even if its detection logic is technically correct.

Built with VitePress and published on GitHub Pages.