Skip to content
This repository has been archived by the owner on Dec 23, 2023. It is now read-only.
/ pharborist Public archive

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

License

Notifications You must be signed in to change notification settings

grom358/pharborist

Repository files navigation

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

About

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

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages