Typechecker选项

2018-10-31 10:41 更新

在大多数情况下,运行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])


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号