Commit graph

1106 commits

Author SHA1 Message Date
jenkins-bot
ff4134cb9f Merge "Parser: Add type hints for objects, arrays and callables" 2020-04-16 20:21:15 +00:00
C. Scott Ananian
83a22b7fcd Remove codepaths which ran parser in 'untidy' mode
Disabling tidy has been deprecated since 1.33.  This cleans up the code
paths which still used untidy output.

Bug: T198214
Change-Id: I821ef3b8f59b272d983583d407b2f0794fe1e791
2020-04-13 21:34:04 +00:00
Fomafix
99104944e8 Parser: Add type hints for objects, arrays and callables
Also
* remove unneeded reference &$user in getUserSig.
* add missing false in Doxygen tags.

Change-Id: Icc3860cda66918f56d9014d6c19c4be47d4b5464
2020-04-11 15:49:06 +02:00
C. Scott Ananian
8c18f2b41c Add a wfDeprecated to an overlooked code path where parser output is not tidy
We formally deprecated running the parser with tidy disabled in 1.33, but
I missed a hard-deprecation on this code path.

Be careful not to spam the logs with deprecation warnings triggered by
(deprecated) API requests, though.

Change-Id: I10f64e76ec0c5aee8b26fc00bc11ebb0e39f961b
2020-04-02 11:53:53 -04:00
C. Scott Ananian
a5afda55bf Deprecate most public fields of Parser; make private those unused outside core
Fields which have at least one user outside of mediawiki-core (as reported
by the 'everything' search in codesearch.wmflabs.org) have been deprecated;
those which have no users have been immediately made private.

Code search url for the fields made private:
https://codesearch.wmflabs.org/search/?q=-%3E%28mFunctionSynonyms%7CmFunctionTagHooks%7CmStripList%7CmVarCache%7CmImageParams%7CmImageParamsMagicArray%7CmSubstWords%7CmConf%7CmExtLinkBracketedRegex%7CmUrlProtocols%7CmAutonumber%7CmLinkHolders%7CmDefaultSort%7CmTplRedirCache%7CmForceTocPosition%7CmTplDomCache%7CmOutputType%7CmLangLinkLanguages%7CcurrentRevisionCache%7CmProfiler%7CmLinkRenderer%29&i=nope&files=&repos=

Bug: T248889
Change-Id: I28e88e574ec9f99231bd590e9a87fbc1c4349fa1
2020-03-31 11:47:34 -04:00
C. Scott Ananian
3a7ecc11b4 Prepare to deprecate public fields of Parser
This is preparatory work for I28e88e574ec9f99231bd590e9a87fbc1c4349fa1
which simply splits comma-separated lists into individual lines and
does minor documentation tweaks, so that the main body of the follow-up
patch is easier to review.

Bug: T248889
Change-Id: I196d047ce694fe0e8447bd96455c7fb1b75247e4
2020-03-31 11:47:34 -04:00
C. Scott Ananian
baca583042 Make private some Parser constants
These have no users outside Parser.php.

Code search url for the constants made private:
https://codesearch.wmflabs.org/search/?q=%28EXT_LINK_ADDR%7CEXT_IMAGE_REGEX%7CSPACE_NOT_NL%29&i=nope&files=&repos=

Bug: T248889
Change-Id: I46f19c4386c2f2e8cbdb8979db628493127c1925
2020-03-31 11:47:34 -04:00
C. Scott Ananian
9d12c89378 Remove Parser::$mRevIdForTs
Nothing appears to use Parser::$mRevIdForTs, it's not even initialized.
Remove this unnecessary field.

Code search:
https://codesearch.wmflabs.org/search/?q=mRevIdForTs&i=nope&files=&repos=

Bug: T248889
Change-Id: Ic023cde7e8b1101978c674d0694ab5d4cb9ee900
2020-03-30 23:41:08 +00:00
C. Scott Ananian
a6b1cdac97 Remove Parser::$mIncludeCount
Nothing appears to use Parser::$mIncludeCount, not even the parser itself.
Remove this unnecessary field.

