Analyzer::CSharp::Carter
Inherits Analyzer::CSharp::MinimalApiSupport < Analyzer::CSharp::Common < Analyzer < FileHelper < Reference < Object
Extracts endpoints from Carter (https://github.com/CarterCommunity/Carter)
modules. A Carter module is a class that either implements
ICarterModule or derives from the CarterModule base class, and
registers minimal-API routes inside AddRoutes(IEndpointRouteBuilder).
CarterModule additionally takes a base path through its constructor
(public DirectorsModule() : base("/directors")), which every route in
that module hangs off. Modules using that base were previously invisible
to this analyzer (it required the literal string ICarterModule), so they
fell through to cs_aspnet_core_minimal_api, which emitted their routes
without the base path — GET / and GET /qs instead of GET /directors
and GET /directors/qs.
Route parsing itself is the same job the minimal-API analyzer does, so it
runs on the shared MinimalApiSupport helpers with the module base path
passed in as a prefix. That also brings delegate parameter binding,
MapGroup composition, method-group handlers and generic
MapPut<T>("/x", …) registrations to Carter, none of which the previous
hand-rolled copy supported.
Extraction is scoped to each module's AddRoutes body so MapGroup
prefixes and base paths don't leak between modules declared in one file.
Constants
public DirectorsModule() : base("/directors") — Carter's constructor
base path. base() with no literal leaves the prefix empty.
class X : ICarterModule / class X : CarterModule / with generics or
extra interfaces in the base list.
Class methods
Instance methods
Instance-side view of the same declaration. The per-file rescues live on
this base class, which has no way to name the analyzer that is running
inside them, so a skipped file could not be attributed to a tech.
Deriving it from analyzer_for keeps the name written exactly once.