Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor for efficiency #12

Merged
merged 3 commits into from
Dec 19, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -163,4 +163,4 @@ cython_debug/
#.idea/

# AI doc
.project_hierachy.json
.project_hierarchy.json
533 changes: 0 additions & 533 deletions .project_hierachy.json

This file was deleted.

12 changes: 6 additions & 6 deletions Markdown_Docs/ai_doc/file_handler.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,9 @@

11. `convert_structure_to_json`: 这个函数用于将文件结构的列表转换为JSON数据。它遍历文件结构列表,并添加到JSON数据中的files字段中,最后返回JSON数据。

12. `convert_to_markdown_file`: 这个函数用于将给定文件的AST结构转换为Markdown文本。它首先从工程层次文件(project_hierachy.json)中读取工程结构数据,然后找到对应文件的结构,最后根据这个结构生成Markdown文本。
12. `convert_to_markdown_file`: 这个函数用于将给定文件的AST结构转换为Markdown文本。它首先从工程层次文件(project_hierarchy.json)中读取工程结构数据,然后找到对应文件的结构,最后根据这个结构生成Markdown文本。

13. `convert_all_to_markdown_files_from_json`: 这个函数是把所有的.py文件的AST结构转换成Markdown文件。它先从project_hierachy.json读取到AST结构,然后调用convert_to_markdown_files_from_structure生成Markdown文件并保存。
13. `convert_all_to_markdown_files_from_json`: 这个函数是把所有的.py文件的AST结构转换成Markdown文件。它先从project_hierarchy.json读取到AST结构,然后调用convert_to_markdown_files_from_structure生成Markdown文件并保存。

**注意**: 代码运行的过程中需要确保输入的路径、文件等都是存在的,避免目录错误或文件缺失的问题。

Expand All @@ -39,12 +39,12 @@

这个__init__函数接受两个参数:'repo_path'(仓库路径)和'file_path'(文件路径)。

'repo_path'参数代表了仓库的根目录,而'file_path'参数则表示相对于仓库根目录的路径。函数内部首先将这两个参数值赋给相应的实例变量,然后使用'os.path.join'方法将'repo_path'和配置文件中的'project_hierachy'值连接在一起,形成项目的完整路径,并将其赋值给实例变量'project_hierachy'。
'repo_path'参数代表了仓库的根目录,而'file_path'参数则表示相对于仓库根目录的路径。函数内部首先将这两个参数值赋给相应的实例变量,然后使用'os.path.join'方法将'repo_path'和配置文件中的'project_hierarchy'值连接在一起,形成项目的完整路径,并将其赋值给实例变量'project_hierarchy'。

**详细的代码分析和描述**:
'__init__'方法首先接收两个参数'repo_path'和'file_path'。这两个参数分别代表仓库路径和文件路径。
在函数内部,这两个参数被分别赋值给相关的实例变量:'self.file_path' 和 'self.repo_path'。
然后它调用'os.path.join'方法,将'repo_path'(仓库路径)和'my_project_hierachy'(为项目配置的层级结构)的值连接起来,得到整个项目的路径。然后此路径被赋值给实例变量'self.project_hierachy'。
然后它调用'os.path.join'方法,将'repo_path'(仓库路径)和'my_project_hierarchy'(为项目配置的层级结构)的值连接起来,得到整个项目的路径。然后此路径被赋值给实例变量'self.project_hierarchy'。

**注意**:关于这段代码使用的要点
- 'repo_path'和'file_path'参数需要用符合系统路径格式的字符串来表示,尤其需要注意的是,如果在Windows系统环境下,路径的斜杆方向是'\',在Linux或者Mac系统环境下,路径的斜杆方向应该是'/'。
Expand Down Expand Up @@ -301,7 +301,7 @@ print(previous_version) # 输出: None
## FunctionDef convert_all_to_markdown_files_from_json
**convert_all_to_markdown_files_from_json函数**:此函数的功能是从JSON文件读取数据,并将这些数据转换为Markdown文件,然后存储在Markdown_docs文件夹中。

首先,函数使用'utf-8'编码打开名为self.project_hierachy的文件进行读取,使用json.load()方法将数据加载到json_data变量中。
首先,函数使用'utf-8'编码打开名为self.project_hierarchy的文件进行读取,使用json.load()方法将数据加载到json_data变量中。

