mirror of
https://we.phorge.it/source/arcanist.git
synced 2024-09-12 04:58:50 +02:00
Fully merge "libphutil/" into "arcanist/"
Summary: Ref T13395. Moves all remaining code in "libphutil/" into "arcanist/". Test Plan: Ran various arc workflows, although this probably has some remaining rough edges. Maniphest Tasks: T13395 Differential Revision: https://secure.phabricator.com/D20980
This commit is contained in:
parent
a36e60f0a3
commit
9b74cb4ee6
499 changed files with 179518 additions and 70 deletions
14
.arclint
14
.arclint
|
@ -36,7 +36,19 @@
|
|||
"exclude": "(^resources/spelling/.*\\.json$)"
|
||||
},
|
||||
"text": {
|
||||
"type": "text"
|
||||
"type": "text",
|
||||
"exclude": [
|
||||
"(^src/(.*/)?__tests__/[^/]+/.*\\.(txt|json|expect))"
|
||||
]
|
||||
},
|
||||
"text-without-length": {
|
||||
"type": "text",
|
||||
"include": [
|
||||
"(^src/(.*/)?__tests__/[^/]+/.*\\.(txt|json|expect))"
|
||||
],
|
||||
"severity": {
|
||||
"3": "disabled"
|
||||
}
|
||||
},
|
||||
"xhpast": {
|
||||
"type": "xhpast",
|
||||
|
|
19
.gitignore
vendored
19
.gitignore
vendored
|
@ -11,3 +11,22 @@
|
|||
# User extensions
|
||||
/externals/includes/*
|
||||
/src/extensions/*
|
||||
|
||||
# XHPAST
|
||||
/support/xhpast/*.a
|
||||
/support/xhpast/*.o
|
||||
/support/xhpast/parser.yacc.output
|
||||
/support/xhpast/node_names.hpp
|
||||
/support/xhpast/xhpast
|
||||
/support/xhpast/xhpast.exe
|
||||
/src/parser/xhpast/bin/xhpast
|
||||
|
||||
## NOTE: Don't .gitignore these files! Even though they're build artifacts, we
|
||||
## want to check them in so users can build xhpast without flex/bison.
|
||||
# /support/xhpast/parser.yacc.cpp
|
||||
# /support/xhpast/parser.yacc.hpp
|
||||
# /support/xhpast/scanner.lex.cpp
|
||||
# /support/xhpast/scanner.lex.hpp
|
||||
|
||||
# This is an OS X build artifact.
|
||||
/support/xhpast/xhpast.dSYM
|
||||
|
|
19
externals/jsonlint/LICENSE
vendored
Normal file
19
externals/jsonlint/LICENSE
vendored
Normal file
|
@ -0,0 +1,19 @@
|
|||
Copyright (c) 2011 Jordi Boggiano
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is furnished
|
||||
to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
488
externals/jsonlint/src/Seld/JsonLint/JsonParser.php
vendored
Normal file
488
externals/jsonlint/src/Seld/JsonLint/JsonParser.php
vendored
Normal file
|
@ -0,0 +1,488 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the JSON Lint package.
|
||||
*
|
||||
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Parser class
|
||||
*
|
||||
* Example:
|
||||
*
|
||||
* $parser = new JsonParser();
|
||||
* // returns null if it's valid json, or an error object
|
||||
* $parser->lint($json);
|
||||
* // returns parsed json, like json_decode does, but slower, throws exceptions on failure.
|
||||
* $parser->parse($json);
|
||||
*
|
||||
* Ported from https://github.com/zaach/jsonlint
|
||||
*/
|
||||
class JsonLintJsonParser
|
||||
{
|
||||
const DETECT_KEY_CONFLICTS = 1;
|
||||
const ALLOW_DUPLICATE_KEYS = 2;
|
||||
const PARSE_TO_ASSOC = 4;
|
||||
|
||||
private $lexer;
|
||||
|
||||
private $flags;
|
||||
private $stack;
|
||||
private $vstack; // semantic value stack
|
||||
private $lstack; // location stack
|
||||
|
||||
private $symbols = array(
|
||||
'error' => 2,
|
||||
'JSONString' => 3,
|
||||
'STRING' => 4,
|
||||
'JSONNumber' => 5,
|
||||
'NUMBER' => 6,
|
||||
'JSONNullLiteral' => 7,
|
||||
'NULL' => 8,
|
||||
'JSONBooleanLiteral' => 9,
|
||||
'TRUE' => 10,
|
||||
'FALSE' => 11,
|
||||
'JSONText' => 12,
|
||||
'JSONValue' => 13,
|
||||
'EOF' => 14,
|
||||
'JSONObject' => 15,
|
||||
'JSONArray' => 16,
|
||||
'{' => 17,
|
||||
'}' => 18,
|
||||
'JSONMemberList' => 19,
|
||||
'JSONMember' => 20,
|
||||
':' => 21,
|
||||
',' => 22,
|
||||
'[' => 23,
|
||||
']' => 24,
|
||||
'JSONElementList' => 25,
|
||||
'$accept' => 0,
|
||||
'$end' => 1,
|
||||
);
|
||||
|
||||
private $terminals_ = array(
|
||||
2 => "error",
|
||||
4 => "STRING",
|
||||
6 => "NUMBER",
|
||||
8 => "NULL",
|
||||
10 => "TRUE",
|
||||
11 => "FALSE",
|
||||
14 => "EOF",
|
||||
17 => "{",
|
||||
18 => "}",
|
||||
21 => ":",
|
||||
22 => ",",
|
||||
23 => "[",
|
||||
24 => "]",
|
||||
);
|
||||
|
||||
private $productions_ = array(
|
||||
0,
|
||||
array(3, 1),
|
||||
array(5, 1),
|
||||
array(7, 1),
|
||||
array(9, 1),
|
||||
array(9, 1),
|
||||
array(12, 2),
|
||||
array(13, 1),
|
||||
array(13, 1),
|
||||
array(13, 1),
|
||||
array(13, 1),
|
||||
array(13, 1),
|
||||
array(13, 1),
|
||||
array(15, 2),
|
||||
array(15, 3),
|
||||
array(20, 3),
|
||||
array(19, 1),
|
||||
array(19, 3),
|
||||
array(16, 2),
|
||||
array(16, 3),
|
||||
array(25, 1),
|
||||
array(25, 3)
|
||||
);
|
||||
|
||||
private $table = array(array(3 => 5, 4 => array(1,12), 5 => 6, 6 => array(1,13), 7 => 3, 8 => array(1,9), 9 => 4, 10 => array(1,10), 11 => array(1,11), 12 => 1, 13 => 2, 15 => 7, 16 => 8, 17 => array(1,14), 23 => array(1,15)), array( 1 => array(3)), array( 14 => array(1,16)), array( 14 => array(2,7), 18 => array(2,7), 22 => array(2,7), 24 => array(2,7)), array( 14 => array(2,8), 18 => array(2,8), 22 => array(2,8), 24 => array(2,8)), array( 14 => array(2,9), 18 => array(2,9), 22 => array(2,9), 24 => array(2,9)), array( 14 => array(2,10), 18 => array(2,10), 22 => array(2,10), 24 => array(2,10)), array( 14 => array(2,11), 18 => array(2,11), 22 => array(2,11), 24 => array(2,11)), array( 14 => array(2,12), 18 => array(2,12), 22 => array(2,12), 24 => array(2,12)), array( 14 => array(2,3), 18 => array(2,3), 22 => array(2,3), 24 => array(2,3)), array( 14 => array(2,4), 18 => array(2,4), 22 => array(2,4), 24 => array(2,4)), array( 14 => array(2,5), 18 => array(2,5), 22 => array(2,5), 24 => array(2,5)), array( 14 => array(2,1), 18 => array(2,1), 21 => array(2,1), 22 => array(2,1), 24 => array(2,1)), array( 14 => array(2,2), 18 => array(2,2), 22 => array(2,2), 24 => array(2,2)), array( 3 => 20, 4 => array(1,12), 18 => array(1,17), 19 => 18, 20 => 19 ), array( 3 => 5, 4 => array(1,12), 5 => 6, 6 => array(1,13), 7 => 3, 8 => array(1,9), 9 => 4, 10 => array(1,10), 11 => array(1,11), 13 => 23, 15 => 7, 16 => 8, 17 => array(1,14), 23 => array(1,15), 24 => array(1,21), 25 => 22 ), array( 1 => array(2,6)), array( 14 => array(2,13), 18 => array(2,13), 22 => array(2,13), 24 => array(2,13)), array( 18 => array(1,24), 22 => array(1,25)), array( 18 => array(2,16), 22 => array(2,16)), array( 21 => array(1,26)), array( 14 => array(2,18), 18 => array(2,18), 22 => array(2,18), 24 => array(2,18)), array( 22 => array(1,28), 24 => array(1,27)), array( 22 => array(2,20), 24 => array(2,20)), array( 14 => array(2,14), 18 => array(2,14), 22 => array(2,14), 24 => array(2,14)), array( 3 => 20, 4 => array(1,12), 20 => 29 ), array( 3 => 5, 4 => array(1,12), 5 => 6, 6 => array(1,13), 7 => 3, 8 => array(1,9), 9 => 4, 10 => array(1,10), 11 => array(1,11), 13 => 30, 15 => 7, 16 => 8, 17 => array(1,14), 23 => array(1,15)), array( 14 => array(2,19), 18 => array(2,19), 22 => array(2,19), 24 => array(2,19)), array( 3 => 5, 4 => array(1,12), 5 => 6, 6 => array(1,13), 7 => 3, 8 => array(1,9), 9 => 4, 10 => array(1,10), 11 => array(1,11), 13 => 31, 15 => 7, 16 => 8, 17 => array(1,14), 23 => array(1,15)), array( 18 => array(2,17), 22 => array(2,17)), array( 18 => array(2,15), 22 => array(2,15)), array( 22 => array(2,21), 24 => array(2,21)),
|
||||
);
|
||||
|
||||
private $defaultActions = array(
|
||||
16 => array(2, 6)
|
||||
);
|
||||
|
||||
/**
|
||||
* @param string $input JSON string
|
||||
* @return null|JsonLintParsingException null if no error is found, a JsonLintParsingException containing all details otherwise
|
||||
*/
|
||||
public function lint($input)
|
||||
{
|
||||
try {
|
||||
$this->parse($input);
|
||||
} catch (JsonLintParsingException $e) {
|
||||
return $e;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $input JSON string
|
||||
* @return mixed
|
||||
* @throws JsonLintParsingException
|
||||
*/
|
||||
public function parse($input, $flags = 0)
|
||||
{
|
||||
$this->failOnBOM($input);
|
||||
|
||||
$this->flags = $flags;
|
||||
|
||||
$this->stack = array(0);
|
||||
$this->vstack = array(null);
|
||||
$this->lstack = array();
|
||||
|
||||
$yytext = '';
|
||||
$yylineno = 0;
|
||||
$yyleng = 0;
|
||||
$recovering = 0;
|
||||
$TERROR = 2;
|
||||
$EOF = 1;
|
||||
|
||||
$this->lexer = new JsonLintLexer();
|
||||
$this->lexer->setInput($input);
|
||||
|
||||
$yyloc = $this->lexer->yylloc;
|
||||
$this->lstack[] = $yyloc;
|
||||
|
||||
$symbol = null;
|
||||
$preErrorSymbol = null;
|
||||
$state = null;
|
||||
$action = null;
|
||||
$a = null;
|
||||
$r = null;
|
||||
$yyval = new stdClass;
|
||||
$p = null;
|
||||
$len = null;
|
||||
$newState = null;
|
||||
$expected = null;
|
||||
$errStr = null;
|
||||
|
||||
while (true) {
|
||||
// retrieve state number from top of stack
|
||||
$state = $this->stack[count($this->stack)-1];
|
||||
|
||||
// use default actions if available
|
||||
if (isset($this->defaultActions[$state])) {
|
||||
$action = $this->defaultActions[$state];
|
||||
} else {
|
||||
if ($symbol == null) {
|
||||
$symbol = $this->lex();
|
||||
}
|
||||
// read action for current state and first input
|
||||
$action = isset($this->table[$state][$symbol]) ? $this->table[$state][$symbol] : false;
|
||||
}
|
||||
|
||||
// handle parse error
|
||||
if (!$action || !$action[0]) {
|
||||
if (!$recovering) {
|
||||
// Report error
|
||||
$expected = array();
|
||||
foreach ($this->table[$state] as $p => $ignore) {
|
||||
if (isset($this->terminals_[$p]) && $p > 2) {
|
||||
$expected[] = "'" . $this->terminals_[$p] . "'";
|
||||
}
|
||||
}
|
||||
|
||||
$message = null;
|
||||
if (in_array("'STRING'", $expected) && in_array(substr($this->lexer->match, 0, 1), array('"', "'"))) {
|
||||
$message = "Invalid string";
|
||||
if ("'" === substr($this->lexer->match, 0, 1)) {
|
||||
$message .= ", it appears you used single quotes instead of double quotes";
|
||||
} elseif (preg_match('{".+?(\\\\[^"bfnrt/\\\\u])}', $this->lexer->getUpcomingInput(), $match)) {
|
||||
$message .= ", it appears you have an unescaped backslash at: ".$match[1];
|
||||
} elseif (preg_match('{"(?:[^"]+|\\\\")*$}m', $this->lexer->getUpcomingInput())) {
|
||||
$message .= ", it appears you forgot to terminate the string, or attempted to write a multiline string which is invalid";
|
||||
}
|
||||
}
|
||||
|
||||
$errStr = 'Parse error on line ' . ($yylineno+1) . ":\n";
|
||||
$errStr .= $this->lexer->showPosition() . "\n";
|
||||
if ($message) {
|
||||
$errStr .= $message;
|
||||
} else {
|
||||
$errStr .= (count($expected) > 1) ? "Expected one of: " : "Expected: ";
|
||||
$errStr .= implode(', ', $expected);
|
||||
}
|
||||
|
||||
if (',' === substr(trim($this->lexer->getPastInput()), -1)) {
|
||||
$errStr .= " - It appears you have an extra trailing comma";
|
||||
}
|
||||
|
||||
$this->parseError($errStr, array(
|
||||
'text' => $this->lexer->match,
|
||||
'token' => !empty($this->terminals_[$symbol]) ? $this->terminals_[$symbol] : $symbol,
|
||||
'line' => $this->lexer->yylineno,
|
||||
'loc' => $yyloc,
|
||||
'expected' => $expected,
|
||||
));
|
||||
}
|
||||
|
||||
// just recovered from another error
|
||||
if ($recovering == 3) {
|
||||
if ($symbol == $EOF) {
|
||||
throw new JsonLintParsingException($errStr ? $errStr : 'Parsing halted.');
|
||||
}
|
||||
|
||||
// discard current lookahead and grab another
|
||||
$yyleng = $this->lexer->yyleng;
|
||||
$yytext = $this->lexer->yytext;
|
||||
$yylineno = $this->lexer->yylineno;
|
||||
$yyloc = $this->lexer->yylloc;
|
||||
$symbol = $this->lex();
|
||||
}
|
||||
|
||||
// try to recover from error
|
||||
while (true) {
|
||||
// check for error recovery rule in this state
|
||||
if (array_key_exists($TERROR, $this->table[$state])) {
|
||||
break;
|
||||
}
|
||||
if ($state == 0) {
|
||||
throw new JsonLintParsingException($errStr ? $errStr : 'Parsing halted.');
|
||||
}
|
||||
$this->popStack(1);
|
||||
$state = $this->stack[count($this->stack)-1];
|
||||
}
|
||||
|
||||
$preErrorSymbol = $symbol; // save the lookahead token
|
||||
$symbol = $TERROR; // insert generic error symbol as new lookahead
|
||||
$state = $this->stack[count($this->stack)-1];
|
||||
$action = isset($this->table[$state][$TERROR]) ? $this->table[$state][$TERROR] : false;
|
||||
$recovering = 3; // allow 3 real symbols to be shifted before reporting a new error
|
||||
}
|
||||
|
||||
// this shouldn't happen, unless resolve defaults are off
|
||||
if (is_array($action[0]) && count($action) > 1) {
|
||||
throw new JsonLintParsingException('Parse Error: multiple actions possible at state: ' . $state . ', token: ' . $symbol);
|
||||
}
|
||||
|
||||
switch ($action[0]) {
|
||||
case 1: // shift
|
||||
$this->stack[] = $symbol;
|
||||
$this->vstack[] = $this->lexer->yytext;
|
||||
$this->lstack[] = $this->lexer->yylloc;
|
||||
$this->stack[] = $action[1]; // push state
|
||||
$symbol = null;
|
||||
if (!$preErrorSymbol) { // normal execution/no error
|
||||
$yyleng = $this->lexer->yyleng;
|
||||
$yytext = $this->lexer->yytext;
|
||||
$yylineno = $this->lexer->yylineno;
|
||||
$yyloc = $this->lexer->yylloc;
|
||||
if ($recovering > 0) {
|
||||
$recovering--;
|
||||
}
|
||||
} else { // error just occurred, resume old lookahead f/ before error
|
||||
$symbol = $preErrorSymbol;
|
||||
$preErrorSymbol = null;
|
||||
}
|
||||
break;
|
||||
|
||||
case 2: // reduce
|
||||
$len = $this->productions_[$action[1]][1];
|
||||
|
||||
// perform semantic action
|
||||
$yyval->token = $this->vstack[count($this->vstack) - $len]; // default to $$ = $1
|
||||
// default location, uses first token for firsts, last for lasts
|
||||
$yyval->store = array( // _$ = store
|
||||
'first_line' => $this->lstack[count($this->lstack) - ($len ? $len : 1)]['first_line'],
|
||||
'last_line' => $this->lstack[count($this->lstack) - 1]['last_line'],
|
||||
'first_column' => $this->lstack[count($this->lstack) - ($len ? $len : 1)]['first_column'],
|
||||
'last_column' => $this->lstack[count($this->lstack) - 1]['last_column'],
|
||||
);
|
||||
$r = $this->performAction($yyval, $yytext, $yyleng, $yylineno, $action[1], $this->vstack, $this->lstack);
|
||||
|
||||
if (!$r instanceof JsonLintUndefined) {
|
||||
return $r;
|
||||
}
|
||||
|
||||
if ($len) {
|
||||
$this->popStack($len);
|
||||
}
|
||||
|
||||
$this->stack[] = $this->productions_[$action[1]][0]; // push nonterminal (reduce)
|
||||
$this->vstack[] = $yyval->token;
|
||||
$this->lstack[] = $yyval->store;
|
||||
$newState = $this->table[$this->stack[count($this->stack)-2]][$this->stack[count($this->stack)-1]];
|
||||
$this->stack[] = $newState;
|
||||
break;
|
||||
|
||||
case 3: // accept
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
protected function parseError($str, $hash)
|
||||
{
|
||||
throw new JsonLintParsingException($str, $hash);
|
||||
}
|
||||
|
||||
// $$ = $tokens // needs to be passed by ref?
|
||||
// $ = $token
|
||||
// _$ removed, useless?
|
||||
private function performAction(stdClass $yyval, $yytext, $yyleng, $yylineno, $yystate, &$tokens)
|
||||
{
|
||||
// $0 = $len
|
||||
$len = count($tokens) - 1;
|
||||
switch ($yystate) {
|
||||
case 1:
|
||||
$yytext = preg_replace_callback('{(?:\\\\["bfnrt/\\\\]|\\\\u[a-fA-F0-9]{4})}', array($this, 'stringInterpolation'), $yytext);
|
||||
$yyval->token = $yytext;
|
||||
break;
|
||||
case 2:
|
||||
if (strpos($yytext, 'e') !== false || strpos($yytext, 'E') !== false) {
|
||||
$yyval->token = floatval($yytext);
|
||||
} else {
|
||||
$yyval->token = strpos($yytext, '.') === false ? intval($yytext) : floatval($yytext);
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
$yyval->token = null;
|
||||
break;
|
||||
case 4:
|
||||
$yyval->token = true;
|
||||
break;
|
||||
case 5:
|
||||
$yyval->token = false;
|
||||
break;
|
||||
case 6:
|
||||
return $yyval->token = $tokens[$len-1];
|
||||
case 13:
|
||||
if ($this->flags & self::PARSE_TO_ASSOC) {
|
||||
$yyval->token = array();
|
||||
} else {
|
||||
$yyval->token = new stdClass;
|
||||
}
|
||||
break;
|
||||
case 14:
|
||||
$yyval->token = $tokens[$len-1];
|
||||
break;
|
||||
case 15:
|
||||
$yyval->token = array($tokens[$len-2], $tokens[$len]);
|
||||
break;
|
||||
case 16:
|
||||
$property = $tokens[$len][0];
|
||||
if ($this->flags & self::PARSE_TO_ASSOC) {
|
||||
$yyval->token = array();
|
||||
$yyval->token[$property] = $tokens[$len][1];
|
||||
} else {
|
||||
$yyval->token = new stdClass;
|
||||
$yyval->token->$property = $tokens[$len][1];
|
||||
}
|
||||
break;
|
||||
case 17:
|
||||
if ($this->flags & self::PARSE_TO_ASSOC) {
|
||||
$yyval->token =& $tokens[$len-2];
|
||||
$key = $tokens[$len][0];
|
||||
if (($this->flags & self::DETECT_KEY_CONFLICTS) && isset($tokens[$len-2][$key])) {
|
||||
$errStr = 'Parse error on line ' . ($yylineno+1) . ":\n";
|
||||
$errStr .= $this->lexer->showPosition() . "\n";
|
||||
$errStr .= "Duplicate key: ".$tokens[$len][0];
|
||||
throw new JsonLintParsingException($errStr);
|
||||
} elseif (($this->flags & self::ALLOW_DUPLICATE_KEYS) && isset($tokens[$len-2][$key])) {
|
||||
// Forget about it...
|
||||
}
|
||||
$tokens[$len-2][$key] = $tokens[$len][1];
|
||||
} else {
|
||||
$yyval->token = $tokens[$len-2];
|
||||
$key = $tokens[$len][0];
|
||||
if (($this->flags & self::DETECT_KEY_CONFLICTS) && isset($tokens[$len-2]->{$key})) {
|
||||
$errStr = 'Parse error on line ' . ($yylineno+1) . ":\n";
|
||||
$errStr .= $this->lexer->showPosition() . "\n";
|
||||
$errStr .= "Duplicate key: ".$tokens[$len][0];
|
||||
throw new JsonLintParsingException($errStr);
|
||||
} elseif (($this->flags & self::ALLOW_DUPLICATE_KEYS) && isset($tokens[$len-2]->{$key})) {
|
||||
$duplicateCount = 1;
|
||||
do {
|
||||
$duplicateKey = $key . '.' . $duplicateCount++;
|
||||
} while (isset($tokens[$len-2]->$duplicateKey));
|
||||
$key = $duplicateKey;
|
||||
}
|
||||
$tokens[$len-2]->$key = $tokens[$len][1];
|
||||
}
|
||||
break;
|
||||
case 18:
|
||||
$yyval->token = array();
|
||||
break;
|
||||
case 19:
|
||||
$yyval->token = $tokens[$len-1];
|
||||
break;
|
||||
case 20:
|
||||
$yyval->token = array($tokens[$len]);
|
||||
break;
|
||||
case 21:
|
||||
$tokens[$len-2][] = $tokens[$len];
|
||||
$yyval->token = $tokens[$len-2];
|
||||
break;
|
||||
}
|
||||
|
||||
return new JsonLintUndefined();
|
||||
}
|
||||
|
||||
private function stringInterpolation($match)
|
||||
{
|
||||
switch ($match[0]) {
|
||||
case '\\\\':
|
||||
return '\\';
|
||||
case '\"':
|
||||
return '"';
|
||||
case '\b':
|
||||
return chr(8);
|
||||
case '\f':
|
||||
return chr(12);
|
||||
case '\n':
|
||||
return "\n";
|
||||
case '\r':
|
||||
return "\r";
|
||||
case '\t':
|
||||
return "\t";
|
||||
case '\/':
|
||||
return "/";
|
||||
default:
|
||||
return html_entity_decode('&#x'.ltrim(substr($match[0], 2), '0').';', 0, 'UTF-8');
|
||||
}
|
||||
}
|
||||
|
||||
private function popStack($n)
|
||||
{
|
||||
$this->stack = array_slice($this->stack, 0, - (2 * $n));
|
||||
$this->vstack = array_slice($this->vstack, 0, - $n);
|
||||
$this->lstack = array_slice($this->lstack, 0, - $n);
|
||||
}
|
||||
|
||||
private function lex()
|
||||
{
|
||||
$token = $this->lexer->lex();
|
||||
if (!$token) {
|
||||
$token = 1;
|
||||
}
|
||||
// if token isn't its numeric value, convert
|
||||
if (!is_numeric($token)) {
|
||||
$token = isset($this->symbols[$token]) ? $this->symbols[$token] : $token;
|
||||
}
|
||||
|
||||
return $token;
|
||||
}
|
||||
|
||||
private function failOnBOM($input)
|
||||
{
|
||||
// UTF-8 ByteOrderMark sequence
|
||||
$bom = "\xEF\xBB\xBF";
|
||||
|
||||
if (substr($input, 0, 3) === $bom) {
|
||||
$this->parseError("BOM detected, make sure your input does not include a Unicode Byte-Order-Mark", array());
|
||||
}
|
||||
}
|
||||
}
|
215
externals/jsonlint/src/Seld/JsonLint/Lexer.php
vendored
Normal file
215
externals/jsonlint/src/Seld/JsonLint/Lexer.php
vendored
Normal file
|
@ -0,0 +1,215 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the JSON Lint package.
|
||||
*
|
||||
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Lexer class
|
||||
*
|
||||
* Ported from https://github.com/zaach/jsonlint
|
||||
*/
|
||||
class JsonLintLexer
|
||||
{
|
||||
private $EOF = 1;
|
||||
private $rules = array(
|
||||
0 => '/^\s+/',
|
||||
1 => '/^-?([0-9]|[1-9][0-9]+)(\.[0-9]+)?([eE][+-]?[0-9]+)?\b/',
|
||||
2 => '{^"(?>\\\\["bfnrt/\\\\]|\\\\u[a-fA-F0-9]{4}|[^\0-\x1f\\\\"]++)*+"}',
|
||||
3 => '/^\{/',
|
||||
4 => '/^\}/',
|
||||
5 => '/^\[/',
|
||||
6 => '/^\]/',
|
||||
7 => '/^,/',
|
||||
8 => '/^:/',
|
||||
9 => '/^true\b/',
|
||||
10 => '/^false\b/',
|
||||
11 => '/^null\b/',
|
||||
12 => '/^$/',
|
||||
13 => '/^./',
|
||||
);
|
||||
|
||||
private $conditions = array(
|
||||
"INITIAL" => array(
|
||||
"rules" => array(0,1,2,3,4,5,6,7,8,9,10,11,12,13),
|
||||
"inclusive" => true,
|
||||
),
|
||||
);
|
||||
|
||||
private $conditionStack;
|
||||
private $input;
|
||||
private $more;
|
||||
private $done;
|
||||
private $matched;
|
||||
|
||||
public $match;
|
||||
public $yylineno;
|
||||
public $yyleng;
|
||||
public $yytext;
|
||||
public $yylloc;
|
||||
|
||||
public function lex()
|
||||
{
|
||||
$r = $this->next();
|
||||
if (!$r instanceof JsonLintUndefined) {
|
||||
return $r;
|
||||
}
|
||||
|
||||
return $this->lex();
|
||||
}
|
||||
|
||||
public function setInput($input)
|
||||
{
|
||||
$this->input = $input;
|
||||
$this->more = false;
|
||||
$this->done = false;
|
||||
$this->yylineno = $this->yyleng = 0;
|
||||
$this->yytext = $this->matched = $this->match = '';
|
||||
$this->conditionStack = array('INITIAL');
|
||||
$this->yylloc = array('first_line' => 1, 'first_column' => 0, 'last_line' => 1, 'last_column' => 0);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function showPosition()
|
||||
{
|
||||
$pre = str_replace("\n", '', $this->getPastInput());
|
||||
$c = str_repeat('-', max(0, strlen($pre) - 1)); // new Array(pre.length + 1).join("-");
|
||||
|
||||
return $pre . str_replace("\n", '', $this->getUpcomingInput()) . "\n" . $c . "^";
|
||||
}
|
||||
|
||||
public function getPastInput()
|
||||
{
|
||||
$past = substr($this->matched, 0, strlen($this->matched) - strlen($this->match));
|
||||
|
||||
return (strlen($past) > 20 ? '...' : '') . substr($past, -20);
|
||||
}
|
||||
|
||||
public function getUpcomingInput()
|
||||
{
|
||||
$next = $this->match;
|
||||
if (strlen($next) < 20) {
|
||||
$next .= substr($this->input, 0, 20 - strlen($next));
|
||||
}
|
||||
|
||||
return substr($next, 0, 20) . (strlen($next) > 20 ? '...' : '');
|
||||
}
|
||||
|
||||
protected function parseError($str, $hash)
|
||||
{
|
||||
throw new Exception($str);
|
||||
}
|
||||
|
||||
private function next()
|
||||
{
|
||||
if ($this->done) {
|
||||
return $this->EOF;
|
||||
}
|
||||
if (!$this->input) {
|
||||
$this->done = true;
|
||||
}
|
||||
|
||||
$token = null;
|
||||
$match = null;
|
||||
$col = null;
|
||||
$lines = null;
|
||||
|
||||
if (!$this->more) {
|
||||
$this->yytext = '';
|
||||
$this->match = '';
|
||||
}
|
||||
|
||||
$rules = $this->getCurrentRules();
|
||||
$rulesLen = count($rules);
|
||||
|
||||
for ($i=0; $i < $rulesLen; $i++) {
|
||||
if (preg_match($this->rules[$rules[$i]], $this->input, $match)) {
|
||||
preg_match_all('/\n.*/', $match[0], $lines);
|
||||
$lines = $lines[0];
|
||||
if ($lines) {
|
||||
$this->yylineno += count($lines);
|
||||
}
|
||||
|
||||
$this->yylloc = array(
|
||||
'first_line' => $this->yylloc['last_line'],
|
||||
'last_line' => $this->yylineno+1,
|
||||
'first_column' => $this->yylloc['last_column'],
|
||||
'last_column' => $lines ? strlen($lines[count($lines) - 1]) - 1 : $this->yylloc['last_column'] + strlen($match[0]),
|
||||
);
|
||||
$this->yytext .= $match[0];
|
||||
$this->match .= $match[0];
|
||||
$this->yyleng = strlen($this->yytext);
|
||||
$this->more = false;
|
||||
$this->input = substr($this->input, strlen($match[0]));
|
||||
$this->matched .= $match[0];
|
||||
$token = $this->performAction($rules[$i], $this->conditionStack[count($this->conditionStack)-1]);
|
||||
if ($token) {
|
||||
return $token;
|
||||
}
|
||||
|
||||
return new JsonLintUndefined();
|
||||
}
|
||||
}
|
||||
|
||||
if ($this->input === "") {
|
||||
return $this->EOF;
|
||||
}
|
||||
|
||||
$this->parseError(
|
||||
'Lexical error on line ' . ($this->yylineno+1) . ". Unrecognized text.\n" . $this->showPosition(),
|
||||
array(
|
||||
'text' => "",
|
||||
'token' => null,
|
||||
'line' => $this->yylineno,
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
private function getCurrentRules()
|
||||
{
|
||||
return $this->conditions[$this->conditionStack[count($this->conditionStack)-1]]['rules'];
|
||||
}
|
||||
|
||||
private function performAction($avoiding_name_collisions, $YY_START)
|
||||
{
|
||||
switch ($avoiding_name_collisions) {
|
||||
case 0:/* skip whitespace */
|
||||
break;
|
||||
case 1:
|
||||
return 6;
|
||||
break;
|
||||
case 2:
|
||||
$this->yytext = substr($this->yytext, 1, $this->yyleng-2);
|
||||
|
||||
return 4;
|
||||
case 3:
|
||||
return 17;
|
||||
case 4:
|
||||
return 18;
|
||||
case 5:
|
||||
return 23;
|
||||
case 6:
|
||||
return 24;
|
||||
case 7:
|
||||
return 22;
|
||||
case 8:
|
||||
return 21;
|
||||
case 9:
|
||||
return 10;
|
||||
case 10:
|
||||
return 11;
|
||||
case 11:
|
||||
return 8;
|
||||
case 12:
|
||||
return 14;
|
||||
case 13:
|
||||
return 'INVALID';
|
||||
}
|
||||
}
|
||||
}
|
26
externals/jsonlint/src/Seld/JsonLint/ParsingException.php
vendored
Normal file
26
externals/jsonlint/src/Seld/JsonLint/ParsingException.php
vendored
Normal file
|
@ -0,0 +1,26 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the JSON Lint package.
|
||||
*
|
||||
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
class JsonLintParsingException extends Exception
|
||||
{
|
||||
protected $details;
|
||||
|
||||
public function __construct($message, $details = array())
|
||||
{
|
||||
$this->details = $details;
|
||||
parent::__construct($message);
|
||||
}
|
||||
|
||||
public function getDetails()
|
||||
{
|
||||
return $this->details;
|
||||
}
|
||||
}
|
14
externals/jsonlint/src/Seld/JsonLint/Undefined.php
vendored
Normal file
14
externals/jsonlint/src/Seld/JsonLint/Undefined.php
vendored
Normal file
|
@ -0,0 +1,14 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the JSON Lint package.
|
||||
*
|
||||
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
class JsonLintUndefined
|
||||
{
|
||||
}
|
64365
resources/php/symbol-information.json
Normal file
64365
resources/php/symbol-information.json
Normal file
File diff suppressed because it is too large
Load diff
45
resources/ssl/README
Normal file
45
resources/ssl/README
Normal file
|
@ -0,0 +1,45 @@
|
|||
This document describes how to set Certificate Authority information.
|
||||
Usually, you need to do this only if you're using a self-signed certificate.
|
||||
|
||||
|
||||
OSX after Yosemite
|
||||
==================
|
||||
|
||||
If you're using a version of Mac OSX after Yosemite, you can not configure
|
||||
certificates from the command line. All libphutil and arcanist options
|
||||
related to CA configuration are ignored.
|
||||
|
||||
Instead, you need to add them to the system keychain. The easiest way to do this
|
||||
is to visit the site in Safari and choose to permanently accept the certificate.
|
||||
|
||||
You can also use `security add-trusted-cert` from the command line.
|
||||
|
||||
|
||||
All Other Systems
|
||||
=================
|
||||
|
||||
If "curl.cainfo" is not set (or you are using PHP older than 5.3.7, where the
|
||||
option was introduced), libphutil uses the "default.pem" certificate authority
|
||||
bundle when making HTTPS requests with cURL. This bundle is extracted from
|
||||
Mozilla's certificates by cURL:
|
||||
|
||||
http://curl.haxx.se/docs/caextract.html
|
||||
|
||||
If you want to use a different CA bundle (for example, because you use
|
||||
self-signed certificates), set "curl.cainfo" if you're using PHP 5.3.7 or newer,
|
||||
or create a file (or symlink) in this directory named "custom.pem".
|
||||
|
||||
If "custom.pem" is present, that file will be used instead of "default.pem".
|
||||
|
||||
If you receive errors using your "custom.pem" file, you can test it directly
|
||||
with `curl` by running a command like this:
|
||||
|
||||
curl -v --cacert path/to/your/custom.pem https://phabricator.example.com/
|
||||
|
||||
Replace "path/to/your/custom.pem" with the path to your "custom.pem" file,
|
||||
and replace "https://phabricator.example.com" with the real URL of your
|
||||
Phabricator install.
|
||||
|
||||
The initial lines of output from `curl` should give you information about the
|
||||
SSL handshake and certificate verification, which may be helpful in resolving
|
||||
the issue.
|
3893
resources/ssl/default.pem
Normal file
3893
resources/ssl/default.pem
Normal file
File diff suppressed because it is too large
Load diff
|
@ -1,58 +1,3 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* Adjust 'include_path' to add locations where we'll search for libphutil.
|
||||
* We look in these places:
|
||||
*
|
||||
* - Next to 'arcanist/'.
|
||||
* - Anywhere in the normal PHP 'include_path'.
|
||||
* - Inside 'arcanist/externals/includes/'.
|
||||
*
|
||||
* When looking in these places, we expect to find a 'libphutil/' directory.
|
||||
*/
|
||||
function arcanist_adjust_php_include_path() {
|
||||
// The 'arcanist/' directory.
|
||||
$arcanist_dir = dirname(dirname(__FILE__));
|
||||
|
||||
// The parent directory of 'arcanist/'.
|
||||
$parent_dir = dirname($arcanist_dir);
|
||||
|
||||
// The 'arcanist/externals/includes/' directory.
|
||||
$include_dir = implode(
|
||||
DIRECTORY_SEPARATOR,
|
||||
array(
|
||||
$arcanist_dir,
|
||||
'externals',
|
||||
'includes',
|
||||
));
|
||||
|
||||
$php_include_path = ini_get('include_path');
|
||||
$php_include_path = implode(
|
||||
PATH_SEPARATOR,
|
||||
array(
|
||||
$parent_dir,
|
||||
$php_include_path,
|
||||
$include_dir,
|
||||
));
|
||||
|
||||
ini_set('include_path', $php_include_path);
|
||||
}
|
||||
arcanist_adjust_php_include_path();
|
||||
|
||||
if (getenv('ARC_PHUTIL_PATH')) {
|
||||
@include_once getenv('ARC_PHUTIL_PATH').'/scripts/__init_script__.php';
|
||||
} else {
|
||||
@include_once 'libphutil/scripts/__init_script__.php';
|
||||
}
|
||||
if (!@constant('__LIBPHUTIL__')) {
|
||||
echo "ERROR: Unable to load libphutil. Put libphutil/ next to arcanist/, or ".
|
||||
"update your PHP 'include_path' to include the parent directory of ".
|
||||
"libphutil/, or symlink libphutil/ into arcanist/externals/includes/.\n";
|
||||
exit(1);
|
||||
}
|
||||
|
||||
phutil_load_library(dirname(dirname(__FILE__)).'/src/');
|
||||
|
||||
PhutilTranslator::getInstance()
|
||||
->setLocale(PhutilLocale::loadLocale('en_US'))
|
||||
->setTranslations(PhutilTranslation::getTranslationMapForLocale('en_US'));
|
||||
require_once dirname(dirname(__FILE__)).'/scripts/init/init-script.php';
|
||||
|
|
|
@ -81,7 +81,6 @@ try {
|
|||
csprintf('%Ls', $original_argv));
|
||||
|
||||
$libraries = array(
|
||||
'phutil',
|
||||
'arcanist',
|
||||
);
|
||||
|
||||
|
@ -621,7 +620,7 @@ function arcanist_load_libraries(
|
|||
|
||||
$error = null;
|
||||
try {
|
||||
phutil_load_library($location);
|
||||
require_once $location.'/__phutil_library_init__.php';
|
||||
} catch (PhutilBootloaderException $ex) {
|
||||
$error = pht(
|
||||
"Failed to load phutil library at location '%s'. This library ".
|
||||
|
|
100
scripts/init/init-script.php
Normal file
100
scripts/init/init-script.php
Normal file
|
@ -0,0 +1,100 @@
|
|||
<?php
|
||||
|
||||
if (function_exists('pcntl_async_signals')) {
|
||||
pcntl_async_signals(true);
|
||||
} else {
|
||||
declare(ticks = 1);
|
||||
}
|
||||
|
||||
function __phutil_init_script__() {
|
||||
// Adjust the runtime language configuration to be reasonable and inline with
|
||||
// expectations. We do this first, then load libraries.
|
||||
|
||||
// There may be some kind of auto-prepend script configured which starts an
|
||||
// output buffer. Discard any such output buffers so messages can be sent to
|
||||
// stdout (if a user wants to capture output from a script, there are a large
|
||||
// number of ways they can accomplish it legitimately; historically, we ran
|
||||
// into this on only one install which had some bizarre configuration, but it
|
||||
// was difficult to diagnose because the symptom is "no messages of any
|
||||
// kind").
|
||||
while (ob_get_level() > 0) {
|
||||
ob_end_clean();
|
||||
}
|
||||
|
||||
error_reporting(E_ALL | E_STRICT);
|
||||
|
||||
$config_map = array(
|
||||
// Always display script errors. Without this, they may not appear, which is
|
||||
// unhelpful when users encounter a problem. On the web this is a security
|
||||
// concern because you don't want to expose errors to clients, but in a
|
||||
// script context we always want to show errors.
|
||||
'display_errors' => true,
|
||||
|
||||
// Send script error messages to the server's `error_log` setting.
|
||||
'log_errors' => true,
|
||||
|
||||
// Set the error log to the default, so errors go to stderr. Without this
|
||||
// errors may end up in some log, and users may not know where the log is
|
||||
// or check it.
|
||||
'error_log' => null,
|
||||
|
||||
// XDebug raises a fatal error if the call stack gets too deep, but the
|
||||
// default setting is 100, which we may exceed legitimately with module
|
||||
// includes (and in other cases, like recursive filesystem operations
|
||||
// applied to 100+ levels of directory nesting). Stop it from triggering:
|
||||
// we explicitly limit recursive algorithms which should be limited.
|
||||
//
|
||||
// After Feb 2014, XDebug interprets a value of 0 to mean "do not allow any
|
||||
// function calls". Previously, 0 effectively disabled this check. For
|
||||
// context, see T5027.
|
||||
'xdebug.max_nesting_level' => PHP_INT_MAX,
|
||||
|
||||
// Don't limit memory, doing so just generally just prevents us from
|
||||
// processing large inputs without many tangible benefits.
|
||||
'memory_limit' => -1,
|
||||
|
||||
// See T13296. On macOS under PHP 7.3.x, PCRE currently segfaults after
|
||||
// "fork()" if "pcre.jit" is enabled.
|
||||
'pcre.jit' => 0,
|
||||
);
|
||||
|
||||
foreach ($config_map as $config_key => $config_value) {
|
||||
ini_set($config_key, $config_value);
|
||||
}
|
||||
|
||||
if (!ini_get('date.timezone')) {
|
||||
// If the timezone isn't set, PHP issues a warning whenever you try to parse
|
||||
// a date (like those from Git or Mercurial logs), even if the date contains
|
||||
// timezone information (like "PST" or "-0700") which makes the
|
||||
// environmental timezone setting is completely irrelevant. We never rely on
|
||||
// the system timezone setting in any capacity, so prevent PHP from flipping
|
||||
// out by setting it to a safe default (UTC) if it isn't set to some other
|
||||
// value.
|
||||
date_default_timezone_set('UTC');
|
||||
}
|
||||
|
||||
// Adjust `include_path`.
|
||||
ini_set('include_path', implode(PATH_SEPARATOR, array(
|
||||
dirname(dirname(__FILE__)).'/externals/includes',
|
||||
ini_get('include_path'),
|
||||
)));
|
||||
|
||||
// Disable the insanely dangerous XML entity loader by default.
|
||||
if (function_exists('libxml_disable_entity_loader')) {
|
||||
libxml_disable_entity_loader(true);
|
||||
}
|
||||
|
||||
$root = dirname(dirname(dirname(__FILE__)));
|
||||
require_once $root.'/src/init/init-library.php';
|
||||
|
||||
PhutilErrorHandler::initialize();
|
||||
$router = PhutilSignalRouter::initialize();
|
||||
|
||||
$handler = new PhutilBacktraceSignalHandler();
|
||||
$router->installHandler('phutil.backtrace', $handler);
|
||||
|
||||
$handler = new PhutilConsoleMetricsSignalHandler();
|
||||
$router->installHandler('phutil.winch', $handler);
|
||||
}
|
||||
|
||||
__phutil_init_script__();
|
|
@ -1,3 +1,3 @@
|
|||
<?php
|
||||
|
||||
phutil_register_library('arcanist', __FILE__);
|
||||
require_once dirname(__FILE__).'/init/init-library.php';
|
||||
|
|
|
@ -9,6 +9,12 @@
|
|||
phutil_register_library_map(array(
|
||||
'__library_version__' => 2,
|
||||
'class' => array(
|
||||
'AASTNode' => 'parser/aast/api/AASTNode.php',
|
||||
'AASTNodeList' => 'parser/aast/api/AASTNodeList.php',
|
||||
'AASTToken' => 'parser/aast/api/AASTToken.php',
|
||||
'AASTTree' => 'parser/aast/api/AASTTree.php',
|
||||
'AbstractDirectedGraph' => 'utils/AbstractDirectedGraph.php',
|
||||
'AbstractDirectedGraphTestCase' => 'utils/__tests__/AbstractDirectedGraphTestCase.php',
|
||||
'ArcanistAbstractMethodBodyXHPASTLinterRule' => 'lint/linter/xhpast/rules/ArcanistAbstractMethodBodyXHPASTLinterRule.php',
|
||||
'ArcanistAbstractMethodBodyXHPASTLinterRuleTestCase' => 'lint/linter/xhpast/rules/__tests__/ArcanistAbstractMethodBodyXHPASTLinterRuleTestCase.php',
|
||||
'ArcanistAbstractPrivateMethodXHPASTLinterRule' => 'lint/linter/xhpast/rules/ArcanistAbstractPrivateMethodXHPASTLinterRule.php',
|
||||
|
@ -418,22 +424,466 @@ phutil_register_library_map(array(
|
|||
'ArcanistXMLLinter' => 'lint/linter/ArcanistXMLLinter.php',
|
||||
'ArcanistXMLLinterTestCase' => 'lint/linter/__tests__/ArcanistXMLLinterTestCase.php',
|
||||
'ArcanistXUnitTestResultParser' => 'unit/parser/ArcanistXUnitTestResultParser.php',
|
||||
'BaseHTTPFuture' => 'future/http/BaseHTTPFuture.php',
|
||||
'CSharpToolsTestEngine' => 'unit/engine/CSharpToolsTestEngine.php',
|
||||
'CaseInsensitiveArray' => 'utils/CaseInsensitiveArray.php',
|
||||
'CaseInsensitiveArrayTestCase' => 'utils/__tests__/CaseInsensitiveArrayTestCase.php',
|
||||
'CommandException' => 'future/exec/CommandException.php',
|
||||
'ConduitClient' => 'conduit/ConduitClient.php',
|
||||
'ConduitClientException' => 'conduit/ConduitClientException.php',
|
||||
'ConduitClientTestCase' => 'conduit/__tests__/ConduitClientTestCase.php',
|
||||
'ConduitFuture' => 'conduit/ConduitFuture.php',
|
||||
'ExecFuture' => 'future/exec/ExecFuture.php',
|
||||
'ExecFutureTestCase' => 'future/exec/__tests__/ExecFutureTestCase.php',
|
||||
'ExecPassthruTestCase' => 'future/exec/__tests__/ExecPassthruTestCase.php',
|
||||
'FileFinder' => 'filesystem/FileFinder.php',
|
||||
'FileFinderTestCase' => 'filesystem/__tests__/FileFinderTestCase.php',
|
||||
'FileList' => 'filesystem/FileList.php',
|
||||
'Filesystem' => 'filesystem/Filesystem.php',
|
||||
'FilesystemException' => 'filesystem/FilesystemException.php',
|
||||
'FilesystemTestCase' => 'filesystem/__tests__/FilesystemTestCase.php',
|
||||
'Future' => 'future/Future.php',
|
||||
'FutureIterator' => 'future/FutureIterator.php',
|
||||
'FutureIteratorTestCase' => 'future/__tests__/FutureIteratorTestCase.php',
|
||||
'FutureProxy' => 'future/FutureProxy.php',
|
||||
'HTTPFuture' => 'future/http/HTTPFuture.php',
|
||||
'HTTPFutureCURLResponseStatus' => 'future/http/status/HTTPFutureCURLResponseStatus.php',
|
||||
'HTTPFutureCertificateResponseStatus' => 'future/http/status/HTTPFutureCertificateResponseStatus.php',
|
||||
'HTTPFutureHTTPResponseStatus' => 'future/http/status/HTTPFutureHTTPResponseStatus.php',
|
||||
'HTTPFutureParseResponseStatus' => 'future/http/status/HTTPFutureParseResponseStatus.php',
|
||||
'HTTPFutureResponseStatus' => 'future/http/status/HTTPFutureResponseStatus.php',
|
||||
'HTTPFutureTransportResponseStatus' => 'future/http/status/HTTPFutureTransportResponseStatus.php',
|
||||
'HTTPSFuture' => 'future/http/HTTPSFuture.php',
|
||||
'ImmediateFuture' => 'future/ImmediateFuture.php',
|
||||
'LibphutilUSEnglishTranslation' => 'internationalization/translation/LibphutilUSEnglishTranslation.php',
|
||||
'LinesOfALarge' => 'filesystem/linesofalarge/LinesOfALarge.php',
|
||||
'LinesOfALargeExecFuture' => 'filesystem/linesofalarge/LinesOfALargeExecFuture.php',
|
||||
'LinesOfALargeExecFutureTestCase' => 'filesystem/linesofalarge/__tests__/LinesOfALargeExecFutureTestCase.php',
|
||||
'LinesOfALargeFile' => 'filesystem/linesofalarge/LinesOfALargeFile.php',
|
||||
'LinesOfALargeFileTestCase' => 'filesystem/linesofalarge/__tests__/LinesOfALargeFileTestCase.php',
|
||||
'MFilterTestHelper' => 'utils/__tests__/MFilterTestHelper.php',
|
||||
'NoseTestEngine' => 'unit/engine/NoseTestEngine.php',
|
||||
'PHPASTParserTestCase' => 'parser/xhpast/__tests__/PHPASTParserTestCase.php',
|
||||
'PhageAction' => 'phage/action/PhageAction.php',
|
||||
'PhageAgentAction' => 'phage/action/PhageAgentAction.php',
|
||||
'PhageAgentBootloader' => 'phage/bootloader/PhageAgentBootloader.php',
|
||||
'PhageAgentTestCase' => 'phage/__tests__/PhageAgentTestCase.php',
|
||||
'PhageExecuteAction' => 'phage/action/PhageExecuteAction.php',
|
||||
'PhageLocalAction' => 'phage/action/PhageLocalAction.php',
|
||||
'PhagePHPAgent' => 'phage/agent/PhagePHPAgent.php',
|
||||
'PhagePHPAgentBootloader' => 'phage/bootloader/PhagePHPAgentBootloader.php',
|
||||
'PhagePlanAction' => 'phage/action/PhagePlanAction.php',
|
||||
'Phobject' => 'object/Phobject.php',
|
||||
'PhobjectTestCase' => 'object/__tests__/PhobjectTestCase.php',
|
||||
'PhpunitTestEngine' => 'unit/engine/PhpunitTestEngine.php',
|
||||
'PhpunitTestEngineTestCase' => 'unit/engine/__tests__/PhpunitTestEngineTestCase.php',
|
||||
'PhutilAWSCloudFormationFuture' => 'future/aws/PhutilAWSCloudFormationFuture.php',
|
||||
'PhutilAWSCloudWatchFuture' => 'future/aws/PhutilAWSCloudWatchFuture.php',
|
||||
'PhutilAWSEC2Future' => 'future/aws/PhutilAWSEC2Future.php',
|
||||
'PhutilAWSException' => 'future/aws/PhutilAWSException.php',
|
||||
'PhutilAWSFuture' => 'future/aws/PhutilAWSFuture.php',
|
||||
'PhutilAWSManagementWorkflow' => 'future/aws/management/PhutilAWSManagementWorkflow.php',
|
||||
'PhutilAWSS3DeleteManagementWorkflow' => 'future/aws/management/PhutilAWSS3DeleteManagementWorkflow.php',
|
||||
'PhutilAWSS3Future' => 'future/aws/PhutilAWSS3Future.php',
|
||||
'PhutilAWSS3GetManagementWorkflow' => 'future/aws/management/PhutilAWSS3GetManagementWorkflow.php',
|
||||
'PhutilAWSS3ManagementWorkflow' => 'future/aws/management/PhutilAWSS3ManagementWorkflow.php',
|
||||
'PhutilAWSS3PutManagementWorkflow' => 'future/aws/management/PhutilAWSS3PutManagementWorkflow.php',
|
||||
'PhutilAWSv4Signature' => 'future/aws/PhutilAWSv4Signature.php',
|
||||
'PhutilAWSv4SignatureTestCase' => 'future/aws/__tests__/PhutilAWSv4SignatureTestCase.php',
|
||||
'PhutilAggregateException' => 'error/PhutilAggregateException.php',
|
||||
'PhutilAllCapsEnglishLocale' => 'internationalization/locales/PhutilAllCapsEnglishLocale.php',
|
||||
'PhutilArgumentParser' => 'parser/argument/PhutilArgumentParser.php',
|
||||
'PhutilArgumentParserException' => 'parser/argument/exception/PhutilArgumentParserException.php',
|
||||
'PhutilArgumentParserTestCase' => 'parser/argument/__tests__/PhutilArgumentParserTestCase.php',
|
||||
'PhutilArgumentSpecification' => 'parser/argument/PhutilArgumentSpecification.php',
|
||||
'PhutilArgumentSpecificationException' => 'parser/argument/exception/PhutilArgumentSpecificationException.php',
|
||||
'PhutilArgumentSpecificationTestCase' => 'parser/argument/__tests__/PhutilArgumentSpecificationTestCase.php',
|
||||
'PhutilArgumentSpellingCorrector' => 'parser/argument/PhutilArgumentSpellingCorrector.php',
|
||||
'PhutilArgumentSpellingCorrectorTestCase' => 'parser/argument/__tests__/PhutilArgumentSpellingCorrectorTestCase.php',
|
||||
'PhutilArgumentUsageException' => 'parser/argument/exception/PhutilArgumentUsageException.php',
|
||||
'PhutilArgumentWorkflow' => 'parser/argument/workflow/PhutilArgumentWorkflow.php',
|
||||
'PhutilArray' => 'utils/PhutilArray.php',
|
||||
'PhutilArrayTestCase' => 'utils/__tests__/PhutilArrayTestCase.php',
|
||||
'PhutilArrayWithDefaultValue' => 'utils/PhutilArrayWithDefaultValue.php',
|
||||
'PhutilAsanaFuture' => 'future/asana/PhutilAsanaFuture.php',
|
||||
'PhutilBacktraceSignalHandler' => 'future/exec/PhutilBacktraceSignalHandler.php',
|
||||
'PhutilBallOfPHP' => 'phage/util/PhutilBallOfPHP.php',
|
||||
'PhutilBinaryAnalyzer' => 'filesystem/binary/PhutilBinaryAnalyzer.php',
|
||||
'PhutilBinaryAnalyzerTestCase' => 'filesystem/binary/__tests__/PhutilBinaryAnalyzerTestCase.php',
|
||||
'PhutilBootloader' => 'init/lib/PhutilBootloader.php',
|
||||
'PhutilBootloaderException' => 'init/lib/PhutilBootloaderException.php',
|
||||
'PhutilBritishEnglishLocale' => 'internationalization/locales/PhutilBritishEnglishLocale.php',
|
||||
'PhutilBufferedIterator' => 'utils/PhutilBufferedIterator.php',
|
||||
'PhutilBufferedIteratorTestCase' => 'utils/__tests__/PhutilBufferedIteratorTestCase.php',
|
||||
'PhutilBugtraqParser' => 'parser/PhutilBugtraqParser.php',
|
||||
'PhutilBugtraqParserTestCase' => 'parser/__tests__/PhutilBugtraqParserTestCase.php',
|
||||
'PhutilCIDRBlock' => 'ip/PhutilCIDRBlock.php',
|
||||
'PhutilCIDRList' => 'ip/PhutilCIDRList.php',
|
||||
'PhutilCallbackFilterIterator' => 'utils/PhutilCallbackFilterIterator.php',
|
||||
'PhutilCallbackSignalHandler' => 'future/exec/PhutilCallbackSignalHandler.php',
|
||||
'PhutilChannel' => 'channel/PhutilChannel.php',
|
||||
'PhutilChannelChannel' => 'channel/PhutilChannelChannel.php',
|
||||
'PhutilChannelTestCase' => 'channel/__tests__/PhutilChannelTestCase.php',
|
||||
'PhutilChunkedIterator' => 'utils/PhutilChunkedIterator.php',
|
||||
'PhutilChunkedIteratorTestCase' => 'utils/__tests__/PhutilChunkedIteratorTestCase.php',
|
||||
'PhutilClassMapQuery' => 'symbols/PhutilClassMapQuery.php',
|
||||
'PhutilCloudWatchMetric' => 'future/aws/PhutilCloudWatchMetric.php',
|
||||
'PhutilCommandString' => 'xsprintf/PhutilCommandString.php',
|
||||
'PhutilConsole' => 'console/PhutilConsole.php',
|
||||
'PhutilConsoleBlock' => 'console/view/PhutilConsoleBlock.php',
|
||||
'PhutilConsoleError' => 'console/view/PhutilConsoleError.php',
|
||||
'PhutilConsoleFormatter' => 'console/PhutilConsoleFormatter.php',
|
||||
'PhutilConsoleInfo' => 'console/view/PhutilConsoleInfo.php',
|
||||
'PhutilConsoleList' => 'console/view/PhutilConsoleList.php',
|
||||
'PhutilConsoleLogLine' => 'console/view/PhutilConsoleLogLine.php',
|
||||
'PhutilConsoleMessage' => 'console/PhutilConsoleMessage.php',
|
||||
'PhutilConsoleMetrics' => 'console/PhutilConsoleMetrics.php',
|
||||
'PhutilConsoleMetricsSignalHandler' => 'future/exec/PhutilConsoleMetricsSignalHandler.php',
|
||||
'PhutilConsoleProgressBar' => 'console/PhutilConsoleProgressBar.php',
|
||||
'PhutilConsoleProgressSink' => 'progress/PhutilConsoleProgressSink.php',
|
||||
'PhutilConsoleServer' => 'console/PhutilConsoleServer.php',
|
||||
'PhutilConsoleServerChannel' => 'console/PhutilConsoleServerChannel.php',
|
||||
'PhutilConsoleSkip' => 'console/view/PhutilConsoleSkip.php',
|
||||
'PhutilConsoleStdinNotInteractiveException' => 'console/PhutilConsoleStdinNotInteractiveException.php',
|
||||
'PhutilConsoleTable' => 'console/view/PhutilConsoleTable.php',
|
||||
'PhutilConsoleView' => 'console/view/PhutilConsoleView.php',
|
||||
'PhutilConsoleWarning' => 'console/view/PhutilConsoleWarning.php',
|
||||
'PhutilConsoleWrapTestCase' => 'console/__tests__/PhutilConsoleWrapTestCase.php',
|
||||
'PhutilCowsay' => 'utils/PhutilCowsay.php',
|
||||
'PhutilCowsayTestCase' => 'utils/__tests__/PhutilCowsayTestCase.php',
|
||||
'PhutilCsprintfTestCase' => 'xsprintf/__tests__/PhutilCsprintfTestCase.php',
|
||||
'PhutilCzechLocale' => 'internationalization/locales/PhutilCzechLocale.php',
|
||||
'PhutilDOMNode' => 'parser/html/PhutilDOMNode.php',
|
||||
'PhutilDeferredLog' => 'filesystem/PhutilDeferredLog.php',
|
||||
'PhutilDeferredLogTestCase' => 'filesystem/__tests__/PhutilDeferredLogTestCase.php',
|
||||
'PhutilDiffBinaryAnalyzer' => 'filesystem/binary/PhutilDiffBinaryAnalyzer.php',
|
||||
'PhutilDirectedScalarGraph' => 'utils/PhutilDirectedScalarGraph.php',
|
||||
'PhutilDirectoryFixture' => 'filesystem/PhutilDirectoryFixture.php',
|
||||
'PhutilDocblockParser' => 'parser/PhutilDocblockParser.php',
|
||||
'PhutilDocblockParserTestCase' => 'parser/__tests__/PhutilDocblockParserTestCase.php',
|
||||
'PhutilEditDistanceMatrix' => 'utils/PhutilEditDistanceMatrix.php',
|
||||
'PhutilEditDistanceMatrixTestCase' => 'utils/__tests__/PhutilEditDistanceMatrixTestCase.php',
|
||||
'PhutilEditorConfig' => 'parser/PhutilEditorConfig.php',
|
||||
'PhutilEditorConfigTestCase' => 'parser/__tests__/PhutilEditorConfigTestCase.php',
|
||||
'PhutilEmailAddress' => 'parser/PhutilEmailAddress.php',
|
||||
'PhutilEmailAddressTestCase' => 'parser/__tests__/PhutilEmailAddressTestCase.php',
|
||||
'PhutilEmojiLocale' => 'internationalization/locales/PhutilEmojiLocale.php',
|
||||
'PhutilEnglishCanadaLocale' => 'internationalization/locales/PhutilEnglishCanadaLocale.php',
|
||||
'PhutilErrorHandler' => 'error/PhutilErrorHandler.php',
|
||||
'PhutilErrorHandlerTestCase' => 'error/__tests__/PhutilErrorHandlerTestCase.php',
|
||||
'PhutilErrorTrap' => 'error/PhutilErrorTrap.php',
|
||||
'PhutilEvent' => 'events/PhutilEvent.php',
|
||||
'PhutilEventConstants' => 'events/constant/PhutilEventConstants.php',
|
||||
'PhutilEventEngine' => 'events/PhutilEventEngine.php',
|
||||
'PhutilEventListener' => 'events/PhutilEventListener.php',
|
||||
'PhutilEventType' => 'events/constant/PhutilEventType.php',
|
||||
'PhutilExampleBufferedIterator' => 'utils/PhutilExampleBufferedIterator.php',
|
||||
'PhutilExecChannel' => 'channel/PhutilExecChannel.php',
|
||||
'PhutilExecPassthru' => 'future/exec/PhutilExecPassthru.php',
|
||||
'PhutilExecutableFuture' => 'future/exec/PhutilExecutableFuture.php',
|
||||
'PhutilExecutionEnvironment' => 'utils/PhutilExecutionEnvironment.php',
|
||||
'PhutilFileLock' => 'filesystem/PhutilFileLock.php',
|
||||
'PhutilFileLockTestCase' => 'filesystem/__tests__/PhutilFileLockTestCase.php',
|
||||
'PhutilFileTree' => 'filesystem/PhutilFileTree.php',
|
||||
'PhutilFrenchLocale' => 'internationalization/locales/PhutilFrenchLocale.php',
|
||||
'PhutilGermanLocale' => 'internationalization/locales/PhutilGermanLocale.php',
|
||||
'PhutilGitBinaryAnalyzer' => 'filesystem/binary/PhutilGitBinaryAnalyzer.php',
|
||||
'PhutilGitHubFuture' => 'future/github/PhutilGitHubFuture.php',
|
||||
'PhutilGitHubResponse' => 'future/github/PhutilGitHubResponse.php',
|
||||
'PhutilGitURI' => 'parser/PhutilGitURI.php',
|
||||
'PhutilGitURITestCase' => 'parser/__tests__/PhutilGitURITestCase.php',
|
||||
'PhutilHTMLParser' => 'parser/html/PhutilHTMLParser.php',
|
||||
'PhutilHTMLParserTestCase' => 'parser/html/__tests__/PhutilHTMLParserTestCase.php',
|
||||
'PhutilHTTPEngineExtension' => 'future/http/PhutilHTTPEngineExtension.php',
|
||||
'PhutilHTTPResponse' => 'parser/http/PhutilHTTPResponse.php',
|
||||
'PhutilHTTPResponseParser' => 'parser/http/PhutilHTTPResponseParser.php',
|
||||
'PhutilHTTPResponseParserTestCase' => 'parser/http/__tests__/PhutilHTTPResponseParserTestCase.php',
|
||||
'PhutilHashingIterator' => 'utils/PhutilHashingIterator.php',
|
||||
'PhutilHashingIteratorTestCase' => 'utils/__tests__/PhutilHashingIteratorTestCase.php',
|
||||
'PhutilHelpArgumentWorkflow' => 'parser/argument/workflow/PhutilHelpArgumentWorkflow.php',
|
||||
'PhutilHgsprintfTestCase' => 'xsprintf/__tests__/PhutilHgsprintfTestCase.php',
|
||||
'PhutilINIParserException' => 'parser/exception/PhutilINIParserException.php',
|
||||
'PhutilIPAddress' => 'ip/PhutilIPAddress.php',
|
||||
'PhutilIPAddressTestCase' => 'ip/__tests__/PhutilIPAddressTestCase.php',
|
||||
'PhutilIPv4Address' => 'ip/PhutilIPv4Address.php',
|
||||
'PhutilIPv6Address' => 'ip/PhutilIPv6Address.php',
|
||||
'PhutilInteractiveEditor' => 'console/PhutilInteractiveEditor.php',
|
||||
'PhutilInvalidRuleParserGeneratorException' => 'parser/generator/exception/PhutilInvalidRuleParserGeneratorException.php',
|
||||
'PhutilInvalidStateException' => 'exception/PhutilInvalidStateException.php',
|
||||
'PhutilInvalidStateExceptionTestCase' => 'exception/__tests__/PhutilInvalidStateExceptionTestCase.php',
|
||||
'PhutilIrreducibleRuleParserGeneratorException' => 'parser/generator/exception/PhutilIrreducibleRuleParserGeneratorException.php',
|
||||
'PhutilJSON' => 'parser/PhutilJSON.php',
|
||||
'PhutilJSONFragmentLexer' => 'lexer/PhutilJSONFragmentLexer.php',
|
||||
'PhutilJSONParser' => 'parser/PhutilJSONParser.php',
|
||||
'PhutilJSONParserException' => 'parser/exception/PhutilJSONParserException.php',
|
||||
'PhutilJSONParserTestCase' => 'parser/__tests__/PhutilJSONParserTestCase.php',
|
||||
'PhutilJSONProtocolChannel' => 'channel/PhutilJSONProtocolChannel.php',
|
||||
'PhutilJSONProtocolChannelTestCase' => 'channel/__tests__/PhutilJSONProtocolChannelTestCase.php',
|
||||
'PhutilJSONTestCase' => 'parser/__tests__/PhutilJSONTestCase.php',
|
||||
'PhutilJavaFragmentLexer' => 'lexer/PhutilJavaFragmentLexer.php',
|
||||
'PhutilKoreanLocale' => 'internationalization/locales/PhutilKoreanLocale.php',
|
||||
'PhutilLanguageGuesser' => 'parser/PhutilLanguageGuesser.php',
|
||||
'PhutilLanguageGuesserTestCase' => 'parser/__tests__/PhutilLanguageGuesserTestCase.php',
|
||||
'PhutilLexer' => 'lexer/PhutilLexer.php',
|
||||
'PhutilLibraryConflictException' => 'init/lib/PhutilLibraryConflictException.php',
|
||||
'PhutilLibraryMapBuilder' => 'moduleutils/PhutilLibraryMapBuilder.php',
|
||||
'PhutilLibraryTestCase' => '__tests__/PhutilLibraryTestCase.php',
|
||||
'PhutilLocale' => 'internationalization/PhutilLocale.php',
|
||||
'PhutilLocaleTestCase' => 'internationalization/__tests__/PhutilLocaleTestCase.php',
|
||||
'PhutilLock' => 'filesystem/PhutilLock.php',
|
||||
'PhutilLockException' => 'filesystem/PhutilLockException.php',
|
||||
'PhutilLogFileChannel' => 'channel/PhutilLogFileChannel.php',
|
||||
'PhutilLunarPhase' => 'utils/PhutilLunarPhase.php',
|
||||
'PhutilLunarPhaseTestCase' => 'utils/__tests__/PhutilLunarPhaseTestCase.php',
|
||||
'PhutilMercurialBinaryAnalyzer' => 'filesystem/binary/PhutilMercurialBinaryAnalyzer.php',
|
||||
'PhutilMethodNotImplementedException' => 'error/PhutilMethodNotImplementedException.php',
|
||||
'PhutilMetricsChannel' => 'channel/PhutilMetricsChannel.php',
|
||||
'PhutilMissingSymbolException' => 'init/lib/PhutilMissingSymbolException.php',
|
||||
'PhutilModuleUtilsTestCase' => 'init/lib/__tests__/PhutilModuleUtilsTestCase.php',
|
||||
'PhutilNumber' => 'internationalization/PhutilNumber.php',
|
||||
'PhutilOAuth1Future' => 'future/oauth/PhutilOAuth1Future.php',
|
||||
'PhutilOAuth1FutureTestCase' => 'future/oauth/__tests__/PhutilOAuth1FutureTestCase.php',
|
||||
'PhutilOpaqueEnvelope' => 'error/PhutilOpaqueEnvelope.php',
|
||||
'PhutilOpaqueEnvelopeKey' => 'error/PhutilOpaqueEnvelopeKey.php',
|
||||
'PhutilOpaqueEnvelopeTestCase' => 'error/__tests__/PhutilOpaqueEnvelopeTestCase.php',
|
||||
'PhutilPHPFragmentLexer' => 'lexer/PhutilPHPFragmentLexer.php',
|
||||
'PhutilPHPFragmentLexerTestCase' => 'lexer/__tests__/PhutilPHPFragmentLexerTestCase.php',
|
||||
'PhutilPHPObjectProtocolChannel' => 'channel/PhutilPHPObjectProtocolChannel.php',
|
||||
'PhutilPHPObjectProtocolChannelTestCase' => 'channel/__tests__/PhutilPHPObjectProtocolChannelTestCase.php',
|
||||
'PhutilParserGenerator' => 'parser/PhutilParserGenerator.php',
|
||||
'PhutilParserGeneratorException' => 'parser/generator/exception/PhutilParserGeneratorException.php',
|
||||
'PhutilParserGeneratorTestCase' => 'parser/__tests__/PhutilParserGeneratorTestCase.php',
|
||||
'PhutilPayPalAPIFuture' => 'future/paypal/PhutilPayPalAPIFuture.php',
|
||||
'PhutilPerson' => 'internationalization/PhutilPerson.php',
|
||||
'PhutilPersonTest' => 'internationalization/__tests__/PhutilPersonTest.php',
|
||||
'PhutilPhtTestCase' => 'internationalization/__tests__/PhutilPhtTestCase.php',
|
||||
'PhutilPirateEnglishLocale' => 'internationalization/locales/PhutilPirateEnglishLocale.php',
|
||||
'PhutilPortugueseBrazilLocale' => 'internationalization/locales/PhutilPortugueseBrazilLocale.php',
|
||||
'PhutilPortuguesePortugalLocale' => 'internationalization/locales/PhutilPortuguesePortugalLocale.php',
|
||||
'PhutilPostmarkFuture' => 'future/postmark/PhutilPostmarkFuture.php',
|
||||
'PhutilPregsprintfTestCase' => 'xsprintf/__tests__/PhutilPregsprintfTestCase.php',
|
||||
'PhutilProcessQuery' => 'filesystem/PhutilProcessQuery.php',
|
||||
'PhutilProcessRef' => 'filesystem/PhutilProcessRef.php',
|
||||
'PhutilProcessRefTestCase' => 'filesystem/__tests__/PhutilProcessRefTestCase.php',
|
||||
'PhutilProgressSink' => 'progress/PhutilProgressSink.php',
|
||||
'PhutilProtocolChannel' => 'channel/PhutilProtocolChannel.php',
|
||||
'PhutilProxyException' => 'error/PhutilProxyException.php',
|
||||
'PhutilProxyIterator' => 'utils/PhutilProxyIterator.php',
|
||||
'PhutilPygmentizeBinaryAnalyzer' => 'filesystem/binary/PhutilPygmentizeBinaryAnalyzer.php',
|
||||
'PhutilPythonFragmentLexer' => 'lexer/PhutilPythonFragmentLexer.php',
|
||||
'PhutilQueryStringParser' => 'parser/PhutilQueryStringParser.php',
|
||||
'PhutilQueryStringParserTestCase' => 'parser/__tests__/PhutilQueryStringParserTestCase.php',
|
||||
'PhutilRawEnglishLocale' => 'internationalization/locales/PhutilRawEnglishLocale.php',
|
||||
'PhutilReadableSerializer' => 'readableserializer/PhutilReadableSerializer.php',
|
||||
'PhutilReadableSerializerTestCase' => 'readableserializer/__tests__/PhutilReadableSerializerTestCase.php',
|
||||
'PhutilRope' => 'utils/PhutilRope.php',
|
||||
'PhutilRopeTestCase' => 'utils/__tests__/PhutilRopeTestCase.php',
|
||||
'PhutilServiceProfiler' => 'serviceprofiler/PhutilServiceProfiler.php',
|
||||
'PhutilShellLexer' => 'lexer/PhutilShellLexer.php',
|
||||
'PhutilShellLexerTestCase' => 'lexer/__tests__/PhutilShellLexerTestCase.php',
|
||||
'PhutilSignalHandler' => 'future/exec/PhutilSignalHandler.php',
|
||||
'PhutilSignalRouter' => 'future/exec/PhutilSignalRouter.php',
|
||||
'PhutilSimpleOptions' => 'parser/PhutilSimpleOptions.php',
|
||||
'PhutilSimpleOptionsLexer' => 'lexer/PhutilSimpleOptionsLexer.php',
|
||||
'PhutilSimpleOptionsLexerTestCase' => 'lexer/__tests__/PhutilSimpleOptionsLexerTestCase.php',
|
||||
'PhutilSimpleOptionsTestCase' => 'parser/__tests__/PhutilSimpleOptionsTestCase.php',
|
||||
'PhutilSimplifiedChineseLocale' => 'internationalization/locales/PhutilSimplifiedChineseLocale.php',
|
||||
'PhutilSlackFuture' => 'future/slack/PhutilSlackFuture.php',
|
||||
'PhutilSocketChannel' => 'channel/PhutilSocketChannel.php',
|
||||
'PhutilSortVector' => 'utils/PhutilSortVector.php',
|
||||
'PhutilSpanishSpainLocale' => 'internationalization/locales/PhutilSpanishSpainLocale.php',
|
||||
'PhutilStreamIterator' => 'utils/PhutilStreamIterator.php',
|
||||
'PhutilSubversionBinaryAnalyzer' => 'filesystem/binary/PhutilSubversionBinaryAnalyzer.php',
|
||||
'PhutilSymbolLoader' => 'symbols/PhutilSymbolLoader.php',
|
||||
'PhutilSystem' => 'utils/PhutilSystem.php',
|
||||
'PhutilSystemTestCase' => 'utils/__tests__/PhutilSystemTestCase.php',
|
||||
'PhutilTerminalString' => 'xsprintf/PhutilTerminalString.php',
|
||||
'PhutilTestCase' => 'unit/engine/phutil/PhutilTestCase.php',
|
||||
'PhutilTestCaseTestCase' => 'unit/engine/phutil/testcase/PhutilTestCaseTestCase.php',
|
||||
'PhutilTestPhobject' => 'object/__tests__/PhutilTestPhobject.php',
|
||||
'PhutilTestSkippedException' => 'unit/engine/phutil/testcase/PhutilTestSkippedException.php',
|
||||
'PhutilTestTerminatedException' => 'unit/engine/phutil/testcase/PhutilTestTerminatedException.php',
|
||||
'PhutilTraditionalChineseLocale' => 'internationalization/locales/PhutilTraditionalChineseLocale.php',
|
||||
'PhutilTranslation' => 'internationalization/PhutilTranslation.php',
|
||||
'PhutilTranslationTestCase' => 'internationalization/__tests__/PhutilTranslationTestCase.php',
|
||||
'PhutilTranslator' => 'internationalization/PhutilTranslator.php',
|
||||
'PhutilTranslatorTestCase' => 'internationalization/__tests__/PhutilTranslatorTestCase.php',
|
||||
'PhutilTsprintfTestCase' => 'xsprintf/__tests__/PhutilTsprintfTestCase.php',
|
||||
'PhutilTwitchFuture' => 'future/twitch/PhutilTwitchFuture.php',
|
||||
'PhutilTypeCheckException' => 'parser/exception/PhutilTypeCheckException.php',
|
||||
'PhutilTypeExtraParametersException' => 'parser/exception/PhutilTypeExtraParametersException.php',
|
||||
'PhutilTypeLexer' => 'lexer/PhutilTypeLexer.php',
|
||||
'PhutilTypeMissingParametersException' => 'parser/exception/PhutilTypeMissingParametersException.php',
|
||||
'PhutilTypeSpec' => 'parser/PhutilTypeSpec.php',
|
||||
'PhutilTypeSpecTestCase' => 'parser/__tests__/PhutilTypeSpecTestCase.php',
|
||||
'PhutilURI' => 'parser/PhutilURI.php',
|
||||
'PhutilURITestCase' => 'parser/__tests__/PhutilURITestCase.php',
|
||||
'PhutilUSEnglishLocale' => 'internationalization/locales/PhutilUSEnglishLocale.php',
|
||||
'PhutilUTF8StringTruncator' => 'utils/PhutilUTF8StringTruncator.php',
|
||||
'PhutilUTF8TestCase' => 'utils/__tests__/PhutilUTF8TestCase.php',
|
||||
'PhutilUnitTestEngine' => 'unit/engine/PhutilUnitTestEngine.php',
|
||||
'PhutilUnitTestEngineTestCase' => 'unit/engine/__tests__/PhutilUnitTestEngineTestCase.php',
|
||||
'PhutilUnknownSymbolParserGeneratorException' => 'parser/generator/exception/PhutilUnknownSymbolParserGeneratorException.php',
|
||||
'PhutilUnreachableRuleParserGeneratorException' => 'parser/generator/exception/PhutilUnreachableRuleParserGeneratorException.php',
|
||||
'PhutilUnreachableTerminalParserGeneratorException' => 'parser/generator/exception/PhutilUnreachableTerminalParserGeneratorException.php',
|
||||
'PhutilUrisprintfTestCase' => 'xsprintf/__tests__/PhutilUrisprintfTestCase.php',
|
||||
'PhutilUtilsTestCase' => 'utils/__tests__/PhutilUtilsTestCase.php',
|
||||
'PhutilVeryWowEnglishLocale' => 'internationalization/locales/PhutilVeryWowEnglishLocale.php',
|
||||
'PhutilWordPressFuture' => 'future/wordpress/PhutilWordPressFuture.php',
|
||||
'PhutilXHPASTBinary' => 'parser/xhpast/bin/PhutilXHPASTBinary.php',
|
||||
'PytestTestEngine' => 'unit/engine/PytestTestEngine.php',
|
||||
'TempFile' => 'filesystem/TempFile.php',
|
||||
'TestAbstractDirectedGraph' => 'utils/__tests__/TestAbstractDirectedGraph.php',
|
||||
'XHPASTNode' => 'parser/xhpast/api/XHPASTNode.php',
|
||||
'XHPASTNodeTestCase' => 'parser/xhpast/api/__tests__/XHPASTNodeTestCase.php',
|
||||
'XHPASTSyntaxErrorException' => 'parser/xhpast/api/XHPASTSyntaxErrorException.php',
|
||||
'XHPASTToken' => 'parser/xhpast/api/XHPASTToken.php',
|
||||
'XHPASTTree' => 'parser/xhpast/api/XHPASTTree.php',
|
||||
'XHPASTTreeTestCase' => 'parser/xhpast/api/__tests__/XHPASTTreeTestCase.php',
|
||||
'XUnitTestEngine' => 'unit/engine/XUnitTestEngine.php',
|
||||
'XUnitTestResultParserTestCase' => 'unit/parser/__tests__/XUnitTestResultParserTestCase.php',
|
||||
'XsprintfUnknownConversionException' => 'xsprintf/exception/XsprintfUnknownConversionException.php',
|
||||
),
|
||||
'function' => array(
|
||||
'__phutil_autoload' => 'init/init-library.php',
|
||||
'array_fuse' => 'utils/utils.php',
|
||||
'array_interleave' => 'utils/utils.php',
|
||||
'array_mergev' => 'utils/utils.php',
|
||||
'array_select_keys' => 'utils/utils.php',
|
||||
'assert_instances_of' => 'utils/utils.php',
|
||||
'assert_same_keys' => 'utils/utils.php',
|
||||
'assert_stringlike' => 'utils/utils.php',
|
||||
'coalesce' => 'utils/utils.php',
|
||||
'csprintf' => 'xsprintf/csprintf.php',
|
||||
'exec_manual' => 'future/exec/execx.php',
|
||||
'execx' => 'future/exec/execx.php',
|
||||