mediawiki/extensions/Springboard: main (log #1978667)

sourcepatches

This run took 11 seconds.

From a22739253a51ec11dad626abce6e3faa96273cf9 Mon Sep 17 00:00:00 2001
From: libraryupgrader <tools.libraryupgrader@tools.wmflabs.org>
Date: Mon, 30 Jun 2025 03:52:50 +0000
Subject: [PATCH] build: Updating composer dependencies
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

* mediawiki/mediawiki-codesniffer: 41.0.0 → 47.0.0
  The following sniffs now pass and were enabled:
  * MediaWiki.Commenting.FunctionComment.MissingDocumentationProtected
  * MediaWiki.Commenting.PropertyDocumentation.MissingDocumentationProtected
  * MediaWiki.Commenting.PropertyDocumentation.MissingDocumentationPublic
  * MediaWiki.Commenting.PropertyDocumentation.MissingVar
  * MediaWiki.ControlStructures.AssignmentInControlStructures.AssignmentInControlStructures
  * MediaWiki.Files.ClassMatchesFilename.NotMatch
  * MediaWiki.Usage.DeprecatedGlobalVariables.Deprecated$wgTitle
  * MediaWiki.Usage.ExtendClassUsage.FunctionConfigUsage
  * MediaWiki.Usage.ExtendClassUsage.FunctionVarUsage
  * MediaWiki.Usage.ForbiddenFunctions.passthru

* mediawiki/minus-x: 1.1.1 → 1.1.3
* php-parallel-lint/php-parallel-lint: 1.3.2 → 1.4.0

Change-Id: Ib51cc5d72c5189086f538bf51eeae3c4509a5bc0
---
 .phpcs.xml                      | 10 ----------
 composer.json                   | 11 ++++++++---
 includes/SpecialSpringboard.php |  2 +-
 includes/SpringboardAPI.php     |  4 ++--
 4 files changed, 11 insertions(+), 16 deletions(-)

diff --git a/.phpcs.xml b/.phpcs.xml
index bd04822..6342cee 100755
--- a/.phpcs.xml
+++ b/.phpcs.xml
@@ -3,18 +3,8 @@
 	<rule ref="./vendor/mediawiki/mediawiki-codesniffer/MediaWiki">
 		<exclude name="Generic.Files.LineLength.TooLong" />
 		<exclude name="MediaWiki.Commenting.FunctionComment.MissingDocumentationPrivate" />
-		<exclude name="MediaWiki.Commenting.FunctionComment.MissingDocumentationProtected" />
 		<exclude name="MediaWiki.Commenting.FunctionComment.MissingDocumentationPublic" />
 		<exclude name="MediaWiki.Commenting.PropertyDocumentation.MissingDocumentationPrivate" />
-		<exclude name="MediaWiki.Commenting.PropertyDocumentation.MissingDocumentationProtected" />
-		<exclude name="MediaWiki.Commenting.PropertyDocumentation.MissingDocumentationPublic" />
-		<exclude name="MediaWiki.Commenting.PropertyDocumentation.MissingVar" />
-		<exclude name="MediaWiki.ControlStructures.AssignmentInControlStructures.AssignmentInControlStructures" />
-		<exclude name="MediaWiki.Files.ClassMatchesFilename.NotMatch" />
-		<exclude name="MediaWiki.Usage.DeprecatedGlobalVariables.Deprecated$wgTitle" />
-		<exclude name="MediaWiki.Usage.ExtendClassUsage.FunctionConfigUsage" />
-		<exclude name="MediaWiki.Usage.ExtendClassUsage.FunctionVarUsage" />
-		<exclude name="MediaWiki.Usage.ForbiddenFunctions.passthru" />
 		<exclude name="MediaWiki.Usage.ForbiddenFunctions.exec" />
 		<exclude name="Squiz.Scope.MethodScope.Missing" />
 	</rule>
diff --git a/composer.json b/composer.json
index ced4fa3..773c17c 100755
--- a/composer.json
+++ b/composer.json
@@ -4,11 +4,11 @@
 	"description": "Allows users to install extensions and skins in their wiki",
 	"license": "GPL-2.0-or-later",
 	"require-dev": {
-		"mediawiki/mediawiki-codesniffer": "41.0.0",
+		"mediawiki/mediawiki-codesniffer": "47.0.0",
 		"mediawiki/mediawiki-phan-config": "0.15.1",
-		"mediawiki/minus-x": "1.1.1",
+		"mediawiki/minus-x": "1.1.3",
 		"php-parallel-lint/php-console-highlighter": "1.0.0",
-		"php-parallel-lint/php-parallel-lint": "1.3.2"
+		"php-parallel-lint/php-parallel-lint": "1.4.0"
 	},
 	"scripts": {
 		"fix": [
@@ -24,5 +24,10 @@
 	},
 	"require": {
 		"symfony/yaml": "^6.4"
+	},
+	"config": {
+		"allow-plugins": {
+			"dealerdirect/phpcodesniffer-composer-installer": true
+		}
 	}
 }
diff --git a/includes/SpecialSpringboard.php b/includes/SpecialSpringboard.php
index 51fc5e2..f7db4d9 100755
--- a/includes/SpecialSpringboard.php
+++ b/includes/SpecialSpringboard.php
@@ -85,7 +85,7 @@ class SpecialSpringboard extends SpecialPage {
 		$endPath = $type === 'extension' ? 'extensions' : 'skins';
 		$lines = file_exists( $this->loaderFile )
 			? array_filter( file( $this->loaderFile,
-			FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES ), fn( $l ) => trim( $l ) !== '<?php' )
+			FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES ), static fn ( $l ) => trim( $l ) !== '<?php' )
 			: [];
 
 		foreach ( $items as $i => $entry ) {
diff --git a/includes/SpringboardAPI.php b/includes/SpringboardAPI.php
index b7bc9ab..1e27ecf 100755
--- a/includes/SpringboardAPI.php
+++ b/includes/SpringboardAPI.php
@@ -39,7 +39,7 @@ class SpringboardAPI extends ApiBase {
 
 		$lines = file_exists( $this->loaderFile )
 			? array_filter( file( $this->loaderFile,
-			FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES ), fn( $l ) => trim( $l ) !== '<?php' )
+			FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES ), static fn ( $l ) => trim( $l ) !== '<?php' )
 			: [];
 
 		$inLoader = in_array( $line, $lines );
