| Defined | src/docs/userguide/arcanist_lint_unit.diviner:1 |
|---|---|
| Group | Application User Guides |
Explains how to build new classes to control how Arcanist behaves.
This is a configuration guide that helps you set up advanced features. If you're just getting started, you don't need to look at this yet. Instead, start with the Arcanist User Guide.
Arcanist has some basic configuration options available in the .arcconfig file (see Arcanist User Guide: Configuring a New Project), but it can't handle everything. If you want to customize Arcanist at a deeper level, you need to build new classes. For instance:
Arcanist works through a sort of dependency-injection approach. For example, Arcanist does not run lint rules by default, but you can set lint.engine in your .arcconfig to the name of a class which extends ArcanistLintEngine. When running from inside your project, Arcanist will load this class and call methods on it in order to run lint. To make this work, you need to do three things:
If you haven't created a library for the class to live in yet, you need to do that first. Follow the instructions in libphutil Libraries User Guide, then make the library loadable by adding it to your .arcconfig like this:
{ // ... "load" : [ // ... "/path/to/my/library", // Absolute path "support/arcanist", // Relative path in this project // ... ] // ... }
You can either specify an absolute path, or a path relative to the project root. When you run arc list --trace, you should see a message to the effect that it has loaded your library.
For debugging or testing, you can also run Arcanist with the --load-phutil-library flag:
arc --load-phutil-library=/path/to/library <command>
You can specify this flag more than once to load several libraries. Note that if you use this flag, Arcanist will ignore any libraries listed in .arcconfig.
This step is easy: just edit .arcconfig to specify your class name as the appropriate configuration value.
{ // ... "lint.engine" : "CustomArcanistLintEngine", // ... }
Now, when you run Arcanist in your project, it will invoke your class when appropriate.
For lint and unit tests, you can also use the --engine flag override the default engine:
arc lint --engine MyCustomArcanistLintEngine
This is mostly useful for debugging and testing.