class Detector
- Detector
- Reference
- Object
Direct Known Subclasses
- Detector::Clojure::Compojure
- Detector::Clojure::Reitit
- Detector::Clojure::Ring
- Detector::Cpp::Crow
- Detector::Cpp::Drogon
- Detector::Crystal::Amber
- Detector::Crystal::Grip
- Detector::Crystal::Kemal
- Detector::Crystal::Lucky
- Detector::Crystal::Marten
- Detector::CSharp::AspNetCoreMvc
- Detector::CSharp::AspNetMvc
- Detector::CSharp::Carter
- Detector::CSharp::FastEndpoints
- Detector::Dart::DartFrog
- Detector::Dart::Serverpod
- Detector::Dart::Shelf
- Detector::Elixir::Bandit
- Detector::Elixir::Phoenix
- Detector::Elixir::Plug
- Detector::Fsharp::Giraffe
- Detector::Go::Beego
- Detector::Go::Chi
- Detector::Go::ConnectRpc
- Detector::Go::Echo
- Detector::Go::Fasthttp
- Detector::Go::Fiber
- Detector::Go::Gf
- Detector::Go::Gin
- Detector::Go::Goyave
- Detector::Go::GoZero
- Detector::Go::Hertz
- Detector::Go::Httprouter
- Detector::Go::Huma
- Detector::Go::Iris
- Detector::Go::Mux
- Detector::Go::Pocketbase
- Detector::Groovy::Grails
- Detector::Haskell::Scotty
- Detector::Haskell::Servant
- Detector::Haskell::Yesod
- Detector::Java::Armeria
- Detector::Java::Dropwizard
- Detector::Java::Javalin
- Detector::Java::JaxRs
- Detector::Java::Jsp
- Detector::Java::Micronaut
- Detector::Java::Play
- Detector::Java::Quarkus
- Detector::Java::Spark
- Detector::Java::Spring
- Detector::Java::Vertx
- Detector::Javascript::Adonisjs
- Detector::Javascript::Apollo
- Detector::Javascript::Astro
- Detector::Javascript::Elysia
- Detector::Javascript::Express
- Detector::Javascript::Fastify
- Detector::Javascript::Fresh
- Detector::Javascript::GraphqlYoga
- Detector::Javascript::Hapi
- Detector::Javascript::Hono
- Detector::Javascript::Koa
- Detector::Javascript::Nestjs
- Detector::Javascript::Nextjs
- Detector::Javascript::Nitro
- Detector::Javascript::Nuxtjs
- Detector::Javascript::Remix
- Detector::Javascript::Restify
- Detector::Javascript::Sveltekit
- Detector::Kotlin::Http4k
- Detector::Kotlin::Ktor
- Detector::Kotlin::Spring
- Detector::Lua::Lapis
- Detector::Perl::Mojolicious
- Detector::Php::CakePHP
- Detector::Php::CodeIgniter
- Detector::Php::Hyperf
- Detector::Php::Laravel
- Detector::Php::Lumen
- Detector::Php::Php
- Detector::Php::Slim
- Detector::Php::Symfony
- Detector::Php::Yii
- Detector::Python::Aiohttp
- Detector::Python::Bottle
- Detector::Python::Django
- Detector::Python::Falcon
- Detector::Python::FastAPI
- Detector::Python::Flask
- Detector::Python::Litestar
- Detector::Python::Pyramid
- Detector::Python::Quart
- Detector::Python::Robyn
- Detector::Python::Sanic
- Detector::Python::Starlette
- Detector::Python::Tornado
- Detector::Ruby::Grape
- Detector::Ruby::Hanami
- Detector::Ruby::Rails
- Detector::Ruby::Roda
- Detector::Ruby::Sinatra
- Detector::Rust::ActixWeb
- Detector::Rust::Axum
- Detector::Rust::Gotham
- Detector::Rust::Loco
- Detector::Rust::Poem
- Detector::Rust::Rocket
- Detector::Rust::Rwf
- Detector::Rust::Salvo
- Detector::Rust::Tide
- Detector::Rust::Warp
- Detector::Scala::Akka
- Detector::Scala::Http4s
- Detector::Scala::Play
- Detector::Scala::Scalatra
- Detector::Scala::Tapir
- Detector::Scala::ZioHttp
- Detector::Specification::ApacheHttpd
- Detector::Specification::Apisix
- Detector::Specification::AsyncApi
- Detector::Specification::AwsCdk
- Detector::Specification::AwsCloudformation
- Detector::Specification::AzureFunctions
- Detector::Specification::Bruno
- Detector::Specification::Burp
- Detector::Specification::Caddy
- Detector::Specification::Caido
- Detector::Specification::CloudflareWrangler
- Detector::Specification::Envoy
- Detector::Specification::GraphqlSdl
- Detector::Specification::Grpc
- Detector::Specification::Har
- Detector::Specification::Insomnia
- Detector::Specification::IstioVirtualservice
- Detector::Specification::K8sGatewayApi
- Detector::Specification::K8sIngress
- Detector::Specification::Kong
- Detector::Specification::Mitmproxy
- Detector::Specification::Netlify
- Detector::Specification::Nginx
- Detector::Specification::Oas2
- Detector::Specification::Oas3
- Detector::Specification::OData
- Detector::Specification::Postman
- Detector::Specification::RAML
- Detector::Specification::ServerlessFramework
- Detector::Specification::Smithy
- Detector::Specification::Traefik
- Detector::Specification::TypeSpec
- Detector::Specification::Vercel
- Detector::Specification::WSDL
- Detector::Specification::ZapSitesTree
- Detector::Swift::Hummingbird
- Detector::Swift::Kitura
- Detector::Swift::Vapor
- Detector::Typescript::Nestjs
- Detector::Typescript::TanstackRouter
- Detector::Typescript::TRPC
Defined in:
models/detector.crConstructors
Macro Summary
Instance Method Summary
-
#applicable?(filename : String) : Bool
Cheap filename-only filter the detector pass uses to skip
#detecton files the detector cannot possibly match. - #detect(filename : String, file_contents : String) : Bool
-
#idempotent? : Bool
Whether the detector can be skipped on subsequent files once it has matched.
- #logger : NoirLogger
- #name : String
Constructor Detail
Macro Detail
Instance Method Detail
Cheap filename-only filter the detector pass uses to skip
#detect on files the detector cannot possibly match. The
default true preserves prior behavior (every detector runs on
every file). Override with the same predicate the body of
#detect starts with — e.g., filename.ends_with?(".py") for a
Python framework detector — so the detector loop avoids the
#detect dispatch on files outside the detector's language.
On large codebases (saleor's 4255 .py files) this lifts ~100
virtual #detect calls per file out of the hot loop because
most detectors' inner first-line is exactly this kind of cheap
filename check.
Whether the detector can be skipped on subsequent files once it
has matched. Defaults to true (idempotent — the detector only
signals tech presence). Detectors that perform side effects in
#detect (e.g., the C# ASP.NET ones populate the CodeLocator
with route-config paths, the OAS/RAML detectors register spec
paths) must override to false so the detector pass keeps
invoking them on every file.