class
Analyzer::Go::Chi
- Analyzer::Go::Chi
- Analyzer
- Reference
- Object
Defined in:
analyzer/analyzers/go/chi.crConstant Summary
-
EMPTY_STRING_VALUES =
Hash(String, String).new -
IMPORT_MARKER =
"github.com/go-chi/chi" -
Go enforces per-file imports, so any file using chi's router types must mention the package path. Filter on this marker to avoid touching the bulk of files in projects whose detection matched on a single dummy/fixture file (the chi extractor is loose enough that another framework's verb calls would otherwise surface as chi routes).
-
IMPORT_MARKER_RE =
Regex.union(IMPORT_MARKER) -
Whole-file gates, run on every
.goin the tree. -
MAX_MOUNT_DEPTH =
8 -
Nested
Mountcalls inside a mounted router are followed to this depth; deeper trees are almost certainly a cycle through a symbol the resolver could not tell apart. -
MOUNT_CALL_RE =
/\.Mount\(/
Class Method Summary
Instance Method Summary
- #analyze
-
#expand_mounted_router(dir : String, func_name : String, recv_type : String | Nil, package_files : Hash(String, Array(String)), file_contents_cache : Hash(String, String), file_lines_cache : Hash(String, Array(String)), ancestors : Array(String)) : Array(Endpoint)
Extracts endpoints from a router function definition declared in the Go package at
dir, searching every.gofile there. - #get_param(line : String, pattern : String) : Param
-
#tech : String
Instance-side view of the same declaration.
Instance methods inherited from class Analyzer
analyze
analyze,
base_path : String
base_path,
base_paths : Array(String)
base_paths,
base_relative_path(path : String) : String
base_relative_path,
callees_needed? : Bool
callees_needed?,
content_matches?(content : String, markers : Regex) : Bool
content_matches?,
http_header_name(name : String) : String | Nil
http_header_name,
line_at_byte_offset(content : String, byte_offset : Int32) : Int32
line_at_byte_offset,
line_at_offset(content : String, offset : Int32) : Int32
line_at_offset,
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,
tech : String
tech,
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
Macros inherited from class Analyzer
analyzer_for(tech)
analyzer_for
Instance methods inherited from module FileHelper
all_files : Array(String)
all_files,
get_files_by_basename(basename : String) : Array(String)
get_files_by_basename,
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_files_by_relative_path(relative_path : String, root : String = "") : Array(String)
get_files_by_relative_path,
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,
walked_path(expanded : String) : String
walked_path
Class Method Detail
Instance Method Detail
Extracts endpoints from a router function definition declared in
the Go package at dir, searching every .go file there.
Uses the tree-sitter walker, scoped down to just the target
function's declaration so the returned routes are relative to the
function body — the caller slaps on the Mount prefix. When
recv_type is given, the target is a method (func (r Type) Name())
and only the declaration on that receiver type is matched.
.Mount(...) calls inside the body are expanded recursively with
their own prefix, so apiRouter() mounting usersRouter() at
/users yields /users/... relative to apiRouter's root. The
ancestors list guards against a router that (transitively)
mounts itself.
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.