Инструменты реформатирования / рефакторинга кода на языке R? - PullRequest
26 голосов
/ 02 февраля 2012

Недавно я обнаружил, что работаю с кодом R, который находится по всей карте с точки зрения стиля кодирования - множество авторов и отдельных авторов, которые не строго придерживаются одной структуры. Есть определенные задачи, которые я хотел бы автоматизировать лучше, чем сейчас.

Я ищу инструмент (или инструменты), который управляет следующими задачами - перечислены в порядке возрастания желания, а также в порядке возрастания скептицизма существования.

  • Базовое форматирование. Такие вещи, как преобразование «if (foo)» в «if (foo)» и достижение единообразия в отношении местоположения фигурной скобки и тому подобное.

  • Преобразование "foo $ blah" в "foo [[" blah "]]" для доступа к списку. В идеале было бы возможно, по крайней мере, сделать предположение, если бы объект был действительно списком, а не data.frame, а преобразовывал бы только списки.

  • Преобразование '=' в '<-'. Да, это простой поиск и замена - но не совсем. Инструмент (или regexp) должен знать язык так, чтобы он мог преобразовать «x = 5», но не «foo (x = 5)». Также было бы неплохо не просто заменить символ, но и обеспечить один пробел с обеих сторон оператора присваивания. </p>

  • Переименование переменной, особенно для разных функций и файлов. Например, предположим, что в списке есть элемент «foo», я хотел бы иметь возможность изменить его на «foobar» один раз и не отслеживать каждый случай использования этого списка во всем потоке кода. Я предполагаю, что для этого потребуется инструмент, чтобы иметь возможность управлять всем потоком управления, чтобы идентифицировать такие вещи, как этот список, существующий как другое имя в другой функции.

  • Соглашения об именах. Мне бы хотелось иметь возможность определить какое-то стандартное соглашение об именах (например, от Google или что-то еще), чтобы оно идентифицировало все функции, переменные и т. Д. И преобразовало их. Обратите внимание, что это связано с предыдущей записью для таких вещей, как элементы списка.

Не стесняйтесь перечислять основные команды обработки Unix (например, Sed), если он действительно будет достаточно умен, чтобы, по крайней мере, обычно не облажаться (например, преобразование "foo (x = 5)" в "foo (x <) -5) "). </p>

Я полагаю, что если бы такой инструмент уже существовал в идеальном состоянии, я бы уже слышал о нем, и я также понимаю, что с таким языком, как R, трудно выполнить некоторые из этих видов меняется автоматически, но можно мечтать, верно? У кого-нибудь есть указатели на некоторые / все из них?

Ответы [ 2 ]

3 голосов
/ 15 апреля 2018

Так как это все еще актуально, я подумал упомянуть Styler , который переформатирует r код в соответствии с tidyverse style .

Он помечает некоторые из ваших полей, например, базовое форматирование, но не переименовывает переменные (хотя линтер lintr , по крайней мере, может показать их).пакет R с функциями принимающего кода (например, style_text(), но его также можно использовать в командной строке:

, например, этот код в tmp.r

a <-c(1,2,3) 
if(foo) {
  b=2 }
myVar=2

иВыполнение:

Rscript -e 'styler::style_file("tmp.r")'

перезапишет tmp.r в это:

a <- c(1, 2, 3)
if (foo) {
  b <- 2
}
myVar <- 2
2 голосов
/ 28 марта 2012

ИМХО, пиши свое. Написание красивого принтера на самом деле довольно сложно. Это требует понимания токенизации, анализа, построения AST или других IR, отслеживания таблиц и областей символов, шаблонов и т. Д.

Но если вы сможете это сделать, вы действительно много узнаете о языках программирования в целом. Вы также будете выглядеть довольно внушительно для своих коллег, и это удивительно, чтобы добавить резюме. Это также очень весело.

Я бы порекомендовал « Шаблоны реализации языка: создайте свой собственный предметно-ориентированный и общий языки программирования » от Terence Parr. Это немного грубо читать, но содержание довольно хорошее. Он написан на вводном уровне для анализаторов и довольно короток, но содержит все части, которые вам понадобятся для написания этого инструмента самостоятельно.

Если вы создадите его, откройте исходный код, вернитесь сюда и расскажите нам об этом, и создайте сайт с несколькими объявлениями, чтобы заработать несколько долларов. Таким образом, каждый сможет использовать ваше удивительное творение, и вы получите несколько долларов в процессе.

Удачи ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...