@@ -65,7 +65,7 @@ class SpringboardAPI extends ApiBase {
 			if ( !$inLoader ) {
 				$this->dieWithError( $this->msg( 'springboard-api-error-notinstalled', $name ) );
 			}
-			$lines = array_filter( $lines, fn( $l ) => trim( $l ) !== $line );
+			$lines = array_filter( $lines, static fn ( $l ) => trim( $l ) !== $line );
 		}
 
 		file_put_contents( $this->loaderFile, "<?php\n" . implode( "\n", $lines ) . "\n" );
-- 
2.39.5

$ date
--- stdout ---
Mon Jun 30 03:52:44 UTC 2025

--- end ---
$ git clone file:///srv/git/mediawiki-extensions-Springboard.git repo --depth=1 -b master
--- stderr ---
Cloning into 'repo'...
--- stdout ---

--- end ---
$ git config user.name libraryupgrader
--- stdout ---

--- end ---
$ git config user.email tools.libraryupgrader@tools.wmflabs.org
--- stdout ---

--- end ---
$ git submodule update --init
--- stdout ---

--- end ---
$ grr init
--- stdout ---
Installed commit-msg hook.

--- end ---
$ git show-ref refs/heads/master
--- stdout ---
71ff93aaad2a193a553ff6868da5bda2ba44436f refs/heads/master