Code search:
https://codesearch.wmflabs.org/search/?q=mIncludeCount&i=nope&files=&repos=

Bug: T248889
Change-Id: I15892c5bfdc6a1f2763824f4a9e5cfbc90e48b54
2020-03-30 21:46:23 +00:00
C. Scott Ananian
f35fcb811a Remove Parser::$mDefaultStripList
The reset state of the Parser $mStripList was made a public field,
presumably so it could be customized by extensions?  But nobody seems
to have ever used this.  Remove this unnecessary extension point.

Code search:
https://codesearch.wmflabs.org/search/?q=mDefaultStripList&i=nope&files=&repos=

Bug: T248889
Change-Id: I10fa521f62e6b9696ab6b96bcf7eb05091b35022
2020-03-30 21:45:28 +00:00
C. Scott Ananian
a3c9621ad0 Deprecate unusual uses of the ParserGetVariableValueSwitch hook
Ensure that the value returned is always also added to the cache, since
we (eventually) want to remove the hook's access to
$parser->mVarCache.  Also don't allow monkeying with the value passed
as $magicWordId, even though it's a reference.

Code search:
https://codesearch.wmflabs.org/deployed/?q=ParserGetVariableValueSwitch&i=nope&files=&repos=

Bug: T236813
Depends-On: Ia12faefada7e4cf04f1a6b12b3ed1703bf28e437
Depends-On: Ia9e2e00c6b7d0e62cbe80c3b124165b691b1ff3d
Depends-On: I1e48fa47b8723958d543a69aaf9b62b872200dc5
Depends-On: If9a0885a8664c22473ade712364c2dd0a5c04e0b
Change-Id: I3d6b281f8e4e0bf68eefbf9767047527b4573b79
2020-03-27 08:59:21 -04:00
C. Scott Ananian
063445581c Always cache magic word expansions
The existing magic word API (including hooks) gives implementers direct
access to $parser->mVarCache and full control of caching.  Simplify the
implementation (prior to moving the magic word implementations out of
Parser.php) by always caching built-in magic words in $parser->mVarCache.

The cases which were skipping the cache don't vary anyway.

This behavior change is split from the rest of the refactoring in
I68fb1e786374e445b7df047934c532d7e10b8e94 to allow it to be deployed
separately, just in case there was some strange reason this would
cause regressions in practice.

Bug: T236813
Change-Id: I34a0d9a37e41c854c801d546427fc8cd0fe39dc4
2020-03-27 08:58:39 -04:00
C. Scott Ananian
99f6b82995 Deprecate the ParserGetVariableValueVarCache hook
We don't want to expose the internal caching mechanism of the parser.
There are no uses in deployed WMF code:

https://codesearch.wmflabs.org/deployed/?q=ParserGetVariableValueVarCache&i=nope&files=&repos=

Bug: T236813
Change-Id: I1b0a5cf7d32be86a45d7231940360e2bfce7275f
2020-03-26 18:47:30 -04:00
C. Scott Ananian
37022ad343 Remove Parser::getDefaultPreprocessorClass(), deprecated in 1.34
Code search:
https://codesearch.wmflabs.org/search/?q=getDefaultPreprocessorClass&i=nope&files=&repos=

Bug: T204945
Change-Id: Ie7c0d8d9b61088efce9719878b3abcc9ed9ebc80
2020-03-26 16:10:34 -04:00
C. Scott Ananian
5468ab66ba Deprecate Parser::enableOOUI()
All existing uses in our codebase are to OutputPage::enableOOUI.

Further, the implementation here in Parser::enableOOUI calls
OutputPage::setupOOUI() without arguments, which means that the skin
and the page directionality are not initialized correctly.
(OutputPage::enableOOUI() does this correctly).  So even if anyone
*was* using Parser::enableOOUI... they shouldn't be.

Use $parser->getOutput()->enableOOUI() instead.

