Commit graph

50 commits

Author SHA1 Message Date
Tim Starling
20d06b34bb Safer autoloading with respect to file-scope code
Many files were in the autoloader despite having potentially harmful
file-scope code.

* Exclude all CommandLineInc maintenance scripts from the autoloader.
* Introduce  "NO_AUTOLOAD" tag which excludes the file containing it
  from the autoloader. Use it on CommandLineInc.php and a few
  suspicious-looking files without classes in case they are refactored
  to add classes in the future.
* Add a test which parses all non-PSR4 class files and confirms that
  they do not contain dangerous file-scope code. It's slow (15s) but
  its results were enlightening.
* Several maintenance scripts define constants in the file scope,
  intending to modify the behaviour of MediaWiki. Either move the
  define() to a later setup function, or protect with NO_AUTOLOAD.
* Use require_once consistently with Maintenance.php and
  doMaintenance.php, per the original convention which is supposed to
  allow one maintenance script to use the class of another maintenance
  script. Using require breaks autoloading of these maintenance class
  files.
* When Maintenance.php is included, check if MediaWiki has already
  started, and if so, return early. Revert the fix for T250003 which
  is incompatible with this safety measure. Hopefully it was superseded
  by splitting out the class file.
* In runScript.php add a redundant PHP_SAPI check since it does some
  things in file-scope code before any other check will be run.
* Change the if(false) class_alias(...) to something more hackish and
  more compatible with the new test.
* Some site-related scripts found Maintenance.php in a non-standard way.
  Use the standard way.
* fileOpPerfTest.php called error_reporting(). Probably debugging code
  left in; removed.
* Moved mediawiki.compress.7z registration from the class file to the
  caller.

Change-Id: I1b1be90343a5ab678df6f1b1bdd03319dcf6537f
2021-01-11 11:59:36 +11:00
Thiemo Kreuz
1fc8d79ac6 Remove documentation that literally repeats the code
For example, documenting the method getUser() with "get the User
object" does not add any information that's not already there.
But I have to read the text first to understand that it doesn't
document anything that's not already obvious from the code.

Some of this is from a time when we had a PHPCS sniff that was
complaining when a line like `@param User $user` doesn't end
with some descriptive text. Some users started adding text like
`@param User $user The User` back then. Let's please remove
this.

Change-Id: I0ea8d051bc732466c73940de9259f87ffb86ce7a
2020-10-27 19:20:26 +00:00
James D. Forrester
0291d99ed6 AutoloadGenerator: Drop support for .inc files, we don't use them now
Bug: T184782
Change-Id: I378e86c4632b6653bf0653d938aa41885ec358f8
2020-09-29 16:28:19 +00:00
Reedy
d92684ae3c Cleanup AutoloadGenerator
Set const visibilities

Remove unnecessary else

Don't set array in getTargetFileinfo() to then probably replace it

Change-Id: I2d58464a802876fad274e86b28dd0f645f24fe93
2020-05-09 23:11:52 +00:00
Holger Knust
471d2371ab doxygen: Changed Doxygen tags causing warnings during documentation generation
Updated Doxygen markup in several .php files triggering warnings when mwdocgen.php is executed. Removed
obsolete settings MSCGEN_PATH and TCL_SUBST from Doxyfile. The former would generate a warning in 1.8.16
while TCL support was removed in 1.8.18. Since TCL_SUBST was blank anyway, it was removed prior to getting
to .18 in production. Increased DOT_GRAPH_MAX_NODES from 50 to 200 since Doxygen complained about it being
too low for API and Maintenance.

Bug: T248706
Change-Id: I9c67f0807d1b43089d351263d4f591dee5501f36
2020-04-14 03:25:19 +00:00
Reedy
14826d1e0c Move ClassCollector to its own file
Change-Id: I881f1ccc4aaf8babc40ad534a2a91f1ccf3baad4
2019-04-14 19:46:18 +00:00
Brad Jorsch
ca3789a271 AutoloadGenerator: Filter PSR4-compliant classes instead of ignoring directories
Per discussion in T166010, we're going to handle class aliases (e.g. for
BC) by including the class_alias() call in the same file as the target
class. When the target class is a PSR4-compliant class, we still need to
pick up that alias for inclusion in autoload.php.