--- end ---
$ /usr/bin/composer install
--- stderr ---
No composer.lock file present. Updating dependencies to latest instead of installing from lock file. See https://getcomposer.org/install for more information.
Loading composer repositories with package information
Updating dependencies
Lock file operations: 37 installs, 0 updates, 0 removals
  - Locking composer/pcre (3.3.2)
  - Locking composer/semver (3.3.2)
  - Locking composer/spdx-licenses (1.5.9)
  - Locking composer/xdebug-handler (3.0.5)
  - Locking doctrine/deprecations (1.1.5)
  - Locking felixfbecker/advanced-json-rpc (v3.2.1)
  - Locking mediawiki/mediawiki-codesniffer (v41.0.0)
  - Locking mediawiki/mediawiki-phan-config (0.15.1)
  - Locking mediawiki/minus-x (1.1.1)
  - Locking mediawiki/phan-taint-check-plugin (6.1.0)
  - Locking microsoft/tolerant-php-parser (v0.1.2)
  - Locking netresearch/jsonmapper (v4.5.0)
  - Locking phan/phan (5.4.5)
  - Locking php-parallel-lint/php-console-color (v1.0.1)
  - Locking php-parallel-lint/php-console-highlighter (v1.0.0)
  - Locking php-parallel-lint/php-parallel-lint (v1.3.2)
  - Locking phpdocumentor/reflection-common (2.2.0)
  - Locking phpdocumentor/reflection-docblock (5.6.2)
  - Locking phpdocumentor/type-resolver (1.10.0)
  - Locking phpstan/phpdoc-parser (2.1.0)
  - Locking psr/container (2.0.2)
  - Locking psr/log (2.0.0)
  - Locking sabre/event (5.1.7)
  - Locking squizlabs/php_codesniffer (3.7.2)
  - Locking symfony/console (v5.4.47)
  - Locking symfony/deprecation-contracts (v3.6.0)
  - Locking symfony/polyfill-ctype (v1.32.0)
  - Locking symfony/polyfill-intl-grapheme (v1.32.0)
  - Locking symfony/polyfill-intl-normalizer (v1.32.0)
  - Locking symfony/polyfill-mbstring (v1.32.0)
  - Locking symfony/polyfill-php73 (v1.32.0)
  - Locking symfony/polyfill-php80 (v1.32.0)
  - Locking symfony/service-contracts (v3.6.0)
  - Locking symfony/string (v6.4.21)
  - Locking symfony/yaml (v6.4.23)
  - Locking tysonandre/var_representation_polyfill (0.1.3)
  - Locking webmozart/assert (1.11.0)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 37 installs, 0 updates, 0 removals
  - Downloading symfony/yaml (v6.4.23)
 0/1 [>---------------------------]   0%
 1/1 [============================] 100%
  - Installing composer/pcre (3.3.2): Extracting archive
  - Installing symfony/polyfill-php80 (v1.32.0): Extracting archive
  - Installing squizlabs/php_codesniffer (3.7.2): Extracting archive
  - Installing symfony/polyfill-mbstring (v1.32.0): Extracting archive
  - Installing composer/spdx-licenses (1.5.9): Extracting archive
  - Installing composer/semver (3.3.2): Extracting archive
  - Installing mediawiki/mediawiki-codesniffer (v41.0.0): Extracting archive
  - Installing tysonandre/var_representation_polyfill (0.1.3): Extracting archive
  - Installing symfony/polyfill-intl-normalizer (v1.32.0): Extracting archive
  - Installing symfony/polyfill-intl-grapheme (v1.32.0): Extracting archive
  - Installing symfony/polyfill-ctype (v1.32.0): Extracting archive
  - Installing symfony/string (v6.4.21): Extracting archive
  - Installing symfony/deprecation-contracts (v3.6.0): Extracting archive
  - Installing psr/container (2.0.2): Extracting archive
  - Installing symfony/service-contracts (v3.6.0): Extracting archive
  - Installing symfony/polyfill-php73 (v1.32.0): Extracting archive
  - Installing symfony/console (v5.4.47): Extracting archive
  - Installing sabre/event (5.1.7): Extracting archive
  - Installing netresearch/jsonmapper (v4.5.0): Extracting archive
  - Installing microsoft/tolerant-php-parser (v0.1.2): Extracting archive
  - Installing webmozart/assert (1.11.0): Extracting archive
  - Installing phpstan/phpdoc-parser (2.1.0): Extracting archive
  - Installing phpdocumentor/reflection-common (2.2.0): Extracting archive
  - Installing doctrine/deprecations (1.1.5): Extracting archive
  - Installing phpdocumentor/type-resolver (1.10.0): Extracting archive
  - Installing phpdocumentor/reflection-docblock (5.6.2): Extracting archive
  - Installing felixfbecker/advanced-json-rpc (v3.2.1): Extracting archive
  - Installing psr/log (2.0.0): Extracting archive
  - Installing composer/xdebug-handler (3.0.5): Extracting archive
  - Installing phan/phan (5.4.5): Extracting archive
  - Installing mediawiki/phan-taint-check-plugin (6.1.0): Extracting archive
  - Installing mediawiki/mediawiki-phan-config (0.15.1): Extracting archive
  - Installing mediawiki/minus-x (1.1.1): Extracting archive
  - Installing php-parallel-lint/php-console-color (v1.0.1): Extracting archive
  - Installing php-parallel-lint/php-console-highlighter (v1.0.0): Extracting archive
  - Installing php-parallel-lint/php-parallel-lint (v1.3.2): Extracting archive
  - Installing symfony/yaml (v6.4.23): Extracting archive
  0/37 [>---------------------------]   0%
 26/37 [===================>--------]  70%
 37/37 [============================] 100%
4 package suggestions were added by new dependencies, use `composer suggest` to see details.
Generating autoload files
16 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
--- stdout ---

