2016-01-31 31 views
6

Sto lavorando a un progetto enorme e abbiamo deciso di rendere tutto il codice conforme a 80 caratteri per riga. Si tratta di un progetto basato rubino con involucri per C. Per Ruby, ho deciso di usare Rubocop e con il comando:Lunghezza riga automatica in una libreria

rubocop --only LineLength 

ho ottenuto 1.714 gli errori, in cui la lunghezza della linea era maggiore di 80 caratteri. A parte questo, ci sono molti altri errori rilevati da Rubocop che voglio ignorare per ora.

Sto cercando il modo più semplice per correggere automaticamente tutte le violazioni della lunghezza della linea solo, per soddisfare il limite di 80 caratteri sia in C che in Ruby.

+1

Suggerisco di eseguire prima la scansione del codice per determinare i motivi più comuni per cui le righe superano gli 80 caratteri. Non sarei sorpreso se un colpevole principale fosse una variabile lunga e nomi di metodi. In tal caso, potresti ridurre considerevolmente il numero di righe "lunghe" (> 80 caratteri) semplicemente accorciando quelle stringhe. "Merely" non è forse la parola giusta, poiché non è un compito semplice. È necessario evitare di accorciare i nomi dei metodi incorporati di Ruby, naturalmente, nonché alcune stringhe tra virgolette. (Dico "alcuni" perché potresti definire un metodo "doit" e trovarlo referenziato come una stringa: "A.send (" doit ")'.) ... –

+1

... Potresti iniziare scannando il tuo codice per le stringhe che hai inserito in un array 'arr', quindi' arr.uniq! .sort! '. Poi vai e rimuovi le stringhe che ovviamente non possono essere abbreviate.Quindi creare un hash che associa ogni stringa a se stesso, quindi modificare manualmente ciascun valore in qualcosa di più breve ma comunque significativo. Dopo aver verificato che non ci sono valori duplicati nell'hash, usa l'hash per accorciare le stringhe nel codice ... –

+1

... Inoltre, ci sono luoghi in cui puoi interrompere le linee in modo sicuro, come dopo pipe verticali che circondano variabili di blocco, virgole che non sono tra le stringhe quotate e così via. Potresti usare espressioni regolari per questo. Buona fortuna! Dopo aver finito, si prega di segnalare con una modifica che spiega cosa hai fatto e le eventuali insidie ​​che hai incontrato. Sarebbe particolarmente interessante se segnalassi riduzioni percentuali delle lunghe linee che hai ottenuto con ciascuna tecnica che usi. Se lo fai, per favore fammelo sapere in un commento. –

risposta

1

Si prega di non modificare la lunghezza della linea automaticamente.

La lunghezza lineare è una metrica, non uno stile . Gli stili possono spesso essere scambiati, come le virgolette doppie o singole, usando gli hash e la nuova sintassi hash introdotta in Ruby 2, ecc. La scelta di uno stile è solitamente una questione di gusti e ha pochi (se non nessuno) impatto sul programma stesso. Ecco perché ci sono correzioni automatiche per gli stili: cambiandoli non cambia la semantica.

Le metriche includono la lunghezza lineare, classlength e ABC-Size, tra gli altri. Il controllo delle metriche mediante l'analisi statica del codice è qualcosa di completamente diverso dal controllo degli stili. L'impostazione di un massimo di lunghezza lineare, ad esempio, non è una questione di gusti, preferiresti usarla per forzare un certo stile di programmazione. Un programmatore dovrebbe evitare nomi di variabili lunghe e nidificazione profonda per mantenere la lunghezza della linea sotto il limite.

Le metriche possono anche indicare problemi nel codice. Ad esempio, una dimensione ABC troppo alta indica che un metodo potrebbe essere eccessivo.

A parte questo, sarebbe molto difficile, se non impossibile, accorciare automaticamente tutte le righe di codice, dal momento che il rubino è un linguaggio molto complesso.

Invece di ridurre automaticamente lineLength, ecco alcune alternative:

  • vedere se è possibile ridurre il numero di violazioni, consentendo l'AllowHeredoc e opzioni AllowURI. Leggi su di loro qui https://rubocop.readthedocs.io/en/latest/cops_metrics/#metricslinelength.
  • eseguire rubocop --only LineLength --auto-gen-config e utilizzare la configurazione rubocops per interrompere il controllo della lunghezza di linea.
  • chiediti: quale valore guadagno riducendo la lunghezza della linea?
  • non pensare alle linee troppo lunghe come alla violazione dello stile, ma piuttosto come un possibile indicatore di un problema di fondo. Prova a trovare quel problema e risolvilo.