Thus, instead of excluding whole directories, we need to process the
files and filter out only those found classes that are PSR4 compliant.

Bug: T204983
Change-Id: I1c516998df368531c90ea54acc5be8be96e1db6c
2018-09-20 15:15:27 -04:00
petarpetkovic
c807489e1c Fix 'extenson' typo
Bug: T201491
Change-Id: I4fcae5d21e64b568ec78639a7e6a5d60bde939da
2018-08-08 11:24:17 +02:00
Kunal Mehta
e298f548f6 Split AutoloaderTest into a structure and class test
AutoloaderTest covers the AutoLoader class, and AutoLoaderStructureTest
covers the structure part of the test.

Change-Id: Ic4e7bfd670e1c3413631bda31260cc1cc825b1a2
2018-05-26 16:16:02 -07:00
Brad Jorsch
e5abec8052 Have ClassCollector ignore PHP 7 anonymous classes
PHP 7 introduces anonymous classes with a syntax like

 $instance = new class() extends Foo { ... };

ClassCollector is incorrectly detecting this as a class named
"() extends Foo". This patch fixes that by having it ignore "new class"
in much the same way it currently ignores "::class".

Change-Id: I4d1985a9c04be71f7bea6cb7b61dcea74f44a6e2
2018-05-01 13:13:37 -04:00
Kunal Mehta
24ae4318b3 Don't use phpcs:ignoreFile to selectively ignore sniffs
Because it doesn't work. `phpcs:ignoreFile` is intended as a performance
shortcut, and gives up on the file as soon as that token is found.
Instead, use `phpcs:disable` which does support selectively disabling
some sniffs. And since disabling is local to the file, there's no need
to re-enable it at the bottom of the file.

<https://github.com/squizlabs/PHP_CodeSniffer/issues/1903> has some
relevant discussion and clarification from upstream on this.

And make the files that are now being re-enabled pass PHPCS.

Change-Id: Ia4d8c45045f61cf9f24eb1d8631ff98d99c82d69
2018-04-08 17:08:53 -07:00
Umherirrender
255d76f2a1 build: Updating mediawiki/mediawiki-codesniffer to 15.0.0
Clean up use of @codingStandardsIgnore
- @codingStandardsIgnoreFile -> phpcs:ignoreFile
- @codingStandardsIgnoreLine -> phpcs:ignore
- @codingStandardsIgnoreStart -> phpcs:disable
- @codingStandardsIgnoreEnd -> phpcs:enable

For phpcs:disable always the necessary sniffs are provided.
Some start/end pairs are changed to line ignore

Change-Id: I92ef235849bcc349c69e53504e664a155dd162c8
2018-01-01 14:10:16 +01:00
jenkins-bot
3d95da4952 Merge "Require indentation of CASE statements in PHP code" 2017-12-19 12:21:59 +00:00
Umherirrender
39c9e5f98a Normalize path in AutoloadGenerator::setExcludePaths
Fix is for windows machine