然后,函数检查根目录下是否存在名为Markdown_docs的文件夹。为此,它构建Markdown_docs的完整路径,通过os.path.join方法合并self.repo_path(应该是该项目的根目录)与配置文件中的'Markdown_Docs_folder'字段。然后,它使用os.path.exists方法来检查这个路径是否存在。如果这个路径不存在,那么会用os.mkdir方法创建一个名为Markdown_docs的新的文件夹。

Expand All @@ -313,5 +313,5 @@ print(previous_version) # 输出: None

最后,函数打开md_path表示的文件(如果文件不存在,将会创建一个新的文件)并将markdown写入其中。

**注意**:在使用这段代码时,要确保self.project_hierachy文件和self.repo_path目录是存在的,以便读取数据和创建Markdown_docs目录。除此之外,也需要保证CONFIG中存在'Markdown_Docs_folder'字段,并且其值为一个有效的文件夹名称,以便在self.repo_path下创建对应的目录。
**注意**:在使用这段代码时,要确保self.project_hierarchy文件和self.repo_path目录是存在的,以便读取数据和创建Markdown_docs目录。除此之外,也需要保证CONFIG中存在'Markdown_Docs_folder'字段,并且其值为一个有效的文件夹名称,以便在self.repo_path下创建对应的目录。
***
6 changes: 3 additions & 3 deletions Markdown_Docs/ai_doc/project_manager.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

在详细分析代码之前,我们首先需要理解一些重要函数:

- `__init__`: 这是初始化函数,调用时会传入`repo_path`和`project_hierachy`两个参数。`repo_path`代表项目的路径,`project_hierachy`表示项目的层次结构。函数中会创建一个jedi项目并将其储存在类的变量`self.project`中,同时还会将项目的层次结构存储在`self.project_hierachy`中。
- `__init__`: 这是初始化函数,调用时会传入`repo_path`和`project_hierarchy`两个参数。`repo_path`代表项目的路径,`project_hierarchy`表示项目的层次结构。函数中会创建一个jedi项目并将其储存在类的变量`self.project`中,同时还会将项目的层次结构存储在`self.project_hierarchy`中。

- `get_project_structure`: 返回项目的结构。首先定义一个空列表`structure`用来保存项目的结构,然后对项目的路径调用`walk_dir`函数。この関数は、与えられた两个参数和储存在生成的项目对象中的`structure`列表来保存项目的树形结构。

Expand All @@ -27,12 +27,12 @@ print(pm.Find_All_References("variable", "file/path", 1, 1)) # 输出:[(relpat

- `self.repo_path`属性用于存储传递给`__init__`函数的`repo_path`参数的值,这个值代表了代码仓库的路径。
- `self.project`属性利用`jedi.Project`初始化,并传递了`self.repo_path`作为参数。`jedi`是一个Python库,常用于代码的自动补全和静态分析。`self.project`会存储一个`jedi.Project`实例,该实例代表了给定路径上的项目,并可用于此后的代码分析和操作。
- `self.project_hierachy`属性是通过`os.path.join`的方法来构建的,它将`repo_path`和`project_hierachy`这两个参数合并,形成一个系统路径。这个属性用于表示项目的层次结构,通常可能包括源代码文件、资产、测试和其他项目目录。
- `self.project_hierarchy`属性是通过`os.path.join`的方法来构建的,它将`repo_path`和`project_hierarchy`这两个参数合并,形成一个系统路径。这个属性用于表示项目的层次结构,通常可能包括源代码文件、资产、测试和其他项目目录。

**注意**:
- 使用这段代码时,需要保证`jedi`库已经被安装在当前环境中,否则将无法创建`jedi.Project`实例。
- `repo_path`参数应该是一个有效的文件路径字符串,指向了希望进行管理的项目的根目录。
- `project_hierachy`参数也应该是一个文件路径字符串,它会指定项目的一个特定子目录或文件组织结构。这个参数与`repo_path`一起使用,以确定项目的完整层级结构。
- `project_hierarchy`参数也应该是一个文件路径字符串,它会指定项目的一个特定子目录或文件组织结构。这个参数与`repo_path`一起使用,以确定项目的完整层级结构。
- 这段代码的执行依赖于Python的标准库`os`模块,因此在使用前无需安装额外的依赖项,但需要确保正确地导入了`os`模块。
- 由于这是一个初始化方法,它将在创建类的新实例时自动调用,通常不需要手动调用此函数。

Expand Down
20 changes: 10 additions & 10 deletions Markdown_Docs/ai_doc/runner.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,13 +46,13 @@ Runner 类定义了多个方法,以支持文档生成和维护的整个流程
首先,此函数是一个初始化函数,用于创建和初始化类的新实例。它在对象实例化时立即被调用,当实例创建后,我们可以在创建时自动为其赋予特定的属性。

在这段代码中,__init__函数初始化了三个对象:
1. project_manager:项目管理器,负责管理项目源协议和项目层次结构。它根据“CONFIG['repo_path']”和“CONFIG['project_hierachy']”来设置存储库路径和项目层次结构。
1. project_manager:项目管理器,负责管理项目源协议和项目层次结构。它根据“CONFIG['repo_path']”和“CONFIG['project_hierarchy']”来设置存储库路径和项目层次结构。
2. change_detector:更改检测器,负责检测源代码的更改。它使用“CONFIG['repo_path']”来设置存储库的路径。
3. chat_engine:聊天引擎,负责处理和管理与AI的对话。它使用全局的“CONFIG”变量来初始化。

这些对象都在创建时就被初始化,并可以在后续的类方法中使用。

**注意**:使用这段代码时,确认已在全局配置(CONFIG)中正确设置了'repo_path','project_hierachy'以及其他聊天引擎所需要的配置。因此,在使用这个类创建对象之前,确保全局配置已正确设置。
**注意**:使用这段代码时,确认已在全局配置(CONFIG)中正确设置了'repo_path','project_hierarchy'以及其他聊天引擎所需要的配置。因此,在使用这个类创建对象之前,确保全局配置已正确设置。

## FunctionDef generate_hierachy
**generate_hierachy 函数**: 该函数的作用是为整个项目生成一个最初的全局结构信息。
Expand All @@ -63,11 +63,11 @@ Runner 类定义了多个方法,以支持文档生成和维护的整个流程

生成的文件结构数据随后被转换为 JSON 格式,这通过调用 `FileHandler` 对象的 `convert_structure_to_json` 方法实现。把内部的数据结构转换为 JSON 格式可以便于以后的读写和交互,也方便了结构的可视化。

函数继而定义了一个 JSON 文件的保存路径,这是结合项目配置 `CONFIG['repo_path']` 和 `CONFIG['project_hierachy']` 来完成的。这两个配置项分别指定了仓库的路径和项目结构的 JSON 文件名,相结合即形成了完整的 JSON 文件存储路径。
函数继而定义了一个 JSON 文件的保存路径,这是结合项目配置 `CONFIG['repo_path']` 和 `CONFIG['project_hierarchy']` 来完成的。这两个配置项分别指定了仓库的路径和项目结构的 JSON 文件名,相结合即形成了完整的 JSON 文件存储路径。

最后,函数使用 `open` 函数和 `json.dump` 方法,将之前生成的 JSON 格构信息写入到文件中。这里使用了 `with` 语句,确保文件在操作完成后能够正确关闭。`json.dump` 方法还带有两个参数,`indent=4` 表示生成的 JSON 数据具备4个空格的缩进,以提高可读性;`ensure_ascii=False` 则声明 JSON 数据编码时将包含非ASCII字符,这对于支持中文等非英语字符十分重要。

**注意**:使用该函数时需要保证 `CONFIG` 对象已被正确初始化,并且其中 `repo_path` 和 `project_hierachy` 这两个键所对应的值是准确的,以确保 JSON 文件可以被保存到正确的位置。此外,要注意 `FileHandler` 类和它的方法 `generate_overall_structure` 以及 `convert_structure_to_json` 需要被正确实现,以支持 `generate_hierachy` 函数的正常运作。
**注意**:使用该函数时需要保证 `CONFIG` 对象已被正确初始化,并且其中 `repo_path` 和 `project_hierarchy` 这两个键所对应的值是准确的,以确保 JSON 文件可以被保存到正确的位置。此外,要注意 `FileHandler` 类和它的方法 `generate_overall_structure` 以及 `convert_structure_to_json` 需要被正确实现,以支持 `generate_hierachy` 函数的正常运作。
## FunctionDef get_all_pys
**get_all_pys 函数**:该函数的目的是获取指定目录下的所有 Python 文件。

Expand All @@ -94,9 +94,9 @@ Runner 类定义了多个方法,以支持文档生成和维护的整个流程