--- end ---
Upgrading c:mediawiki/mediawiki-codesniffer from 41.0.0 -> 47.0.0
Upgrading c:mediawiki/minus-x from 1.1.1 -> 1.1.3
Upgrading c:php-parallel-lint/php-parallel-lint from 1.3.2 -> 1.4.0
$ /usr/bin/composer update
--- stderr ---
Loading composer repositories with package information
Updating dependencies
Lock file operations: 3 installs, 8 updates, 1 removal
  - Removing symfony/polyfill-php73 (v1.32.0)
  - Upgrading composer/semver (3.3.2 => 3.4.3)
  - Locking dealerdirect/phpcodesniffer-composer-installer (v1.1.1)
  - Upgrading mediawiki/mediawiki-codesniffer (v41.0.0 => v47.0.0)
  - Upgrading mediawiki/minus-x (1.1.1 => 1.1.3)
  - Upgrading php-parallel-lint/php-parallel-lint (v1.3.2 => v1.4.0)
  - Locking phpcsstandards/phpcsextra (1.2.1)
  - Locking phpcsstandards/phpcsutils (1.0.12)
  - Upgrading psr/log (2.0.0 => 3.0.2)
  - Upgrading squizlabs/php_codesniffer (3.7.2 => 3.12.2)
  - Upgrading symfony/console (v5.4.47 => v7.3.1)
  - Upgrading symfony/string (v6.4.21 => v7.3.0)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 3 installs, 8 updates, 1 removal
    0 [>---------------------------]    0 [->--------------------------]
  - Removing symfony/polyfill-php73 (v1.32.0)
  - Upgrading squizlabs/php_codesniffer (3.7.2 => 3.12.2): Extracting archive
 0/2 [>---------------------------]   0%
 1/2 [==============>-------------]  50%
 2/2 [============================] 100%
  - Installing dealerdirect/phpcodesniffer-composer-installer (v1.1.1): Extracting archive
  - Installing phpcsstandards/phpcsutils (1.0.12): Extracting archive
  - Installing phpcsstandards/phpcsextra (1.2.1): Extracting archive
  - Upgrading composer/semver (3.3.2 => 3.4.3): Extracting archive
  - Upgrading mediawiki/mediawiki-codesniffer (v41.0.0 => v47.0.0): Extracting archive
  - Upgrading symfony/string (v6.4.21 => v7.3.0): Extracting archive
  - Upgrading symfony/console (v5.4.47 => v7.3.1): Extracting archive
  - Upgrading psr/log (2.0.0 => 3.0.2): Extracting archive
  - Upgrading mediawiki/minus-x (1.1.1 => 1.1.3): Extracting archive
  - Upgrading php-parallel-lint/php-parallel-lint (v1.3.2 => v1.4.0): Extracting archive
 0/9 [>---------------------------]   0%
 9/9 [============================] 100%
Generating autoload files
18 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
No security vulnerability advisories found
--- stdout ---
PHP CodeSniffer Config installed_paths set to ../../mediawiki/mediawiki-codesniffer,../../phpcsstandards/phpcsextra,../../phpcsstandards/phpcsutils

