Description
Parsoid doesn't yet support named arguments T390344: v3 parserfunction serialization doesn't properly support named arguments
This means that we won't be able to use renderlang and parselang yet.
In our FragmentHandler class, when we encounter named arguments, instead of ignoring them, we add them to the set of unnamed args, so with a call like this:
{{#function:Z10000|pango|linooooo|renderlang=en|parselang=es}}The extracted arguments look like this:
array(
'target' => 'Z10000',
'arguments' =>
array (
'Z10000K1' => 'pango',
'Z10000K2' => 'linooooo',
'Z10000K3' => 'renderlang=en',
'Z10000K4' => 'parselang=es',
),
'parseLang' => 'en',
'renderLang' => 'en',
)Throwing a PHP exception:
2025-04-08 19:21:45 befe9d397078 my_wiki: [81a4ade35648d235c6e75a62] /wiki/User:Admin PHP Warning: Undefined array key 6
#0 /var/www/html/w/vendor/wikimedia/parsoid/src/NodeData/TemplateInfo.php(71): MediaWiki\Exception\MWExceptionHandler::handleError()
#1 /var/www/html/w/vendor/wikimedia/json-codec/src/JsonStaticClassCodec.php(62): Wikimedia\Parsoid\NodeData\TemplateInfo::newFromJsonArray()
#2 /var/www/html/w/vendor/wikimedia/json-codec/src/JsonCodec.php(408): Wikimedia\JsonCodec\JsonStaticClassCodec->newFromJsonArray()
#3 /var/www/html/w/vendor/wikimedia/json-codec/src/JsonCodec.php(399): Wikimedia\JsonCodec\JsonCodec->newFromJsonArray()
#4 /var/www/html/w/vendor/wikimedia/json-codec/src/JsonCodec.php(399): Wikimedia\JsonCodec\JsonCodec->newFromJsonArray()
#5 /var/www/html/w/vendor/wikimedia/json-codec/src/JsonCodec.php(399): Wikimedia\JsonCodec\JsonCodec->newFromJsonArray()
#6 /var/www/html/w/vendor/wikimedia/json-codec/src/JsonCodec.php(117): Wikimedia\JsonCodec\JsonCodec->newFromJsonArray()
#7 /var/www/html/w/vendor/wikimedia/parsoid/src/Utils/DOMDataUtils.php(627): Wikimedia\JsonCodec\JsonCodec->newFromJsonString()
#8 /var/www/html/w/vendor/wikimedia/parsoid/src/Utils/DOMUtils.php(84): Wikimedia\Parsoid\Utils\DOMDataUtils::loadDataAttribs()
#9 /var/www/html/w/vendor/wikimedia/parsoid/src/Utils/DOMUtils.php(88): Wikimedia\Parsoid\Utils\DOMUtils::visitDOM()
#10 /var/www/html/w/vendor/wikimedia/parsoid/src/Utils/DOMUtils.php(88): Wikimedia\Parsoid\Utils\DOMUtils::visitDOM()
#11 /var/www/html/w/vendor/wikimedia/parsoid/src/Utils/DOMUtils.php(88): Wikimedia\Parsoid\Utils\DOMUtils::visitDOM()
#12 /var/www/html/w/vendor/wikimedia/parsoid/src/Utils/DOMDataUtils.php(585): Wikimedia\Parsoid\Utils\DOMUtils::visitDOM()
#13 /var/www/html/w/vendor/wikimedia/parsoid/src/Core/DomPageBundle.php(139): Wikimedia\Parsoid\Utils\DOMDataUtils::visitAndLoadDataAttribs()
#14 /var/www/html/w/includes/OutputTransform/ContentDOMTransformStage.php(66): Wikimedia\Parsoid\Core\DomPageBundle->toDom()
#15 /var/www/html/w/includes/OutputTransform/ContentDOMTransformStage.php(33): MediaWiki\OutputTransform\ContentDOMTransformStage->parsoidTransform()
#16 /var/www/html/w/includes/OutputTransform/OutputTransformPipeline.php(80): MediaWiki\OutputTransform\ContentDOMTransformStage->transform()
#17 /var/www/html/w/includes/Output/OutputPage.php(2563): MediaWiki\OutputTransform\OutputTransformPipeline->run()
#18 /var/www/html/w/includes/Output/OutputPage.php(2646): MediaWiki\Output\OutputPage->getParserOutputText()
#19 /var/www/html/w/includes/page/Article.php(979): MediaWiki\Output\OutputPage->addParserOutput()
#20 /var/www/html/w/includes/page/Article.php(871): MediaWiki\Page\Article->doOutputFromRenderStatus()
#21 /var/www/html/w/includes/page/Article.php(552): MediaWiki\Page\Article->generateContentOutput()
#22 /var/www/html/w/includes/actions/ViewAction.php(80): MediaWiki\Page\Article->view()
#23 /var/www/html/w/includes/actions/ActionEntryPoint.php(728): MediaWiki\Actions\ViewAction->show()
#24 /var/www/html/w/includes/actions/ActionEntryPoint.php(505): MediaWiki\Actions\ActionEntryPoint->performAction()
#25 /var/www/html/w/includes/actions/ActionEntryPoint.php(143): MediaWiki\Actions\ActionEntryPoint->performRequest()
#26 /var/www/html/w/includes/MediaWikiEntryPoint.php(202): MediaWiki\Actions\ActionEntryPoint->execute()
#27 /var/www/html/w/index.php(58): MediaWiki\MediaWikiEntryPoint->run()
#28 {main}And also rendering our function call with an error of the type "wrong number of arguments"
Expected behavior (Acceptance criteria):
- All named arguments should be ignored by extractWikifunctionCallArguments
- The array of arguments should only contained unnamed args, indexed by sequential ZKeys. For example, the extracted args of the example above should be:
array(
'target' => 'Z10000',
'arguments' =>
array (
'Z10000K1' => 'pango',
'Z10000K2' => 'linooooo',
),
'parseLang' => 'en',
'renderLang' => 'en',
)Completion checklist
- Before closing this task, review one by one the checklist available here: https://www.mediawiki.org/wiki/Abstract_Wikipedia_team/Definition_of_Done#Front-end_Task/Bug_Completion_Checklist
