Emit Class definition for an Elixir defmodule node. Returns do_block or null.
| 4393 | |
| 4394 | // Emit Class definition for an Elixir defmodule node. Returns do_block or null. |
| 4395 | static TSNode emit_elixir_module_class(CBMExtractCtx *ctx, TSNode cur) { |
| 4396 | CBMArena *a = ctx->arena; |
| 4397 | TSNode null_node = {0}; |
| 4398 | TSNode args = elixir_call_args(cur); |
| 4399 | if (ts_node_is_null(args)) { |
| 4400 | return null_node; |
| 4401 | } |
| 4402 | TSNode name_node = ts_node_child(args, 0); |
| 4403 | if (ts_node_is_null(name_node)) { |
| 4404 | return null_node; |
| 4405 | } |
| 4406 | char *name = cbm_node_text(a, name_node, ctx->source); |
| 4407 | if (!name || !name[0]) { |
| 4408 | return null_node; |
| 4409 | } |
| 4410 | CBMDefinition def; |
| 4411 | memset(&def, 0, sizeof(def)); |
| 4412 | def.name = name; |
| 4413 | def.qualified_name = cbm_fqn_compute(a, ctx->project, ctx->rel_path, name); |
| 4414 | def.label = "Class"; |
| 4415 | def.file_path = ctx->rel_path; |
| 4416 | def.start_line = ts_node_start_point(cur).row + TS_LINE_OFFSET; |
| 4417 | def.end_line = ts_node_end_point(cur).row + TS_LINE_OFFSET; |
| 4418 | def.is_exported = true; |
| 4419 | cbm_defs_push(&ctx->result->defs, a, def); |
| 4420 | return cbm_find_child_by_kind(cur, "do_block"); |
| 4421 | } |
| 4422 | |
| 4423 | // Process Elixir call nodes iteratively — handles defmodule/def/defp/defmacro |
| 4424 | // without recursion between extract_elixir_call ↔ extract_elixir_module_def. |
no test coverage detected