Typechecker选项
在大多数情况下,运行hh_client没有任何明确的选项传递给它是所有你需要做的。但是,除了hh_client代码的类型检查之外,还有一些可以被传递到的选项来访问代码数据。
本节不会涵盖所有选项,要查看所有选项,您可以通过使用帮助hh_client --help。
以下示例将用于讨论这些选项:
<?hh // strict
namespace Hack\UserDocumentation\TypeChecker\Options\Examples\Options;
class VeryUniqueClass {
public function foo(): int {
return 4;
}
}
class VeryUniqueGenericClass<T> {
public function __construct(public T $x) {}
public function VeryUniqueMethod(VeryUniqueClass $a): ?T {
return $a->foo() === 4 ? $this->x : null;
}
}
function VeryUniqueFunction(): void {
$a = new VeryUniqueClass();
$b = new VeryUniqueGenericClass("Hello");
$b->VeryUniqueMethod($a);
$b = new VeryUniqueGenericClass(3);
$b->VeryUniqueMethod($a);
}
class VeryUniqueClassChild extends VeryUniqueClass {}
Output
注意:许多这些选项支持命名空间的类并作为其符号。只要确定你引用字符串。例如,
% hh_client --find-class-refs "\Hack\UserDocumentation\TypeChecker\Options\Examples\Options\VeryUniqueClass"
--check
--check是默认的命令hh_client,表示typechecker应该做正常的做...检查类型错误。
以下所有选项(服务器启动和停止除外)实际上是此--check命令的选项。以下是等同的
%hh_client --check [OPTION]
%hh_client [OPTION]
--start
--start
(和其sister命令--stop
和--restart
)不应该经常使用,而是允许您控制Hack服务器hh_server
。例如,如果您处于烂或随机状态,则可能需要停止服务器。
--list-modes
--list-modes
将打印由Hack服务器监视的所有文件的列表,并让您知道每个文件的三种模式(或<?php
)中的哪一种。
:
:
strict user-documentation/hack/16-typechecker/modes-examples/call-into-decl.php
decl user-documentation/hack/16-typechecker/modes-examples/decl.inc.php
partial user-documentation/hack/16-typechecker/modes-examples/main-function.inc.php
php user-documentation/hack/16-typechecker/modes-examples/multiple-modes.php
php user-documentation/hack/16-typechecker/modes-examples/non-hack-code.php
partial user-documentation/hack/16-typechecker/modes-examples/partial.php
strict user-documentation/hack/16-typechecker/modes-examples/strict.php
:
:
--search
如果您提供了一个表示符号的字符串的字符串,那么hh_client
将搜索它所知道的关于该符号的文件,并使用它是否找到一个函数,类等来注释结果。
% hh_client --search VeryUnique
File "options.php", line 5, characters 7-21: Hack\UserDocumentation\TypeChecker\Options\Examples\Options\VeryUniqueClass, class
File "options.php", line 18, characters 10-27: Hack\UserDocumentation\TypeChecker\Options\Examples\Options\VeryUniqueFunction, function
File "options.php", line 11, characters 7-28: Hack\UserDocumentation\TypeChecker\Options\Examples\Options\VeryUniqueGenericClass, class
你可以细化与sister选择搜索--search-class,--search-function,--search-typedef,--search-constant。
--find-refs
--find-refs
并且其sister分别--find-class-refs
找到对命名函数或类的引用。
% hh_client --find-class-refs "\Hack\UserDocumentation\TypeChecker\Options\Examples\Options\VeryUniqueClass"
File "options.php", line 19, characters 12-26: Hack\UserDocumentation\TypeChecker\Options\Examples\Options\VeryUniqueClass::__construct
File "options.php", line 13, characters 36-50: Hack\UserDocumentation\TypeChecker\Options\Examples\Options\VeryUniqueClass
2 total results
--inheritance-children
--inheritance-children
并且其sisterinheritance-ancestor
打印,给出类名,打印继承信息。
% hh_client --inheritance-children "\Hack\UserDocumentation\TypeChecker\Options\Examples\Options\VeryUniqueClass"
ile "options.php", line 5, characters 7-21: Hack\UserDocumentation\TypeChecker\Options\Examples\Options\VeryUniqueClass
inherited by File "options.php", line 26, characters 7-26: Hack\UserDocumentation\TypeChecker\Options\Examples\Options\VeryUniqueClassChild
--type-at-pos
--type-at-pos告诉hh_client尝试确定特定表达式的类型。它采取以下形式:
%hh_client --type-at-pos options.php:22:3
您提供一个文件名,行号和列号用冒号分隔。列号是确定最难的部分。例如,变量是变量名称的实际开始列,不包括该变量$。
% hh_client --type-at-pos options.php:22:3
Hack\UserDocumentation\TypeChecker\Options\Examples\Options\VeryUniqueGenericClass
--list-files
这将列出由Hack服务器监视的所有有输入错误的文件。
--stats
这将提供关于Hack服务器的内部统计信息的基于json的表示,特别是在内存区域。
%hh_client --stats
{
“init_parsing_heap_size”:3375552“init_heap_size”:10226176,
“max_heap_size
”:12275072
}
--lint
Hack Typechecker有一个有限的linter。目前,它会检查,如果你使用的是大写TRUE,FALSE而NULL并建议您使用小写字母true,false并null代替。其他linter功能将来可能会添加。
此选项目前可在特定文件的基础上使用。您必须指定要单独的文件。
% hh_client --lint a.php
File "/tmp/test/a.php", line 4, characters 21-24:
Please use 'true' instead of 'TRUE' (Lint[5001])
File "/tmp/test/a.php", line 7, characters 24-27:
Please use 'true' instead of 'TRUE' (Lint[5001])
File "/tmp/test/a.php", line 12, characters 8-11:
Please use 'true' instead of 'TRUE' (Lint[5001])