refactor: Cleanup git state - commit all staged changes
Major refactoring cleanup: - Add new controller architecture (class-controller-*.php) - Add new settings-v2 UI (views/settings-v2/) - Add new CSS architecture (agentic-sidebar.css, tokens) - Add esbuild build pipeline (scripts/build.js, package.json) - Add composer dependencies (vendor/) - Add frontend src directory (assets/js/src/index.jsx) - Add documentation files - Remove old/obsolete files (class-settings.php, old CSS) This commits all pending changes from previous refactoring efforts.
This commit is contained in:
86
vendor/parsica-php/parsica/src/Expression/RightAssoc.php
vendored
Normal file
86
vendor/parsica-php/parsica/src/Expression/RightAssoc.php
vendored
Normal file
@@ -0,0 +1,86 @@
|
||||
<?php declare(strict_types=1);
|
||||
/*
|
||||
* This file is part of the Parsica library.
|
||||
*
|
||||
* Copyright (c) 2020 Mathias Verraes <mathias@verraes.net>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Parsica\Parsica\Expression;
|
||||
|
||||
use Parsica\Parsica\Parser;
|
||||
use function Parsica\Parsica\Curry\curry;
|
||||
use function Parsica\Parsica\choice;
|
||||
use function Parsica\Parsica\collect;
|
||||
use function Parsica\Parsica\Internal\FP\foldr;
|
||||
use function Parsica\Parsica\keepFirst;
|
||||
use function Parsica\Parsica\many;
|
||||
use function Parsica\Parsica\map;
|
||||
use function Parsica\Parsica\pure;
|
||||
|
||||
/**
|
||||
* @internal
|
||||
* @template TSymbol
|
||||
* @template TExpressionAST
|
||||
* @psalm-immutable
|
||||
*/
|
||||
final class RightAssoc implements ExpressionType
|
||||
{
|
||||
/** @var non-empty-list<BinaryOperator<TSymbol, TExpressionAST>> */
|
||||
private array $operators;
|
||||
|
||||
/**
|
||||
* @internal
|
||||
* @psalm-param non-empty-list<BinaryOperator<TSymbol, TExpressionAST>> $operators
|
||||
* @psalm-pure
|
||||
* @psalm-suppress ImpureVariable
|
||||
*/
|
||||
function __construct(array $operators)
|
||||
{
|
||||
$this->operators = $operators;
|
||||
}
|
||||
|
||||
/**
|
||||
* @psalm-param Parser<TExpressionAST> $previousPrecedenceLevel
|
||||
* @psalm-return Parser<TExpressionAST>
|
||||
*/
|
||||
public function buildPrecedenceLevel(Parser $previousPrecedenceLevel): Parser
|
||||
{
|
||||
/**
|
||||
* @psalm-var list<Parser<pure-callable(Parser<TExpressionAST>):Parser<TExpressionAST>>> $operatorParsers
|
||||
*/
|
||||
$operatorParsers = [];
|
||||
foreach ($this->operators as $operator) {
|
||||
$operatorParsers[] =
|
||||
pure(curry($operator->transform()))
|
||||
->apply(keepFirst($previousPrecedenceLevel, $operator->symbol()))
|
||||
->label($operator->label());
|
||||
}
|
||||
|
||||
return map(
|
||||
collect(
|
||||
many(choice(...$operatorParsers)),
|
||||
$previousPrecedenceLevel
|
||||
),
|
||||
|
||||
/**
|
||||
* @psalm-param array{0: list<pure-callable(TExpressionAST):TExpressionAST>, 1: TExpressionAST} $o
|
||||
* @psalm-return TExpressionAST
|
||||
*/
|
||||
fn(array $o) => foldr(
|
||||
$o[0],
|
||||
|
||||
/**
|
||||
* @psalm-param pure-callable(TExpressionAST):TExpressionAST $appl
|
||||
* @psalm-param TExpressionAST $acc
|
||||
* @psalm-return TExpressionAST
|
||||
*/
|
||||
fn(callable $appl, $acc) => $appl($acc),
|
||||
$o[1]
|
||||
)
|
||||
);
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user