This was originally added in 2d50e28975 to
enable OOUI to be used from parser tags (T101666), but the current patches
for this (eg I29e876c768819413bf31499f067d545732e591b0) can just use
$parser->getOutput()->enableOOUI() instead.

Code search:
https://codesearch.wmflabs.org/search/?q=enableOOUI&i=nope&files=&repos=

Bug: T236809
Change-Id: I71be19c1d735fef5b781c68ef7ba47cafc37595d
2020-03-26 16:09:05 -04:00
Petr Pchelko
1e4beb3107 Hard deprecate Revision::newKnownCurrent
Bug: T246284
Change-Id: Iba93fdeb0a88e6fa4068f03367b23a1f670257c6
2020-03-18 11:52:44 -07:00
Umherirrender
47ef87e272 Bundle services at top of TraditionalImageGallery::toHtml
Add Parser::getBadFileLookup to get the instance from there when having
a parser instance

Change-Id: I48e254406ffb62d847404a5f8e81a35f8d4c83f1
2020-03-14 20:29:37 +00:00
Umherirrender
878330ae30 Use MediaWikiServices::getRepoGroup
Change-Id: Ibcef425c2e0c95d6d2f98b8d889f85ebcb33f20a
2020-03-14 13:16:12 +01:00
Tim Starling
eb6c5f70d9 Add ParserPreSaveTransformComplete hook
This is needed to migrate an extension (AutoWIGO2) that uses ArticleSave
to a version of MW after that hook was removed. The extension was using
ArticleSave to do its own PST processing, which probably doesn't work
with PageContentSave, and wasn't really the right way to do it in the
first place. Surprisingly, there were no useful hooks in PST or its
callers.

Change-Id: If1b3d7ea130a2b77609afe206eedc8445e1ab9f9
2020-03-08 09:52:09 +11:00
Thiemo Kreuz
1606d4a206 parser: Fix incomplete PHPDocs, remove meaningless comments
As long as no parsing was started, and $this->startParse() was not
triggered at least once, the $this->mOptions property is null. This
does have a lot of consequences. I'm intentionally not fixing all of
them in this patch to not make it to big, only the most obvious ones.

This came up in I6714400 which was actually running into this issue.

This patch also removes a few comments that *literally* repeat what
the code already says. Such comments are not helpful, but clutter the
code, make it harder to read, and create error-prone redundancy.

Change-Id: Ic1ab18242b2f79d3da2a2e7c25e3af3e6907f7b4
2020-03-04 11:08:00 +01:00
Thiemo Kreuz
c05bdcee8b Remove unreachable null checks after isset()
isset() does two things: It checks if a variable (or array element)
is declared, *and* it checks if it is null. If a variable is null,
isset() fails as if the variable was not set. All these additional
null checks are dead code.

Change-Id: I71e8cc26dac839c9d081bf00b4164b7b5147e586
2020-02-28 21:40:48 +00:00
Tim Starling
44d51cb04e Fix the namespace of SpecialPageFactory
Follows-up d4045035b0.

This class was added to the MediaWiki\Special namespace, contrary to the
plan in T166010 which reserves that namespace for core special pages.
Instead, use MediaWiki\SpecialPage, following the directory in which it
is located.

Also, fix two bugs which prevented the introduction of a namespaced
class alias.

Bug: T166010
Change-Id: I6e31340aaae32a89beb7e45b79d76a7fea9808d2
2020-02-21 13:46:19 +11:00
Petr Pchelko
204fa7e509 Remove usages of deprecated Language methods
Change-Id: Iad3375b141b1d87c890baec6ecd16ed92f93e699
2020-02-16 00:45:48 +00:00
Aaron Schulz
ea6bc312e7 parser: apply $wgMiserMode restriction to REVISIONID for NS_USER/NS_PROJECT
Bug: T235957
Change-Id: I7dbf7ab5b730a18d44e4bbaad46475c01d3b1291
2020-02-07 22:55:52 -08:00
Peter Ovchyn
50e3bd4fac parser: Inject a LanguageConverterFactory through DI containers:
1. into class Parser
2. into class LinkHoderArray
3. into class DefaultPreferencesFactory

