class

Analyzer::Lua::Lapis

Inherits Analyzer < FileHelper < Reference < Object

Lapis is a Lua/MoonScript web framework on top of OpenResty. Routes can be expressed in several styles:

  • Method-specific calls — app:get("/path", handler), app:post, app:put, app:delete, app:patch, app:head, app:options.
  • Generic app:match(path, handler) and the named app:match("name", "/path", handler) form, both of which dispatch on any HTTP method.
  • Application-table style: ["/path"] = "handler_name" or ["/path"] = function(self) ... end.
  • MoonScript class actions: "/path": => and the named form [name: "/path"]: =>.

Path parameters use :name and splats use *name, which already match noir's URL convention so they are surfaced verbatim. Lapis route patterns additionally carry Lua-pattern constraints (:id[%d], :slug[%w]) and optional groups ((/page/:page)), neither of which belong in a concrete URL — both are normalised away. Sub-apps mounted with app:include(...) carry an app.path = "/prefix" that every route inherits, so the prefix is detected per file and prepended to the routes bound on that app.

Constants

APP_PATH_RE = /(?:^|[^A-Za-z0-9_.])([A-Za-z_]\w*)\.path\s*=\s*(['"])([^'"]*)\2/
APP_VAR_RE = /(?:^|[^A-Za-z0-9_])(?:local\s+)?([A-Za-z_]\w*)\s*=\s*lapis\.Application(?:\b|:extend|\s*\()/
FALLBACK_METHODS = ["GET", "POST", "PUT", "DELETE", "PATCH"]
HTTP_METHODS = ["GET", "POST", "PUT", "DELETE", "PATCH", "HEAD", "OPTIONS"] of ::String
MOON_ACTION_MARKER_RE = Regex.union("=>", "respond_to")

moonscript_action?'s two OR-ed String#includes? scans, folded into one precompiled union so the boolean gate costs a single PCRE2 match instead of up to two naive substring scans.

MOON_PATH_RE = /@path\s*:\s*(['"])([^'"]*)\1/

Class methods

tech_name
Source

Instance methods

analyze
Source
tech

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.

Source