Emit Class definition for an Elixir defmodule node. Returns do_block or null.
| 5022 | |
| 5023 | // Emit Class definition for an Elixir defmodule node. Returns do_block or null. |
| 5024 | static TSNode emit_elixir_module_class(CBMExtractCtx *ctx, TSNode cur) { |
| 5025 | CBMArena *a = ctx->arena; |
| 5026 | TSNode null_node = {0}; |
| 5027 | TSNode args = elixir_call_args(cur); |
| 5028 | if (ts_node_is_null(args)) { |
| 5029 | return null_node; |
| 5030 | } |
| 5031 | TSNode name_node = ts_node_child(args, 0); |
| 5032 | if (ts_node_is_null(name_node)) { |
| 5033 | return null_node; |
| 5034 | } |
| 5035 | char *name = cbm_node_text(a, name_node, ctx->source); |
| 5036 | if (!name || !name[0]) { |
| 5037 | return null_node; |
| 5038 | } |
| 5039 | CBMDefinition def; |
| 5040 | memset(&def, 0, sizeof(def)); |
| 5041 | def.name = name; |
| 5042 | def.qualified_name = cbm_fqn_compute(a, ctx->project, ctx->rel_path, name); |
| 5043 | def.label = "Class"; |
| 5044 | def.file_path = ctx->rel_path; |
| 5045 | def.start_line = ts_node_start_point(cur).row + TS_LINE_OFFSET; |
| 5046 | def.end_line = ts_node_end_point(cur).row + TS_LINE_OFFSET; |
| 5047 | def.is_exported = true; |
| 5048 | cbm_defs_push(&ctx->result->defs, a, def); |
| 5049 | return cbm_find_child_by_kind(cur, "do_block"); |
| 5050 | } |
| 5051 | |
| 5052 | // Process Elixir call nodes iteratively — handles defmodule/def/defp/defmacro |
| 5053 | // without recursion between extract_elixir_call ↔ extract_elixir_module_def. |
no test coverage detected