Typechecker選項

2018-10-31 10:41 更新

在大多數(shù)情況下,運行hh_client沒有任何明確的選項傳遞給它是所有你需要做的。但是,除了hh_client代碼的類型檢查之外,還有一些可以被傳遞到的選項來訪問代碼數(shù)據(jù)。

本節(jié)不會涵蓋所有選項,要查看所有選項,您可以通過使用幫助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。例如,如果您處于爛或隨機狀態(tài),則可能需要停止服務器。

--list-modes

--list-modes將打印由Hack服務器監(jiān)視的所有文件的列表,并讓您知道每個文件的三種模式(或<?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將搜索它所知道的關于該符號的文件,并使用它是否找到一個函數(shù),類等來注釋結果。

% 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找到對命名函數(shù)或類的引用。

% 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服務器監(jiān)視的所有有輸入錯誤的文件。

--stats

這將提供關于Hack服務器的內部統(tǒng)計信息的基于json的表示,特別是在內存區(qū)域。

%hh_client --stats

{ 
  “init_parsing_heap_size”:3375552“init_heap_size”:10226176,
  “max_heap_size 
  ”:12275072 
}

--lint

Hack Typechecker有一個有限的linter。目前,它會檢查,如果你使用的是大寫TRUE,F(xiàn)ALSE而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

公眾號
微信公眾號

編程獅公眾號