Add more tests for DefaultPreferencesFactory:
1. testVariantsSupport verifies that converter with variants is used correctly.
2. Test testUserGroupMemberships verifies that membership is used correctly

Bug: T243320, T243321, T243317
Change-Id: I1e5c37e18332d0d32391c74c06e3d84862e48df8
2020-02-04 14:42:03 +02:00
Peter Ovchyn
61e0908fa2 languages: Introduce LanguageConverterFactory
Done:
* Replace LanguageConverter::newConverter by LanguageConverterFactory::getLanguageConverter
* Remove LanguageConverter::newConverter from all subclasses
* Add LanguageConverterFactory integration tests which covers all languages by their code.
* Caching of LanguageConverters in factory
* Make all tests running (hope that's would be enough)
* Uncomment  the deprecated functions.
* Rename FakeConverter to TrivialLanguageConverter
* Create ILanguageConverter to have shared ancestor
* Make the LanguageConverter class abstract.
* Create table with mapping between lang code and converter instead of using name convention
* ILanguageConverter @internal
* Clean up code

Change-Id: I0e4d77de0f44e18c19956a1ffd69d30e63cf51bf
Bug: T226833, T243332
2020-02-03 11:38:03 +02:00
C. Scott Ananian
a20d4094f8 Deprecate/make private internal callbacks invoked inside Parser.php
Parser::magicLinkCallback() and Parser::makeFreeExternalLink() are not
called from outside the parser and have been made private.

Parser::attributeStripCallback() did have one use outside MediaWiki core,
so it has been deprecated rather than made private.  The one use inside
the parser has been converted to an anonymous callback.

Code search:
https://codesearch.wmflabs.org/search/?q=magicLinkCallback%7CmakeFreeExternalLink%7CattributeStripCallback&i=nope&files=&repos=

Change-Id: Id909b745f9dea1481d09de4747f4aa32648bf85b
2020-01-30 14:00:36 -05:00
C. Scott Ananian
70c4ea9b1a Make private Parser::incrementIncludeSize(), which is not used outside the class
Code search:
https://codesearch.wmflabs.org/search/?q=incrementIncludeSize&i=fosho&files=&repos=

Change-Id: I14da911be23ef2d806c876ebb9ac9cf1fe782e24
2020-01-30 13:08:47 -05:00
C. Scott Ananian
dc4fd76e69 Hard-deprecate Parser::doBlockLevels(), which Parsoid won't support
This is an odd "partial parse" endpoint which won't be supported by
the unified Parsoid parser.  Most places it appears in our codebase
it is just a name-check, mostly complaining about how broken it is.
It is not called by any WMF-deployed code.

Code search:
https://codesearch.wmflabs.org/search/?q=doBlockLevels&i=fosho&files=&repos=

Change-Id: Iad2a1e5ed593c1f6299b8b45e4390b415537c84c
2020-01-30 12:58:13 -05:00
C. Scott Ananian
0fc8f7cf83 Hard-deprecate Parser::fetchTemplate()
This is a follow up to I6f7c3e31ff394781fbaaef267a2772de05f85bf2, which
deprecated Parser::fetchTemplate but forgot to include the wfDeprecated()
call.

Code search:
https://codesearch.wmflabs.org/search/?q=fetchTemplate%5C%28&i=nope&files=&repos=

Change-Id: I912b538e6e77c35498308c168316803ddde1f137
2020-01-30 12:50:19 -05:00
C. Scott Ananian
25f3b8ad68 Deprecate Parser::fetchTemplate() in favor of ::fetchTemplateAndTitle()
This reduces the API surface of Parser, in preparation for further
refactoring of the Parser class.  Parser::fetchTemplateAndTitle() was
introduced in MW 1.6.0 in 2007, so is always appropriate as a replacement.

Code search:
https://codesearch.wmflabs.org/search/?q=fetchTemplate%5C%28&i=nope&files=&repos=

Depends-On: I2865b12b55aa1412a861fb8db10239018a1d1580
Change-Id: I6f7c3e31ff394781fbaaef267a2772de05f85bf2
2020-01-28 20:00:54 -05:00
C. Scott Ananian
a8f3eb96ce Hard deprecate Parser::setFunctionTagHook()
This is not used in production code.

Code search:
https://codesearch.wmflabs.org/search/?q=setFunctionTagHook%7CmFunctionTagHooks&i=nope&files=&repos=

Change-Id: Ie03b1687d1c65be23213035d7cb4011ef763b69a
2020-01-28 16:20:40 -08:00
C. Scott Ananian
9f0adbdb81 Remove Parser::setTransparentTagHook()
The transparent tag hooks are not used anywhere in public git.

Codesearch link:
https://codesearch.wmflabs.org/search/?q=setTransparentTagHook%7CreplaceTransparentTags%7CmTransparentTagHooks&i=nope&files=&repos=

Depends-On: I0df0ca2fc7ed05dc6dc413bd0a6d38533b66e428
Change-Id: I8384f47bbcde7604efa41b83db0dbc4f429219a8
2020-01-28 16:20:40 -08:00
jenkins-bot
eaebf057f3 Merge "Remove $wgMaxGeneratedPPNodeCount" 2020-01-29 00:14:55 +00:00
C. Scott Ananian
e149a38d4f Remove $wgMaxGeneratedPPNodeCount
This no longer has any effect.  The getter and setter in ParserOptions
aren't used in any public git code, and so have been removed without
deprecation.

Bug: T204945
Followup-To: I727f003f9a42d0c92bcbcce8a8289d5af6cd1298
Change-Id: Id48effcba48d1ae1621a4e17a70e65b73f2473b7
2020-01-28 16:54:53 -05:00
jenkins-bot
5e462e5efe Merge "Remove all traces of preprocessorClass from $wgParserConf" 2020-01-26 21:48:23 +00:00
jenkins-bot
f9a08c0c83 Merge "Remove Preprocessor_DOM, deprecated in 1.34" 2020-01-26 02:02:44 +00:00
C. Scott Ananian
0eb9f18d8d Remove all traces of preprocessorClass from $wgParserConf
Bug: T204945
Followup-To: I727f003f9a42d0c92bcbcce8a8289d5af6cd1298
Change-Id: I23821686ad666728d7d196e089f40be4b76b7390
2020-01-25 13:15:16 -05:00
C. Scott Ananian
5cbb64f56a Remove Preprocessor_DOM, deprecated in 1.34
Remove the deprecated Preprocessor_DOM class, which was hard-deprecated
in 1.34.  This begins to simplify parser configuration and reduce redundant
code paths, but I've left two things for cleanup in a future patch:

1. The `preprocessorClass` configuration option to the parser, exposed
in `$wgParserConf`, ServiceWiring, ParserFactory, etc.  There is no reason
for this to be exposed as configurable, but I've left this clean up to a
future patch.

2. The `$wgMaxGeneratedPPNodeCount` configuration, exposed also in
ParserOptions.  Only Preprocessor_DOM calculated this count, and since
we are only using Preprocessor_Hash now, this configuration has no effect.
But since this value was exposed in ParserOptions and elsewhere, I've
deprecated where needed but left this clean up to a future patch.

Bug: T204945
Change-Id: I727f003f9a42d0c92bcbcce8a8289d5af6cd1298
2020-01-25 11:22:45 -05:00
C. Scott Ananian
b01642a27c Mark @internal a number of Parser methods not used outside MW core
These should not be considered a part of the public MW API.

Note that interwikiTransclude is used in maintenance scripts in the
Math extension, but that seems to be a reasonable use of an @internal
method.

Code search link:
https://codesearch.wmflabs.org/deployed/?q=limitationWarn%7CisCurrentRevisionOfTitleCached%7CinterwikiTransclude%7CargSubstitution%7CrenderImageGallery%7CgetFlatSectionInfo%7CmarkerSkipCallback%7CparseWidthParam&i=nope&files=&repos=

Change-Id: I50e52fd57ba3b5ad7cc7f2b21ec772374268179f
2020-01-25 16:12:04 +00:00
Thiemo Kreuz
ea01e7cfbb parser: Remove unused ParserAfterUnstrip hook
Introduced in 2015 via If83b062. Unfortunately the patch fails to mention
why the hook was introduced. A review comment asking for the missing
information was ignored.

The hook was introduced exclusively for the Cite extension, see I0e136f9.
The Cite change got reverted a few days later via I1a71854. As far as I
can tell the hook (oddly specific and underspecified anyway) was never
used again, neither for Cite nor for anything else.

Now unused: https://codesearch.wmflabs.org/search/?q=ParserAfterUnstrip

I suggest to just remove it with no deprecation phase.

My team is currently working on Cite, essentially turning it upside down.
I'm not aware of a need for this hook.

Change-Id: If68a88d7afff60385ff1e33fd13716b20d01a313
2020-01-25 09:20:52 +01:00
James D. Forrester
0958a0bce4 Coding style: Auto-fix MediaWiki.Usage.IsNull.IsNull
Change-Id: I90cfe8366c0245c9c67e598d17800684897a4e27
2020-01-10 14:17:13 -08:00
James D. Forrester
4f2d1efdda Coding style: Auto-fix MediaWiki.Classes.UnsortedUseStatements.UnsortedUse
Change-Id: I94a0ae83c65e8ee419bbd1ae1e86ab21ed4d8210
2020-01-10 09:32:25 -08:00
Aaron Schulz
6de44014de parser: further restrict "revisionid" by namespace in $wgMiserMode
Follows-up c537eb1868.

The restrictions used to only apply to "content" namespaces, which
is typically just NS_MAIN. Wikis like Commons and Wikidata use custom
values, NS_FILE and $LexemeNamespace, respectively.

Now, only yield the integer ID for user, project, and talk pages.
This means that NS_FILE, NS_CATEGORY, and other namespaces with
content intended for readers, only yield '' or '-' for this work.

Bug: T235957
Change-Id: Id0110c9ee91ad5750164e9a047bcd6d7621930c1
2020-01-06 11:16:51 -08:00
Kunal Mehta
99007e96c7 Use namespaced IPUtils class
Change-Id: I047e099a93203a59093946d336a143d899d0271f
2020-01-01 02:36:49 -08:00
Daimona Eaytoy
598c4d7fcb build: Upgrade phan to 0.9.0
Scalar casts are still allowed (for now), because there's a huge amount
of false positives. Ditto for invalid array offsets.

Thoughts about the rest: luckily, many false positives with array offsets
have gone. Moreover, since *Internal issues are suppressed in the base
config, we can remove inline suppressions.

Unfortunately, there are a couple of new issues about array additions
with only false positives, because apparently they don't take
branches into account.

Change-Id: I5a3913c6e762f77bfdae55051a395fae95d1f841
2019-12-07 20:16:19 +00:00
jenkins-bot
097ad02261 Merge "REST compare: bundle section offset information" 2019-11-13 01:18:01 +00:00
Thiemo Kreuz
cf42131019 Streamline/fix code by using short ?: and ?? syntax
Change-Id: I27dc0c8a1a184571ed96abdea22af953510457cd
2019-11-11 11:17:13 +01:00
Tim Starling
8299d7ae8f REST compare: bundle section offset information
Bug: T236964
Change-Id: Ib97b0fa0de682404fb9df2ecef55a3526c54a31f
2019-11-11 16:25:35 +11:00
James D. Forrester
8255ecd074 Parser: Drop ::disableCache(), deprecated in 1.28
Change-Id: Ide0b28f821c55fb008e50c199032f1c34334ac1d
2019-11-05 17:07:00 -05:00