From 53e267ce24773e095bb690345ce424e7c59954a7 Mon Sep 17 00:00:00 2001 From: Clemens Schwaighofer Date: Wed, 28 Jun 2023 15:29:29 +0900 Subject: [PATCH] Updates and fixes from phan/phpstan runs --- ...CoreLibsTemplateHtmlBuilderElementTest.php | 3 +- www/admin/class_test.html_build.element.php | 8 ++- .../CoreLibs/Template/HtmlBuilder/Block.php | 53 ++++++++++--------- .../CoreLibs/Template/HtmlBuilder/Element.php | 14 ++--- .../Template/HtmlBuilder/General/Error.php | 6 +-- .../Template/HtmlBuilder/General/Settings.php | 2 +- .../Template/HtmlBuilder/StringReplace.php | 31 +++++------ 7 files changed, 61 insertions(+), 56 deletions(-) diff --git a/4dev/tests/Template/CoreLibsTemplateHtmlBuilderElementTest.php b/4dev/tests/Template/CoreLibsTemplateHtmlBuilderElementTest.php index 9321d0d0..7c96e32f 100644 --- a/4dev/tests/Template/CoreLibsTemplateHtmlBuilderElementTest.php +++ b/4dev/tests/Template/CoreLibsTemplateHtmlBuilderElementTest.php @@ -483,7 +483,8 @@ final class CoreLibsTemplateHtmlBuilderElementTest extends TestCase // if we set invalid tag $el = new Element('div'); $this->expectException(HtmlBuilderExcpetion::class); - $this->expectExceptionMessage("Invalid or empty tag"); + $this->expectExceptionMessageMatches("/^Invalid or empty tag: /"); + $this->expectExceptionMessage("Invalid or empty tag: 123123"); $el->setTag('123123'); $this->assertTrue( Error::hasError(), diff --git a/www/admin/class_test.html_build.element.php b/www/admin/class_test.html_build.element.php index a80669ca..68bb56f6 100644 --- a/www/admin/class_test.html_build.element.php +++ b/www/admin/class_test.html_build.element.php @@ -117,7 +117,9 @@ try { $el_er = new Element(''); } catch (HtmlBuilderExcpetion $e) { print "E: " . $e->getMessage() . " | " . $e->getTraceAsString() . "
"; - print "E: " . $e->getPrevious()->getMessage() . " | " . $e->getPrevious()->getTraceAsString() . "
"; + if ($e->getPrevious() !== null) { + print "E: " . $e->getPrevious()->getMessage() . " | " . $e->getPrevious()->getTraceAsString() . "
"; + } } print "Errors:
" . print_r(Error::getMessages(), true) . "
"; print "Warning: " . Support::printToString(Error::hasWarning()) . "
"; @@ -127,7 +129,9 @@ try { $el_er = new Element('123123'); } catch (HtmlBuilderExcpetion $e) { print "E: " . $e->getMessage() . " | " . $e->getTraceAsString() . "
"; - print "E: " . $e->getPrevious()->getMessage() . " | " . $e->getPrevious()->getTraceAsString() . "
"; + if ($e->getPrevious() !== null) { + print "E: " . $e->getPrevious()->getMessage() . " | " . $e->getPrevious()->getTraceAsString() . "
"; + } } print "Errors:
" . print_r(Error::getMessages(), true) . "
"; print "Warning: " . Support::printToString(Error::hasWarning()) . "
"; diff --git a/www/lib/CoreLibs/Template/HtmlBuilder/Block.php b/www/lib/CoreLibs/Template/HtmlBuilder/Block.php index 434b0f4d..2015280e 100644 --- a/www/lib/CoreLibs/Template/HtmlBuilder/Block.php +++ b/www/lib/CoreLibs/Template/HtmlBuilder/Block.php @@ -1,4 +1,4 @@ - $css, * @param array $options + * @return array{tag:string,id:string,name:string,content:string,css:array,options:array,sub:array} * @throws HtmlBuilderExcpetion */ public static function cel( @@ -58,10 +59,10 @@ class Block * Search element tree for id and add * if id is empty add at current * - * @param array $base - * @param array $attach + * @param array{tag:string,id:string,name:string,content:string,css:array,options:array,sub:array} $base + * @param array{tag:string,id:string,name:string,content:string,css:array,options:array,sub:array} $attach * @param string $id - * @return array + * @return array{tag:string,id:string,name:string,content:string,css:array,options:array,sub:array} */ public static function ael( array $base, @@ -87,9 +88,9 @@ class Block /** * Undocumented function * - * @param array $base - * @param array ...$attach - * @return array + * @param array{tag:string,id:string,name:string,content:string,css:array,options:array,sub:array} $base + * @param array{tag:string,id:string,name:string,content:string,css:array,options:array,sub:array} ...$attach + * @return array{tag:string,id:string,name:string,content:string,css:array,options:array,sub:array} */ public static function aelx( array $base, @@ -102,9 +103,9 @@ class Block /** * Undocumented function * - * @param array $element - * @param array $sub - * @return array + * @param array{tag:string,id:string,name:string,content:string,css:array,options:array,sub:array} $element + * @param array{tag:string,id:string,name:string,content:string,css:array,options:array,sub:array} $sub + * @return array{tag:string,id:string,name:string,content:string,css:array,options:array,sub:array} */ public static function addSub(array $element, array ...$sub): array { @@ -118,10 +119,10 @@ class Block /** * Undocumented function * - * @param array $element - * @return array + * @param array{tag:string,id:string,name:string,content:string,css:array,options:array,sub:array} $element + * @return array{tag:string,id:string,name:string,content:string,css:array,options:array,sub:array} */ - public static function resetSub(array $elment): array + public static function resetSub(array $element): array { $element['sub'] = []; return $element; @@ -132,9 +133,9 @@ class Block /** * Undocumented function * - * @param array $element + * @param array{tag:string,id:string,name:string,content:string,css:array,options:array,sub:array} $element * @param string ...$css - * @return array + * @return array{tag:string,id:string,name:string,content:string,css:array,options:array,sub:array} */ public static function acssel(array $element, string ...$css): array { @@ -145,8 +146,9 @@ class Block /** * Undocumented function * + * @param array{tag:string,id:string,name:string,content:string,css:array,options:array,sub:array} $element * @param string ...$css - * @return array + * @return array{tag:string,id:string,name:string,content:string,css:array,options:array,sub:array} */ public static function rcssel(array $element, string ...$css): array { @@ -159,10 +161,10 @@ class Block * scssel (switch) is not supported * use rcssel -> acssel * - * @param array $element - * @param array $rcss - * @param array $acss - * @return array + * @param array{tag:string,id:string,name:string,content:string,css:array,options:array,sub:array} $element + * @param array $rcss + * @param array $acss + * @return array{tag:string,id:string,name:string,content:string,css:array,options:array,sub:array} */ public static function scssel(array $element, array $rcss, array $acss): array { @@ -176,7 +178,7 @@ class Block * Undocumented function * alias phfo * - * @param array $tree + * @param array{tag:string,id:string,name:string,content:string,css:array,options:array,sub:array} $tree * @param bool $add_nl [default=false] * @return string */ @@ -232,14 +234,15 @@ class Block * Undocumented function * alias phfa * - * @param array $list + * @param array,options:array,sub:array}> $list + * @param bool $add_nl [default=false] * @return string */ - public static function buildHtmlFromList(array $list): string + public static function buildHtmlFromList(array $list, bool $add_nl = false): string { $output = ''; foreach ($list as $el) { - $output .= self::buildHtml($el); + $output .= self::buildHtml($el, $add_nl); } return $output; } @@ -248,7 +251,7 @@ class Block * Undocumented function * wrapper for buildHtmlFromList * - * @param array $list array of Elements to build string from + * @param array,options:array,sub:array}> $list array of Elements to build string from * @param bool $add_nl [default=false] Optional output string line break * @return string build html as string */ diff --git a/www/lib/CoreLibs/Template/HtmlBuilder/Element.php b/www/lib/CoreLibs/Template/HtmlBuilder/Element.php index 3169067f..85d58745 100644 --- a/www/lib/CoreLibs/Template/HtmlBuilder/Element.php +++ b/www/lib/CoreLibs/Template/HtmlBuilder/Element.php @@ -85,7 +85,7 @@ class Element 'invalid or empty tag', ['tag' => $tag] ); - throw new HtmlBuilderExcpetion('Invalid or empty tag'); + throw new HtmlBuilderExcpetion('Invalid or empty tag: ' . $tag); } $this->tag = $tag; } @@ -297,7 +297,9 @@ class Element } // only on first level foreach ($this->sub as $pos => $el) { - if ($el['id'] === $id) { + if ( + $el->getId() === $id + ) { unset($this->sub[$pos]); return; } @@ -525,10 +527,10 @@ class Element * not recommended to be used, rather use "Element->buildHtml()" * wrapper for buildHtml * - * @param Element $element Element tree to build - * if not set returns empty string - * @param bool $add_nl [default=false] Optional output string line break - * @return string build html as string + * @param ?Element $tree Element tree to build + * if not set returns empty string + * @param bool $add_nl [default=false] Optional output string line break + * @return string build html as string * @deprecated Do not use, use Element->buildHtml() instead */ public static function printHtmlFromObject(Element $tree = null, bool $add_nl = false): string diff --git a/www/lib/CoreLibs/Template/HtmlBuilder/General/Error.php b/www/lib/CoreLibs/Template/HtmlBuilder/General/Error.php index 3c4ff2c2..be025f03 100644 --- a/www/lib/CoreLibs/Template/HtmlBuilder/General/Error.php +++ b/www/lib/CoreLibs/Template/HtmlBuilder/General/Error.php @@ -13,7 +13,7 @@ namespace CoreLibs\Template\HtmlBuilder\General; class Error { - /** @var array{level:string,id:string,message:string,context:array} */ + /** @var array}> */ private static array $messages = []; /** @@ -22,7 +22,7 @@ class Error * @param string $level * @param string $id * @param string $message - * @param array $context + * @param array $context * @return void */ private static function writeContent( @@ -98,7 +98,7 @@ class Error return array_filter( self::$messages, function ($var) use ($level) { - return ($var['level'] ?? '') == $level ? true : false; + return $var['level'] == $level ? true : false; } ) === [] ? false : true; } diff --git a/www/lib/CoreLibs/Template/HtmlBuilder/General/Settings.php b/www/lib/CoreLibs/Template/HtmlBuilder/General/Settings.php index 8ee394f5..07fa6ff8 100644 --- a/www/lib/CoreLibs/Template/HtmlBuilder/General/Settings.php +++ b/www/lib/CoreLibs/Template/HtmlBuilder/General/Settings.php @@ -13,7 +13,7 @@ namespace CoreLibs\Template\HtmlBuilder\General; class Settings { - /** @var array>string> list of html elements that can have the name tag */ + /** @var array list of html elements that can have the name tag */ public const NAME_ELEMENTS = [ 'button', 'fieldset', diff --git a/www/lib/CoreLibs/Template/HtmlBuilder/StringReplace.php b/www/lib/CoreLibs/Template/HtmlBuilder/StringReplace.php index 1376e454..7a259d5d 100644 --- a/www/lib/CoreLibs/Template/HtmlBuilder/StringReplace.php +++ b/www/lib/CoreLibs/Template/HtmlBuilder/StringReplace.php @@ -28,7 +28,7 @@ class StringReplace * index must be non empty (but has no fixed format) * if same index is tried twice it will set an error and skip * - * @param array ...$element Elements to load + * @param array{0:string,1:string} ...$element Elements to load * @return void * @throws HtmlBuilderExcpetion */ @@ -138,32 +138,27 @@ class StringReplace * * @param string $index index of set element * @param array $replace array of text to search (key) and replace (value) for - * @return string|false + * @return string + * @throws HtmlBuilderExcpetion */ public static function buildElement( string $index, array $replace, string $replace_index = '' - ): string|bool { - if (self::getElement($index) === false) { - return false; + ): string { + try { + self::getElement($index); + } catch (HtmlBuilderExcpetion $e) { + throw new HtmlBuilderExcpetion('Cannot fetch element with index: ' . $index, 0, $e); } if ($replace_index) { self::setReplaceBlock( $replace_index, - self::replaceData( - self::$elements[$index], - array_keys($replace), - array_values($replace) - ) + self::replaceData(self::$elements[$index], $replace) ); return self::getReplaceBlock($replace_index); } else { - return self::replaceData( - self::$elements[$index], - array_keys($replace), - array_values($replace) - ); + return self::replaceData(self::$elements[$index], $replace); } } @@ -180,9 +175,9 @@ class StringReplace */ public static function replaceData(string $data, array $replace): string { - $replace = array_keys($replace); + $to_replace = array_keys($replace); // all replace data must have {} around - array_walk($replace, function (&$entry) { + array_walk($to_replace, function (&$entry) { if (!str_starts_with($entry, '{')) { $entry = '{' . $entry; } @@ -192,7 +187,7 @@ class StringReplace // do some validation? }); // replace content - return str_replace($replace, array_values($replace), $data); + return str_replace($to_replace, array_values($replace), $data); } }