PhpdocNoUselessInheritdocFixerTest.php 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390
  1. <?php
  2. declare(strict_types=1);
  3. /*
  4. * This file is part of PHP CS Fixer.
  5. *
  6. * (c) Fabien Potencier <fabien@symfony.com>
  7. * Dariusz Rumiński <dariusz.ruminski@gmail.com>
  8. *
  9. * This source file is subject to the MIT license that is bundled
  10. * with this source code in the file LICENSE.
  11. */
  12. namespace PhpCsFixer\Tests\Fixer\Phpdoc;
  13. use PhpCsFixer\Tests\Test\AbstractFixerTestCase;
  14. /**
  15. * @internal
  16. *
  17. * @covers \PhpCsFixer\Fixer\Phpdoc\PhpdocNoUselessInheritdocFixer
  18. */
  19. final class PhpdocNoUselessInheritdocFixerTest extends AbstractFixerTestCase
  20. {
  21. /**
  22. * @dataProvider provideFixCases
  23. */
  24. public function testFix(string $expected, ?string $input = null): void
  25. {
  26. $this->doTest($expected, $input);
  27. }
  28. public static function provideFixCases(): iterable
  29. {
  30. yield [
  31. "<?php\n/** */class min1{}",
  32. "<?php\n/** @inheritdoc */class min1{}",
  33. ];
  34. yield [
  35. "<?php\n/** */class min1{}",
  36. "<?php\n/** @inheritDoc */class min1{}",
  37. ];
  38. yield [
  39. "<?php\nclass min2{/** */}",
  40. "<?php\nclass min2{/** @inheritdoc */}",
  41. ];
  42. yield [
  43. "<?php\nclass min2{/** */}",
  44. "<?php\nclass min2{/** @inheritDoc */}",
  45. ];
  46. yield [
  47. '<?php
  48. class A
  49. {
  50. /** */
  51. public function A(){}
  52. /**
  53. * '.'
  54. */
  55. public function B(){}
  56. /**
  57. * Descr.
  58. *
  59. * @param int $c
  60. * '.'
  61. */
  62. public function C($c){}
  63. }
  64. ',
  65. '<?php
  66. class A
  67. {
  68. /** @inheritdoc */
  69. public function A(){}
  70. /**
  71. * @inheritdoc
  72. */
  73. public function B(){}
  74. /**
  75. * Descr.
  76. *
  77. * @param int $c
  78. * @inheritdoc
  79. */
  80. public function C($c){}
  81. }
  82. ',
  83. ];
  84. yield [
  85. '<?php
  86. class B
  87. {
  88. /** */
  89. public function B(){}
  90. }
  91. ',
  92. '<?php
  93. class B
  94. {
  95. /** {@INHERITDOC} */
  96. public function B(){}
  97. }
  98. ',
  99. ];
  100. yield [
  101. '<?php
  102. /** D C */
  103. class C
  104. {
  105. }
  106. ',
  107. '<?php
  108. /** D { @INHERITDOC } C */
  109. class C
  110. {
  111. }
  112. ',
  113. ];
  114. yield [
  115. '<?php
  116. /** E */
  117. class E
  118. {
  119. }
  120. ',
  121. '<?php
  122. /** {{@Inheritdoc}} E */
  123. class E
  124. {
  125. }
  126. ',
  127. ];
  128. yield [
  129. '<?php
  130. /** F */
  131. class F
  132. {
  133. }
  134. ',
  135. '<?php
  136. /** F @inheritdoc */
  137. class F
  138. {
  139. }
  140. ',
  141. ];
  142. yield [
  143. '<?php
  144. /** */
  145. class G1{}
  146. /** */
  147. class G2{}
  148. ',
  149. '<?php
  150. /** @inheritdoc */
  151. class G1{}
  152. /** @inheritdoc */
  153. class G2{}
  154. ',
  155. ];
  156. yield [
  157. '<?php
  158. class H
  159. {
  160. /* @inheritdoc comment, not PHPDoc */
  161. public function H(){}
  162. }
  163. ',
  164. ];
  165. yield [
  166. '<?php
  167. class J extends Z
  168. {
  169. /** @inheritdoc */
  170. public function H(){}
  171. }
  172. ',
  173. ];
  174. yield [
  175. '<?php
  176. interface K extends Z
  177. {
  178. /** @inheritdoc */
  179. public function H();
  180. }
  181. ',
  182. ];
  183. yield [
  184. '<?php
  185. /** */
  186. interface K
  187. {
  188. /** */
  189. public function H();
  190. }
  191. ',
  192. '<?php
  193. /** @{inheritdoc} */
  194. interface K
  195. {
  196. /** {@Inheritdoc} */
  197. public function H();
  198. }
  199. ',
  200. ];
  201. yield [
  202. '<?php
  203. trait T
  204. {
  205. /** @inheritdoc */
  206. public function T()
  207. {
  208. }
  209. }',
  210. ];
  211. yield [
  212. '<?php
  213. class B
  214. {
  215. /** */
  216. public function falseImportFromTrait()
  217. {
  218. }
  219. }
  220. /** */
  221. class A
  222. {
  223. use T;
  224. /** @inheritdoc */
  225. public function importFromTrait()
  226. {
  227. }
  228. }
  229. ',
  230. '<?php
  231. class B
  232. {
  233. /** @inheritdoc */
  234. public function falseImportFromTrait()
  235. {
  236. }
  237. }
  238. /** @inheritdoc */
  239. class A
  240. {
  241. use T;
  242. /** @inheritdoc */
  243. public function importFromTrait()
  244. {
  245. }
  246. }
  247. ',
  248. '<?php
  249. class B
  250. {
  251. /** @inheritDoc */
  252. public function falseImportFromTrait()
  253. {
  254. }
  255. }
  256. /** @inheritDoc */
  257. class A
  258. {
  259. use T;
  260. /** @inheritDoc */
  261. public function importFromTrait()
  262. {
  263. }
  264. }
  265. ',
  266. ];
  267. yield [
  268. '<?php
  269. /** delete 1 */
  270. class A
  271. {
  272. /** delete 2 */
  273. public function B()
  274. {
  275. $a = new class implements I {
  276. /** @inheritdoc keep */
  277. public function A()
  278. {
  279. $b = new class extends D {
  280. /** @inheritdoc keep */
  281. public function C()
  282. {
  283. $d = new class() {
  284. /** delete 3 */
  285. public function D()
  286. {
  287. }
  288. };
  289. }
  290. };
  291. }
  292. };
  293. }
  294. /** delete 4 */
  295. public function B1()
  296. {
  297. $a1 = new class(){ };
  298. }
  299. /** delete 5 */
  300. public function B2()
  301. {
  302. //$a1 = new class(){ use D; };
  303. }
  304. }
  305. ',
  306. '<?php
  307. /** @inheritdoc delete 1 */
  308. class A
  309. {
  310. /** @inheritdoc delete 2 */
  311. public function B()
  312. {
  313. $a = new class implements I {
  314. /** @inheritdoc keep */
  315. public function A()
  316. {
  317. $b = new class extends D {
  318. /** @inheritdoc keep */
  319. public function C()
  320. {
  321. $d = new class() {
  322. /** @inheritdoc delete 3 */
  323. public function D()
  324. {
  325. }
  326. };
  327. }
  328. };
  329. }
  330. };
  331. }
  332. /** @inheritdoc delete 4 */
  333. public function B1()
  334. {
  335. $a1 = new class(){ };
  336. }
  337. /** @inheritdoc delete 5 */
  338. public function B2()
  339. {
  340. //$a1 = new class(){ use D; };
  341. }
  342. }
  343. ',
  344. ];
  345. }
  346. }