2016-01-31 6 views
6

Ich arbeite an einem riesigen Projekt und wir haben beschlossen, den gesamten Code mit 80 Zeichen pro Zeile konform zu machen. Es ist ein Ruby-basiertes Projekt mit Wrapper für C. Rubin, habe ich beschlossen, Rubocop und mit dem Befehl zu verwenden:Auto-Korrekte Zeilenlängen in einer Bibliothek

rubocop --only LineLength 

Ich habe 1714 Fehler, wobei die Länge der Leitung war größer als 80 Zeichen. Abgesehen davon wurden viele andere Fehler von Rubocop entdeckt, die ich jetzt ignorieren möchte.

Ich bin auf der Suche nach der einfachsten Möglichkeit zur automatischen Korrektur aller Zeilenlängenverletzungen nur, um die 80 Zeichen Grenze sowohl in C und Ruby zu erfüllen.

+1

Ich empfehle Ihnen, zuerst den Code zu scannen, um die häufigsten Gründe dafür zu ermitteln, dass Zeilen 80 Zeichen überschreiten. Ich wäre nicht überrascht, wenn ein Hauptschuldiger lange Variablen- und Methodennamen wären. Wenn dies der Fall ist, können Sie die Anzahl der "langen" Zeilen (> 80 Zeichen) erheblich reduzieren, indem Sie diese Zeichenfolgen nur verkürzen. "Nur" ist vielleicht nicht das richtige Wort, da das keine einfache Aufgabe ist. Sie müssen natürlich vermeiden, die Namen der von Ruby eingebauten Methoden zu verkürzen, sowie einige in Anführungszeichen gesetzte Strings. (Ich sage "etwas", weil Sie eine Methode 'doit' definieren und dann als String referenzieren können:' A.send ("doit") '.) ... –

+1

... Sie könnten Ihren Code scannen für Strings, die du in ein Array 'arr', dann' arr.uniq! .sort! 'steckst. Als nächstes gehen Sie und entfernen Sie Zeichenfolgen, die offensichtlich nicht gekürzt werden können.Erstellen Sie dann einen Hash, der jede Zeichenfolge auf sich selbst abbildet, und ändern Sie dann jeden Wert manuell auf etwas kürzer, aber immer noch sinnvoll. Nach der Bestätigung gibt es keine doppelten Werte im Hash, verwenden Sie den Hash, um Zeichenfolgen im Code zu verkürzen ... –

+1

... Darüber hinaus gibt es Orte, an denen Sie Zeilen sicher trennen können, z. B. nach vertikalen Pipes, die Blockvariablen umgeben, Kommas das sind nicht in Anführungszeichen und so weiter. Sie könnten dafür reguläre Ausdrücke verwenden. Viel Glück! Nachdem Sie fertig sind, melden Sie sich bitte mit einer Bearbeitung zurück, die Ihnen erklärt, was Sie getan haben und welche Fallstricke aufgetreten sind. Es wäre besonders interessant, wenn Sie prozentuale Reduktionen in langen Linien melden, die Sie mit jeder verwendeten Technik erzielen. Wenn Sie das tun, lassen Sie es mich bitte in einem Kommentar wissen. –

Antwort

1

Bitte ändern Sie die Zeilenlänge nicht automatisch.

Linienlänge ist ein Metrik, kein Stil. Styles können oft ausgetauscht werden, wie doppelte oder einfache Anführungszeichen, mit hashrockets vs. der neuen Hash-Syntax, die in Ruby 2 eingeführt wurde. Die Auswahl eines Stils ist in der Regel Geschmackssache und hat nur geringe Auswirkungen auf das Programm. Deshalb gibt es automatische Korrekturen für Stile: Wenn Sie sie ändern, ändert sich die Semantik nicht.

Zu den Metriken gehören unter anderem die Zeilenlänge und ABC-Size. Das Überprüfen von Metriken mithilfe der statischen Codeanalyse ist etwas völlig anderes als das Überprüfen von Stilen. Das Festlegen eines Maximums auf Zeilenlänge ist zum Beispiel keine Frage des Geschmacks, Sie verwenden es lieber, um einen bestimmten Programmierungsstil durchzusetzen. Ein Programmierer müsste lange Variablennamen und eine tiefe Verschachtelung vermeiden, um die Zeilenlänge unter dem Grenzwert zu halten.

Metriken können auch auf Probleme im Code hinweisen. Zum Beispiel zeigt eine zu hohe ABC-Größe an, dass eine Methode zu viel macht.

Abgesehen davon wäre es sehr schwierig, wenn nicht unmöglich, alle Codezeilen automatisch zu kürzen, da Ruby eine sehr komplexe Sprache ist.

Statt Zeilenlängen automatisch reduzieren, hier einige Alternativen:

  • sehen, wenn Sie die Anzahl der Verletzungen verringern können die AllowHeredoc und AllowURI Optionen durch ermöglicht. Lies über sie hier https://rubocop.readthedocs.io/en/latest/cops_metrics/#metricslinelength.
  • run rubocop --only LineLength --auto-gen-config und verwenden Sie die rubocops-Konfiguration, um die Zeilenlänge zu stoppen.
  • Fragen Sie sich: Welchen Wert erhöhe ich durch die Reduzierung der Zeilenlänge?
  • denke nicht an zu lange Zeilen als Stilverletzung, sondern eher als möglicher Indikator für ein zugrunde liegendes Problem. Versuchen Sie, dieses Problem zu finden und es zu lösen.