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?
Ponowne była omawiana tutaj: http://stackoverflow.com/questions/5117359/any-r-style-guide-checker –
IIRC 'formatR' jest jeden pakiet, który sprząta Kod R i obejmuje kilka punktów na twojej liście. – baptiste
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