lineLength

Řádek širší než délka řádku z konfigurace se ohlásí; opravit ho pravidlo neumí.

Jen hlásí · v žádném presetu · pokrývá Generic.Files.LineLength, SlevomatCodingStandard.Files.LineLength

Co pravidlo hlídá

Pravidlo změří každý řádek souboru a ohlásí ty, které jsou širší než lineLength. Ta hodnota říká nejdelší řádek, který ještě projde: s lineLength: 120 projde řádek o 120 znacích a ohlásí se až ten o 121. Standardy psr12 a perCs ji nastavují na 120, nette na 140, symfony délku neomezuje, a když ji neurčí žádná vrstva, pravidlo nehlásí nic. Šířka se počítá tak, jak řádek vidíte: tabulátor se počítá do další zarážky podle stylu, ne za jeden znak. Neměří se řádky, které jsou obsahem a zalomením by změnily význam: vnitřek heredocu, víceřádkový řetězec a HTML mimo PHP tagy. Dlouhý řádek uvnitř víceřádkového komentáře se hlásí na řádku, kde ten komentář začíná.

Pravidlo běží jako poslední, až po pravidlech, která umějí dlouhé řádky zalomit (multilineSignature, multilineCondition, multilineImport a další). Co ohlásí, je tedy to, co nic zalomit nedokázalo, a zbývá to na vás: rozdělit výraz, pojmenovat mezivýsledek, zkrátit řetězec. Délku řádku berou všechna tato pravidla z téže hodnoty a měří ji stejně, tabulátor do další zarážky podle stylu.

Protože jde o hlášení bez opravy, bývá tohle pravidlo první, které projekt zapíše do klíče warnOnly: dlouhý řádek se vypíše a spočítá, ale build kvůli němu nespadne.

Příklad

Délka je tu snížená na 60 znaků, aby se příklad vešel na stránku.

lineLength: 60

rules:
	lineLength: true
use Some\Very\Long\Vendor\Namespace\WithAnEvenLonger\ClassName;

$message = sprintf('%s has %d unread messages', $user->name, $count);  // The line is 69 characters long, the limit is 60
$greeting = 'Hello';

Import je širší než 60 znaků, ale nehlásí se: import jediné třídy rozdělit na víc řádků nejde a volba ignoreImports ho vynechává.

Volby

ignoreImports

bool, výchozí true. Řádek začínající use se nehlásí, protože import jediného jména zalomit nejde. Volba ale vynechá každý takový řádek, tedy i use traitu ve třídě a skupinový import, který zůstal dlouhý, protože ho nerozložilo pravidlo multilineImport.

lineLength: 60

rules:
	lineLength:
		ignoreImports: false
use Some\Very\Long\Vendor\Namespace\WithAnEvenLonger\ClassName;  // The line is 63 characters long, the limit is 60

ignorePatterns

Seznam řetězců, výchozí []. Regulární výrazy; řádek, kterému některý odpovídá, se nehlásí. Hodí se pro řádky s URL nebo pro tabulky dat, které by zalomením ztratily čitelnost.

lineLength: 60

rules:
	lineLength:
		ignorePatterns: ['~https?://~']
$docs = 'https://example.com/documentation/very/long/path/to/the/page';
$data = ['alpha' => 1, 'beta' => 2, 'gamma' => 3, 'delta' => 4];  // The line is 64 characters long, the limit is 60

Zdroj

Třída LineLengthRule, fixtury lineLength.