aboutsummaryrefslogtreecommitdiffstats
path: root/includes/parser/LinkHolderArray.php
Commit message (Collapse)AuthorAgeFilesLines
* Namespace all remaining classes in includes/parserJames D. Forrester2024-10-151-2/+6
| | | | | Bug: T353458 Change-Id: If02cc9b1ff78e26c1cf8c91ee4695845eb133829
* Move Language and friends into Language namespaceJames D. Forrester2024-08-101-0/+1
| | | | | Bug: T353458 Change-Id: Id3202c0c4f4a2043bf97b7caee081acab684155c
* Use namespaced classesUmherirrender2024-07-051-0/+1
| | | | Change-Id: Ie08a616eb07c8da50e971a5fc3f6207c34c3f342
* Fix mw-selflink-fragment on variant fragment linksArlo Breault2024-06-191-3/+13
| | | | | | | | | | Should have been part of 1fca3b5b. The fix to doVariants can be seen in old output linking [[Dуна#Foo]] to Дуна despite [[Dуна]] being a self-link in the test above. Bug: T198652 Change-Id: Id38cfc47041492c5cc68b4f8f9566f421c9168bd
* Namespace includes/cacheJames D. Forrester2024-02-201-0/+1
| | | | | Bug: T353458 Change-Id: Ic3f3168ef17113f5fb3ec11e0a47f52d65eefba9
* Move Parser to Mediawiki\Parser namespaceSubramanya Sastry2024-02-161-0/+1
| | | | | | | | Bug: T166010 Co-Authored-By: Daimona Eaytoy <daimona.wiki@gmail.com> Co-Authored-By: James Forrester <jforrester@wikimedia.org> Co-Authored-By: Subramanya Sastry <ssastry@wikimedia.org> Change-Id: I79b4e732c45095eedbaa80afa5eb7479b387ed8a
* Change uses of getDBLoadBalancerFactory() to getConnectionProvider()Bartosz Dziewoński2024-01-221-2/+2
| | | | | | | | | | | | Update cases where one of the IConnectionProvider methods is called immediately. This doesn't really change anything, but I hope it helps promote getConnectionProvider() as the common way to do this. Follow-up to 8604c384f624273f46b653ec252ffaed30e6ff89. Change-Id: Id0e7d02bab0c570343c2b1f03c70b44ee39db112
* Merge "Parser: Remove misplaced + in regular expression"jenkins-bot2023-10-151-1/+1
|\
| * Parser: Remove misplaced + in regular expressionthiemowmde2023-10-051-1/+1
| | | | | | | | | | | | | | | | | | This was a mistake in Ie994059. I experimented with different patterns and apparently forgot to remove this. It doesn't make sense here. The keys are numeric and can't contain a "+" character (but a "-" in case the namespace is negative). Change-Id: Ifdf22405c5ba9f300bed2a4e65ac487e64485f28
* | Migrate to IConnectionProvider methods in more placesAmir Sarabadani2023-10-051-2/+2
|/ | | | | | | | Getting rid of uber-deprecated wfGetDb() and recently deprecated LB::getConnection. Bug: T330641 Change-Id: Ifd4b4e01f2a120ad6db517cc8fd2eb6b11b72bc9
* Merge "Hard-deprecate ParserOutput::getCategories(), deprecated in 1.40"jenkins-bot2023-10-031-2/+2
|\
| * Hard-deprecate ParserOutput::getCategories(), deprecated in 1.40C. Scott Ananian2023-09-291-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | It is difficult to distinguish this method from OutputPage::addJsConfigVars() in code search: https://codesearch.wmcloud.org/deployed/?q=%5BOo%5Dut%28put%29%3F%28%5C%28%5C%29%29%3F-%3EgetCategories%5C%28&files=&excludeFiles=&repos= We generally try to replace $output with $parserOutput or $pOutput as we touch code to improve the ability of codesearch to dig up deprecated ParserOutput methods. Bug: T305161 Depends-On: I02dd4f61c43c225b0ef6dc51c3e4f9d967a0a272 Depends-On: I61d2d77591579d825ad9d37f902e40366be55dd6 Depends-On: I91155106b7a9e10d3334f95ba4936d02851bfb11 Depends-On: Iaca745c79d9587571af03b23b21d76a6cba0ebf1 Depends-On: Id10a171c44411b1233ee4d6cf8fbd3dc57744eef Depends-On: I47a25c011d9bd4b1a15dda4e673e32c25eb64f2b Depends-On: I683fc768aba50b801f46467fcfa1668fa8731ea6 Change-Id: I5a2ac1c99b8b199102e12f0d32dd6ec5cdc24054
* | LinkHolderArray: Get link classes only when neededFunc2023-10-021-3/+5
|/ | | | | | | | | | Do not override the classes we obtained in the previous call to the GetLinkColours hook before ::doVariants(). Also, the values of $pagemap should be actual DB keys of linked pages. Bug: T347820 Change-Id: If5920c5311b9c112825e5f30e351ceeca53d3581
* parser: Make all LinkHolderArray properties privatethiemowmde2023-03-151-17/+7
| | | | | | | | | | | | | | | I could not find any use outside of core, or even outside of this class. The class is instantiated a single time in core: https://codesearch.wmcloud.org/search/?q=new%5CW%2BLinkHolderArray&files=%5C.php%24 This instance is not used anywhere else: https://codesearch.wmcloud.org/search/?q=mLinkHolders&files=%5C.php%24 I would argue this doesn't really qualify as a breaking change. This was always meant to be private. Change-Id: I4c614dae1fe1d61c9cf8b7a03c37eb93fae33873
* Merge "Various minor code style and doc cleanups in LinkHolderArray"jenkins-bot2023-03-101-30/+23
|\
| * Various minor code style and doc cleanups in LinkHolderArrayThiemo Kreuz2023-03-091-30/+23
| | | | | | | | | | | | | | | | | | For example: * Avoid problematic empty(). * Move variable initializations closer to where the variable will be used for the first time. Change-Id: Ia683c3b03b6784ad8c709e14baf16c8e5b2600cd
* | parser: Remove dead safe-guard from LinkHolderArraythiemowmde2023-03-091-6/+0
|/ | | | | | | | | This safe-guard was added way back in 2004: r4814 (SVN). Back then it was added in a spot where $title could indeed be null. In the spot where the code ended now this is not possible any more. Change-Id: Ic0cf45063bb9cd2d306254cfff452caa91823821
* Reorg: Namespace the Title classJames D. Forrester2023-03-021-0/+1
| | | | | | | | | | | | | | | | | | | This is moderately messy. Process was principally: * xargs rg --files-with-matches '^use Title;' | grep 'php$' | \ xargs -P 1 -n 1 sed -i -z 's/use Title;/use MediaWiki\\Title\\Title;/1' * rg --files-without-match 'MediaWiki\\Title\\Title;' . | grep 'php$' | \ xargs rg --files-with-matches 'Title\b' | \ xargs -P 1 -n 1 sed -i -z 's/\nuse /\nuse MediaWiki\\Title\\Title;\nuse /1' * composer fix Then manual fix-ups for a few files that don't have any use statements. Bug: T166010 Follows-Up: Ia5d8cb759dc3bc9e9bbe217d0fb109e2f8c4101a Change-Id: If8fc9d0d95fc1a114021e282a706fc3e7da3524b
* Merge "Parser: Fix and update a few parser related PHPDoc type hints"jenkins-bot2023-01-271-7/+6
|\
| * Parser: Fix and update a few parser related PHPDoc type hintsthiemowmde2022-12-151-7/+6
| | | | | | | | Change-Id: Id4a9e4a27694fd54d940b78fe202e918603d4f50
* | parser: Optimize regex patterns used in LinkHolderArraythiemowmde2023-01-071-4/+4
|/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Two micro-optimizations are done in this patch: 1. We know exactly how these placeholders are built in the makeHolder() method. In »<!--IWLINK'" 1-->« it's guaranteed to be a single number and in »<!--LINK'" 1:2-->« it's two numbers. The most extreme synthetic micro benchmark I did cuts the runtime of these regular expressions down to about 25%. It won't make much of a difference in real-world scenarios but is still worth it, I believe. It also makes the code more specific and less confusing (see below). 2. We don't need to use the full string »<!--LINK'" 1:2-->« as array key when the only thing that matters is the part »1:2«. Note the same is done just a few lines below in the replaceInterwiki() method. This code does have outstanding test coverage via all the parser tests, I believe. Any change here that doesn't make a test fail should be safe. Note the unit tests have been written many years later via I2c12cc7, using "dummy" strings and such instead of the expected numeric namespace and link ids. Most of this is already fixed via previous patches. The last mistake addressed in this patch is that getPrefixedDBkey() is supposed to be a title. It can't contain one of these placeholders. Follow-Up: I2c12cc76a9bf01eb527db3ea038e4adc59446cac Change-Id: Ie994059092df8861ddb97c098acd082698d45c53
* Reorg: Move DummyLinker and Linker to linker/Amir Sarabadani2022-12-081-0/+1
| | | | | | | This feels like a no-brainer unless I'm missing something obvious Bug: T321882 Change-Id: Id49c3d0dd6ea4593211048850856b5b8e05a8fb3
* parser: Reduce overly deep code intention in LinkHolderArraythiemowmde2022-11-141-52/+54
| | | | | | This makes future refactorings easier. Change-Id: I7080329ffbc7967c06615a287cac1bb8b5e9c7c3
* Use short array destructuring instead of list()Tim Starling2022-10-211-5/+5
| | | | | | | | Introduced in PHP 7.1. Because it's shorter and looks nice. I used regex replacement. Change-Id: I0555e199d126cd44501f859cb4589f8bd49694da
* Remove unused key variable from foreach loopsUmherirrender2022-09-211-1/+1
| | | | Change-Id: Id2d91e30a6f7cc4eb93427b50efc1c5c77f14b75
* parser: Use SelectQueryBuilder instead of IDatabase::selectDerick Alangi2022-08-191-11/+12
| | | | | Bug: T311866 Change-Id: I4ca6539218b7717244b773422b7647d181bc504c
* Stop merging LinkCache select fields with page_title and page_namespaceAlexander Vorwerk2022-07-051-11/+2
| | | | | | | | LinkCache::getSelectFields() includes page_title and page_namespace since If77c2f9879d7bae71eb59944efd8b3798d16aa46, so we don't need to add those two specifically. Change-Id: I8fa9d563af3f9da90fb96369dab0ee5bde860081
* Clean up LinkHolderArray::__constructMatěj Suchánek2022-06-181-15/+4
| | | | | | The class has been marked internal since 1.35. Change-Id: I90bdf9d0637ffd770276bad3dd81c71b0a746cad
* Use MainConfigNames instead of string literals, #4Aryeh Gregor2022-04-261-1/+3
| | | | | | | | | | | | | | | | | | | | | Now largely automated: VARS=$(grep -o "'[A-Za-z0-9_]*'" includes/MainConfigNames.php | \ tr "\n" '|' | sed "s/|$/\n/;s/'//g") sed -i -E "s/'($VARS)'/MainConfigNames::\1/g" \ $(grep -ERIl "'($VARS)'" includes/) Then git add -p with lots of error-prone manual checking. Then semi-manually add all the necessary "use" lines: vim $(grep -L 'use MediaWiki\\MainConfigNames;' \ $(git diff --cached --name-only --diff-filter=M HEAD^)) I didn't bother fixing lines that were over 100 characters unless they were over 120 and triggered phpcs. Bug: T305805 Change-Id: I74e0ab511abecb276717ad4276a124760a268147
* Refactor global variables to use MediaWikiServices insteadTChin2022-01-101-2/+2
| | | | | | | | | | | | Automatically refactors wg prefixed globals to use MediaWikiServices config using Rector. Doesn't include files that set globals or files that fail CI. Rector Gist: https://gist.github.com/tchin25/7cc54f6d23aedef010b22e4dfbead228 * This patch uses a modified source code rector library for our specific use case and the rector will have different effects without it. A writeup for future reference is here: https://meta.wikimedia.org/wiki/User:TChin_(WMF)/Using_Rector_On_MediaWiki Change-Id: I1a691f01cd82e60bf41207d32501edb4b9835e37
* Rename ParserOutput::setCategoryLinks() and ::getCategoryLinks()C. Scott Ananian2021-10-151-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Make ::setCategory() consistent with the corresponding singular method, which is ::addCategory(), not ::addCategoryLink(). Also, don't return a value. This renaming is in preparation for factoring out a write-only base class from ParserOutput suitable to be used by Parsoid. Note that OutputPage does distinguish a 'category link' from a 'category list', and there are separate OutputPage::getCategories() and OutputPage::getCategoryLinks() methods. However, the category map in ParserOutput isn't exactly the same as either of these: it's actually a map (or list of pairs) of category name to sort key. Rename ParserOutput::getCategoryLinks() to ::getCategoryNames() in order to clarify that the concept involved is not the same as the OutputPage "category links" methods. Code search: https://codesearch.wmcloud.org/deployed/?q=-%3E(get%7Cset)CategoryLinks%5C(&i=nope&files=&excludeFiles=&repos= (Note that many of the code search matches are for the methods in OutputPage, which we are trying to disambiguate here.) Bug: T287216 Change-Id: Idb383d3d9ef7b76f8a0208a057a3cb8c639465c9
* build: Update mediawiki/mediawiki-phan-config to 0.11.0Umherirrender2021-09-071-2/+0
| | | | | | | Addition and remove of suppression needs to be done with the version update. Change-Id: I3288b3cefa744b507eadebb67b8ab08c86517c1c
* Merge "Use static closures where safe to use"jenkins-bot2021-02-141-2/+2
|\
| * Use static closures where safe to useUmherirrender2021-02-111-2/+2
| | | | | | | | | | | | | | | | | | This is micro-optimization of closure code to avoid binding the closure to $this where it is not needed. Created by I25a17fb22b6b669e817317a0f45051ae9c608208 Change-Id: I0ffc6200f6c6693d78a3151cb8cea7dce7c21653
* | Use ?? instead of isset/array_key_exists where possibleThiemo Kreuz2021-02-101-5/+1
|/ | | | | | | | | | | This patch touches all uncontroversial (I hope) places where a chain of isset(), array_key_exist() and the ternary ?: operator can be replaced with the much shorter ?? feature from PHP 7. ?? does the same. It checks if the element before the ?? is set and not null. When this check fails, the element after the ?? is used. Change-Id: Id612e2782ae928164b26b6f0de676c6c7d8302f3
* api: Use GetLinkColours hook to export CSS classes in page infoC. Scott Ananian2020-12-141-25/+25
| | | | | | | | | | | | Several important extensions (Disambiguator, ProofreadPage, and SoftRedirector) use the GetLinkColours hook to add additional CSS classes to links on article pages. Parsoid previously relied on backdoor knowledge of the way Disambiguator used the page property table to support these, but they should be exported properly from the API. Bug: T237538 Change-Id: I945940aa872541d7e01f1e543ca854231c857fe2
* Use LinkBatchFactoryUmherirrender2020-10-251-3/+6
| | | | Change-Id: Ib82f91048faad8cf8be961d038f30c9261072af5
* Deprecations from HookRunner call site migrationTim Starling2020-09-181-0/+1
| | | | | | | | | | | Deprecate lack of $hookContainer parameter to DefaultPreferencesFactory, LinkHolderArray and PasswordReset constructors This was split out from the main patch to create a migration window, since deprecation messages from extensions now cause Jenkins to vote -1. Depends-On: Ie097d8e12758f066aee14c740f9e07955aa510c1 Change-Id: I559640c9f4dc7ad5444fe1ef39d50e4504ae0b63
* parser: Make use of PHP7 array deconstruction in LinkHolderArrayThiemo Kreuz2020-07-061-10/+6
| | | | Change-Id: I3d4ea0726b76e9b5c1daacc379141b164e6e05cd
* parser: Remove unused $query param from LinkHolderArray::makeHolderThiemo Kreuz2020-06-221-5/+1
| | | | | | | We know it's never anything but an empty array: https://codesearch.wmflabs.org/search/?q=makeHolder Change-Id: Ibc230ec1a1a15a9a5dc61abe5b989a3391d671c1
* parser: Streamline LinkHolderArrar::$size handlingThiemo Kreuz2020-06-221-4/+3
| | | | | | | | Note there is another line of code (line #96, as of now) where the $this->size property is increased *before* the two $this->internals and $this->interwikis arrays are increased. Just do the same here. Change-Id: I15f9e438706d75323ec17cb92e933f600701f9b8
* parser: Add Title type hint to LinkHolderArray::makeHolderThiemo Kreuz2020-06-221-27/+22
| | | | | | | We *know* this can never be anything but a Title object: https://codesearch.wmflabs.org/search/?q=makeHolder Change-Id: Id6de0df627f2aeda79c6483f12a6d500ccd7853f
* parser: Trivial code transformations to LinkHolderArrayThiemo Kreuz2020-06-221-14/+9
| | | | | | | | | | | | | | | | | This is a series of extremely basic, trivial transformations that don't change any behavior. The goal of this patch is to make the code less surprising and less cluttered. In detail: * Remove an unused property: https://codesearch.wmflabs.org/search/?q=tempIdOffset * Add a strict "Parser" type hint. Note this code would fail anyway if that property would not be a Parser. * Avoid count() if we don't need to know the actual number, just if it's empty. * Inline a few single-use variables. Change-Id: Ic76cc3984462b1b7700bbc675adaca8fc8219152
* Avoid variable reuse in LinkHolderArrayUmherirrender2020-06-141-4/+4
| | | | | | Help taint-check to determine the correct taint of the variable Change-Id: I943dad3bc3fa495b78f37776f54788b4766fa3b2
* Hooks::run() call site migrationTim Starling2020-05-301-3/+17
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Migrate all callers of Hooks::run() to use the new HookContainer/HookRunner system. General principles: * Use DI if it is already used. We're not changing the way state is managed in this patch. * HookContainer is always injected, not HookRunner. HookContainer is a service, it's a more generic interface, it is the only thing that provides isRegistered() which is needed in some cases, and a HookRunner can be efficiently constructed from it (confirmed by benchmark). Because HookContainer is needed for object construction, it is also needed by all factories. * "Ask your friendly local base class". Big hierarchies like SpecialPage and ApiBase have getHookContainer() and getHookRunner() methods in the base class, and classes that extend that base class are not expected to know or care where the base class gets its HookContainer from. * ProtectedHookAccessorTrait provides protected getHookContainer() and getHookRunner() methods, getting them from the global service container. The point of this is to ease migration to DI by ensuring that call sites ask their local friendly base class rather than getting a HookRunner from the service container directly. * Private $this->hookRunner. In some smaller classes where accessor methods did not seem warranted, there is a private HookRunner property which is accessed directly. Very rarely (two cases), there is a protected property, for consistency with code that conventionally assumes protected=private, but in cases where the class might actually be overridden, a protected accessor is preferred over a protected property. * The last resort: Hooks::runner(). Mostly for static, file-scope and global code. In a few cases it was used for objects with broken construction schemes, out of horror or laziness. Constructors with new required arguments: * AuthManager * BadFileLookup * BlockManager * ClassicInterwikiLookup * ContentHandlerFactory * ContentSecurityPolicy * DefaultOptionsManager * DerivedPageDataUpdater * FullSearchResultWidget * HtmlCacheUpdater * LanguageFactory * LanguageNameUtils * LinkRenderer * LinkRendererFactory * LocalisationCache * MagicWordFactory * MessageCache * NamespaceInfo * PageEditStash * PageHandlerFactory * PageUpdater * ParserFactory * PermissionManager * RevisionStore * RevisionStoreFactory * SearchEngineConfig * SearchEngineFactory * SearchFormWidget * SearchNearMatcher * SessionBackend * SpecialPageFactory * UserNameUtils * UserOptionsManager * WatchedItemQueryService * WatchedItemStore Constructors with new optional arguments: * DefaultPreferencesFactory * Language * LinkHolderArray * MovePage * Parser * ParserCache * PasswordReset * Router setHookContainer() now required after construction: * AuthenticationProvider * ResourceLoaderModule * SearchEngine Change-Id: Id442b0dbe43aba84bd5cf801d86dedc768b082c7
* deprecation: Remove DeprecationHelper::newArgumentWithDeprecation and change ↵Peter Ovchyn2020-04-271-10/+8
| | | | | | | callers accordingly Bug: T245075 Change-Id: I0714b1c5d5a379cfe3ca473b72244d4d6bd1b7b8
* languages: More doc annotations for LanguageConverter related classesPeter Ovchyn2020-02-111-1/+1
| | | | | | | Deprecated LinkHolderArray for public usage Bug: T244709 Change-Id: Ic5b9e9237044b56cbb64e7c762f5d2de3b1de821
* parser: Inject a LanguageConverterFactory through DI containers:Peter Ovchyn2020-02-041-3/+14
| | | | | | | | | | | | | 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
* languages: Introduce LanguageConverterFactoryPeter Ovchyn2020-02-031-4/+12
| | | | | | | | | | | | | | | | | | | 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
* Coding style: Auto-fix MediaWiki.Usage.IsNull.IsNullJames D. Forrester2020-01-101-2/+2
| | | | Change-Id: I90cfe8366c0245c9c67e598d17800684897a4e27