Skip to content

Latest commit

 

History

History
90 lines (71 loc) · 2.84 KB

项目分析.md

File metadata and controls

90 lines (71 loc) · 2.84 KB

Make Type Hint Great - VS Code插件项目分析

1. 项目概述

这是一个用于优化Python类型注解体验的VS Code插件。主要功能包括:

  • 提供内置类型的自动完成
  • 支持typing模块类型的自动导入和完成
  • 支持自定义类型的收集和完成
  • 支持参数类型、返回值类型、变量类型的注解
  • 支持工作区文件的类型搜索和缓存

2. 核心模块依赖关系

extension.ts (入口) │ ├─── terminal/ (终端处理层) │ ├── ParamCompletionProvider ────┐ │ ├── ReturnValueCompletionProvider ├── 继承 BaseCompletionProvider │ └── VariableCompletionProvider ────┘ │ │ │ ├─── typeProcess/ (类型处理层) │ │ ├── BaseTypeProcess │ │ └── CustomTypeProcess │ │ │ │ │ └─── typeData/ (类型数据层) │ │ ├── BaseTypes │ │ └── CustomTypes │ │ │ └─── services/ (服务层) │ ├── ASTService │ ├── CacheService │ └── TypeAnalyzer │ └─── settings.ts (配置管理)

3. 主要模块说明

3.1 终端处理层 (terminal/)

  • 负责处理不同场景下的类型提示
  • 包含三个主要提供者:
    • ParamCompletionProvider: 参数类型提示
    • ReturnValueCompletionProvider: 返回值类型提示
    • VariableCompletionProvider: 变量类型提示

3.2 类型处理层 (typeProcess/)

  • BaseTypeProcess: 处理内置类型和typing模块类型
  • CustomTypeProcess: 处理自定义类型、导入类型等

3.3 服务层 (services/)

  • ASTService: 负责代码解析和AST树操作
  • CacheService: 负责缓存AST树和类型信息
  • TypeAnalyzer: 负责分析类型信息

3.4 类型数据层 (typeData/)

  • BaseTypes: 定义基础类型和typing模块类型
  • CustomTypes: 管理自定义类型数据

4. 关键依赖项

  • tree-sitter: 用于解析Python代码生成AST
  • tree-sitter-python: Python语言的tree-sitter语法
  • vscode: VS Code扩展API
  • webpack: 用于打包

5. 工作流程

  1. 插件激活时注册三种类型的CompletionProvider
  2. 用户输入触发字符(: 或 >)时触发对应的Provider
  3. Provider通过TypeAnalyzer分析代码上下文
  4. 根据分析结果从BaseTypeProcess和CustomTypeProcess获取类型建议
  5. 返回补全列表给VS Code

6. 特色功能

  • 单例模式确保全局状态一致性
  • 使用AST进行准确的代码分析
  • 支持工作区文件监听和实时更新
  • 类型信息缓存提升性能
  • 支持类型的自动导入

7. 可扩展性

项目采用分层架构,各层之间通过接口通信,便于:

  • 添加新的类型提示场景
  • 扩展类型处理逻辑
  • 添加新的代码分析功能

8. 总结

这个项目的架构设计清晰,模块化程度高,扩展性好。通过分层设计将不同职责的代码分离,使得代码易于维护和扩展。