--- end ---
Previously failing phpcs rules: {'MediaWiki.Files.ClassMatchesFilename.NotMatch', 'MediaWiki.Commenting.PropertyDocumentation.MissingDocumentationPublic', 'MediaWiki.Commenting.PropertyDocumentation.MissingDocumentationProtected', 'MediaWiki.Commenting.FunctionComment.MissingDocumentationPublic', 'MediaWiki.Usage.ForbiddenFunctions.exec', 'MediaWiki.Usage.ExtendClassUsage.FunctionVarUsage', 'MediaWiki.Commenting.FunctionComment.MissingDocumentationPrivate', 'MediaWiki.Commenting.PropertyDocumentation.MissingDocumentationPrivate', 'MediaWiki.ControlStructures.AssignmentInControlStructures.AssignmentInControlStructures', 'MediaWiki.Commenting.PropertyDocumentation.MissingVar', 'MediaWiki.Commenting.FunctionComment.MissingDocumentationProtected', 'MediaWiki.Usage.DeprecatedGlobalVariables.Deprecated$wgTitle', 'MediaWiki.Usage.ForbiddenFunctions.passthru', 'Squiz.Scope.MethodScope.Missing', 'MediaWiki.Usage.ExtendClassUsage.FunctionConfigUsage', 'Generic.Files.LineLength.TooLong'}
$ vendor/bin/phpcs --report=json
--- stdout ---
{"totals":{"errors":12,"warnings":13,"fixable":6},"files":{"\/src\/repo\/includes\/CustomLoader.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/includes\/AdminLinksHooks.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/includes\/SpecialSpringboard.php":{"errors":4,"warnings":2,"messages":[{"message":"Missing class property doc comment","source":"MediaWiki.Commenting.PropertyDocumentation.MissingDocumentationPrivate","severity":5,"fixable":false,"type":"ERROR","line":23,"column":13},{"message":"Missing function doc comment","source":"MediaWiki.Commenting.FunctionComment.MissingDocumentationPublic","severity":5,"fixable":false,"type":"ERROR","line":29,"column":12},{"message":"Missing function doc comment","source":"MediaWiki.Commenting.FunctionComment.MissingDocumentationPrivate","severity":5,"fixable":false,"type":"ERROR","line":59,"column":13},{"message":"Use static closure","source":"MediaWiki.Usage.StaticClosure.StaticClosure","severity":5,"fixable":true,"type":"WARNING","line":88,"column":62},{"message":"A single space should be after the fn keyword in closures","source":"MediaWiki.WhiteSpace.SpaceAfterClosure.NoWhitespaceAfterArrow","severity":5,"fixable":true,"type":"ERROR","line":88,"column":62},{"message":"Line exceeds 120 characters; contains 121 characters","source":"Generic.Files.LineLength.TooLong","severity":5,"fixable":false,"type":"WARNING","line":128,"column":121}]},"\/src\/repo\/Springboard.i18n.alias.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/includes\/SpringboardAPI.php":{"errors":8,"warnings":11,"messages":[{"message":"Missing class property doc comment","source":"MediaWiki.Commenting.PropertyDocumentation.MissingDocumentationPrivate","severity":5,"fixable":false,"type":"ERROR","line":25,"column":13},{"message":"Visibility must be declared on method \"execute\"","source":"Squiz.Scope.MethodScope.Missing","severity":5,"fixable":false,"type":"ERROR","line":27,"column":5},{"message":"Use static closure","source":"MediaWiki.Usage.StaticClosure.StaticClosure","severity":5,"fixable":true,"type":"WARNING","line":42,"column":62},{"message":"A single space should be after the fn keyword in closures","source":"MediaWiki.WhiteSpace.SpaceAfterClosure.NoWhitespaceAfterArrow","severity":5,"fixable":true,"type":"ERROR","line":42,"column":62},{"message":"Use static closure","source":"MediaWiki.Usage.StaticClosure.StaticClosure","severity":5,"fixable":true,"type":"WARNING","line":68,"column":44},{"message":"A single space should be after the fn keyword in closures","source":"MediaWiki.WhiteSpace.SpaceAfterClosure.NoWhitespaceAfterArrow","severity":5,"fixable":true,"type":"ERROR","line":68,"column":44},{"message":"Visibility must be declared on method \"download\"","source":"Squiz.Scope.MethodScope.Missing","severity":5,"fixable":false,"type":"ERROR","line":98,"column":5},{"message":"exec should not be used","source":"MediaWiki.Usage.ForbiddenFunctions.exec","severity":5,"fixable":false,"type":"WARNING","line":106,"column":21},{"message":"exec should not be used","source":"MediaWiki.Usage.ForbiddenFunctions.exec","severity":5,"fixable":false,"type":"WARNING","line":109,"column":25},{"message":"exec should not be used","source":"MediaWiki.Usage.ForbiddenFunctions.exec","severity":5,"fixable":false,"type":"WARNING","line":121,"column":17},{"message":"exec should not be used","source":"MediaWiki.Usage.ForbiddenFunctions.exec","severity":5,"fixable":false,"type":"WARNING","line":124,"column":21},{"message":"Visibility must be declared on method \"dbUpdate\"","source":"Squiz.Scope.MethodScope.Missing","severity":5,"fixable":false,"type":"ERROR","line":139,"column":5},{"message":"exec should not be used","source":"MediaWiki.Usage.ForbiddenFunctions.exec","severity":5,"fixable":false,"type":"WARNING","line":143,"column":9},{"message":"Visibility must be declared on method \"composerInstall\"","source":"Squiz.Scope.MethodScope.Missing","severity":5,"fixable":false,"type":"ERROR","line":150,"column":5},{"message":"exec should not be used","source":"MediaWiki.Usage.ForbiddenFunctions.exec","severity":5,"fixable":false,"type":"WARNING","line":157,"column":9},{"message":"exec should not be used","source":"MediaWiki.Usage.ForbiddenFunctions.exec","severity":5,"fixable":false,"type":"WARNING","line":158,"column":9},{"message":"Visibility must be declared on method \"delete\"","source":"Squiz.Scope.MethodScope.Missing","severity":5,"fixable":false,"type":"ERROR","line":166,"column":5},{"message":"exec should not be used","source":"MediaWiki.Usage.ForbiddenFunctions.exec","severity":5,"fixable":false,"type":"WARNING","line":169,"column":17},{"message":"exec should not be used","source":"MediaWiki.Usage.ForbiddenFunctions.exec","severity":5,"fixable":false,"type":"WARNING","line":172,"column":17}]}}}

--- end ---
PHPCS run failed
$ vendor/bin/phpcbf
--- stdout ---

PHPCBF RESULT SUMMARY
----------------------------------------------------------------------
FILE                                                  FIXED  REMAINING
----------------------------------------------------------------------
/src/repo/includes/SpecialSpringboard.php             2      4
/src/repo/includes/SpringboardAPI.php                 4      15
----------------------------------------------------------------------
A TOTAL OF 6 ERRORS WERE FIXED IN 2 FILES
----------------------------------------------------------------------

Time: 251ms; Memory: 8MB



