Commit graph

2041 commits

Author SHA1 Message Date
Kunal Mehta 1000d322e5 Add mw.loadJsonData()
mw.loadData() allows for optimizing the loading Lua tables by requiring
only one parse and lookup. However it's often easier for people to
write/maintain bulk data in JSON rather than Lua tables.

mw.loadJsonData() has roughly the same characteristics as mw.loadData()
and it can be used on JSON content model pages in any namespace.

As noted on the linked bug report, it's possible to already implement
this by writing a wrapper Lua module that loads and parses the JSON
content. But that requires a dummy module for each JSON page, which is
just annoying and inconvenient.

Test cases are copied from the mw.loadData() ones, with a few omissions
for syntax not supported in JSON (e.g. NaN, infinity, etc.).

Bug: T217500
Change-Id: I1b35ad27a37b94064707bb8c9b7108c7078ed4d1
2022-10-13 04:46:25 +00:00
Kunal Mehta 829c53ef05 Add strict.lua to replace "Module:No globals"
For the most part, it is a good idea to avoid global variables and use
`local` variables instead. Quoting from the ScopeTutorial[1], "The
general rule is to always use local variables, unless it's necessary for
every part of your program to be able to access the variable (which is
very rare)."

Wikimedia module authors have written "Module:No globals", which errors
on the use of any global variable. On the English Wikipedia, this is
used on 32% of pages (18 million). Wikidata[2] indicates that it's been
copied to 334 other wikis.

Lua itself distributes an extra named "strict.lua"[3], which is what
this is based off of. Similar to bit32.lua, this is a pure-Lua library
that can be imported/enabled with `require( "strict" )` at the top of a
module.

The two changes I made from Lua's strict is to exempt the `arg` key,
which is used internally by Scribunto, and remove `what()`, since we
don't enable access to `debug.getinfo()` for security reasons.

[1] https://lua-users.org/wiki/ScopeTutorial
[2] https://www.wikidata.org/wiki/Q16748603
[3] http://www.lua.org/extras/5.1/strict.lua

Bug: T209310
Change-Id: I46ee6f630ac6b26c68c31becd1f3b9d961bcab29
2022-10-13 04:39:21 +00:00
Translation updater bot 58a9707c8f Localisation updates from https://translatewiki.net.
Change-Id: I2c351c91e6a13ff3f9b6b39676208ae5c6f0b892
2022-10-10 10:21:09 +02:00
Kunal Mehta 9d94f11309 Hide mw.hash.setupInterface from users
Part of the standard library boilerplate that got missed.

Bug: T276138
Change-Id: I6d55d55405b57b18f3f413a108848f34620c15a6
2022-10-08 22:01:00 +00:00
Reedy 25d49b53c1 build: Update mediawiki/mediawiki-phan-config to 0.12.0
Change-Id: Ifa1a8c2225b6fc1498427f0f61538edc3058cbd8
2022-10-08 21:38:28 +00:00
Kunal Mehta 835631de27 Restore padding on #mw-scribunto-input to make cursor visible
In Chromium-based browsers the lack of padding means the cursor
isn't visible in the textarea when focused. In this case, it's
probably more important for the cursor to be visible than the
lack of padding to make it look more like a terminal.

Bug: T272678
Change-Id: I09ed2933bdac292ee9b9b98a2c8c48d96914d096
2022-10-08 21:35:30 +00:00
Kunal Mehta e8cfa46f87 Use OOUI instead of jquery.ui for error popup
Use OOUI's PopupWidget to display error tracebacks/details instead of a
deprecated jquery.ui dialog.

Bug: T319361
Change-Id: Ie7796c853782de9874595674fe250f6702db717e
2022-10-08 20:33:27 +00:00
Reedy 69ed697681 Add more @covers
Bug: T320330
Change-Id: I3456453226faa3ba68be4deca764839ea0f54539
2022-10-08 20:59:33 +01:00
Brian Wolff 047200c11e Make sure that lua stack trace is valid UTF-8.
This fixes a warning on php8.1 related to preg_match_all returning
null when given invalid UTF-8.

I made a separate patch to change the null into an exception Ic0c9083b

In a sense, this is a follow-up to ec103b6966.

Bug: T319218
Change-Id: Ia17fc2fa428ec35bdbd242f1127fcdff501fb741
2022-10-06 04:08:24 +00:00
Kunal Mehta 0f2585244c Require CSRF token for action=scribunto-console
This is basically unexploitable, given that Scribunto sessions are
"extremely ephemeral", protected by a 31-bit non-cryptographically
random token and generally contain very little useful data.

