in src/Guides.php [59:224]
public static function getGuidePageRedirects(
GuidesProduct $product,
): dict<string, dict<string, (string, ?string)>> {
return dict[
GuidesProduct::HHVM => dict[
'getting-started' => dict[
'getting-started' => tuple('basic-usage', 'introduction'),
],
],
GuidesProduct::HACK => dict[
'arrays-and-collections' => dict[
'hack-arrays' => tuple('arrays-and-collections', 'vec-keyset-and-dict'),
'collections' => tuple('arrays-and-collections', 'object-collections'),
'php-arrays' => tuple('arrays-and-collections', 'varray-and-darray'),
],
'async' => dict[
'async-vs-awaitable' =>
tuple('asynchronous-operations', 'async-vs.-awaitable'),
'awaitables' => tuple('asynchronous-operations', 'awaitables'),
'exceptions' => tuple('asynchronous-operations', 'exceptions'),
'extensions' => tuple('asynchronous-operations', 'extensions'),
'utility-functions' =>
tuple('asynchronous-operations', 'utility-functions'),
],
'asynchronous-operations' => dict[
'await-as-an-expression-spec' => tuple('asynchronous-operations', 'await-as-an-expression'),
'further-resources' => tuple('asynchronous-operations', 'introduction'),
'some-basics' => tuple('asynchronous-operations', 'introduction'),
],
'attributes' => dict[
'special' => tuple('attributes', 'predefined-attributes'),
'syntax' => tuple('attributes', 'introduction'),
'some-basics' => tuple('attributes', 'introduction'),
'attribute-specification' => tuple('attributes', 'introduction'),
],
'built-in-types' => dict[
'arrays' => tuple('arrays-and-collections', 'introduction'),
'function' => tuple('functions', 'introduction'),
'enumerated-types' => tuple('built-in-types', 'enum'),
'shapes' => tuple('built-in-types', 'shape'),
],
'callables' => dict[
'special-functions' => tuple('functions', 'anonymous-functions'),
],
'classes' => dict[
'some-basics' => tuple('classes', 'introduction'),
'defining-a-basic-class' => tuple('classes', 'introduction'),
'implementing-an-interface' => tuple('traits-and-interfaces', 'implementing-an-interface'),
'trait-and-interface-requirements' => tuple('traits-and-interfaces', 'trait-and-interface-requirements'),
'using-a-trait' => tuple('traits-and-interfaces', 'using-a-trait'),
],
'disposables' => dict[
'introduction' => tuple('classes', 'object-disposal'),
],
'expressions-and-operators' => dict[
'addition' => tuple('expressions-and-operators', 'arithmetic'),
'as' => tuple('expressions-and-operators', 'type-assertions'),
'async-blocks' => tuple('asynchronous-operations', 'blocks'),
'banning-lval-as-an-expression' => tuple('expressions-and-operators', 'introduction'),
'bitwise-AND' => tuple('expressions-and-operators', 'bitwise-operators'),
'bitwise-exclusive-OR' => tuple('expressions-and-operators', 'bitwise-operators'),
'bitwise-inclusive-OR' => tuple('expressions-and-operators', 'bitwise-operators'),
'bitwise-left-shift' => tuple('expressions-and-operators', 'bitwise-operators'),
'bitwise-right-shift' => tuple('expressions-and-operators', 'bitwise-operators'),
'closure-creation' => tuple('functions', 'anonymous-functions'),
'conditional' => tuple('expressions-and-operators', 'ternary'),
'division' => tuple('expressions-and-operators', 'arithmetic'),
'exponentiation' => tuple('expressions-and-operators', 'arithmetic'),
'function-call' => tuple('functions', 'introduction'),
'instanceof' => tuple('expressions-and-operators', 'type-assertions'),
'is' => tuple('expressions-and-operators', 'type-assertions'),
'lambda-creation' => tuple('functions', 'anonymous-functions'),
'logical-AND' => tuple('expressions-and-operators', 'logical-operators'),
'logical-inclusive-OR' => tuple('expressions-and-operators', 'logical-operators'),
'logical-NOT' => tuple('expressions-and-operators', 'logical-operators'),
'multiplication' => tuple('expressions-and-operators', 'arithmetic'),
'null-safe-member-selection' => tuple('expressions-and-operators', 'member-selection'),
'ones-complement' => tuple('expressions-and-operators', 'bitwise-operators'),
'operations-on-operands-having-one-or-more-subtypes' => tuple('types', 'type-refinement'),
'relational' => tuple('expressions-and-operators', 'comparisons'),
'restrictions-on-arithmetic-operations' => tuple('expressions-and-operators', 'arithmetic'),
'remainder' => tuple('expressions-and-operators', 'arithmetic'),
'some-basics' => tuple('expressions-and-operators', 'introduction'),
'subtraction' => tuple('expressions-and-operators', 'arithmetic'),
'unary-minus' => tuple('expressions-and-operators', 'arithmetic'),
'unary-plus' => tuple('expressions-and-operators', 'arithmetic'),
'XHP-attribute-spread' => tuple('XHP', 'introduction'),
'readonly' => tuple('readonly', 'introduction')
],
'functions' => dict[
'defining-a-function' => tuple('functions', 'introduction'),
'some-basics' => tuple('functions', 'introduction'),
'calling-a-function' => tuple('functions', 'format-strings'),
],
'generics' => dict[
'constraints' => tuple('generics', 'type-constraints'),
'open-and-closed-generic-types' => tuple('generics', 'type-erasure'),
'reified-generics' => tuple('reified-generics', 'reified-generics'),
'reified-generics-migration' => tuple('reified-generics', 'reified-generics-migration'),
'some-basics' => tuple('generics', 'introduction'),
'type-arguments' => tuple('generics', 'type-parameters'),
],
'operators' => dict[
'lambda' => tuple('functions', 'anonymous-functions'),
'pipe' => tuple('expressions-and-operators', 'pipe'),
'nullsafe' =>
tuple('expressions-and-operators', 'member-selection'),
],
'other-features' => dict[
'autoloading' =>
tuple('source-code-fundamentals', 'script-inclusion'),
'constructor-parameter-promotion' => tuple('classes', 'constructors'),
'placeholder-variable' => tuple('source-code-fundamentals', 'names'),
'variadic-functions' => tuple('functions', 'introduction'),
],
'overview' => dict[
'typing' => tuple('types', 'introduction'),
],
'source-code-fundamentals' => dict[
'white-space' => tuple('source-code-fundamentals', 'introduction'),
'operators-and-punctuators' => tuple('source-code-fundamentals', 'introduction'),
],
'statements' => dict[
'compound-statements' => tuple('statements', 'introduction'),
'expression-statements' => tuple('expressions-and-operators', 'introduction'),
'labeled-statements' => tuple('statements', 'switch'),
'throw' => tuple('statements', 'try'),
],
'typechecker' => dict[
'editors' => tuple('getting-started', 'tools'),
'modes' => tuple('source-code-fundamentals', 'program-structure'),
],
'types' => dict[
'anonymous-function-objects' => tuple('functions', 'anonymous-functions'),
'annotations' => tuple('functions', 'introduction'),
'arraykey' => tuple('built-in-types', 'arraykey'),
'arrays' => tuple('arrays-and-collections', 'introduction'),
'bool' => tuple('built-in-types', 'bool'),
'casting' => tuple('types', 'type-conversion'),
'classes' => tuple('classes', 'introduction'),
'classname' => tuple('built-in-types', 'classname'),
'dynamic' => tuple('built-in-types', 'dynamic'),
'enumerated-types' => tuple('built-in-types', 'enum'),
'float' => tuple('built-in-types', 'float'),
'inference' => tuple('types', 'type-inferencing'),
'int' => tuple('built-in-types', 'int'),
'mixed' => tuple('built-in-types', 'mixed'),
'nonnull' => tuple('built-in-types', 'nonnull'),
'noreturn' => tuple('built-in-types', 'noreturn'),
'null' => tuple('built-in-types', 'null'),
'num' => tuple('built-in-types', 'num'),
'refining' => tuple('types', 'type-refinement'),
'resources' => tuple('built-in-types', 'resources'),
'shapes' => tuple('built-in-types', 'shape'),
'string' => tuple('built-in-types', 'string'),
'summary-table' => tuple('types', null),
'this' => tuple('built-in-types', 'this'),
'tuples' => tuple('built-in-types', 'tuples'),
'type-system' => tuple('types', null),
'void' => tuple('built-in-types', 'void'),
],
],
][$product] ??
dict[];
}