Skip to content
A PHP library to query and transform source code via tree operations.
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
bin
config
docs
src
tests
.gitignore
.travis.yml
LICENSE
README.md
composer.json
composer.lock
generate-docs.sh
phpunit.xml.dist

README.md

pharborist

Pharborist logo

A PHP library to query and transform PHP source code via tree operations.

Roadmap

  • Tests with 100% code coverage
  • Integration with a third party library for PHPDoc comments
  • API to ease querying and transforming of the syntax tree
  • Build a PHP source code formatter using the library (Partially completed).
  • Build a PHP code check using the library

Below is an example of how the API might look once its more developed:

// Add use declaration if it does not already exist. Use UtilityString alias if conflict
$alias = $tree->ensureUseDeclaration('Drupal\Component\Utility\String', 'UtilityString');
// Find all calls to check_plain and rename them to use String::checkPlain
$function_calls = $tree->find(Filter::functionCall('check_plain'));
foreach ($function_calls as $call) {
  $class_method_call = ClassMethodCallNode::create($alias, 'check_plain', $call->getArgumentList());
  $call->replaceWith($class_method_call);
}

Usage

require_once 'vendor/autoload.php';

use Pharborist\Parser;
use Pharborist\Namespaces\NamespaceNode;
use Pharborist\Filter;

$filename = $argv[1];
$tree = Parser::parseFile($filename);

// check there only one namespace declaration
$namespaces = $tree->children(Filter::isInstanceOf('\Pharborist\Namespaces\NamespaceNode'));
if ($namespaces->count() > 1) {
  die('More then one namespace at line ' . $namespaces[1]->getLineNumber() . PHP_EOL);
}

Build Status

You can’t perform that action at this time.