Search code examples
rakucommaide

How can I avoid "not in ecosystem" errors thrown by comma IDE?


I have a test file in my module's t/ directory that does a use on a TestUtils files which has some variables and routines:

use Test;
use TestUtils;

plan 4;
check_cmd_output('No arguments');
check_cmd_output('Successfully ingested', test_md_file);
check_cmd_output('Successfully ingested', test_md_file, 1);
check_cmd_output('Successfully ingested', vimwiki_arg_sim());

It works fine. However, Comma was complaining about TestUtils not being found "in the ecosystem" as well as throwing errors with identifiers from the TestUtils module that it was not loading:

enter image description here

I was able to stop Comma from complaining by:

  1. Exporting the identifiers in the TestUtils file
  2. Fully qualifying the identifiers in my test file with something like: TestUtils::check_cmd_output(...)
  3. Adding TestUtils to the provides hash in the META6.json file.

I'm thinking there is probably a better way. I tried doing stuff like use lib 't' and use lib '.' but that did not help. Thanks.


Solution

  • Comma doesn't handle this situation perfectly; it understands (following the IntelliJ platform naming conventions):

    • Source roots, which are used as roots for resolving use statements within the project (anything not resolved is assumed to be from the module ecosystem)
    • Test roots, where test files are found (used for, for example, being able to run tests in an xt directory)

    These are, however, mutually exclusive. If the TestUtils module were to be placed in a lib directory inside of t, then that lib directory could be marked as a source root, and the symbols should be resolved.