Change-Id: Iadedeb6a04df439c0e940b8eb62fa46757c571c3
2017-12-15 22:16:01 +00:00
Kunal Mehta
036f5b47ef Enable using PSR-4 autoloader for MediaWiki core and extensions
This adds support for a PSR-4 (<http://www.php-fig.org/psr/psr-4/>)
autoloader, so instead of needing to manually list each class, just the
namespace prefix is needed.

Extensions can set a "AutoloadNamespaces" property in extension.json to
register PSR-4 compatible namespaces to be autoloaded.

The implementation is based off of the example implementation
(<http://www.php-fig.org/psr/psr-4/examples/>) with some modifications
for performance, notably cutting down on function calls, and only trying
to look up classes that are namespaced.

The generateLocalAutoload.php script will ignore any directory that is
registered as a PSR-4 namespace.

Bug: T99865
Bug: T173799
Change-Id: Id095dde37cbb40aa424fb628bd3c94e684ca2f65
2017-12-12 00:20:11 +00:00
Huji Lee
e74bfe13f6 Require indentation of CASE statements in PHP code
Bug: T182546
Change-Id: I91a9555893a08e4ec58da97c6cc4d1e70000ff6b
2017-12-10 22:07:50 -05:00
Umherirrender
fc07f4f8a7 Unwrap types in function docs from {}
{} is used in javascript, not in php

Used @(?:param|return|var|throws) \{[^\}]+\} to find&replace

Change-Id: I2e0c9c64b6528f3899d2809d585b5e4859838007
2017-10-09 21:31:07 +02:00
Umherirrender
f739a8f368 Improve some parameter docs
Add missing @return and @param to function docs and fixed some @param

Change-Id: I810727961057cfdcc274428b239af5975c57468d
2017-09-10 20:32:31 +02:00
Umherirrender
ace44e2064 Use correct variable name in @param documentation
For some varargs a variable name is added with suffix ,... as seen for
many other varargs

Some @param are swapped, because there are in the wrong order

Enable Sniff MediaWiki.Commenting.FunctionComment.ParamNameNoMatch

Change-Id: I60fec6025bce824d5c67563ab7b65ad6cd628ad8
2017-08-11 19:27:19 +02:00
Umherirrender
b5cddfb27b Remove empty lines at begin of function, if, foreach, switch
Organize phpcs.xml a bit

Change-Id: Ifb767729b481b4b686e6d6444cf48b1f580cc478
2017-07-01 11:34:16 +00:00
Paladox
54c56da85a Fix php code style
Preparation change for updating mediawiki code sniffer to 0.8.0

Change-Id: Ib0b3fe4afea9096ffa3a1347b4f7e07d3398b0b2
2017-05-05 12:03:54 +00:00
Matthew Flaschen
207cc3977a Use tabs for autoloader extension.json generation
This is copied from convertExtensionToRegistration.php .

Change-Id: Icea381ae44a472c3e8b4c6f623d6e4849dcfa093
2017-03-02 23:18:50 +00:00
Kunal Mehta
a57b64436c Use wikimedia/timestamp
Bug: T100924
Depends-On: I0a067367cda6885fa45631ed7c18799d653dc9bf
Change-Id: I69ba64e364df8af089c1c918cdf32f99454e693a
2017-02-28 21:15:38 -08:00
Timo Tijhof
516f2700e0 AutoloadGenerator: Add support for class_alias()
Blob, Field, DatabaseBase are now auto-detected.

Change-Id: Ib8fae2ec3fbb3f5e4aca7965f81631c5f0485ea1
2017-02-22 21:22:41 +00:00
Aaron Schulz
8a5d8c0c71 Move Field classes to Rdbms namespace
Update core callers and leave a class alias to \Field.

Change-Id: I4908282301d5de2a20baafe510557bd2c3867de5
2017-02-16 01:14:37 +00:00
Aaron Schulz
019fa7cb9c Move Blob class to Rdbms namespaces
Leave \Blob as an alias. Callers can now use the Rdbms\Blob class
for "extends"/"new" and the Rdbms\IBlob interface for type hints.

Change-Id: I983b76f181ac60c1eb92c350cd27ad77ec90a192
2017-02-13 21:07:00 +00:00
Aaron Schulz
0bdab07814 Move DatabaseBase to a class alias for type-hints
Change-Id: Ib6bbbd751358cbc2f2d2767c80721d3d8f142c0d
2016-09-29 06:09:03 +00:00
Reedy
fb4470ae12 Fix comment about how to use AutoloadGenerator
Change-Id: If15e9396b640536896406009233e91c0b5e2bb0f
2016-08-11 01:51:01 +01:00
Florian
3e7ae5ce39 Change explicit class to self in AutoloadGenerator
Follow-up: I3a426b92892f4c00cab33a13f6a717751120367c

Change-Id: I9d91ca42dbf41604639fff2ca00efa6fb262cb3d
2016-08-05 20:04:59 +02:00
Florian
23c79b228c Structure test: Add autoload.php order check
If a class is added manually to the autoload.php another run of
the maintenance script will probably add unnecessary noise to
another change. The added structure test checks, if the output of
the maintenance script equals to the contents of the commited
autoload.php.

Bug: T121921
Change-Id: I3a426b92892f4c00cab33a13f6a717751120367c
2016-08-03 09:50:27 +00:00
PleaseStand
bb16bb4c7d Revert "Split ClassCollector class into own file"
The AutoloadGenerator class is instantiated in the script
maintenance/generateLocalAutoload.php and its equivalents in
several extensions, none of which use MediaWiki's AutoLoader,
so you get a "Fatal error: Class 'ClassCollector' not found".

This reverts commit a379bebd03.

Change-Id: Ia6a7a1cb8a593ac86ecffdb690064e0b8ad68b47
2016-04-04 03:26:24 +00:00
addshore
a379bebd03 Split ClassCollector class into own file
Change-Id: I61210d1e963e0cd1278debff8f6826c5c79a88e9
2016-04-03 11:16:42 +03:00
Timo Tijhof
d1b4d97a3e AutoloadGenerator: Account for PHP 5.5 syntax like "self::static"
Bug: T128625
Change-Id: I905b549a738b76c07c56ec92f500553c1d48f558
2016-03-02 19:17:42 +00:00
umherirrender
f800abc858 Use short array for generator output
The AutoloadGenerator and LocalSettingsGenerator should generate short
array syntax

Change-Id: I5772640556fd6274db0d522341a98c0acfe5794d
2016-02-17 22:08:07 +01:00
Kunal Mehta
6e9b4f0e9c Convert all array() syntax to []
Per wikitech-l consensus:
 https://lists.wikimedia.org/pipermail/wikitech-l/2016-February/084821.html

Notes:
* Disabled CallTimePassByReference due to false positives (T127163)

Change-Id: I2c8ce713ce6600a0bb7bf67537c87044c7a45c4b
2016-02-17 01:33:00 -08:00
victorbarbu
7d0ba96499 Add support for traits in ClassCollector
Bug: T126116
Change-Id: Ifb81c6844565736111717736fe7649492e31f0f7
2016-02-10 18:11:41 +00:00
Matthew Flaschen
2cb0f735e2 Also support skin.json for updating JSON AutoloadClasses
Bug: T88194
Change-Id: Ib56680e6e0e983184e31c336dcac174922a86551
2015-06-25 01:05:16 -04:00
Smriti.Singh
cbcbbf2bf1 AutoloadGenerator.php: Update 'AutoloadClasses' in extension.json
AutoloadGenerator.php until now only updated autoload.php. As we shift
to extension registration, it would be cleaner if AutoloadGenerator.php
directly updates 'AutoloadClasses' in extension.json.

Bug: T88194
Change-Id: Idd601d7897634fae8c69f4d5338d9fc8f8b8f89b
2015-06-05 11:41:59 +03:00
Timo Tijhof
e5f0884ec4 Ignore phpcs in autoload.php
Causes 20 warnings for line length
https://integration.wikimedia.org/ci/job/mediawiki-core-phpcs-HEAD/13849/console

As being autogenerated, migth as well ignore so we can have
mediawiki-core pass.

Change-Id: Iedbe527456144c9b09b7ba93a8ce67edf0b47015
2015-03-16 19:09:28 +01:00
Reedy
4d9143c7f5 Add lots of @throws
Change-Id: I09d0c13070f966fcf23d2638d8fc1328279a5995
2014-12-24 13:49:20 +00:00
Bryan Davis
5e2c34fec3 Fix AutoloadGenerator to work on MediaWiki-Vagrant (again)
The patch set from I5d502b5 re-introduced the use of realpath() within
AutoloadGenerator::readFile() as part of a set of changes to ensure that
path separators are normalized across Unix and Windows systems. As noted
previously in I4623b3d, the use of realpath() in this function will
cause fatal exceptions to be thrown when a file such as
LocalSettings.php is a symlink to a file outside to $IP.

This patch separates the path normalization functionality from
realpath() expansion and uses only the path normalization component
within AutoloadGenerator::readFile(). It also introduces a cautionary
comment in AutoloadGenerator::readFile() that will hopefully keep
realpath() from being reintroduced there.

Change-Id: I4923dfa8370a7bd6077f42ff4c437d7293fdad66
2014-12-20 21:45:43 +00:00
This, that and the other
3e975cfc94 Make the autoload generator use forward slashes on all OSs
It was previously using the platform-specific directory separator, meaning
that we got backslashes on Windows and forward slashes on other OSs.

Bug: T77004
Change-Id: I5d502b54fddd55272e63d4a2a14b6d5de541263a
2014-12-19 16:11:35 +00:00
umherirrender
489d793882 Fixed spacing
- Added/removed spaces around parenthesis
- Added newline in empty blocks
- Added space after switch/foreach/function
- Use tabs at begin of line
- Add newline at end of file

Change-Id: I244cdb2c333489e1020931bf4ac5266a87439f0d
2014-12-05 22:28:07 +01:00
Bryan Davis
179854c3ce Fix AutoloadGenerator to work on MediaWiki-Vagrant
The use of realpath() in AutoloadGenerator::readFile() causes the
LocalSettings.php symlink to be dereferenced. Since the target file
lives outside of $IP, AutoloadGenerator would fail with an exception.

Change-Id: I4623b3da9b984026999189d70349ffb4754812a5
2014-11-20 16:05:07 -07:00
Erik Bernhardson
24a72730d6 Bug: Append to wgAutoloadClasses
When generating $wgAutoloadClasses for an extension the generator
currently outputs an assignment (=), but it is unlikely this is
the desired result. An extension wants to append to the existing
$wgAutoloadClasses. This bug is an unintended consequence of I75403ace
which changed the generator from assigning one key per line to using
an array literal.

This patch changes the output only when generating $wgAutoloadClasses
to the += operator which adds to the array any value that is not
already in the array.

Change-Id: I7d42ee5dc829991c6562878f0c90a06fadb1b6a6
2014-11-19 06:33:51 +00:00
Erik Bernhardson
5711d81126 Doc: Mention the php command in autoload.php to regenerate it
Adds a comment to the top of the generated autoload.php directing
developers to the command to regenerate the file so they may just
copy and paste the command.

Change-Id: If098a1eb51ed732378677215c0e438c73d506697
2014-11-17 16:35:32 +00:00
Kevin Israel
44ea55c41f AutoloadGenerator: Add newline at end of output file
Change-Id: I2b5a1adc115afd9430c1ea91285516c9c4290875
2014-11-15 21:44:52 +00:00
Kunal Mehta
3d11157294 AutoloadGenerator: Don't throw MWExceptions
The class won't have been autoloaded, so it can't be used.

Change-Id: I54a9be600839c7bffe7debb8ee35ac46694390b4
2014-11-14 11:47:52 -08:00
Erik Bernhardson
5a5d910a35 Performance improvements for autoload generator
Both zend and HHVM run through the autoload file faster when it
is a single array literal rather than individual key assignments.

The __DIR__ string concatenation remains because HHVM and Zend >= 5.5.0
optimize away constant string concatenation.

Change-Id: I75403ace264b09930d5cc545e62b8d7c3f1ad064
2014-11-14 10:18:13 -08:00
Erik Bernhardson
396a76f2ff Generate $wgAutoloadLocalClasses with a maint script
Currently all new classes in core need to be registered
with the autoloader.  This is acceptable but inconvenient.

This patch adds a script to read the output of php's tokenizer
to determine the names of all the classes within mediawiki core.
Patches with new or removed classes will just need to rerun
the maint script rather than manually adjusting the arrays.

A full conversion to psr-0 + composer would solve this as well,
but this is a very non-intrusive patch that can get us some
portion of the benefit(reduced manual maintenance) today rather
than months down the line once we figure out all the intricacies
of mediawiki + composer.

Change-Id: I8b1bdb84a9699de79f8b9951fa61e5437d083c55
2014-11-13 15:41:31 -08:00