Подтвердить что ты не робот

R языковые инструменты для форматирования/рефакторинга кода?

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

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

  • Основное форматирование. Такие вещи, как преобразование "if (foo)" в "if (foo)" и достижение единообразия в терминах расположения скобок и тому подобное.

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

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

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

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

Не забудьте перечислить основные команды обработки unix (например, sed), если они действительно будут достаточно умными, чтобы, по крайней мере, обычно не винить вещи (например, преобразование "foo (x = 5)" в "foo (x < -5)" ).

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

4b9b3361

Ответ 1

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

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

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

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

Удачи...