Cortex is the intelligent coding assistant for Elixir.
- Compiles and reloads modified files
- Automatically runs the appropriate tests at the appropriate time
- Accepts pluggable adapters for custom builds
Demo
Installation
Getting started with Cortex is easy. Add the following to your mix.exs
file:
def deps do
[
{:cortex, "~> 0.1", only: [:dev, :test]},
]
end
Umbrella Applications
If you're running an umbrella application, add Cortex to the dependencies of
each of the sub-apps that you would like Cortex to monitor. Do this instead
of adding it as a dependency in the root mix.exs
file.
This is necessary because dependencies in the root mix.exs
in umbrella
application are not automatically started, which is a process that Cortex
depends on.
Usage
Cortex runs automatically along-side your mix app.
iex -S mix
This is enough to get live-reload on file change when editing your app.
Commands
Some commands intended to be used via the shell are provided in the Cortex
module:
-
Cortex.all
- run all stages (currently reload and test runner) on all files in the project -
Cortex.focus
- filter test runs to only tests matching the given pattern. Supports:- a regular expression, which will filter to tests whose full test name matches that regular expression
- a string, which will compile as a regular expression and behave like the above regular expression
- an integer, which will filter by line number for tests
- a keyword, which will pass through to the
include
option ofExUnit.configure/1
unchanged
-
Cortex.unfocus
- clear the currently configured focus
Test Runner
When you run your app with MIX_ENV=test
,
Cortex will automatically run tests for saved test
files,
as well as tests paired with saved files in lib
.
MIX_ENV=test iex -S mix
Enabling and Disabling
Whether cortex runs at all can be configured via the configuration of your application. By default cortex does run.
config :cortex,
enabled: false
Cortex also supports the Elixir / Erlang convention of a
{:system, ENV_VAR_NAME, default_value}
in the config file.
For example, if you wanted to have cortex disabled in your project by default,
you could add the following to your config.exs
:
config :cortex,
enabled: {:system, "CORTEX_ENABLED", false}
Then, to run cortex you would start iex
with the following options:
CORTEX_ENABLED=true iex -S mix
An inverted but otherwise identical disabled
config option is also supported.
This can be used to enable cortex by default but automatically disable it in
certain unwanted contexts (like build environments):
config :cortex,
disabled: {:system, "CI_RUN", false}
Configuring
config :cortex,
clear_before_running_tests: true
Set clear_before_running_tests
to clear the screen immediately before running tests, defaults to true.
Phoenix
If you are running a phoenix application, make sure you are running the app in interactive mode:
iex -S mix phoenix.server
Roadmap
- Reload Modules
- Rerun tests
- Reload all modules and run all tests from the IEx shell
- Reload and run tests for a specific module from the IEx shell
- Credo runner
- Dialyzer runner
- ExDash runner
- Auto-formatting runner
- Custom mix task runner
- Cortex 'focus' mode
- Broader OTP reload support
- Autofetch dependencies when
mix.exs
changesdeps
License
This software is licensed under the MIT license.