highlights(hack): extend queries add tests

This commit is contained in:
Stephan Seitz 2021-11-23 18:23:57 +01:00
parent 77c006eb08
commit cc0bdabe5f
10 changed files with 280 additions and 5 deletions

View file

@ -0,0 +1,6 @@
foreach (($array as vec[]) as $item) {}
// ^ repeat
// ^ type
# Our expectation test for the code below intentionally includes an ERROR.
foreach ($array as vec[] as $item) {}

View file

@ -0,0 +1,8 @@
async function func0(): void {}
// ^ type.builtin
async function func1<T1 as int>() {}
// ^ type.builtin
// ^ keyword.operator
async ($x) ==> $x + 1;

View file

@ -0,0 +1,15 @@
<<A1>>
newtype T1 = ?shape(
// TODO: ?operator (? not captureable at the moment)
?'int' => int
// ^ operator
);
<<A3(1), A2(2,3,)>>
// ^ attribute
type T2 = (function(T1): string);
// ^ type
// ^ function (cannot capture keyword "function" as keyword.function)
<<A4(1), A5, A6(1,3,4)>>
newtype T3 as int = int;

View file

@ -0,0 +1,23 @@
class Box<T> {
// ^ type
// ^ type
protected T $data;
// ^ keyword
// ^ type
public function __construct(T $data) {
// ^ type
// ^ parameter
// ^ keyword
// ^ method
$this->data = $data;
}
public function getData(): T {
// ^ method
// ^ keyword
return $this->data;
// ^ operator
// ^ variable.builtin
}
}

View file

@ -0,0 +1,4 @@
<<<EOT
$('a') abc $(function{return;})
EOT;
// <- comment ^ comment

View file

@ -0,0 +1,28 @@
use const Space\Const\C;
// ^ keyword
// ^ constant
use function Space\Func\F as E;
// ^ function
// ^ function
use type Space\Type\T;
// ^ keyword
use namespace Space\Name\N as M;
// ^ keyword
// ^ namespace
use namespace Space\Name2\N2, Space\Nothing\N3 as N8, type Space\Type2\N4,;
// ^ namespace
// ^ type
use namespace Space\Name\N10\{A as A2, B\};
// ^ namespace
// ^ namespace
// ^ namespace
use namespace Space\Name\{\C, Slash as Forward};
use \What\Is\This\{function A as A2, B, const H\S\L as stdlib, function F};
use type \{kind,};
use Q\B\{kind2,};
// ^ namespace
use type Q\B\{kind3,};
// <- include

View file

@ -0,0 +1,3 @@
using ($new = new Object(), $file = new File('using', '+using')) {}
// <- keyword
// ^ type

View file

@ -0,0 +1,10 @@
$user_name = 'Fred';
echo "<tt>Hello <strong>$user_name</tt></strong>";
// XHP: Typechecked, well-formed, and secure
$user_name = 'Andrew';
$xhp = <tt>Hello <strong>{$user_name}</strong></tt>;
// ^ tag
// ^ tag
// ^ string
echo await $xhp->toStringAsync();

View file

@ -0,0 +1,46 @@
// From https://docs.hhvm.com/hack/XHP/introduction (MIT licensed)
use namespace Facebook\XHP\Core as x;
use type Facebook\XHP\HTML\{XHPHTMLHelpers, a, form};
final xhp class a_post extends x\element {
// ^ keyword
// ^ keyword
// ^ keyword
use XHPHTMLHelpers;
attribute string href @required;
// ^ attribute
attribute string target;
// ^ keyword
<<__Override>>
protected async function renderAsync(): Awaitable<x\node> {
$id = $this->getID();
$anchor = <a>{$this->getChildren()}</a>;
// ^ tag.delimiter
// ^ tag
$form = (
<form
id={$id}
method="post"
action={$this->:href}
target={$this->:target}
class="postLink">
{$anchor}
</form>
);
$anchor->setAttribute(
'onclick',
'document.getElementById("'.$id.'").submit(); return false;',
);
$anchor->setAttribute('href', '#');
// ^ method
return $form;
}
}