- Properly ignore aliases in strict boundaries
- Fixed false positives introduced in 0.10.2 (#64)
- Ignore implicitly defined modules, such as protocol impls added via
@derive
.
- Improved compiler performance. On a large project (7k+ files, 480k LOC), the running time is reduced from about 50 seconds to about 1 second.
- Added the support for ignoring "dirty" xrefs via the
dirty_xrefs
option. SeeBoundary
module docs for details.
- Properly unload the tracer on compilation error. Fixes crashes in ElixirLS.
- Fix inconsistent behaviour in umbrella/poncho projects.
- Properly handle sub-boundary exports on mass export
- Improve tracer performance
- Remove unwanted cross-module deps
- Support exporting modules of sub-boundaries.
- Properly handle
:strict
scope in sub-boundaries. - Remove compilation warnings when the recompiled module has no external calls
- Allow references to protocol implementations from externals
- Fix a compilation crash
- Reports forbidden struct expansions (
%Foo{...}
) - Optionally reports alias references (e.g.
Foo
,apply(Foo, ...)
). This check is by default disabled, but can be enabled globally or per-boundary with the optioncheck: [aliases: true]
.
- fixes a bug which prevented the project from compiling on a named node
- added two mix task
boundary.visualize.mods
andboundary.visualize.funs
that can help visualizing cross-module and in-module dependencies.
- relax Elixir requirement
- The
:externals_mode
option is renamed totype
. - The
:extra_externals
option is dropped, usecheck: [apps: list_of_apps]
instead. - Global boundary options are now specified via
boundary: [default: default_opts]
in mix project config. - Diagrams produces by
mix boundary.visualize
won't include boundaries from external apps. - Non-strict sub-boundaries implicitly inherit ancestors deps.
ignore?: true
is deprecated in favour ofcheck: [in: false, out: false]
.
- Added
boundary.ex_doc_groups
mix task for generating ex_doc groups for defined boundaries. - Better support for finer-grained ignoring with
check: [in: boolean, out: boolean]
. - Support for global default externals checks with
boundary: [default: [check: [apps: apps]]]
.
- Support sub-boundaries (docs)
- Support mass export (docs)
- New boundary.visualize mix task which generates a graphiviz dot file for each non-empty boundary
- Eliminated compile-time dependencies to deps and exports.
- Fixed app config bug related to unloading
- Fixed a few bugs which were noticed in ElixirLS
- Expanded cache to further reduce check time
- Remote calls from macro are treated as compile-time calls.
- Fixes false positive report of an unknown external boundary.
- Support for permitting dep to be used only at compile time via
deps: [{SomeDep, :compile}]
. - Support for alias-like grouping (e.g.
deps: [Ecto.{Changeset, Query}]
) - The boundary compiler now caches boundaries from external dependencies, which significantly reduces check duration in the cases where the client app doesn't need to be fully recompiled.
- Eliminates duplicate warnings
- Fixed app loading bug which led to some dependencies being missed.
- Added support for controlling the usage of external deps. If external dep defines boundaries, the client app can refer to those boundaries. Otherwise, the client app can define implicit boundaries. See docs for details.
- Added
boundary.spec
andboundary.find_external_deps
mix tasks. - Manual classification via the
:classify_to
option is now also allowed for mix tasks. - Stabilized memory usage, reduced disk usage and analysis time. Boundary is still not thoroughly optimized, but it should behave better in larger projects.
- Boundary database files are now stored in the manifest path. Previously they were stored in apps
ebin
which means they would be also included in the OTP release.
- [Breaking] Requires Elixir 1.10 or higher
- [Breaking] The
:boundary
compiler should be listed first - Uses compilation tracers instead of mix xref to collect usage