But, requiring a CSRF token is a best practice and since this module
is internal and only used in one place, it's also unlikely to break
anything. Because it needs a token, the module is POST-only now too.

Bug: T212071
Change-Id: I7fb6b4f856ee6194eb37c26e14f178fea6c0a3f6
2022-10-05 14:38:50 +00:00
Reedy 5f007a0c76 LuaError: Use ?: in more traditional way
Change-Id: I68011e1420ae95127ef284d5044f9f125cc656c3
2022-10-03 19:01:56 +01:00
Translation updater bot 70c21ea447 Localisation updates from https://translatewiki.net.
Change-Id: I23ce41756f6e94ef651814518e20ebe61c511b51
2022-09-30 08:54:46 +02:00
Kunal Mehta 94f1ee4cb3 Fix paths in COPYING after file moves
Change-Id: I92cfb3542d772167c4665710022352ee385dc9a2
2022-09-30 02:15:58 +00:00
Reedy 13e82702ab Add global alias for Scribunto_LuaEngine
Change-Id: I8a53a0583f25b397fec25ba77c8a061426c8a641
2022-09-30 02:07:29 +00:00
Thiemo Kreuz 912324993f Apply some minor PHP code modernizations
* Make use of the ?? syntax.
* Use an upstream function.
* Fix an incomplete type hint.

Change-Id: I7b1916418f4b1e65cc8396cfd646224f55c137a4
2022-09-29 21:45:09 -04:00
Reedy 408f4d0bc6 Namespace tests
Change-Id: I4977bf534400643f83ab3400c3dfd736c53f9705
2022-09-30 00:59:00 +00:00
Reedy 1eecdac6de Capitalise Engines folder
Change-Id: I6d730d67decc859fd130fee5ec92b1cfb8d9ef64
2022-09-30 00:58:27 +00:00
Reedy 073a365759 "Namespace LuaCommon" take 2
Revert "Revert "Namespace LuaCommon""

This reverts commit 18d122b60d.

Change-Id: I74fd43f7920c8772e9078f745ac6062d5461a7f1
2022-09-30 00:52:27 +00:00
Translation updater bot 640f6106a8 Localisation updates from https://translatewiki.net.
Change-Id: Ice83d56751fff0b283fc175f518c98eef7d4a7d3
2022-09-28 08:22:41 +02:00
Translation updater bot b2e69c4f68 Localisation updates from https://translatewiki.net.
Change-Id: Idb3cad1b568dbb3ca1d3ce4580ed22f738eea0d5
2022-09-26 08:16:16 +02:00
Translation updater bot 97f5f5c5c0 Localisation updates from https://translatewiki.net.
Change-Id: Idb5d1d5f94914491c1f37e299f5b95baf19ee540
2022-09-23 08:30:05 +02:00
Kunal Mehta 4ccebcdf4b Simplify creating JSON pages in the Module namespace
Pages ending with a ".json" suffix in the Module namespace will use the
built-in JSON content model by default. Previously editors had to use
Special:ChangeContentModel to get a JSON page, which requires the
"editcontentmodel" userright that is not granted to a wide set of users
by default.

Bug: T144475
Change-Id: I1546fcad823a55a8c5a93177df8715844de1e87c
2022-09-22 19:48:52 -07:00
Translation updater bot f40379a310 Localisation updates from https://translatewiki.net.
Change-Id: I065c696986112ea6843a0bac382c94d021602b24
2022-09-19 08:25:52 +02:00
Subramanya Sastry 23ac31e746 Add Parsoid-specific support for handling preprocessed nowikis
* This patch builds on core functionality provided in
  Ied0295feab06027a8df885b3215435e596f0353b.

* This removes any nowiki wrappers present in unstripped text
  (which there would be for preprocssed nowiki tags) which mimics
  the effect of procssing nowikis in core when generating HTML.

* Updated lua tests to verify the new expectation.

* A previously failing parser test added to test T272507 now passes
  and has been re-enabled.

Bug: T272507
Depends-On: Ied0295feab06027a8df885b3215435e596f0353b
Change-Id: I1613ac7bd60cf3ef4a3308b08ea3705b3cf2dee0
2022-09-08 23:17:46 +00:00
Translation updater bot 55820ed10f Localisation updates from https://translatewiki.net.
Change-Id: I00953a9209306e631cb361a039d9635339157135
2022-09-06 09:39:49 +02:00
Subramanya Sastry 3aa6ad45db Temporarily disable the newly added test in f230419b
* This test fails with a core patch and will only pass in a
  subsequent patch in this repo.

