Automatische Berechnung von Einzugsparametern

369
Vi.

Wie analysiert man eine C / C ++ - Quelldatei automatisch und ermittelt, welche Einrückungsparameter mehr passen (z. B. minimale Änderungen, wenn gefiltert indent)?

0

1 Antwort auf die Frage

0
Jonathan Ben-Avraham

Es gibt kein allgemein verbreitetes Werkzeug, um dies zu tun, also müssen Sie Ihr eigenes schreiben. Ich würde ein Bash-Skript schreiben, das indentmit verschiedenen Parametern aufruft, um eine große Anzahl alternativer Versionen der ursprünglichen Quelldatei zu erstellen, und dann die "beste" diffAusgabe für jede alternative Version findet, wobei "best" einfach die geringste Anzahl geänderter Zeilen ist .

Nach meiner Erfahrung können Sie das Problem partitionieren, wenn Sie wissen, wer den Originalcode geschrieben hat. Programmierer neigen dazu, langfristige Formatierungsgewohnheiten anzunehmen, die sich von Programmierer zu Programmierer unterscheiden.

Sie sollten damit rechnen, dass selbst in den besten Fällen die eingeführten Differenzen indentsvn / git blame unbrauchbar machen. Dadurch werden Sie wahrscheinlich gezwungen, entweder eine bestimmte indentRichtlinie für den gesamten Code zu übernehmen und ein neues Repository mit automatisch formatiertem Code zu starten, oder die gesamte Idee einfach aufzugeben. Ein Repository mit mehreren unterschiedlichen indentRichtlinien wird wahrscheinlich mehr Verwirrung und Ärger verursachen als davon profitieren.

Wenn Sie an neuem Code arbeiten und nicht nur geringfügige Änderungen an vorhandenem Code vornehmen, empfiehlt es sich, alle Mitwirkenden vor der Übermittlung von Code zur Verwendung einer bestimmten Richtlinie indentoder einer astyleRichtlinie zu verpflichten. Sie können dies auch mithilfe von Hooks für svn / git commit tun. Dies kann jedoch in seltenen Fällen zu Kompilierungsfehlern oder sogar zu Fehlern führen. Wenn Sie in einer Organisation arbeiten und kein Online-Projekt ausführen, in dem Sie der Gatekeeper sind, benötigen Sie einen Manager mit ausreichender Berechtigung, um die Richtlinie durchzusetzen, da die meisten Programmierer bereits aus jahrelanger Erfahrung wissen, dass ihre eigene Formatierung die einzige ist korrekte Weise und alle anderen Formatierungen sind ungültig.

Die beabsichtigte Reihenfolge lautet: 1. Ermitteln Sie mit diesem Tool die Stilrichtlinie des aktuellen Codes. 2. Führen Sie mit dem beschissenen Texteditor ein wenig Änderung ein, der (zum Beispiel) Leerzeichen, Einrückungen, Zeilenenden und \ n aus den Dateien entfernt; 3. `indent` mit vorab entdeckten Parametern, die es wieder in den Quellcode bringen. Das bedeutet, dass Sie alle Sorgen über den Codestyle niedriger Ebene (Einzüge, Leerzeichen usw.) vom Gehirn zum Computer auslagern. Vi. vor 11 Jahren 0
"Man sollte davon ausgehen, dass selbst in den besten Fällen die Unterschiede, die mit dem Einzug eingeführt werden, die Schuld von svn / git unbrauchbar machen." -> Ich gehe davon aus, dass nach der Verwendung von "indent" mit den richtigen Parametern null bis wenige Änderungen vorgenommen werden sollten, wenn der Code bereits einen strengen Stil aufweist. Die Frage ist, wie man diesen Stil automatisch erkennt. Vi. vor 11 Jahren 0
@Vi .: Wenn der Code konsistent einen Stil verwendet, ist der beste Weg, ihn zu entdecken, die manuelle Prüfung. Versuchen Sie `` od -c some_file.c``, um festzustellen, ob Tabs und Leerzeichen konsistent verwendet werden, oder suchen Sie einfach nach Tabs oder Leerzeichen in vi, um festzustellen, ob etwas konsistent ist. Ich würde mir nicht die Mühe machen, dies zu automatisieren. Wenn der ursprüngliche Kodierer einem bekannten Stil folgte, wie in http://en.wikipedia.org/wiki/Indent_style beschrieben, sollte er leicht mit dem Augapfel zu entdecken und mit Astyle zu testen sein. Jonathan Ben-Avraham vor 11 Jahren 0