2012-02-02 24 views
22

Niedawno znalazłem pracę z kodem R, który jest na całej mapie pod względem stylu kodowania - wielu autorów i indywidualnych autorów, którzy nie są rygorystyczni pod względem trzymania się jednej struktury. Są pewne zadania, które chciałbym zautomatyzować lepiej niż obecnie.Narzędzia do formatowania/refaktoryzacji kodu języka świadomy?

Szukam narzędzia (lub narzędzi), które zarządza następującymi zadaniami - wymieniane w rosnącej kolejności pożądania, ale także nieco w rosnącej kolejności sceptycyzmu istnienia.

  • Podstawowe formatowanie. Rzeczy takie jak konwertowanie "if (foo)" na "if (foo)" i osiąganie jednolitości pod względem położenia klamry i tego typu rzeczy.

  • Konwersja "foo $ blah" na "foo [[" blah "]]" w celu dostępu do listy. Najlepiej byłoby, gdyby przynajmniej zgadywał, czy obiekt rzeczywiście był listą, a nie danymi.rame i tylko konwertuje listy.

  • Konwersja '=' na '< -'. Tak, to proste wyszukiwanie i zamiana - ale nie tak naprawdę. Narzędzie (lub wyrażenie regularne) musi być językiem świadomym, aby wiedział, że konwertuje "x = 5", ale nie "foo (x = 5)". Byłoby również bardzo miło nie zastąpić symbolu, ale również zapewnić pojedynczy biały znak po obu stronach operatora przypisania.

  • Zmienna zmiana nazwy, szczególnie w przypadku plików funkcji &. Załóżmy na przykład, że lista ma element "foo", chciałbym móc go raz zmienić na "foobar" i nie musieć wyśledzić każdego użycia tej listy przez cały przepływ kodu. Wyobrażam sobie, że wymagałoby to od narzędzia pełnego przepływu kontroli, aby zidentyfikować takie rzeczy, jak ta lista istniejąca jako inna nazwa w innej funkcji.

  • Konwencje nazewnictwa. Chciałbym móc zdefiniować pewną standardową konwencję nazewnictwa (np. Google's lub cokolwiek innego) i zlecić jej identyfikację wszystkich funkcji, zmiennych itp. I przekonwertować je. Zauważ, że jest to związane z poprzednim wpisem dotyczącym elementów takich jak elementy listy.

Zapraszam do listy podstawowych komend przetwarzania Unix (np SED) tak długo, jak będzie to naprawdę wystarczająco inteligentny, aby nie zwykle przynajmniej śruba rzeczy (np konwersji „foo (x = 5)” na " foo (x < -5) ").

Zgaduję, że gdyby takie narzędzie istniało już w idealnym stanie, o którym już bym się dowiedział, i zdaję sobie sprawę, że w języku takim jak R trudno jest zrobić niektóre z tych rodzajów zmian automagicznie, ale można marzyć, prawda? Czy ktoś ma wskazówki na niektóre/wszystkie z nich?

+2

Ponowne była omawiana tutaj: http://stackoverflow.com/questions/5117359/any-r-style-guide-checker –

+4

IIRC 'formatR' jest jeden pakiet, który sprząta Kod R i obejmuje kilka punktów na twojej liście. – baptiste

+1

Drugi cel może być nieco brudny: a data.frame zwraca TRUE dla 'is.list()'. Możesz spróbować czegoś takiego jak 'is.list (myObject) i (! Is.data.frame (myObject))'. – Iterator

Odpowiedz

2

IMHO, napisz własne. Pisanie ładnej drukarki jest dość trudne. Wymaga to zrozumienia tokenizacji, analizowania, budowania AST lub innych IR, tablic symboli śledzenia i zakresów, szablonów itp.

Ale jeśli potrafisz to zrobić, naprawdę nauczysz się dużo o językach programowania w ogóle. Będziesz także wyglądał imponująco do swoich współpracowników i niesamowite jest włożyć CV. To także świetna zabawa.

polecam "Language Implementation Patterns: Create Your Own Domain-Specific and General Programming Languages" Terence Parr. Jest to trochę trudne do odczytania, ale treść jest całkiem dobra. Jest napisany na poziomie wprowadzającym dla analizatorów składni i jest dość krótki, ale zawiera wszystkie części potrzebne do samodzielnego napisania tego narzędzia.

Jeśli ją skompilujesz, otwórz ją, wróć tutaj i powiedz nam o tym, a następnie ustaw witrynę z kilkoma reklamami, aby zarobić kilka dolarów. W ten sposób każdy będzie mógł wykorzystać twoje niesamowite dzieło, a dostaniesz za to kilka dolarów.

Powodzenia ...

+0

Buduję precyzyjne, ładne czcionki dla dziesiątek języków robiąc dokładnie to, co mówisz (cóż, używam DMS zamiast ANTLR). Mogę powiedzieć ci z gorzkiego doświadczenia, że ​​dopóki twój formatator nie zawiera każdej możliwej opcji formatowania, jest darmowy i działa na Mac/Linux/Windows, to ludzie będą go trzaskać z tych wszystkich powodów. Szczęśliwie. –

+0

Przykro mi to słyszeć. Czasami ludzie mogą być chromi. Czy zgodziłbyś się jednak, że jest to przydatne ćwiczenie programistyczne do nauki? Nawiasem mówiąc, Ira jest jednym z ojców chrzestnych parserów i tłumaczeń językowych. Jego opinia ma większe znaczenie niż Gates lub Torvalds na ten temat. Szczerze. – Homer6

+0

Ira, czy masz jakieś inne rekomendacje książek? – Homer6