Analyzer::Perl::Mojolicious
Inherits Analyzer::Perl::PerlEngine < FileScanEngine < Analyzer < FileHelper < Reference < Object
Constants
Mojolicious angle-bracket placeholders: <id>, <:id>, <#id>,
<*id>, and the type-constrained <id:num> / <id:[^/]+>. Normalize
them to the sigil form (:id, #id, *id) so URLs read consistently
and the path-param scanner picks them up.
A receiver chain that is already building a route: $r->under('/v2')->get(…).
Mojolicious names its route object $r (or $routes/$route/$router)
by universal convention, including in helper subs that receive it as an
argument (sub _api ($r) { $r->get('/x') }) where no assignment exists
for build_prefix_maps to record. Accepted on top of the assignments it
does see.
Leaf path may be empty ($r->get('')) — a Mojolicious idiom for a
route that is its receiver's prefix (e.g. $auth->get('')), so the
capture is [^'"]* rather than +.
A quoted argument does NOT make the call a route: $cache->get("ttl")
and $self->stash->get("current_user") are ordinary data accessors and
are the common shape, not an exotic one. Every ->verb(...) match is
therefore additionally gated on route_receiver?.
The file has to be Mojolicious before any of its ->get(…) calls can be
a Mojolicious route. Mojolicious covers use Mojolicious,
Mojolicious::Lite, Mojo::Base 'Mojolicious…', and the
Plugin/Controller base classes; Mojo::Base covers a controller that
subclasses another one of the app's controllers.
Crystal recompiles an interpolated regex literal on every evaluation
(a full PCRE2 JIT compile). Only controller and action are looked
up, so precompile their matchers once at load time.
A prefix-building segment (->under/->any/->route) whose argument
is either a quoted literal or a $var resolved against path_vars
(a scalar holding a path string, e.g. my $p = '/tests/<id:num>').
A receiver chain that names the router itself: $self->routes->get(…),
$app->routes->any(…), shift->routes->under(…).
The bare $var sitting immediately left of the call, with nothing
between it and the ->: the $cache of $cache->get("ttl").
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.