--- end ---
$ vendor/bin/phpcs --report=json
--- stdout ---
{"totals":{"errors":9,"warnings":10,"fixable":0},"files":{"\/src\/repo\/Springboard.i18n.alias.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/includes\/CustomLoader.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/includes\/AdminLinksHooks.php":{"errors":0,"warnings":0,"messages":[]},"\/src\/repo\/includes\/SpecialSpringboard.php":{"errors":3,"warnings":1,"messages":[{"message":"Missing class property doc comment","source":"MediaWiki.Commenting.PropertyDocumentation.MissingDocumentationPrivate","severity":5,"fixable":false,"type":"ERROR","line":23,"column":13},{"message":"Missing function doc comment","source":"MediaWiki.Commenting.FunctionComment.MissingDocumentationPublic","severity":5,"fixable":false,"type":"ERROR","line":29,"column":12},{"message":"Missing function doc comment","source":"MediaWiki.Commenting.FunctionComment.MissingDocumentationPrivate","severity":5,"fixable":false,"type":"ERROR","line":59,"column":13},{"message":"Line exceeds 120 characters; contains 121 characters","source":"Generic.Files.LineLength.TooLong","severity":5,"fixable":false,"type":"WARNING","line":128,"column":121}]},"\/src\/repo\/includes\/SpringboardAPI.php":{"errors":6,"warnings":9,"messages":[{"message":"Missing class property doc comment","source":"MediaWiki.Commenting.PropertyDocumentation.MissingDocumentationPrivate","severity":5,"fixable":false,"type":"ERROR","line":25,"column":13},{"message":"Visibility must be declared on method \"execute\"","source":"Squiz.Scope.MethodScope.Missing","severity":5,"fixable":false,"type":"ERROR","line":27,"column":5},{"message":"Visibility must be declared on method \"download\"","source":"Squiz.Scope.MethodScope.Missing","severity":5,"fixable":false,"type":"ERROR","line":98,"column":5},{"message":"exec should not be used","source":"MediaWiki.Usage.ForbiddenFunctions.exec","severity":5,"fixable":false,"type":"WARNING","line":106,"column":21},{"message":"exec should not be used","source":"MediaWiki.Usage.ForbiddenFunctions.exec","severity":5,"fixable":false,"type":"WARNING","line":109,"column":25},{"message":"exec should not be used","source":"MediaWiki.Usage.ForbiddenFunctions.exec","severity":5,"fixable":false,"type":"WARNING","line":121,"column":17},{"message":"exec should not be used","source":"MediaWiki.Usage.ForbiddenFunctions.exec","severity":5,"fixable":false,"type":"WARNING","line":124,"column":21},{"message":"Visibility must be declared on method \"dbUpdate\"","source":"Squiz.Scope.MethodScope.Missing","severity":5,"fixable":false,"type":"ERROR","line":139,"column":5},{"message":"exec should not be used","source":"MediaWiki.Usage.ForbiddenFunctions.exec","severity":5,"fixable":false,"type":"WARNING","line":143,"column":9},{"message":"Visibility must be declared on method \"composerInstall\"","source":"Squiz.Scope.MethodScope.Missing","severity":5,"fixable":false,"type":"ERROR","line":150,"column":5},{"message":"exec should not be used","source":"MediaWiki.Usage.ForbiddenFunctions.exec","severity":5,"fixable":false,"type":"WARNING","line":157,"column":9},{"message":"exec should not be used","source":"MediaWiki.Usage.ForbiddenFunctions.exec","severity":5,"fixable":false,"type":"WARNING","line":158,"column":9},{"message":"Visibility must be declared on method \"delete\"","source":"Squiz.Scope.MethodScope.Missing","severity":5,"fixable":false,"type":"ERROR","line":166,"column":5},{"message":"exec should not be used","source":"MediaWiki.Usage.ForbiddenFunctions.exec","severity":5,"fixable":false,"type":"WARNING","line":169,"column":17},{"message":"exec should not be used","source":"MediaWiki.Usage.ForbiddenFunctions.exec","severity":5,"fixable":false,"type":"WARNING","line":172,"column":17}]}}}

--- end ---
 * sniff MediaWiki.Files.ClassMatchesFilename.NotMatch is no longer failing
 * sniff MediaWiki.Commenting.PropertyDocumentation.MissingDocumentationPublic is no longer failing
 * sniff MediaWiki.Commenting.PropertyDocumentation.MissingDocumentationProtected is no longer failing
 * sniff MediaWiki.Usage.ExtendClassUsage.FunctionVarUsage is no longer failing
 * sniff MediaWiki.ControlStructures.AssignmentInControlStructures.AssignmentInControlStructures is no longer failing
 * sniff MediaWiki.Commenting.PropertyDocumentation.MissingVar is no longer failing
 * sniff MediaWiki.Commenting.FunctionComment.MissingDocumentationProtected is no longer failing
 * sniff MediaWiki.Usage.DeprecatedGlobalVariables.Deprecated$wgTitle is no longer failing
 * sniff MediaWiki.Usage.ForbiddenFunctions.passthru is no longer failing
 * sniff MediaWiki.Usage.ExtendClassUsage.FunctionConfigUsage is no longer failing
$ git checkout .phpcs.xml
--- stderr ---
Updated 1 path from the index
--- stdout ---

--- end ---
$ /usr/bin/composer install
--- stderr ---
Installing dependencies from lock file (including require-dev)
Verifying lock file contents can be installed on current platform.
Nothing to install, update or remove
Generating autoload files
18 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
--- stdout ---

--- end ---
$ /usr/bin/composer test
--- stderr ---
> parallel-lint . --exclude vendor --exclude node_modules --exclude .phan
> phpcs -sp --cache
--- stdout ---
PHP 8.2.28 | 10 parallel jobs
.....                                                        5/5 (100%)


Checked 5 files in 0 seconds
No syntax error found
..... 5 / 5 (100%)


Time: 79ms; Memory: 8MB


--- end ---
build: Updating composer dependencies

* mediawiki/mediawiki-codesniffer: 41.0.0 → 47.0.0
  The following sniffs now pass and were enabled:
  * MediaWiki.Commenting.FunctionComment.MissingDocumentationProtected
  * MediaWiki.Commenting.PropertyDocumentation.MissingDocumentationProtected
  * MediaWiki.Commenting.PropertyDocumentation.MissingDocumentationPublic
  * MediaWiki.Commenting.PropertyDocumentation.MissingVar
  * MediaWiki.ControlStructures.AssignmentInControlStructures.AssignmentInControlStructures
  * MediaWiki.Files.ClassMatchesFilename.NotMatch
  * MediaWiki.Usage.DeprecatedGlobalVariables.Deprecated$wgTitle
  * MediaWiki.Usage.ExtendClassUsage.FunctionConfigUsage
  * MediaWiki.Usage.ExtendClassUsage.FunctionVarUsage
  * MediaWiki.Usage.ForbiddenFunctions.passthru

* mediawiki/minus-x: 1.1.1 → 1.1.3
* php-parallel-lint/php-parallel-lint: 1.3.2 → 1.4.0

$ git add .
--- stdout ---

--- end ---
$ git commit -F /tmp/tmp9eytzp81
--- stdout ---
[master a227392] build: Updating composer dependencies
 4 files changed, 11 insertions(+), 16 deletions(-)

--- end ---
$ git format-patch HEAD~1 --stdout
--- stdout ---
From a22739253a51ec11dad626abce6e3faa96273cf9 Mon Sep 17 00:00:00 2001
From: libraryupgrader <tools.libraryupgrader@tools.wmflabs.org>
Date: Mon, 30 Jun 2025 03:52:50 +0000
Subject: [PATCH] build: Updating composer dependencies
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

* mediawiki/mediawiki-codesniffer: 41.0.0 → 47.0.0
  The following sniffs now pass and were enabled:
  * MediaWiki.Commenting.FunctionComment.MissingDocumentationProtected
  * MediaWiki.Commenting.PropertyDocumentation.MissingDocumentationProtected
  * MediaWiki.Commenting.PropertyDocumentation.MissingDocumentationPublic
  * MediaWiki.Commenting.PropertyDocumentation.MissingVar
  * MediaWiki.ControlStructures.AssignmentInControlStructures.AssignmentInControlStructures
  * MediaWiki.Files.ClassMatchesFilename.NotMatch
  * MediaWiki.Usage.DeprecatedGlobalVariables.Deprecated$wgTitle
  * MediaWiki.Usage.ExtendClassUsage.FunctionConfigUsage
  * MediaWiki.Usage.ExtendClassUsage.FunctionVarUsage
  * MediaWiki.Usage.ForbiddenFunctions.passthru

* mediawiki/minus-x: 1.1.1 → 1.1.3
* php-parallel-lint/php-parallel-lint: 1.3.2 → 1.4.0

Change-Id: Ib51cc5d72c5189086f538bf51eeae3c4509a5bc0
---
 .phpcs.xml                      | 10 ----------
 composer.json                   | 11 ++++++++---
 includes/SpecialSpringboard.php |  2 +-
 includes/SpringboardAPI.php     |  4 ++--
 4 files changed, 11 insertions(+), 16 deletions(-)

diff --git a/.phpcs.xml b/.phpcs.xml
index bd04822..6342cee 100755
--- a/.phpcs.xml
+++ b/.phpcs.xml
@@ -3,18 +3,8 @@
 	<rule ref="./vendor/mediawiki/mediawiki-codesniffer/MediaWiki">
 		<exclude name="Generic.Files.LineLength.TooLong" />
 		<exclude name="MediaWiki.Commenting.FunctionComment.MissingDocumentationPrivate" />
-		<exclude name="MediaWiki.Commenting.FunctionComment.MissingDocumentationProtected" />
 		<exclude name="MediaWiki.Commenting.FunctionComment.MissingDocumentationPublic" />
 		<exclude name="MediaWiki.Commenting.PropertyDocumentation.MissingDocumentationPrivate" />
-		<exclude name="MediaWiki.Commenting.PropertyDocumentation.MissingDocumentationProtected" />
-		<exclude name="MediaWiki.Commenting.PropertyDocumentation.MissingDocumentationPublic" />
-		<exclude name="MediaWiki.Commenting.PropertyDocumentation.MissingVar" />
-		<exclude name="MediaWiki.ControlStructures.AssignmentInControlStructures.AssignmentInControlStructures" />
-		<exclude name="MediaWiki.Files.ClassMatchesFilename.NotMatch" />
-		<exclude name="MediaWiki.Usage.DeprecatedGlobalVariables.Deprecated$wgTitle" />
-		<exclude name="MediaWiki.Usage.ExtendClassUsage.FunctionConfigUsage" />
-		<exclude name="MediaWiki.Usage.ExtendClassUsage.FunctionVarUsage" />
-		<exclude name="MediaWiki.Usage.ForbiddenFunctions.passthru" />
 		<exclude name="MediaWiki.Usage.ForbiddenFunctions.exec" />
 		<exclude name="Squiz.Scope.MethodScope.Missing" />
 	</rule>
diff --git a/composer.json b/composer.json
index ced4fa3..773c17c 100755
--- a/composer.json
+++ b/composer.json
@@ -4,11 +4,11 @@
 	"description": "Allows users to install extensions and skins in their wiki",
 	"license": "GPL-2.0-or-later",
 	"require-dev": {
-		"mediawiki/mediawiki-codesniffer": "41.0.0",
+		"mediawiki/mediawiki-codesniffer": "47.0.0",
 		"mediawiki/mediawiki-phan-config": "0.15.1",
-		"mediawiki/minus-x": "1.1.1",
+		"mediawiki/minus-x": "1.1.3",
 		"php-parallel-lint/php-console-highlighter": "1.0.0",
-		"php-parallel-lint/php-parallel-lint": "1.3.2"
+		"php-parallel-lint/php-parallel-lint": "1.4.0"
 	},
 	"scripts": {
 		"fix": [
@@ -24,5 +24,10 @@
 	},
 	"require": {
 		"symfony/yaml": "^6.4"
+	},
+	"config": {
+		"allow-plugins": {
+			"dealerdirect/phpcodesniffer-composer-installer": true
+		}
 	}
 }
diff --git a/includes/SpecialSpringboard.php b/includes/SpecialSpringboard.php
index 51fc5e2..f7db4d9 100755
--- a/includes/SpecialSpringboard.php
+++ b/includes/SpecialSpringboard.php
@@ -85,7 +85,7 @@ class SpecialSpringboard extends SpecialPage {
 		$endPath = $type === 'extension' ? 'extensions' : 'skins';
 		$lines = file_exists( $this->loaderFile )
 			? array_filter( file( $this->loaderFile,
-			FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES ), fn( $l ) => trim( $l ) !== '<?php' )
+			FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES ), static fn ( $l ) => trim( $l ) !== '<?php' )
 			: [];
 
 		foreach ( $items as $i => $entry ) {
diff --git a/includes/SpringboardAPI.php b/includes/SpringboardAPI.php
index b7bc9ab..1e27ecf 100755
--- a/includes/SpringboardAPI.php
+++ b/includes/SpringboardAPI.php
@@ -39,7 +39,7 @@ class SpringboardAPI extends ApiBase {
 
 		$lines = file_exists( $this->loaderFile )
 			? array_filter( file( $this->loaderFile,
-			FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES ), fn( $l ) => trim( $l ) !== '<?php' )
+			FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES ), static fn ( $l ) => trim( $l ) !== '<?php' )
 			: [];
 
 		$inLoader = in_array( $line, $lines );
@@ -65,7 +65,7 @@ class SpringboardAPI extends ApiBase {
 			if ( !$inLoader ) {
 				$this->dieWithError( $this->msg( 'springboard-api-error-notinstalled', $name ) );
 			}
-			$lines = array_filter( $lines, fn( $l ) => trim( $l ) !== $line );
+			$lines = array_filter( $lines, static fn ( $l ) => trim( $l ) !== $line );
 		}
 
 		file_put_contents( $this->loaderFile, "<?php\n" . implode( "\n", $lines ) . "\n" );
-- 
2.39.5


--- end ---
Source code is licensed under the AGPL.