jenkins-bot has submitted this change and it was merged. (
https://gerrit.wikimedia.org/r/403940 )
Change subject: Detect variadic arguments in function comments
......................................................................
Detect variadic arguments in function comments
Avoid false positive detection of
"Doc comment for parameter "$params" missing"
in combination with
"Doc comment for parameter $params,... does not match actual variable
name $params"
when $params is part of the argument list.
The other option, when $params is not part of the argument list,
already works.
Bug: T175504
Change-Id: I051150bdb281ae22b8a3a2638dc09e60cadf46c9
---
M MediaWiki/Sniffs/Commenting/FunctionCommentSniff.php
M MediaWiki/Tests/files/Commenting/commenting_function.php
M MediaWiki/Tests/files/Commenting/commenting_function.php.expect
M MediaWiki/Tests/files/Commenting/commenting_function.php.fixed
4 files changed, 55 insertions(+), 5 deletions(-)
Approvals:
Legoktm: Looks good to me, approved
jenkins-bot: Verified
Thiemo Kreuz (WMDE): Looks good to me, but someone else must approve
diff --git a/MediaWiki/Sniffs/Commenting/FunctionCommentSniff.php
b/MediaWiki/Sniffs/Commenting/FunctionCommentSniff.php
index bb53b01..006fe4c 100644
--- a/MediaWiki/Sniffs/Commenting/FunctionCommentSniff.php
+++ b/MediaWiki/Sniffs/Commenting/FunctionCommentSniff.php
@@ -530,10 +530,21 @@
$error = 'Missing parameter type';
$phpcsFile->addError( $error, $tag,
'MissingParamType' );
}
+ $isVariadicArg = substr_compare( $var, ',...', -4, 4 )
=== 0;
+ if ( $isVariadicArg ) {
+ // Variadic args sometimes part of the argument
list,
+ // sometimes not. Remove the variadic indicator
from the doc name to
+ // compare it against the real name, when it is
part of the argument list.
+ // If it is not part of the argument list,
+ // the name of the extra paremter will not be
checked.
+ // This does not take care for the php5.6
...$var feature
+ $var = substr( $var, 0, -4 );
+ }
$params[] = [
'tag' => $tag,
'type' => $type,
'var' => $var,
+ 'variadic_arg' => $isVariadicArg,
'comment' => $comment,
'comment_first' => $commentFirst,
'param_space' => $paramSpace,
@@ -612,7 +623,7 @@
$var = $param['var'];
// Check for unneeded punctation
$matches = [];
- if ( preg_match(
'/^(.*?)((?:(?![\[\]_{}])\p{P})+)(?<!,\.\.\.)$/', $var, $matches ) ) {
+ if ( preg_match( '/^(.*?)((?:(?![\[\]_{}])\p{P})+)$/',
$var, $matches ) ) {
$fix = $phpcsFile->addFixableError(
'Param name should not end with
punctuation "%s"',
$param['tag'],
@@ -645,7 +656,7 @@
$error .= 'actual variable name %s';
$phpcsFile->addError( $error,
$param['tag'], $code, $data );
}
- } elseif ( substr( $var, -4 ) !== ',...' ) {
+ } elseif ( !$param['variadic_arg'] ) {
// We must have an extra parameter comment.
$error = 'Superfluous parameter comment';
$phpcsFile->addError( $error, $param['tag'],
'ExtraParamComment' );
@@ -732,6 +743,9 @@
$content = $fixParam['type'];
$content .= str_repeat( ' ', $fixParam['type_space'] );
$content .= $fixParam['var'];
+ if ( $fixParam['variadic_arg'] ) {
+ $content .= ',...';
+ }
$content .= str_repeat( ' ', $fixParam['var_space'] );
$content .= $fixParam['comment_first'];
$phpcsFile->fixer->replaceToken( ( $fixParam['tag'] + 2 ),
$content );
diff --git a/MediaWiki/Tests/files/Commenting/commenting_function.php
b/MediaWiki/Tests/files/Commenting/commenting_function.php
index fc48879..6d9e69e 100644
--- a/MediaWiki/Tests/files/Commenting/commenting_function.php
+++ b/MediaWiki/Tests/files/Commenting/commenting_function.php
@@ -185,6 +185,22 @@
$out = $in * $inOut;
$inOut = $in / $out;
}
+
+ /**
+ * Test with variadic argument in the list
+ * @param string $key A comment
+ * @param string $params,... A comment
+ */
+ public function testVariadicArgInArgList( $key, $params /* ... */ ) {
+ }
+
+ /**
+ * Test with variadic argument not in the list
+ * @param string $key A comment
+ * @param string $params,... A comment
+ */
+ public function testVariadicArgNotInArgList( $key /* ... */ ) {
+ }
}
class TestPassedExamples {
diff --git a/MediaWiki/Tests/files/Commenting/commenting_function.php.expect
b/MediaWiki/Tests/files/Commenting/commenting_function.php.expect
index eff5ead..400f2e7 100644
--- a/MediaWiki/Tests/files/Commenting/commenting_function.php.expect
+++ b/MediaWiki/Tests/files/Commenting/commenting_function.php.expect
@@ -199,10 +199,14 @@
182 | ERROR | [x] Use @param tag in function comment instead of
| | @param[in,out]
| | (MediaWiki.Commenting.FunctionComment.DirectionParam)
- 190 | ERROR | [ ] Only one object structure is allowed in a file
+ 194 | WARNING | [ ] Comments should start on new line.
+ | |
(MediaWiki.WhiteSpace.SpaceBeforeSingleLineComment.NewLineComment)
+ 202 | WARNING | [ ] Comments should start on new line.
+ | |
(MediaWiki.WhiteSpace.SpaceBeforeSingleLineComment.NewLineComment)
+ 206 | ERROR | [ ] Only one object structure is allowed in a file
| | (Generic.Files.OneObjectStructurePerFile.MultipleFound)
- 257 | ERROR | [ ] Only one object structure is allowed in a file
+ 273 | ERROR | [ ] Only one object structure is allowed in a file
| | (Generic.Files.OneObjectStructurePerFile.MultipleFound)
- 263 | ERROR | [ ] Only one object structure is allowed in a file
+ 279 | ERROR | [ ] Only one object structure is allowed in a file
| | (Generic.Files.OneObjectStructurePerFile.MultipleFound)
PHPCBF CAN FIX THE 75 MARKED SNIFF VIOLATIONS AUTOMATICALLY
diff --git a/MediaWiki/Tests/files/Commenting/commenting_function.php.fixed
b/MediaWiki/Tests/files/Commenting/commenting_function.php.fixed
index d7ac85f..8ea0b33 100644
--- a/MediaWiki/Tests/files/Commenting/commenting_function.php.fixed
+++ b/MediaWiki/Tests/files/Commenting/commenting_function.php.fixed
@@ -186,6 +186,22 @@
$out = $in * $inOut;
$inOut = $in / $out;
}
+
+ /**
+ * Test with variadic argument in the list
+ * @param string $key A comment
+ * @param string $params,... A comment
+ */
+ public function testVariadicArgInArgList( $key, $params /* ... */ ) {
+ }
+
+ /**
+ * Test with variadic argument not in the list
+ * @param string $key A comment
+ * @param string $params,... A comment
+ */
+ public function testVariadicArgNotInArgList( $key /* ... */ ) {
+ }
}
class TestPassedExamples {
--
To view, visit https://gerrit.wikimedia.org/r/403940
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I051150bdb281ae22b8a3a2638dc09e60cadf46c9
Gerrit-PatchSet: 3
Gerrit-Project: mediawiki/tools/codesniffer
Gerrit-Branch: master
Gerrit-Owner: Umherirrender <[email protected]>
Gerrit-Reviewer: Addshore <[email protected]>
Gerrit-Reviewer: Legoktm <[email protected]>
Gerrit-Reviewer: Thiemo Kreuz (WMDE) <[email protected]>
Gerrit-Reviewer: Umherirrender <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits