toIdentifiers

Decomposes multi module import decl to a list of single module with binds.

toIdentifiers
(
const Declaration decl
)

Examples

Test for import attributes.

auto visitor = visitImports(q{
    public import foo;
    public static import bar;
  });
auto ids = visitor.importGroups[0];
assert(ids[0].name == "foo");
assert(equal(ids[0].attrs, ["public"]));
assert(ids[1].name == "bar");
assert(equal(ids[1].attrs, ["public", "static"]));

Test for multiple modules and binding.

auto visitor = visitImports(q{
    import foo, bar : aa, bb, cc;
  });
auto ids = visitor.importGroups[0];
assert(ids[0].name == "foo");
assert(ids[0].bindNames.empty);
assert(ids[1].name == "bar");
assert(equal(ids[1].bindNames, ["aa", "bb", "cc"]));

// Test opCmp in sort.
sort(ids);
assert(ids[0].name == "bar");
assert(ids[1].name == "foo");

Test for merging redundant modules.

auto visitor = visitImports(q{
    import foo : bar;
    import foo : baz, bar;
  });
assert(visitor.outputImports(visitor.importGroups[0]) ==
       "import foo : bar, baz;");

Test for modules with attributes.

  auto visitor = visitImports(q{
      import foo : bar;
      static import foo;
      public import foo : bar;
      public import foo : baz;
      import bar;
    });
  writeln(visitor.outputImports(visitor.importGroups[0]));
  assert(visitor.outputImports(visitor.importGroups[0]) == q{
import bar;
import foo : bar;
public import foo : bar, baz;
static import foo;
    }.strip);

Meta