mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/DiscussionTools
synced 2024-12-02 20:16:41 +00:00
69e8e948b2
MediaWiki's PHPCS plugin requires documentation comments on all methods, unless those methods are fully typed (all parameters and return value). It turns out that almost all of our methods are fully typed already. Procedure: 1. Find: \*(\s*\*\s*(@param \??[\w\\]+(\|null)? &?\$\w+|@return \??[\w\\]+(\|null)?)\n)+\s*\*/ Replace with: */ This deletes type annotations, except those not representable as PHP type hints such as union types `a|b` or typed arrays `a[]`, or those with documentation beyond type hints, or those on functions with any other annotations. 2. Find: /\*\*/\n\s* Replace with nothing This deletes the remaining comments on methods that had no prose documentation. 3. Undo all changes that PHPCS complains about (those comments were not redundant) 4. Review the diff carefully, these regexps are imprecise :) Change-Id: Ic82e8b23f2996f44951208dbd9cfb4c8e0738dac
143 lines
3.2 KiB
PHP
143 lines
3.2 KiB
PHP
<?php
|
|
|
|
namespace MediaWiki\Extension\DiscussionTools;
|
|
|
|
use HTMLForm;
|
|
use MediaWiki\Html\Html;
|
|
use MediaWiki\SpecialPage\FormSpecialPage;
|
|
|
|
class SpecialFindComment extends FormSpecialPage {
|
|
|
|
private const LIST_LIMIT = 50;
|
|
|
|
private ThreadItemStore $threadItemStore;
|
|
private ThreadItemFormatter $threadItemFormatter;
|
|
|
|
public function __construct(
|
|
ThreadItemStore $threadItemStore,
|
|
ThreadItemFormatter $threadItemFormatter
|
|
) {
|
|
parent::__construct( 'FindComment' );
|
|
$this->threadItemStore = $threadItemStore;
|
|
$this->threadItemFormatter = $threadItemFormatter;
|
|
}
|
|
|
|
/**
|
|
* @inheritDoc
|
|
*/
|
|
protected function getFormFields() {
|
|
return [
|
|
'idorname' => [
|
|
'label-message' => 'discussiontools-findcomment-label-idorname',
|
|
'name' => 'idorname',
|
|
'type' => 'text',
|
|
'required' => true,
|
|
],
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @inheritDoc
|
|
*/
|
|
protected function getSubpageField() {
|
|
return 'idorname';
|
|
}
|
|
|
|
/**
|
|
* @inheritDoc
|
|
*/
|
|
protected function getDisplayFormat() {
|
|
return 'ooui';
|
|
}
|
|
|
|
/**
|
|
* @inheritDoc
|
|
*/
|
|
public function requiresPost() {
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* @inheritDoc
|
|
*/
|
|
protected function getShowAlways() {
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* @inheritDoc
|
|
*/
|
|
protected function alterForm( HTMLForm $form ) {
|
|
$form->setWrapperLegend( true );
|
|
$form->setSubmitTextMsg( 'discussiontools-findcomment-label-search' );
|
|
}
|
|
|
|
private string $idOrName;
|
|
|
|
/**
|
|
* @inheritDoc
|
|
*/
|
|
public function onSubmit( array $data ) {
|
|
// They are correctly written with underscores, but allow spaces too for consistency with
|
|
// the behavior of internal wiki links.
|
|
$this->idOrName = str_replace( ' ', '_', $data['idorname'] );
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* @inheritDoc
|
|
*/
|
|
public function onSuccess() {
|
|
$out = $this->getOutput();
|
|
$results = false;
|
|
|
|
if ( $this->idOrName ) {
|
|
$byId = $this->threadItemStore->findNewestRevisionsById( $this->idOrName, static::LIST_LIMIT + 1 );
|
|
if ( $byId ) {
|
|
$this->displayItems( $byId, 'discussiontools-findcomment-results-id' );
|
|
$results = true;
|
|
}
|
|
|
|
$byName = $this->threadItemStore->findNewestRevisionsByName( $this->idOrName, static::LIST_LIMIT + 1 );
|
|
if ( $byName ) {
|
|
$this->displayItems( $byName, 'discussiontools-findcomment-results-name' );
|
|
$results = true;
|
|
}
|
|
}
|
|
|
|
if ( $results ) {
|
|
$out->addHTML(
|
|
$this->msg( 'discussiontools-findcomment-gotocomment', $this->idOrName )->parseAsBlock() );
|
|
} else {
|
|
$out->addHTML(
|
|
$this->msg( 'discussiontools-findcomment-noresults' )->parseAsBlock() );
|
|
}
|
|
}
|
|
|
|
private function displayItems( array $threadItems, string $msgKey ) {
|
|
$out = $this->getOutput();
|
|
|
|
$list = [];
|
|
foreach ( $threadItems as $item ) {
|
|
if ( count( $list ) === static::LIST_LIMIT ) {
|
|
break;
|
|
}
|
|
$line = $this->threadItemFormatter->formatLine( $item, $this );
|
|
$list[] = Html::rawElement( 'li', [], $line );
|
|
}
|
|
|
|
$out->addHTML( $this->msg( $msgKey, count( $list ) )->parseAsBlock() );
|
|
$out->addHTML( Html::rawElement( 'ul', [], implode( '', $list ) ) );
|
|
if ( count( $threadItems ) > static::LIST_LIMIT ) {
|
|
$out->addHTML( $this->msg( 'morenotlisted' )->parseAsBlock() );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @inheritDoc
|
|
*/
|
|
public function getDescription() {
|
|
return $this->msg( 'discussiontools-findcomment-title' );
|
|
}
|
|
}
|