Skip to content

Bundle re-export chaining can produce spooky accidents #81

@kentfredric

Description

@kentfredric

TLDR Version:

Because Bundle->import() is an inherently user-facing function, it should control its own API, and API of a bundle should not randomly change in significant ways when a plugin changes its export sets.

Long Version:

Due to bundles essentially being:

  for my $plugin ( @plugins ) { 
      $plugin->import::into($caller);
  }

(except with a bit of special spice specific to Test::Stream instead of the eval trick import::into uses )

There's room for unintended ripple effects in the intersection of Bundles and Plugins.

Namely, Because bundles default to auto-exporting their plugins parts, any plugin automatically exporting anything risks a future where something it exports collides with something else, or risks exporting something in future that the bundle author never intended, or risks neglecting to export something that was previously exported.

This is not just hypothetical, and I've already had a bit of a confusion due to having to work out why a test failure occurred due to lacking cmp_ok, and the bundles and plugins I'm using directly demonstrating no changes and nothing about cmp_ok, it was just something I implied would be there from -V1.

And the only significant thing I found in the diff was that cmp_ok was changed in export from the Core plugin.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions