このブログは、旧・はてなダイアリー「檜山正幸のキマイラ飼育記 メモ編」(http://d.hatena.ne.jp/m-hiyama-memo/)のデータを移行・保存したものであり、今後(2019年1月以降)更新の予定はありません。

今後の更新は、新しいブログ http://m-hiyama-memo.hatenablog.com/ で行います。

メタオブジェクを勘定する


/* 一時的 */
module t;

command count-mos [string app] :: void -> object {
%1 > app;
sreif:list-modules %app | mpl:fullnames > mods | {"mods": list:length} > c1;
%mods |
each {
pass > mod;
do {
sreif:list-types %mod | list:length >: "types",
sreif:list-annotations %mod | list:length >: "annotations",
sreif:list-commands %mod | list:length >: "commands",
sreif:list-classes %mod | mpl:fullnames > clss | list:length >: "classes",
sreif:list-resources %mod | mpl:fullnames > ress | list:length >: "resources",
} > cc1;
%clss |
each {
pass > cls;
do {
sreif:list-commands %cls | list:length >: "methods"
}
} | {"classDetails": pass} > cc2;
%ress |
each {
pass > res;
do {
sreif:list-actions %res | list:length >: "actions"
}
} | {"resourceDetails":pass} > cc3;
[%cc1, %cc2, %cc3] | json:merge
} | {"modDetails": pass} > c2;

[%c1, %c2] | json:merge
};

command flatten-count :: (object | array) -> [number*] {
each {
when {
number => pass,
* => flatten-count,
}
} | xjson:flatten
};

t:count-mos caty の結果:


{
"mods": 30,
"modDetails": [
{
"commands": 100,
"resourceDetails": [],
"classes": 0,
"types": 141,
"classDetails": [],
"annotations": 18,
"resources": 0
},
{
"commands": 15,
"resourceDetails": [],
"classes": 0,
"types": 3,
"classDetails": [],
"annotations": 0,
"resources": 0
},
{
"commands": 9,
"resourceDetails": [],
"classes": 0,
"types": 1,
"classDetails": [],
"annotations": 0,
"resources": 0
},
{
"commands": 24,
"resourceDetails": [],
"classes": 0,
"types": 16,
"classDetails": [],
"annotations": 0,
"resources": 0
},
{
"commands": 12,
"resourceDetails": [],
"classes": 0,
"types": 2,
"classDetails": [],
"annotations": 0,
"resources": 0
},
{
"commands": 9,
"resourceDetails": [],
"classes": 0,
"types": 5,
"classDetails": [],
"annotations": 0,
"resources": 0
},
{
"commands": 9,
"resourceDetails": [],
"classes": 0,
"types": 1,
"classDetails": [],
"annotations": 0,
"resources": 0
},
{
"commands": 4,
"resourceDetails": [],
"classes": 0,
"types": 2,
"classDetails": [],
"annotations": 0,
"resources": 0
},
{
"commands": 0,
"resourceDetails": [],
"classes": 0,
"types": 0,
"classDetails": [],
"annotations": 11,
"resources": 0
},
{
"commands": 7,
"resourceDetails": [],
"classes": 0,
"types": 3,
"classDetails": [],
"annotations": 0,
"resources": 0
},
{
"commands": 2,
"resourceDetails": [],
"classes": 0,
"types": 3,
"classDetails": [],
"annotations": 0,
"resources": 0
},
{
"commands": 1,
"resourceDetails": [],
"classes": 0,
"types": 2,
"classDetails": [],
"annotations": 0,
"resources": 0
},
{
"commands": 14,
"resourceDetails": [],
"classes": 0,
"types": 2,
"classDetails": [],
"annotations": 0,
"resources": 0
},
{
"commands": 0,
"resourceDetails": [],
"classes": 0,
"types": 0,
"classDetails": [],
"annotations": 0,
"resources": 0
},
{
"commands": 0,
"resourceDetails": [
{
"actions": 1
},
{
"actions": 1
},
{
"actions": 1
},
{
"actions": 4
}
],
"classes": 4,
"types": 0,
"classDetails": [
{
"methods": 1
},
{
"methods": 1
},
{
"methods": 1
},
{
"methods": 4
}
],
"annotations": 0,
"resources": 4
},
{
"commands": 10,
"resourceDetails": [],
"classes": 0,
"types": 6,
"classDetails": [],
"annotations": 0,
"resources": 0
},
{
"commands": 3,
"resourceDetails": [],
"classes": 0,
"types": 6,
"classDetails": [],
"annotations": 0,
"resources": 0
},
{
"commands": 2,
"resourceDetails": [],
"classes": 0,
"types": 1,
"classDetails": [],
"annotations": 0,
"resources": 0
},
{
"commands": 7,
"resourceDetails": [],
"classes": 0,
"types": 79,
"classDetails": [],
"annotations": 0,
"resources": 0
},
{
"commands": 9,
"resourceDetails": [],
"classes": 0,
"types": 3,
"classDetails": [],
"annotations": 0,
"resources": 0
},
{
"commands": 8,
"resourceDetails": [],
"classes": 0,
"types": 2,
"classDetails": [],
"annotations": 0,
"resources": 0
},
{
"commands": 2,
"resourceDetails": [],
"classes": 0,
"types": 1,
"classDetails": [],
"annotations": 0,
"resources": 0
},
{
"commands": 3,
"resourceDetails": [],
"classes": 0,
"types": 1,
"classDetails": [],
"annotations": 0,
"resources": 0
},
{
"commands": 4,
"resourceDetails": [],
"classes": 0,
"types": 0,
"classDetails": [],
"annotations": 0,
"resources": 0
},
{
"commands": 3,
"resourceDetails": [],
"classes": 0,
"types": 0,
"classDetails": [],
"annotations": 0,
"resources": 0
},
{
"commands": 14,
"resourceDetails": [],
"classes": 0,
"types": 0,
"classDetails": [],
"annotations": 0,
"resources": 0
},
{
"commands": 13,
"resourceDetails": [],
"classes": 0,
"types": 0,
"classDetails": [],
"annotations": 0,
"resources": 0
},
{
"commands": 0,
"resourceDetails": [],
"classes": 0,
"types": 8,
"classDetails": [],
"annotations": 0,
"resources": 0
},
{
"commands": 10,
"resourceDetails": [],
"classes": 0,
"types": 1,
"classDetails": [],
"annotations": 0,
"resources": 0
},
{
"commands": 10,
"resourceDetails": [],
"classes": 0,
"types": 2,
"classDetails": [],
"annotations": 0,
"resources": 0
}
]
}