class Analyzer::Zig::Http

Overview

Zig's standard std.http.Server has no routing DSL. Applications usually branch on request.head.target and request.head.method after receiveHead(), then call request.respond(...) or a handler function.

Defined in:

analyzer/analyzers/zig/http.cr

Constant Summary

HEAD_TARGET_RE = /\.head\.target/
IF_RE = /(?:^|[^A-Za-z0-9_])if\s*\(/
METHOD_EQUALS_RE = /([A-Za-z_]\w*(?:\s*\.\s*[A-Za-z_]\w*)*)\s*==\s*\.([A-Za-z_]\w*)/
METHOD_REVERSED_RE = /\.([A-Za-z_]\w*)\s*==\s*([A-Za-z_]\w*(?:\s*\.\s*[A-Za-z_]\w*)*)/
PATH_EQL_RE = /std\s*\.\s*mem\s*\.\s*eql\s*\(\s*u8\s*,\s*"((?:[^"\\]|\\.)*)"\s*,\s*([A-Za-z_]\w*(?:\s*\.\s*[A-Za-z_]\w*)*)\s*\)/
PATH_EQUALS_RE = /"((?:[^"\\]|\\.)*)"\s*==\s*([A-Za-z_]\w*(?:\s*\.\s*[A-Za-z_]\w*)*)/
RECEIVE_HEAD_RE = /\.receiveHead\(/
RESPOND_RE = /\.respond\(/
STD_HTTP_SERVER_RE = /std\.http\.Server/

Whole-file detection gate, evaluated once per .zig file. String#matches? (PCRE2 JIT) is faster than the naive String#includes? char scan, and STD_IMPORT_RE folds the two-way OR into a single scan. Each matcher is equivalent to the literal substring test it replaces.

STD_IMPORT_RE = Regex.union("@import(\"std\")", "std.http")
SWITCH_PRONG_RE = /\.([A-Za-z_]\w*)\s*=>\s*\{/
SWITCH_RE = /switch\s*\(\s*([A-Za-z_]\w*(?:\s*\.\s*[A-Za-z_]\w*)*)\s*\)\s*\{/
TARGET_ASSIGN_RE = /(?:const|var)\s+([A-Za-z_]\w*)\s*(?::\s*[^=;]+)?=\s*([A-Za-z_]\w*(?:\s*\.\s*[A-Za-z_]\w*)*)\s*;/
TARGET_EQL_RE = /std\s*\.\s*mem\s*\.\s*eql\s*\(\s*u8\s*,\s*([A-Za-z_]\w*(?:\s*\.\s*[A-Za-z_]\w*)*)\s*,\s*"((?:[^"\\]|\\.)*)"\s*\)/
TARGET_EQUALS_RE = /([A-Za-z_]\w*(?:\s*\.\s*[A-Za-z_]\w*)*)\s*==\s*"((?:[^"\\]|\\.)*)"/
TARGET_PRONG_RE = /"((?:[^"\\]|\\.)*)"\s*=>/

Instance Method Summary

Instance methods inherited from class Analyzer

analyze analyze, base_path : String base_path, base_paths : Array(String) base_paths, callees_needed? : Bool callees_needed?, http_header_name(name : String) : String | Nil http_header_name, line_number_for_index(content : String, char_index : Int32) : Int32 line_number_for_index, logger : NoirLogger logger, parallel_analyze(files : Array(String), &block : String -> Nil) parallel_analyze, read_file_content(path : String) : String read_file_content, result : Array(Endpoint) result, unique_params(params : Array(Param)) : Array(Param) unique_params, url : String url, web_root_path(path : String, markers : Array(String)) : String web_root_path

Constructor methods inherited from class Analyzer

new(options : Hash(String, YAML::Any)) new

Instance methods inherited from module FileHelper

all_files : Array(String) all_files, get_files_by_extension(extension : String) : Array(String) get_files_by_extension, get_files_by_extensions(extensions : Array(String)) : Array(String) get_files_by_extensions, get_files_by_prefix(prefix : String) : Array(String) get_files_by_prefix, get_files_by_prefix_and_extension(prefix : String, extension : String) : Array(String) get_files_by_prefix_and_extension, get_public_dir_files(base_path : String, folder : String) : Array(String) get_public_dir_files, get_public_files(base_path : String, anchors : Array(String) = ["shard.yml", "Gemfile"]) : Array(String) get_public_files

Instance Method Detail

def analyze #

[View source]