Elixir: mix.exs — app: :name */
| 604 | |
| 605 | /* Elixir: mix.exs — app: :name */ |
| 606 | static void parse_mix_exs(const char *source, int source_len, const char *rel_path, |
| 607 | cbm_pkg_entries_t *entries) { |
| 608 | const char *end = source + source_len; |
| 609 | /* Look for app: :app_name */ |
| 610 | const char *val = find_line_value(source, source_len, "app:"); |
| 611 | if (!val) { |
| 612 | return; |
| 613 | } |
| 614 | while (val < end && (*val == ' ' || *val == '\t')) { |
| 615 | val++; |
| 616 | } |
| 617 | if (val >= end || *val != ':') { |
| 618 | return; |
| 619 | } |
| 620 | val++; /* skip : */ |
| 621 | const char *start = val; |
| 622 | while (val < end && *val != ',' && *val != '\n' && *val != ' ' && *val != ')') { |
| 623 | val++; |
| 624 | } |
| 625 | if (val <= start) { |
| 626 | return; |
| 627 | } |
| 628 | char *app_name = cbm_strndup(start, (size_t)(val - start)); |
| 629 | char *dir = path_dirname(rel_path); |
| 630 | char entry[PKGMAP_PATH_BUF]; |
| 631 | snprintf(entry, sizeof(entry), "%s%slib/%s", dir[0] ? dir : "", dir[0] ? "/" : "", app_name); |
| 632 | /* Register with colon prefix as Elixir uses :atom syntax */ |
| 633 | char atom_name[PKGMAP_PATH_BUF]; |
| 634 | snprintf(atom_name, sizeof(atom_name), "%s", app_name); |
| 635 | pkg_entries_push(entries, strdup(atom_name), strdup(entry)); |
| 636 | free(app_name); |
| 637 | free(dir); |
| 638 | } |
| 639 | |
| 640 | /* Ruby: *.gemspec — spec.name = '...' */ |
| 641 | static void parse_gemspec(const char *source, int source_len, const char *rel_path, |
no test coverage detected