详细的代码分析和描述如下:

这个函数首先检测全局的project_hierachy.json结构信息是否存在。如果不存在,此函数会调用方法generate_hierachy()来生成新的项目层次结构信息,并在日志中记录信息,包括项目全局结构信息的存储路径。
这个函数首先检测全局的project_hierarchy.json结构信息是否存在。如果不存在,此函数会调用方法generate_hierachy()来生成新的项目层次结构信息,并在日志中记录信息,包括项目全局结构信息的存储路径。

然后函数打开project_hierachy.json文件,且将文件内容载入json_data中。接下来,创建线程池。值得注意的是,当前这行代码上有个待完成的事项,也就是关于使用Jedi库进行多线程调用的问题。
然后函数打开project_hierarchy.json文件,且将文件内容载入json_data中。接下来,创建线程池。值得注意的是,当前这行代码上有个待完成的事项,也就是关于使用Jedi库进行多线程调用的问题。

在线程池创建成功后,函数开始生成项目中所有Python文件的文档,相关进度信息被记录在日志中。

Expand Down Expand Up @@ -143,9 +143,9 @@ Runner 类定义了多个方法,以支持文档生成和维护的整个流程
详细的代码分析及描述:
run 函数是一个对象方法,其主要执行以下操作:

1. 检测全局的 "project_hierachy.json" 结构信息是否存在。它通过 os.path.join() 来生成绝对路径并且通过 os.path.exists() 来判断这个路径的文件是否存在(这两种方法都是 Python 的标准库 os 中的方法)。
1. 检测全局的 "project_hierarchy.json" 结构信息是否存在。它通过 os.path.join() 来生成绝对路径并且通过 os.path.exists() 来判断这个路径的文件是否存在(这两种方法都是 Python 的标准库 os 中的方法)。

2. 如果 "project_hierachy.json" 文件不存在,它会调用 generate_hierachy() 方法生成并通知用户。
2. 如果 "project_hierarchy.json" 文件不存在,它会调用 generate_hierachy() 方法生成并通知用户。

3. 使用 change_detector 对象的 get_staged_pys() 方法检测哪些 Python 文件发生了更改。

Expand All @@ -163,7 +163,7 @@ run 函数是一个对象方法,其主要执行以下操作:
- 这个函数没有返回值,它主要用于执行特定的操作,主要是检测变动和根据变动来更新文档。

**输出示例**: 由于该函数没有返回任何值,因此,不会有任何函数返回值的输出示例。但在函数的运行过程中,可能会在日志中输出如下信息:
- "已生成项目全局结构信息,存储路径为: {abs_project_hierachy_path}"
- "已生成项目全局结构信息,存储路径为: {abs_project_hierarchy_path}"
- "没有检测到任何变更,不需要更新文档。"
- "检测到暂存区中变更的文件:{changed_files}"
## FunctionDef add_new_item
Expand Down Expand Up @@ -199,7 +199,7 @@ run 函数是一个对象方法,其主要执行以下操作:

接着,读取整个Python文件的源代码,并通过ChangeDetector获取文件的diff,并解析出改变的行。再利用ChangeDetector在这些改变的行中识别出存在结构变化的内容。这个函数主要是获取Python文件的源代码,并在其中确定该文件的一组已经变化的内容的集。

然后,打开project_hierachy.json文件并尝试从中找到对应的Python文件。如果找到了文件,它将更新json文件并把内容写回到json文件中,并把相关变更部分的json文件内容转换成markdown内容,再将markdown内容写入到.md文件。
然后,打开project_hierarchy.json文件并尝试从中找到对应的Python文件。如果找到了文件,它将更新json文件并把内容写回到json文件中,并把相关变更部分的json文件内容转换成markdown内容,再将markdown内容写入到.md文件。

如果没有找到对应的文件,就调用add_new_item方法增加一项。

Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ api_keys:
request_timeout: 90

repo_path: /path/to/your/repo
project_hierachy: .project_hierachy.json # The paths of the global structure information json file
project_hierarchy: .project_hierarchy.json # The paths of the global structure information json file
Markdown_Docs_folder: /Markdown_Docs # The folder in the root directory of your target repository to store the documentation.

language: en # Two-letter language codes (ISO 639-1 codes), e.g. `language: en` for English. Refer to Supported Language for more languages.
Expand Down
Loading