💡 Идея: Лингвистический анализ кода

 Публичный пост

На одном из прошлых проектов я писал многие вещи в одиночку. Без код-ревью и с типичным чайка-менеджментом. В какой-то момент начал проигрывать борьбу со сложностью. В попытке отсрочить неизбежное (увольнение) - стал упрощать. Написал парсер исходников, который строит статистику слов. Это задание, кстати, встречается на собесах и в лабах в универе. Парсер проходился по содержимому папки /src, бил строки на токены, выкидывал конструкции языка, простые переменные и значения типа "index", "enabled", "result" и т.п., в сухом остатке - названия переменных и функций, на придумывание которых (не) тратится куча времени.

Названия переменных и функций отсортировывались по алфавиту и выводились в html. После чего я смотрел на эту портянку глазами заказчика, сопоставлял с зачатками нашего ТЗ и дизайна и пытался понять: где и почему мы перемудрили. Чуть позже добавил дерево чекбоксов с папками исходников, чтобы смотреть смысловое наполнение конкретно выбранных папок.

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

Возникли вопросы:

  • кому-то кроме меня это может быть полезно?
  • не изобретаю ли я велосипед? есть плагины к IDE или самостоятельные утилиты, которые делают то же самое?
  • каким новым трюкам можно обучить парсер, если ставить целью упростить анализ кода глазами программиста?
Связанные посты
8 комментариев 👇

Пили лендос, как будто продукт уже готов. Поставь цену в условные 10$, наливай трафика и смотри сколько народу захотели купить. Если из 1000 зашедших 10 заплатит деньги - срочно пили продукт. После оплаты давай форму, куда вставлять ссылку на гитхаб, который надо оценить. После отправки формы напиши "код обрабатывается, ждите результатов на почту" и то же самое шли на мыло, указанное в форме. Тем, кто будет писать ответы "ну что, где анализ моего кода, когда уже" пиши что пока в процессе, если что готов вернуть деньги и возвращай, если попросят.

  Развернуть 1 комментарий
  Развернуть 1 комментарий

@anatolt, этот коммент надо показывать во всех школах для стартаперов на нулевом уроке

  Развернуть 1 комментарий

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

  Развернуть 1 комментарий

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

Проект: Навигация по изменениям и визуализация кода

  Развернуть 1 комментарий

Есть метрики оценки кода по типу цикломатической сложности. Даже подделие своё пилил для оценки кода на питоне https://github.com/Split174/cyclopy, но пока забросил проект.

Потом уже после нашёл проект https://github.com/rubik/radon можете посмотреть какие метрики используют они.

  Развернуть 1 комментарий
Павел Михаловский, Инженер-программист 18 ноября в 07:45

Пока я не очень понял смысл лингвистического анализа. Что он может мне дать кроме вывода имеющихся переменных и функций куда-нибудь в HTML?
Это просто вывод отсортированной информации о том, какие переменные и функции где используются или что там быть должно?

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

  Развернуть 1 комментарий
Кирилл, Программист руками по клавиатуре 18 ноября в 13:54

Отличная идея, но этого мало :( Я уже джва года жду (тм) такой проект, в котором можно было бы графы по коду строить и крутить по-всякому. К сожалению даже не смог выдумать, как это могло бы в теории выглядеть, слишком много разных концепций. Есть kumu, там восхитительные вьюшки ("а вот сейчас хочу посмотреть все ноды такого-то типа, связанные стрелочками такого-то типа"), но, например, не хватает концепции группировки нод в одну (при этом чтобы стрелочки продолжали смотреть в какие-то конкретные точки, например, uml-like стрелочка "состоит из" вполне могла бы указывать на конкретную пропертю какого-то класса). Мне кажется, на какие-то идеи могут натолкнуть инструменты реверс-инжиниринга типа Ida, но, к сожалению, я с ними не знаком достаточно.

  Развернуть 1 комментарий

😎

Автор поста открыл его для большого интернета, но комментирование и движухи доступны только участникам Клуба

Что вообще здесь происходит?


Войти  или  Вступить в Клуб