Extract string argument from a Ruby require/require_relative call.
| 703 | |
| 704 | // Extract string argument from a Ruby require/require_relative call. |
| 705 | static char *extract_ruby_require_arg(CBMArena *a, TSNode node, const char *source) { |
| 706 | TSNode args = ts_node_child_by_field_name(node, TS_FIELD("arguments")); |
| 707 | if (ts_node_is_null(args)) { |
| 708 | if (ts_node_child_count(node) > SECOND_IDX) { |
| 709 | args = ts_node_child(node, SECOND_IDX); |
| 710 | } |
| 711 | } |
| 712 | if (ts_node_is_null(args)) { |
| 713 | return NULL; |
| 714 | } |
| 715 | |
| 716 | uint32_t ac = ts_node_child_count(args); |
| 717 | for (uint32_t j = 0; j < ac; j++) { |
| 718 | TSNode c = ts_node_child(args, j); |
| 719 | const char *ck = ts_node_type(c); |
| 720 | if (strcmp(ck, "string") == 0 || strcmp(ck, "string_literal") == 0) { |
| 721 | return strip_quotes(a, cbm_node_text(a, c, source)); |
| 722 | } |
| 723 | } |
| 724 | return strip_quotes(a, cbm_node_text(a, args, source)); |
| 725 | } |
| 726 | |
| 727 | static void parse_ruby_imports(CBMExtractCtx *ctx) { |
| 728 | CBMArena *a = ctx->arena; |
no test coverage detected