Skip to content

Commit 02cc67b

Browse files
authored
Merge pull request #10 from codefuse-ai/add-java-tutorial
add java analysis tutorial
2 parents c9d9a63 + fbbf192 commit 02cc67b

File tree

1 file changed

+98
-0
lines changed

1 file changed

+98
-0
lines changed

tutorial/notebook/java_analysis.ipynb

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
{
2+
"cells": [
3+
{
4+
"cell_type": "markdown",
5+
"metadata": {},
6+
"source": [
7+
"# Java 分析示例\n",
8+
"这是一个使用CodeFuse-Query分析java项目的教程。在教程中,你将体验到使用命令行工具对代码仓库进行数据化,然后使用Godel语言来分析这个仓库。"
9+
]
10+
},
11+
{
12+
"cell_type": "markdown",
13+
"metadata": {},
14+
"source": [
15+
"STEP 0: 克隆要分析的仓库。我们以蚂蚁集团的 SOFABolt 项目为例。"
16+
]
17+
},
18+
{
19+
"cell_type": "code",
20+
"execution_count": null,
21+
"metadata": {},
22+
"outputs": [],
23+
"source": [
24+
"!git clone https://github.com/sofastack/sofa-bolt.git"
25+
]
26+
},
27+
{
28+
"cell_type": "markdown",
29+
"metadata": {},
30+
"source": [
31+
"STEP 1: 代码数据化。使用 `sparrow database create` 命令创建一个db文件,需要指定待分析的仓库地址,分析的语言,以及db文件的存储路径。该文件存储着代码仓库的结构化数据,之后的分析就是针对这份数据进行。"
32+
]
33+
},
34+
{
35+
"cell_type": "code",
36+
"execution_count": null,
37+
"metadata": {},
38+
"outputs": [],
39+
"source": [
40+
"!sparrow database create --source-root sofa-bolt --data-language-type java --output ./db/sofa-bolt"
41+
]
42+
},
43+
{
44+
"cell_type": "markdown",
45+
"metadata": {},
46+
"source": [
47+
"STEP 2: 使用Godel分析语言分析db文件。在本教程中,可以点击代码左侧的执行按钮,直接运行分析脚本。在命令行中,你可以使用 `sparrow query run` 命令来执行查询脚本,具体可以使用`sparrow query run -h` 来获取详细参数信息。\n",
48+
"在这个例子中,我们使用Godel语言查询了全仓库的类方法。你也可以在where子句中加入过滤条件,获取你想要的结果。"
49+
]
50+
},
51+
{
52+
"cell_type": "code",
53+
"execution_count": null,
54+
"metadata": {},
55+
"outputs": [],
56+
"source": [
57+
"%db db/sofa-bolt\n",
58+
"// script\n",
59+
"use coref::java::{Callable, Class, Interface, JavaDB}\n",
60+
"\n",
61+
"fn db() -> JavaDB {\n",
62+
" return JavaDB::load(\"coref_java_src.db\")\n",
63+
"}\n",
64+
"\n",
65+
"query class_method from\n",
66+
" m in Callable(db()),\n",
67+
" c in Class(db())\n",
68+
"where\n",
69+
" c.id = m.getBelongedClass().id\n",
70+
"select\n",
71+
" c.getQualifiedName() as className,\n",
72+
" m.getName() as methodName,\n",
73+
" m.getSignature() as methodSignature"
74+
]
75+
}
76+
],
77+
"metadata": {
78+
"kernelspec": {
79+
"display_name": "Godel kernel",
80+
"language": "rust",
81+
"name": "godel-jupyter"
82+
},
83+
"language_info": {
84+
"file_extension": ".gdl",
85+
"help_links": [
86+
{
87+
"text": "Godel kernel Magics",
88+
"url": "https://sparrow.alipay.com"
89+
}
90+
],
91+
"mimetype": "text/rust",
92+
"name": "rust",
93+
"version": "0.0.3"
94+
}
95+
},
96+
"nbformat": 4,
97+
"nbformat_minor": 2
98+
}

0 commit comments

Comments
 (0)