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