0
我正在開發一個開發工具,它可以爲我提供一些代碼指標。Babel插件 - 在靜態代碼分析後得到結構化信息作爲輸出
我想每進口值每庫經過源文件和計數用法(#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)
- 訪問一個LL的導入聲明
- 得到相關文獻
- 計算用途
當前實現
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);
}
}
});
}
}
}
};
};
對於這個工具,我只能做讀碼操作(沒有變換/生成)。
我的問題:我怎樣才能分享巴貝爾插件(LIB /進口/#LOC)到babel-cli
命令或任何其他API的結果所產生的信息?
我想和console.log
記錄的結果(與特定的ID),但在我看來,像一個解決方法。 我想知道是否有一些明確的API公開信息從巴貝爾插件。
它是有道理的,謝謝! 這是我從@thejameskyle也得到了反饋。 我會盡快嘗試,並相應地更新此答案。 –