Commit graph

36 commits

Author SHA1 Message Date
jenkins-bot
b9cba64c0e Merge "Move isWellFormedLanguageTag from Language to LanguageCode" 2022-09-05 20:02:14 +00:00
jenkins-bot
a10e6a1ac7 Merge "Update Language::isWellFormedLanguageTag" 2022-09-05 20:00:55 +00:00
Bartosz Dziewoński
d64cbc17e9 docs: Clarify that functions returning namespace names include underscores (not spaces)
Bug: T316092
Change-Id: I380e529590033e5d34adc37d21e8607feb4fab19
2022-08-30 21:15:19 +00:00
Fomafix
233677a9a5 Move isWellFormedLanguageTag from Language to LanguageCode
The static function isWellFormedLanguageTag is related to BCP 47
language codes not to the internal language codes or language names.

The new function LanguageCode::isWellFormedLanguageTag uses type hints.
THe explicit type cast (bool) is not necessary anymore.

The old function Language::isWellFormedLanguageTag is now deprecated.

Change-Id: I6431dbd82ed6dfcc2a7c3495eca025506551db05
2022-08-30 11:39:26 +00:00
Fomafix
3e279faba1 Update Language::isWellFormedLanguageTag
Source: 37e2956271/icu4j/main/tests/translit/src/com/ibm/icu/dev/test/translit/langtagRegex.txt

Also update the URL in the test cases from
http://www.bortzmeyer.org/gabuzomeu-parsing-language-tags.html
to
https://www.bortzmeyer.org/gabuzomeu-parsing-language-tags.html

Change-Id: I08c11081afda84514892e0cdeac7e2023eb44118
2022-08-30 10:54:18 +00:00
Thiemo Kreuz
553f40f973 Language: More specific PHPDocs in Language class and related
Change-Id: Ie8733237a6c8619b11f0804f907130dc331269f8
2022-08-15 15:52:59 +00:00
Ed Sanders
ae18f66d66 Language::getHumanTimestamp: Don't show time when timestamp in a different year
We don't show the time for timestamps that are more than 5 days old
elsewhere in this function, so we shouldn't start showing them again
for timestamps in another year.

Keep the full timestamp format for timestamps in the future, with the
TODO to improve it.

Improve comments throughout the function to be more accurate.

Bug: T133468
Change-Id: I68c6105cc83ca12e0a8f41e8b611bf4b8f35cd87
2022-07-06 22:25:30 +01:00
Timo Tijhof
0ffe341629 language: Add missing @ingroup, subgroup "Languages" and ungroup files
== Ungroup file blocks

Remove `@ingroup` from `@file` blocks and keep only the class block.

This matches similar changes previously applied to API, Skins, Profile,
and ResourceLoader.

This helps make the API documentation easier to navigate.
E.g. Modules -> Language in the sidebar of
<https://doc.wikimedia.org/mediawiki-core/master/php/> as well as
<https://doc.wikimedia.org/mediawiki-core/master/php/group__Language.html>

These are currently cluttered with tons of duplicate entries for files
and classes both. We only need to group files that aren't also
documented as a class (e.g. message files, entry points, other scripts
or files that we mainly consider a data file). This has the helpful
side-effect that we don't encourage duplication of the class
description (or worse, place useful docs only in the file block), and
makes the class files consistently start with a mentally ignorable
block. Basically, unless there's something other than a class, don't
describe or group the file itself.

== Missing group

Various classes in this subtree were missing the `Language` group,
or were using different group from before T225756.

== Subgroup

For ease of navigation, move Converter subclasses to a group called
"Languages", which for documentation purposes is a subgroup of
"Language". The next commit does the same for Messages* files,
and Language subclasses (done separately for ease of review).

Change-Id: I301f471f86ba2dee924fece29a16dc3c20b5bebe
2022-06-28 17:12:46 -07:00
Bartosz Dziewoński
252a1c8e5f Language: Inject NamespaceInfo
Change-Id: I90eee60467698bbefb619bfa69abfaa10c759fea
2022-05-11 17:24:17 +02:00
Matěj Suchánek
e47c441078 Fix many typos in comments
Found using IntelliJ's "Typo" code inspection.

Change-Id: I746220ebe6e1e39f6cb503390ec9053e6518cf16
2022-05-10 12:46:11 +00:00
Timo Tijhof
53f4eab883 language: Remove Language::__destruct()
Follows-up r40020 (350b498b) which introduced this in 2008
to "Reduce memory usage", possibly related to "the impact of circular
references" (which the commit wrote in a similar comment for the
LinkHolderArray class) , presumably related to a limitation in PHP 5.1s
gargage collector in combination with the instance caching, which seems
like a likely source of circular references, but has since been moved
out of this class, to the LanguageFactory service class.

Bug: T292239
Change-Id: Ia1a7d8c9018aabc1ac98a7363d233a46ef7c5263
2022-04-26 23:37:18 +00:00
Aryeh Gregor
4a52bf553f Use MainConfigNames instead of string literals, #3
This edition brought to you by:

grep -ERIn $(grep -o "'[A-Za-z0-9_]*'" includes/MainConfigNames.php | tr
"\n" '|' | sed 's/|$/\n/') includes/

I only corrected a fraction of the results provided by that command. I'm
submitting the partial patch now so it doesn't bitrot.

Bug: T305805
Change-Id: If1918c0b3d88cdf90403921e4310740e206d6962
2022-04-26 14:31:26 +03:00
Umherirrender
eeae9cc939 language: Add comment about some used messages
Change-Id: I7f5598add628d218a000a7da4a1cbb4c0cc2f31b
2022-04-14 00:00:30 +02:00
Umherirrender
1f71eccf63 phan: Disable null_casts_as_any_type setting
Make phan stricter about null types by setting null_casts_as_any_type to
false (the default in mediawiki-phan-config)
Remaining false positive issues are suppressed.
The suppression and the setting change can only be done together

Bug: T242536
Bug: T301991
Change-Id: I0f295382b96fb3be8037a01c10487d9d591e7e01
2022-03-21 18:25:07 +00:00
Umherirrender
6dd8a2bb32 phan: Disable scalar_implicit_cast setting
Make phan stricter about scalar types by setting scalar_implicit_cast to
false (the default in mediawiki-phan-config)

Bug: T242536
Bug: T301991
Change-Id: Ia2fe30b17804186571722e728578121c8b75d455
2022-03-18 18:52:24 +00:00
DannyS712
845094fe3d Language: retrieve MainConfig instead of using a bunch of globals
Change-Id: I791af9197a4a53723adf2869d7b3b9f41fe9c059
2022-03-15 02:58:42 +00:00
Umherirrender
b8bb463dba language: Fix order of arguments in truncateHtml()
The arg order of truncate_endBracket is tag, type, lastCh, tags, but the
type and lastCh are in wrong order. This is only relevant when $tag is
still non-empty after the loop, which is only happen for unclosed html
tags.

Found by phan strict checks

Change-Id: I08d6926dd4aac8ccc86c776f57a26437013ecb1d
2022-03-08 22:34:33 +00:00
jenkins-bot
d1cfc0317d Merge "Add explicit casts between scalar types" 2022-03-08 17:32:26 +00:00
Umherirrender
6ea3d6ac2c Add explicit casts between scalar types
php internal functions like floor/round/ceil documented to return
float, most cases the result is used as int, added casts

Found by phan strict checks

Change-Id: I92daeb0f7be8a0566fd9258f66ed3aced9a7b792
2022-03-08 16:59:01 +00:00
Umherirrender
a9aa1e7346 Fix type of value directly passed to php internal functions
Found by phan strict checks

Change-Id: Icc44cd143f2e98fa3ca188e625a3289441de0f73
2022-03-07 20:41:55 +01:00
Reedy
86934b2fa8 Replace some more usages of Wikimedia\(suppress|restore)Warnings()
Change-Id: I2eb133a9e32116cd155f59086245bc4d15ecbfcc
2022-02-24 20:27:46 +00:00
C. Scott Ananian
9e033de4f2 Don't double-escape the ellipses in Language::truncateForVisual()
It turns out this gets rid of a bunch of suppressed
"SecurityCheck-DoubleEscaped" that appear to have been accurate
warnings.

There seems to have been some confusion about how ::truncateForVisual()
is supposed to be used; in particular it is to be passed *unescaped*
output, because it is not (generally speaking) safe to truncate
HTML-escaped strings.  The goal of ::truncateForVisual() is to have
a specific number of codepoints in the output for display purposes,
the encoding of those codepoints is not an issue (htmlspecialchars
can be applied to the *return value*.)  If you need a specific number
of *bytes* you should be using ::truncateForDatabase().  If you want
a certain number of *HTML bytes* then the ::truncateHtml() method
is probably what you want.

Slightly refactor some code in RevDelLogItem to avoid a false positive.

Bug: T301205
Bug: T290624
Change-Id: I893362e049aedfa699043fcf27caf4815196f748
2022-02-10 17:09:18 -05:00
Tim Starling
ca71e69fc6 Try not to discard Excimer timeout exceptions
Don't catch and discard exceptions from the RequestTimeout library,
except when the exception is properly handled and the code seems to be
trying to wrap things up.

In most cases the exception is rethrown. Ideally it should instead be
done by narrowing the catch, and this was feasible in a few cases. But
sometimes the exception being caught is an instance of the base class
(notably DateTime::__construct()). Often Exception is the root of the
hierarchy of exceptions being thrown and so is the obvious catch-all.

Notes on specific callers:

* In the case of ResourceLoader::respond(), exceptions were caught for API
  correctness, but processing continued. I added an outer try block for
  timeout handling so that termination would be more prompt.
* In LCStoreCDB the Exception being caught was Cdb\Exception not
  \Exception. I added an alias to avoid confusion.
* In ImageGallery I added a special exception class.
* In Message::__toString() the rationale for catching disappears
  in PHP 7.4.0+, so I added a PHP version check.
* In PoolCounterRedis, let the shutdown function do its thing, but
  rethrow the exception for logging.

Change-Id: I4c3770b9efc76a1ce42ed9f59329c36de04d657c
2022-02-02 16:27:44 +11:00
TChin
47adb6d65a Refactor global variables to use MediaWikiServices instead
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
2022-01-10 13:55:53 -05:00
Derick Alangi
3a2d2cddc2 Language: Remove unused, deprecated class members & constants
Change-Id: I57c2cacd0211cf0548e45d8a0c43dd7d47a7b2d4
2021-12-21 10:38:00 +00:00
Alexander Vorwerk
3aa5b6643b Use LanguageNameUtils constants instead of strings
Change-Id: I8521d00675008da0d7c8c768ab75352212653c66
2021-12-05 22:13:34 +01:00
Reedy
c054b10423 Remove or replace usages of "sane"
Bug: T254646
Change-Id: Ia660ab95353cd8f05c50e60f30d29fd22b018a43
2021-11-22 15:48:03 +00:00
Reedy
7bf779524a Remove or replace usages of "sanity"
Bug: T254646
Change-Id: I2b120f0b9c9e1dc1a6c216bfefa3f2463efe1001
2021-11-19 23:19:42 +00:00
TChin
349819dc5a Add Message/MessageValue user group member parameter type
* Added ParamType::OBJECT, which allows Stringable objects to be passed into MessageValue

Bug: T278482
Change-Id: Ib4990f87d4ad70b7525d7aa05c8b97e90c121674
2021-11-16 11:24:35 -05:00
Umherirrender
ec6fd49107 language: Fix nullable documentation for property, args and return types
Change documentation to null or false where the type is allowed

Change-Id: Ibc17388c065605defed0d3f0998971c9987ff63f
2021-10-20 20:17:09 +00:00
TChin
fb4e7a803a Add message parameter type for User Groups
Bug: T278482
Change-Id: I45da5f73f8920b79b57c02776a05d0268d3480f2
2021-10-14 15:02:13 -04:00
Umherirrender
07b499fbcf build: Update mediawiki/mediawiki-phan-config to 0.11.0
Addition and remove of suppression needs to be done with the version
update.

Change-Id: I3288b3cefa744b507eadebb67b8ab08c86517c1c
2021-09-07 17:19:05 +02:00
Umherirrender
b432d96e8c language: mb_substr never returns false
substr can return false, but mb_substr not.

Change-Id: I65575c9ae97c2ccc2ef96761e5de2f419d74468d
2021-08-28 22:27:34 +02:00
Umherirrender
b4bd3d4ee8 Remove dead variables and functions and unneeded parenthesis
Found by sonarqube

Change-Id: I3464d25e94d98aaca55d9209d5175542b335f994
2021-08-13 21:41:59 +02:00
Timo Tijhof
f3ef7f7f23 language: Autoload normalize data and remove transformUsingPairFile compat
* Turn normalize data into an autoloadable class and use the class name
  as key instead of a partial file name with a base directory.

* This protected function is not aimed at re-use in extensions,
  has no other usage known to Codesearch. Mark it internal,
  and remove the compat introduced by 31283f34bf.

* Update the now ten-year-old documentation comments that described
  this as "Temporary". The functionality and comment were introduced
  in 2010 by Tim with r60599 (ad19c032b0).
  Ref <https://bash.toolforge.org/search?p=0&q=temporary>.

* Replace the broken wikitech-l archive link with a working one,
  and describe the thread for easier future reference.

Bug: T225756
Change-Id: I004da1f25c19e1095d0917349f2ba8461f9f0715
2021-08-10 21:03:13 +00:00
Timo Tijhof
7c39f76452 Move Language subclasses to includes/
Depending on which namespace we want these classes to have after
T166010 they could either stay in includes/languages/ (plural) in
their own MediaWiki\Languages\-namespace dedicated to Language
subclasses, or they could go in into a subdirectory like
`includes/language/languages/` if we want to keep them in the same
top-level namespace as other Language classes and services, but in
a more nested namespace.

For now, I've made the smaller change and kept the Language subclasses
in their own directory directly under includes/, not nested further.

Bug: T225756
Change-Id: I01015424707b442853879fd50c97f00215e5c2fa
2021-08-04 23:44:46 +01:00
Renamed from languages/Language.php (Browse further)