Создание словаря имен переменных путем анализа React, Angular, Express и других библиотек JS.

Проблема

Когда в журнале ошибок выдается сообщение об ошибке или при поиске решения «сортировать json-массив по ключу python», вполне вероятно, что я смогу найти ответ или хотя бы какие-то подсказки в Интернете. Но когда дело доходит до именования переменной, мне предлагается назвать осмысленную, выразительную, самоописательную переменную. Имена переменных должны соответствовать соглашению. В Javascript имена переменных и функций должны быть написаны в camelCase. Я должен использовать существительные для имен переменных и глаголы для имен функций. И никогда не используйте бессмысленные имена, такие как foo и bar (оказывается, многие JS-библиотеки используют их, но только для модульного тестирования или эталонного теста)

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

Если я и видел дальше, так это стоя на плечах гигантов — Исаак Ньютон

В мире Javascript гигантами являются React, Angular, Express и многие другие лучшие библиотеки, опубликованные в NPM.

Метод

Шаг 1. Клонируйте популярные библиотеки NPM

На основе этого списка, в котором перечислены лучшие библиотеки Javascript, 390 репозиториев библиотек были клонированы на локальную машину.

Шаг 2. Разберите исходный код и преобразуйте его в абстрактное синтаксическое дерево (AST)

С помощью Acorn (крошечный, быстрый анализатор JavaScript, написанный на JavaScript) я проанализировал файлы .js и .ts и получил объект абстрактного синтаксического дерева. Абстрактное синтаксическое дерево из Wiki — это древовидное представление абстрактной синтаксической структуры исходного кода. Для этой задачи самым важным было получить имена переменных и имена функций из дерева. Было добавлено правило для исключения файлов в каталогах /build, /node_modules, /dist, чтобы избежать синтаксического анализа минимизированного кода.

Шаг 3. Найдите имя функции и имя переменной

В абстрактном синтаксическом дереве было много типов узлов. Были извлечены два типа узлов, а именно VariableDeclaration и FunctionDeclaration. В VariableDeclaration два специальных типа инициализации FunctionExpression и ArrowFunctionExpression были идентифицированы и обработаны как имена функций, а не имена переменных. На приведенном ниже графике показано, как я классифицировал «Имя функции» и «Имя переменной».

Шаг 4. Извлеките глаголы/существительные/прилагательные (с предположением)

Получив имя переменной и имя функции, я разделил имя на слова и определил глагол, существительное и прилагательное со следующими предположениями.

  1. глагол — первое слово в названии функции, например. получитьвозраст, проверитьIsAdult, восстановить
  2. существительное — последнее слово в имени переменной. например разрешитьзначение, данные
  3. прилагательное — первое слово в имени переменной, которое может быть разбито на несколько слов, например. являетсявзрослым, ожидаетсяJson

Имея дело с существительными, я придавал словам единственное число и переводил все символы в нижний регистр, чтобы «Имя», «Имена», «имя» и «имена» рассматривались как одно и то же слово.

Результат

Неудивительно, что наиболее часто употребляемым глаголом является «получить». Я также получил некоторые другие знакомые глаголы, такие как создание, чтение, обновление, удаление и извлечение, преобразование, загрузка.

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

Что дальше

Наличие списка слов может расширить мой «словарь кодирования», что полезно, когда я не знаю, как назвать переменную. Но чаще я уже имею смутное представление о том, каким должно быть имя переменной. Например, я могу уже думать об имени функции «getTotalPrice», но позже узнаю, что, возможно, calculateTotalPrice может точнее описать функцию.

Если я могу рассчитать сходство разных глаголов и прилагательных, это поможет уточнить имя функции. Я проверяю некоторые библиотеки Python, такие как Gensim и NLTK, чтобы увидеть, могу ли я получить семантическое сходство (в контексте кодирования) между двумя глаголами. Пожалуйста, оставьте комментарий, если у вас есть какие-либо предложения или идеи по получению семантического сходства.