mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-29 10:12:41 +01:00
77ed7ade66
Summary: Adds a script to import symbols from a ctags-like format, and another to generate that format for PHP files. Test Plan: Ran it on Phabricator: mysql> select * from repository_symbol limit 200, 20; +-------------------+---------------------------------------------------+------------+----------------+--------+------------+ | arcanistProjectID | symbolName | symbolType | symbolLanguage | pathID | lineNumber | +-------------------+---------------------------------------------------+------------+----------------+--------+------------+ | 1 | DifferentialDiffViewController | class | php | 52 | 19 | | 1 | DifferentialInlineCommentEditController | class | php | 308 | 19 | | 1 | DifferentialInlineCommentPreviewController | class | php | 10543 | 19 | | 1 | DifferentialRevisionEditController | class | php | 10544 | 19 | | 1 | DifferentialRevisionListController | class | php | 10545 | 19 | | 1 | DifferentialRevisionViewController | class | php | 142 | 19 | | 1 | DifferentialSubscribeController | class | php | 10546 | 19 | | 1 | DifferentialRevisionListData | class | php | 58 | 19 | | 1 | DifferentialCommentEditor | class | php | 39 | 19 | | 1 | DifferentialRevisionEditor | class | php | 42 | 24 | | 1 | DifferentialFieldSpecificationIncompleteException | class | php | 10547 | 19 | | 1 | DifferentialFieldDataNotAvailableException | class | php | 10548 | 19 | | 1 | DifferentialFieldParseException | class | php | 10549 | 19 | | 1 | DifferentialFieldValidationException | class | php | 10550 | 19 | | 1 | DifferentialFieldSelector | class | php | 10551 | 19 | | 1 | DifferentialDefaultFieldSelector | class | php | 10552 | 19 | | 1 | DifferentialApplyPatchFieldSpecification | class | php | 10553 | 19 | | 1 | DifferentialArcanistProjectFieldSpecification | class | php | 10554 | 19 | | 1 | DifferentialAuthorFieldSpecification | class | php | 10555 | 19 | | 1 | DifferentialFieldSpecification | class | php | 10556 | 35 | +-------------------+---------------------------------------------------+------------+----------------+--------+------------+ 20 rows in set (0.00 sec) Reviewers: jungejason, nh, tuomaspelkonen, aran Reviewed By: tuomaspelkonen CC: aran, tuomaspelkonen Differential Revision: 898
81 lines
2.3 KiB
PHP
Executable file
81 lines
2.3 KiB
PHP
Executable file
#!/usr/bin/env php
|
|
<?php
|
|
|
|
/*
|
|
* Copyright 2011 Facebook, Inc.
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
$root = dirname(dirname(dirname(__FILE__)));
|
|
require_once $root.'/scripts/__init_script__.php';
|
|
require_once $root.'/scripts/__init_env__.php';
|
|
|
|
phutil_require_module('phutil', 'console');
|
|
phutil_require_module('phutil', 'parser/xhpast/bin');
|
|
|
|
if ($argc !== 1) {
|
|
echo phutil_console_format(
|
|
"usage: find . -type f -name '*.php' | ./generate_php_symbols.php\n");
|
|
exit(1);
|
|
}
|
|
|
|
$input = file_get_contents('php://stdin');
|
|
$input = trim($input);
|
|
$input = explode("\n", $input);
|
|
|
|
$data = array();
|
|
$futures = array();
|
|
|
|
foreach ($input as $file) {
|
|
$file = Filesystem::readablePath($file);
|
|
$data[$file] = Filesystem::readFile($file);
|
|
$futures[$file] = xhpast_get_parser_future($data[$file]);
|
|
}
|
|
|
|
foreach (Futures($futures)->limit(8) as $file => $future) {
|
|
$tree = XHPASTTree::newFromDataAndResolvedExecFuture(
|
|
$data[$file],
|
|
$future->resolve());
|
|
|
|
$root = $tree->getRootNode();
|
|
|
|
$functions = $root->selectDescendantsOfType('n_FUNCTION_DECLARATION');
|
|
foreach ($functions as $function) {
|
|
$name = $function->getChildByIndex(2);
|
|
print_symbol($file, 'function', $name);
|
|
}
|
|
|
|
$classes = $root->selectDescendantsOfType('n_CLASS_DECLARATION');
|
|
foreach ($classes as $class) {
|
|
$class_name = $class->getChildByIndex(1);
|
|
print_symbol($file, 'class', $class_name);
|
|
}
|
|
|
|
$interfaces = $root->selectDescendantsOfType('n_INTERFACE_DECLARATION');
|
|
foreach ($interfaces as $interface) {
|
|
$interface_name = $interface->getChildByIndex(1);
|
|
print_symbol($file, 'interface', $interface_name);
|
|
}
|
|
}
|
|
|
|
function print_symbol($file, $type, $token) {
|
|
$parts = array(
|
|
$token->getConcreteString(),
|
|
$type,
|
|
'php',
|
|
$token->getLineNumber(),
|
|
'/'.ltrim($file, './'),
|
|
);
|
|
echo implode(' ', $parts)."\n";
|
|
}
|