PhpdocNoUselessInheritdocFixerTest.php 8.6 KB

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