„Repararea” codului prea lăbărțat

Fie din cauza unei setări stupide de line ending pe care nu știu eu să o fac, fie din cauza setărilor stupide a celor ce lucrează direct pe server, fie pur și simplu din cauza unui client de ftp, codul tău frumos formatat poate ajunge să arate cam așa:

function remove_menus () {

	global $menu;

	$restricted = array( 'Posts', 'Media', 'Links', 'Comments' );

	end ( $menu );

	while ( prev($menu) ){

		$value = explode( ' ',$menu[key($menu)][0] );

		if( in_array( $value[0] != NULL?$value[0]:"" , $restricted ) ){

			unset( $menu[key($menu)] );

		}

	}

}

add_action('admin_menu', 'remove_menus');

(btw, funcția asta șterge anumite elemente din meniul de admin al WordPress)

Cum scapi de spatiile extra? Dacă ai extrem de mult timp liber, poți șterge fiecare spațiu, de mână. Dar ce faci dacă ai un fișier cu mii de linii? Chiar ești dispus să pierzi o zi pentru a formata codul?

REGEX!

Expresiile regulate (Regex) sunt o invenție super tare ce îți permit să faci operațiuni într-un text pe baza unui pattern (șablon sună mult prea… ciudat). Pattern-ul nostru este reprezentat de două „enter” (unul legitim și unul inserat abuziv de setarea tâmpă de care am pomenit mai sus).

Expresiile regulate au anumite „scurtături” pentru caractere invizibile. Căci un rând nou este reprezentat de (cel puțin) un caracter. Și, în funcție de setările editorului tău, un rând nou poate fi reprezentat fie de CR, fie de LF, fie de ambele (CRLF). Ambele denumiri venind din epoca mașinilor de scris (Cariage Return respectiv Line Feed).

În limbajul Regex, asta se traduce prin \r, \n, respectiv \r\n (sau \n\r)

Știm CE să căutăm. CUM căutăm?

Majoritatea (toate?) editoarelor de cod au o funcție ce-ți permite să cauți (și să înlocuiești) pe baza minunăției sus-numite.

Prin urmare, cauți în cod după două linii noi – \n\n – și înlocuiești cu o singură linie – \n. În funcție de line-ending-ul din editorul tău de suflet, s-ar putea să fie nevoie să înlocuiești \n fie cu \r fie cu \r\n.

Apeși pe „Replace All” (sau echivalentul din editorul tău) și… Gata. Ai un cod frumos formatat:

function remove_menus () {
	global $menu;
	$restricted = array( 'Posts', 'Media', 'Links', 'Comments' );
	end ( $menu );
	while ( prev($menu) ){
		$value = explode( ' ',$menu[key($menu)][0] );
		if( in_array( $value[0] != NULL?$value[0]:"" , $restricted ) ){
			unset( $menu[key($menu)] );
		}
	}
}
add_action('admin_menu', 'remove_menus');

Quick tip

În loc de \n\n poți folosi și \n{2,2}. În Regex, {x,y} se numește interval și poți defini câte caractere să caute (minim/maxim). Omiterea celui de-al doilea parametru înseamnă că nu există limită superioară. De exemplu, o căutare de genul \n{2,} va căuta cel puțin două rânduri noi consecutive.

Foarte util în cazul în care vrei să „cureți” un document care a fost formatat aiurea de la început.

9 Comentarii to “„Repararea” codului prea lăbărțat”

  1. Mi s-a intamplat des la upload-ul de pe un mac. E de la cum interpreteaza serverul line end (Enter-ul) de la unele programe de editare text de pe mac :/

  2. Sau daca esti in VIM poti inregistra comanda si o poti repeta de X ori :D

  3. Am uitat sa zic cum:

    qa = inregistrezi secventa ca si “a”
    dd = sterge linia
    sageata jos = treci la linia urmatoare
    q = termini de inregistrat
    20@a = repeta comanda de 20 de ori

  4. Staicu Ionuț-Bogdan

    Unii sunt normali și nu folosesc editoare precambriene…

  5. You frontend devs :))))

  6. Ahh.. cat am suferit dupa dracia asta in zend studio 5.5!
    Unde trimit berea? :D

  7. Staicu Ionuț-Bogdan

    Cătăline, eu foloseam o aplicație micuță care făcea asta. Dar mi se părea foarte peste mână, mai ales dacă editam un fișier direct pe ftp (se mai întâmplă și minuni d’astea).

    Iar ieri mă jucam cu regex și mi-a venit ideea salvatoare.

    So… Și eu ar trebui să-mi dau o bere pentru minunata idee! :D

  8. Am avut candva nevoie de asa ceva si nu am stiut cum sa fac. Ms mult!
    Quick tip: la regex poti pune si numarul exact de caractere, gen: \n{2} , nu e neaparat interval.

  9. Am avut si eu problema, in Dreamweaver se rezolva simplu, CTR + U -> Code Format -> Line Break Type, se alege dintre CR LF Windows, LF Unix, CR Macintosh.

Show trackbacks

Ți-a plăcut articolul? Lasă un comentariu!

You can insert code snippets using BBcode:
[js].[/js] [html].[/html] [php].[/php] [css].[/css]
You can also use some HTML tags:
<blockquote>.</blockquote> <code>.</code> <a href="">.</a> <strong>.</strong> <em>.</em>