Replace URL

This commit is contained in:
Daniil Gentili 2020-09-05 22:39:54 +02:00
parent 93ec9722cd
commit ef81cee5b0
Signed by: danog
GPG Key ID: 8C1BE3B34B230CA7
1 changed files with 9 additions and 9 deletions

View File

@ -13,7 +13,7 @@ Created by [Daniil Gentili](https://daniil.it)
## Design ## Design
After [hooking into composer](https://github.com/danog/phabel/tree/master/src/Composer) by specifying a custom repository, the transpilation process begins. After [hooking into composer](https://github.com/phabelio/phabel/tree/master/src/Composer) by specifying a custom repository, the transpilation process begins.
### 1. Composer dependency graph ### 1. Composer dependency graph
@ -21,8 +21,8 @@ All dependencies of a package with a phabel configuration are processed with pha
### 2. Phabel plugin graph ### 2. Phabel plugin graph
All plugins specified in the configuration of each package are added to the [phabel plugin graph](https://github.com/danog/phabel/blob/master/src/PluginGraph/GraphInternal.php). All plugins specified in the configuration of each package are added to the [phabel plugin graph](https://github.com/phabelio/phabel/blob/master/src/PluginGraph/GraphInternal.php).
The [plugin graph](https://github.com/danog/phabel/blob/master/src/PluginGraph/GraphInternal.php) takes care of properly trickling configuration values and plugins down the dependency graph, as well as plugin graph optimization by merging multiple transforms (if allowed) in a single AST traversal. The [plugin graph](https://github.com/phabelio/phabel/blob/master/src/PluginGraph/GraphInternal.php) takes care of properly trickling configuration values and plugins down the dependency graph, as well as plugin graph optimization by merging multiple transforms (if allowed) in a single AST traversal.
It will also detect circular references in [plugin dependencies](#3-2-plugin-dependencies). It will also detect circular references in [plugin dependencies](#3-2-plugin-dependencies).
@ -30,26 +30,26 @@ It will also detect circular references in [plugin dependencies](#3-2-plugin-dep
#### 3.1 AST traversal #### 3.1 AST traversal
Each [phabel plugin](https://github.com/danog/phabel/blob/master/src/PluginInterface.php) can specify multiple `leave*` and `enter*` methods, called when traversing down or up the dependency graph. Each [phabel plugin](https://github.com/phabelio/phabel/blob/master/src/PluginInterface.php) can specify multiple `leave*` and `enter*` methods, called when traversing down or up the dependency graph.
These methods will be called only for nodes matching the typehint of the parameter. These methods will be called only for nodes matching the typehint of the parameter.
A second, optional parameter can be provided, to allow the [Traverser](https://github.com/danog/phabel/blob/master/src/Traverser.php) to pass a [Context](https://github.com/danog/phabel/blob/master/src/Context.php) object with helper methods for replacing nodes in arbitrary positions of the AST stack. A second, optional parameter can be provided, to allow the [Traverser](https://github.com/phabelio/phabel/blob/master/src/Traverser.php) to pass a [Context](https://github.com/phabelio/phabel/blob/master/src/Context.php) object with helper methods for replacing nodes in arbitrary positions of the AST stack.
#### 3.2 Plugin dependencies #### 3.2 Plugin dependencies
Plugins can also specify other plugins as "dependencies" or "reverse dependencies", with the `runBefore`, `runAfter`, `runWithBefore`, `runWithAfter` methods, to force some transforms to run before others. Plugins can also specify other plugins as "dependencies" or "reverse dependencies", with the `runBefore`, `runAfter`, `runWithBefore`, `runWithAfter` methods, to force some transforms to run before others.
By using the `*with*` methods, additional plugin graph optimization is allowed by merging multiple transforms in a single AST traversal. By using the `*with*` methods, additional plugin graph optimization is allowed by merging multiple transforms in a single AST traversal.
Each [phabel plugin](https://github.com/danog/phabel/blob/master/src/PluginInterface.php) can also accept a configuration: this a simple way to reuse code, by specifying a single plugin for a class of transforms, and then requiring it from other plugins, specifying a specific configuration to trigger only certain transforms. Each [phabel plugin](https://github.com/phabelio/phabel/blob/master/src/PluginInterface.php) can also accept a configuration: this a simple way to reuse code, by specifying a single plugin for a class of transforms, and then requiring it from other plugins, specifying a specific configuration to trigger only certain transforms.
#### 3.3 Plugin configuration #### 3.3 Plugin configuration
Configuration arrays are coupled with plugins when resolving the plugin graph. Configuration arrays are coupled with plugins when resolving the plugin graph.
When possible, the plugin graph will try to merge a plugin with multiple configs into a single (or fewer) plugins using the [`mergeConfigs` method](https://github.com/danog/phabel/blob/master/src/PluginInterface.php) of the plugin. When possible, the plugin graph will try to merge a plugin with multiple configs into a single (or fewer) plugins using the [`mergeConfigs` method](https://github.com/phabelio/phabel/blob/master/src/PluginInterface.php) of the plugin.
This merge method will be called automatically during plugin graph flattening, if requirement links allow it. This merge method will be called automatically during plugin graph flattening, if requirement links allow it.
### 4. Transforms ### 4. Transforms
[Multiple transforms are available](https://github.com/danog/phabel/tree/master/src/Target), covering all PHP 7 features. [Multiple transforms are available](https://github.com/phabelio/phabel/tree/master/src/Target), covering all PHP 7 features.
More complex and generic transforms like typehint and nested expression polyfilling can be found in the [plugin folder](https://github.com/danog/phabel/tree/master/src/Plugin). More complex and generic transforms like typehint and nested expression polyfilling can be found in the [plugin folder](https://github.com/phabelio/phabel/tree/master/src/Plugin).