Я разрабатываю инструмент dev, который предоставил бы мне некоторые показатели кода.Babel plugin - получить структурированную информацию как результат после статического анализа кода
Я хотел бы инструмент, чтобы пройти через исходные файлы и сосчитать использований (#loc) на импортируемого значения и в библиотеке.
I.e. для lodash, я хотел бы знать об использовании isEqual
, cloneDeep
. Я хотел бы иметь выход:
+------------+------------+---------+
| Library | Imported | #LOC |
+------------+------------+---------+
| Lodash | isEqual | 20|
| Lodash | cloneDeep | 4|
+------------+------------+---------+
Пример файла, что должно быть найдено с помощью инструмента
1 // aFile.js
2 import {isEqual, cloneDeep} from 'lodash'
3 // some code ..
4 if (isEqual(variableA, variableB)) {
5 // ^^^^^^^
6 }
7 let myClonedObject = cloneDeep(myObject);
8 // ^^^^^^^^^
Я начал реализацию как Бабель плагин, как я знал, что это позволит мне легко
- разобрать код в читаемом формате (AST)
- Посетите не Л.Л. importDeclaration
- получить соответствующие ссылки
- вычислить использования
реализация тока
export default function({ types: t }) {
return {
visitor: {
ImportDeclaration(path, state) {
if(path.get('source').node.value === 'lodash') {
path.get('specifiers').forEach(function(specifier) {
if(specifier.node.imported) {
const importedIdentifierName = specifier.node.imported.name;
if(importedIdentifierName === 'isEqual') {
const isEqualLoc = new Set();
const {referencePaths} = path.scope.getBinding(importedIdentifierName);
referencePaths.forEach(function(referencePath) {
isEqualLOC.add(referencePath.node.loc.start.line);
});
console.log(isEqualLOC.size);
}
}
});
}
}
}
};
};
Для этого инструмента, я только не чтения операций по коде (без преобразования/generate).
Моего вопрос: Как я могу поделиться произведенной информацией в Вавилонском плагине (Библиотека/импорт/# LOC) в результате babel-cli
команды или любой другой API?
Я думал о регистрации результата (с определенным идентификатором) с помощью console.log
, но мне кажется, что это обходное решение. Мне было интересно, есть ли какой-то ясный API для раскрытия информации из плагина babel.
Это имеет смысл, спасибо! Вот что я получил от @thejameskyle. Я попробую это как можно скорее и соответствующим образом обновить этот ответ. –