Modularity

Modules

A Vadalog program can be declared as a @module; in this way another program can @include other modules forming a single Vadalog program which can be evaluated.

As such, @module and @include annotations defines dependencies between vadalog programs.

Vadalog supports named modules (e.g. @module("moduleName")) and file modules (@module("/path/to/module_A.vada")).

Dependency tree

In Vadacode, there is a handy way to have a glance over module structure, which is the Module dependency pane.

Let’s look at an example:

Subject
Figure 1. Tree of dependencies in the Module dependency pane
File structure for previous example
📒 root (1)
	📄 main.vada (2)
	📄 module_1.vada (3)
	📄 module_a.vada (4)
	📄 module_b.vada (5)
	📄 module_z.vada (6)
1 Repository root directory
2 Main program, which includes other modules
3 Contains @module("module_1").
4 Contains @module("module_a"). @include("module_z").
5 Contains @module("module_b").
6 Contains @module("module_z").

Module symbols

Vadacode supports Symbols, hence you can press shift+ctrl+O/shift+cmd+O or check the Outline view to check all available symbols.

Vadacode shows all symbols included in the current program, included those imported by @include statements.
atom symbols
Figure 2. Outline view showing current (a) and imported (b) atoms

Cross-module references

Vadacode supports References; the provided references come from all parsed modules, and as such they include both the open program and those imported by @include statements.

module references
Figure 3. Reference view showing current (a) and imported (b) atoms