Needed-By: Ied0295feab06027a8df885b3215435e596f0353b
Change-Id: Id6ea611549e98893f53094116a3851e9c42b8dc8
2022-09-01 21:24:25 +00:00
Arlo Breault 7778a6eef3 Revert "Disable Parsoid testing tempoarily"
This reverts commit 2c3a363cdc.

Depends-On: I7c419e1d508c337328db1d5132454fb805bfb1b5
Change-Id: I1770656d450ee0ba0ca115993812c06116eb5928
2022-09-01 21:08:20 +00:00
Translation updater bot 8c6653960a Localisation updates from https://translatewiki.net.
Change-Id: I0dcaf9e9be58b3db5adbed7b82ba2dcf25428453
2022-08-31 09:35:40 +02:00
Subramanya Sastry 7170021941 Update failing language tests
* Ia3cc8f95833cd0e9ae985528f8e72396111c4504 in core changed
  localizations for kaa language

Followup-To: Ia3cc8f95833cd0e9ae985528f8e72396111c4504
Change-Id: Ie1b686b65f008c0cd5f4017102699e51f6960b39
2022-08-29 16:20:59 -05:00
Subramanya Sastry 2c3a363cdc Disable Parsoid testing tempoarily
* Running into a missing module error in CI but cannot reproduce
  locally.

* Let us unbreak CI for other dependent repos and investigate this
  in the followup patch that reverts this.

Bug: T316331
Change-Id: Ic5983e503203f132fff521e422f0c7143f91d779
2022-08-26 14:57:48 +00:00
Subramanya Sastry f230419baf Enable testing with Parsoid + add failing test for T272507
* Turned on wt2html and wt2wt Parsoid modes for all tests with
  aggressive normalization to eliminate the need to add html/parsoid
  sections.

  We expect these modes to pass.

* The failing wt2wt tests is because the input wikitext duplicates
  arguments and Parsoid's wt2html doesn't capture duplicate template
  args which cause the wt2wt output to be normalized.

  This explains the two failing wt2wt tests and the corresponding
  selser "failures".

* The failing wt2html safesubst test might be a real failure and
  something we will have to look into. Will file a phab task for this.

* Added a new test for T272507 that fails with Parsoid right now,
  but will pass in a subsequent patch.

Change-Id: I96fba68dda7524d2fe562eb60ced64e5e0518f65
2022-08-22 13:27:20 -05:00
Tim Starling 6f437487b8 Fix incorrect param type, causing phan error
Change-Id: I3a87b0c58fd897ea83dbb44c51a01d206d1cd024
2022-08-22 17:26:57 +00:00
Alexander Vorwerk 738ca8d72d Bump scribunto-stats cache version
The addition of PSquare::__serialize() in wikimedia/running-stat is
having the same cache implication as the issue this was meant to fix.

The legacy PHP serialized form is not compatible with the stable
serialize form that we're switching to.

Bug: T313341
Change-Id: Iec4c1c958e10560abcbd4184a0ca4e1a0c19183a
2022-08-16 19:09:36 +00:00
Subramanya Sastry 8adcc1668f Update failing language tests
* Core changed these kaa localizations in
  Ie0ce427238412d3badb247d2e2fae9bc9f57fbeb

Followup-To: Ie0ce427238412d3badb247d2e2fae9bc9f57fbeb
Change-Id: I7fc0334bf78222f2d7c1b636a70b3c60f899363c
2022-08-12 17:57:21 +00:00
Translation updater bot fc5e20a651 Localisation updates from https://translatewiki.net.
Change-Id: If14a2d08e9094621344736bf0ad84fbe6e75d40a
2022-08-08 08:59:26 +02:00
Lucas Werkmeister (WMDE) 18d122b60d Revert "Namespace LuaCommon"
This reverts commit 62e1fb0b5f.

Reason for revert: caused several errors:
* unnamespaced HooksTest collides with core’s class of the same name
* Scribunto_LuaError renamed without class alias despite being used in Wikibase

Bug: T314464
Change-Id: I8b151327236bf86945e59823fba155497e4b3fc6
2022-08-03 10:03:12 +00:00
Reedy 62e1fb0b5f Namespace LuaCommon
Change-Id: Ib6e912e71fb797942aca4b4f22eb0ff9e005a662
2022-08-03 06:03:57 +00:00
Reedy c479ad6f86 Namespace LuaStandalone engine
Change-Id: I7d3f77a56c8b74e0481197224006f19ff4c9d108
2022-08-03 06:03:48 +00:00
Reedy dc97acc945 Update mediawiki/mediawiki-phan-config to 0.11.1
Bug: T295285
Change-Id: I65db513703b54b377dfbeacf2956c1ff13a27b99
2022-08-02 01:14:06 +00:00
Translation updater bot 3d52349f1b Localisation updates from https://translatewiki.net.
Change-Id: Id455d8b53dabffcd5241b823a3bf588de0c6dcaf
2022-08-01 08:23:24 +02:00
Reedy 1628cfa367 Namespace LuaSandbox engine
Change-Id: I485401c202057ae0fea7226ab21e68ce1c7d40c8
2022-07-30 22:51:42 +01:00
Reedy 492966dc12 composer.json: Bump mediawiki/lua-sandbox to 4.0.2
Bug: T314233
Change-Id: I2a749a3bf43731a19d9e6a8c7baa092a0e971f90
2022-07-30 22:14:53 +01:00
Reedy 0eaa8edfb0 Fix MediaWiki.WhiteSpace.SpaceBeforeSingleLineComment.NewLineComment
Change-Id: Ia2148daf26cb167cbe71a0ab419473a31d97a506
2022-07-30 18:56:55 +00:00
Timo Tijhof e9988b8473 Hooks: Minor clean up, remove redundant PSquare check
PSquare is part of wikimedia/running-stat which is bundled with
MediaWiki core. There is no valid way to install a wiki without
the vendor libraries present.

The check was introduced in 2015 with I0d39920733fe7 when the class
was newly added to the package and deployment was happening
concurrently to the extension change.

Bug: T313341
Change-Id: I6717151c39b589f2e5b5e87da6896f62252cb5d8
2022-07-19 14:58:17 -05:00
Timo Tijhof e5362f639e Hooks: Bump scribunto-stats cache version
The Wikimedia\PSquare class has changed such that its serialization
is incompatible with its prior version. We should probably refactor
this to use an actually supported serialization format, possibly
by enhancing PSquare with some kind of getter method that provides
a plain array that its constructor can accept again instead of relying
on internal PHP serialisation format, but for now we can bump the
cache version.

The side-effect of this will be that the performance stats captured
by Scribunto for visualiation in Grafana, will briefly split its
sampling logic between two versions instead of being global across
all wikis until the train is fully deployed. This does not have any
effect on its business logic or runtime behaviour, and is presumably
by design as that's the only way to bump the cache version, which was
a pre-existing factor in its cache key.

Basically, this means that during the deployment days on weeks where
this is bumped, we will briefly capture fewer samples as there are then
two separate counters trying to reach 1000 before flushing a median
to Graphite. We can remedy that by backporting and deploying to both.

While at it, I'm changing the cache key to conform to our conventions
and make it an explicit, greppable, lowercase and descriptive name
(scribuntu-stats) instead of the implicit __METHOD__ which expanded
to "Scribunto\Hooks::reportTiming". I note that this means the split
brain sampling actually happened at least once before during the week
where the namespace was introduced as that will have implicily changed
the cache-key. Another reason not to use __METHOD__ in a cache key.

Bug: T313341
Change-Id: Ic9dad0f55cba18ec03272b87366a091a396beb74
2022-07-19 14:53:53 -05:00
Translation updater bot 2dbc3c359e Localisation updates from https://translatewiki.net.
Change-Id: I8b4e6f3b78be8c6c155191ab4e1aecb89e6035b4
2022-07-14 08:48:45 +02:00
Mark A. Hershberger 2c121b4543 Add type hints for iterator implementations
Bug: T289879
Change-Id: I0733655b8519099094551bb73b376d2676c255ea
2022-07-12 14:46:18 +00:00
Mark A. Hershberger 9803facc01 UstringLibraryNormalizationTestProvider: Fix 'destory' typo for 'destroy'
Change-Id: Ieb4a0c6c68f0641b45982f3349aa3e99fe7eb07d
2022-07-12 14:44:38 +00:00
Ferran Tufan 674e58b87a Replace usage of Linker with LinkRenderer service
Bug: T279335
Change-Id: I778e86cf3fad2cf333031aca95aeba65a88405ce
2022-07-11 20:24:35 +00:00
Translation updater bot 9d0c742fb3 Localisation updates from https://translatewiki.net.
Change-Id: I28fddf42a0333b0ab457774bbed612bb87c8bd76
2022-07-11 09:50:30 +02:00