Pyrefly 是一款快速的 Python 类型检查器,计划在 2025 年底取代 Meta 现有的 Pyre 类型检查器。

Pyrefly 旨在通过 IDE 功能和检查 Python 代码来提高开发速度。

主要特点:

  • 类型推断:除了函数参数之外,Pyrefly 可以在大多数位置推断类型。它可以推断变量的类型和返回类型。
  • Flow Types:Pyrefly 可以理解程序的控制流以细化静态类型。
  • 增量性:Pyrefly 旨在实现模块级的大规模增量性,并优化检查和并行性。
 

Pyrefly:Python 的快速类型检查器和 IDE

 

目前正在积极开发中,存在已知问题。如果您发现错误,请提交问题。

 

Pyrefly 是一款快速的 Python 类型检查器。它计划在 2025 年底取代 Meta 现有的 Pyre 类型检查器。本 README 介绍了 Pyrefly 的基本用法。完整文档及代码检查工具请访问Pyrefly 网站。

 

入门

 

Pyrefly 旨在通过 IDE 功能和检查 Python 代码来提高开发速度。

 
  • 在浏览器中尝试 pyrefly:沙盒
  • 获取命令行工具:pip install pyrefly
  • 获取 VSCode 扩展: 链接
 

主要特点:

 
  • 类型推断:除了函数参数之外,Pyrefly 可以在大多数位置推断类型。它可以推断变量的类型和返回类型。
  • 流类型:Pyrefly 可以理解程序的控制流以细化静态类型。
  • 增量性:Pyrefly 旨在实现模块级的大规模增量性,并优化检查和并行性。
 

参与其中

 

如果您有任何问题或想要报告错误,请 创建问题

 

请参阅我们的 贡献指南 以获取有关如何为 Pyrefly 做出贡献的信息。

 

选择

 

编写 Python 类型检查器时有很多选择。我们从Pyre1、 Pyright和 MyPy中汲取了灵感。以下是一些值得注意的选择:

 
  • 除了函数的参数外,我们在大多数地方都会推断类型。我们确实会推断变量和返回值的类型。例如, def foo(x): return True的结果等同于你写的def foo(x: Any) -> bool: ...
  • 我们首先尝试推断[]它的使用类型,然后再进行修复。例如,xs = []; xs.append(1); xs.append("")我们会推断出“ xs: List[int]然后”在最后一条语句上出错。
  • 我们使用流类型来细化静态类型,例如,x: int = 4既知道x具有类型int,而且紧接着的下一次使用x也会知道类型是Literal[4]
  • 我们的目标是实现大规模增量(在模块级别)并通过并行性进行优化检查,旨在利用 Rust 的优势使代码更简单一些。
  • 我们期望模块具有大型强连接组件,并且不会尝试利用源代码中的 DAG 形状。
 

设计

 

设计中有很多细微之处会定期发生变化。但构建棋盘格的基本原理涉及三个步骤:

 
  1. 弄清楚每个模块导出的内容。这需要import * 传递性地解决所有语句。
  2. 对于每个独立的模块,将其转换为绑定,处理所有语句和范围信息(静态和流)。
  3. 解决这些绑定,可能需要解决其他模块中的绑定。
 

如果我们遇到不可知的信息(例如递归),我们会Type::Var插入占位符,稍后再填充。

 

对于每个模块,我们按顺序完整地解决各个步骤。具体来说,我们不会像 Rosyln或 TypeScript那样首先尝试解决某个特定的标识符,也不会使用细粒度的增量式方法(例如Rust Analyzer 使用Salsa)。相反,我们追求的是原始性能和更简单的以模块为中心的设计——如果解决模块中的所有绑定足够快,就无需单独解决单个绑定。

 

绑定示例

 

给定程序:

 
1: x: int = 4
2: print(x)
 
 

我们可能会产生以下绑定:

 
  • define int@0=from builtins import int
  • define x@1=4: int@0
  • use x@2=x@1
  • anon @2=print(x@2)
  • export x=x@2
 

值得注意的是:

 
  • 关键在于诸如define(某事物的定义)、use(某事物的用法)和anon(我们需要进行类型检查但不关心其结果的语句)之类的东西。
  • 在许多情况下,一个键的值指的是其他键。
  • export一些键是通过键和import 值从其他模块导入的。
  • 为了消除标识符的歧义,我们使用它们出现的文本位置(在我使用的示例中@line,但实际上它是文件中的字节偏移量)。
 

示例Var

 

给定程序:

 
1: x = 1
2: while test():
3:     x = x
4: print(x)
 
 

我们最终得到了以下绑定:

 
  • x@1=1
  • x@3=phi(x@1, x@3)
  • x@4=phi(x@1, x@3)
 

表达式phi是两个值的连接点,例如phi(int, str) 。我们忽略和int | str之间的区别,因为在本例中没有必要。defineuse

 

在求解过程中,x@3我们会遇到递归。操作上:

 
  • 我们开始解决x@3
  • 那就需要我们去解决x@1
  • 我们解决的x@1Literal[1]
  • 我们开始求解x@3。但我们目前正在求解x@3,所以我们发明一个新的Var(我们称之为?1)并返回 。
  • 我们得出结论,x@3一定是的Literal[1] | ?1
  • 由于是?1由引入的,x@3我们记录为?1 = Literal[1] | ?1。我们可以取其可达上限,并得出结论 ?1 = Literal[1]
  • 我们简化x@3为仅仅Literal[1]
 

相关推荐

文心快码(Baidu Comate)

文心快码(Baidu Comate)

<p>Comate 是百度推出的一款智能编码助手,它利基于「文心大模型」,结合百度积累多年的编程现场大数据和外部优秀开源数据,打造的新一代编码辅助工具。拥有代码智能、场景丰富、创造价值、广泛应用等多重产品优势,可实现“帮你想、帮你写、帮你改”的场景应用形态。提升编码效率,释放“十倍”软件生产力。</p> <h2 style="font-size: 20px;">核心功能</h2> <h2 style="font-size: 20px;">1.代码生成</h2> <p>如前所述,Comate 能够在我们暂停编码时,根据我们的代码上下文,智能补全代码行。</p> <h2 style="font-size: 20px;">2.注释代码生成</h2> <p>在编写代码时,输入注释内容描述所需功能,Comate 将迅速生成相应的代码提示,简化开发流程。</p> <figure data-size="normal"></figure> <h2 style="font-size: 20px;">3.对话生成代码</h2> <p>通过左侧 Comate 面板的对话框,用自然语言描述我们的需求,例如:“「使用 TypeScript 实现一个方法,验证输入参数是否为有效的时间格式」”,然后按回车,Comate 将为我们生成代码。</p> <h2 style="font-size: 20px;">4.代码解释</h2> <p>代码解释功能尤其适用于阅读和理解开源项目代码。在 Comate 中,我们可以点击“「代码解释」”按钮,获取详细的代码解释。</p> <p>对函数或者类的「字符数是有限制的」,不能超过 「18000 个字符」。</p> <h2 style="font-size: 20px;">5.其他操作</h2> <p>Comate 还提供一系列其他常用操作,如:</p> <ul> <li data-pid="_-J47N8q">代码调优建议</li> <li data-pid="b30kKL6L">函数拆分</li> <li data-pid="knPsJaGr">生成单元测试</li> <li data-pid="WXhSn3Be">行间注释</li> <li data-pid="qR3bnQW6">函数注释</li> <li data-pid="hM3K36ZD">等等</li> </ul>

OCode

OCode

<p>OCode 是终端原生 AI 编程助手,为开发者提供深度代码库智能和自动任务执行功能。与本地 Ollama 模型无缝集成,将企业级 AI 辅助直接融入开发流程中。终端原生工作流,能直接在你的 shell 环境中运行;深度代码库智能,可自动映射并理解整个项目;自动任务执行,能端到端处理多步骤开发任务;可扩展的插件层,通过模型上下文协议(MCP)启用第三方集成,帮助开发者提高编程效率和质量。</p> <h2 style="font-size: 20px;">OCode的主要功能</h2> <ul> <li> <div class="paragraph">代码生成与修改:支持多文件重构、TDD 架构搭建、代码优化和文档生成。</div> </li> <li> <div class="paragraph">项目理解:进行架构分析、依赖跟踪和跨文件推理,帮助开发者快速理解项目结构。</div> </li> <li> <div class="paragraph">开发自动化:集成 Git 工作流、测试执行、构建和 CI/CD 集成,简化开发流程。</div> </li> <li> <div class="paragraph">数据处理:支持 JSON/YAML 解析和查询、数据验证和格式转换,方便数据操作。</div> </li> <li> <div class="paragraph">系统操作:监控系统进程、管理环境变量、测试网络连通性,提升系统管理效率。</div> </li> <li> <div class="paragraph">交互式操作:支持自然语言查询、上下文探索和调试辅助,增强开发体验。</div> </li> <li> <div class="paragraph">文件操作:提供文件编辑、读写管理、文件搜索和目录操作等功能。</div> </li> <li> <div class="paragraph">文本处理:支持高级文本搜索、文本操作和格式化,以及文件差异比较。</div> </li> <li> <div class="paragraph">数据处理:支持 JSON/YAML 数据解析、查询和操作,以及 Jupyter 笔记本处理。</div> </li> <li> <div class="paragraph">系统操作:支持进程监控、环境变量管理、网络连通性测试和安全的 shell 命令执行。</div> </li> <li> <div class="paragraph">开发工具:支持 Git 操作、项目架构分析、复杂任务委托和上下文管理。</div> </li> <li> <div class="paragraph">集成:支持模型上下文协议集成和 HTTP 请求,方便与外部系统交互。</div> </li> </ul> <h2 style="font-size: 20px;">OCode的项目地址</h2> <ul> <li>Github仓库: <a href="https://github.com/haasonsaas/ocode" target="_blank" rel="noopener">https://github.com/haasonsaas/ocode</a> </li> </ul> <div class="markdown-heading" dir="auto"> <h3 class="heading-element" dir="auto" tabindex="-1">核心能力</h3> <a id="user-content-core-capabilities" class="anchor" href="https://github.com/haasonsaas/ocode#core-capabilities" aria-label="永久链接:核心能力"></a></div> <ul dir="auto"> <li>终端原生工作流程——直接在您的 shell 环境中运行</li> <li>深度代码库智能——自动映射并理解您的整个项目</li> <li>自主任务执行——端到端处理多步骤开发任务</li> <li>直接 Ollama 集成– 无需代理即可从本地/远程 Ollama 流式完成</li> <li>可扩展插件层——模型上下文协议(MCP)支持第三方集成</li> </ul> <div class="markdown-heading" dir="auto"> <h3 class="heading-element" dir="auto" tabindex="-1">OCode 能做什么</h3> <a id="user-content-what-ocode-can-do" class="anchor" href="https://github.com/haasonsaas/ocode#what-ocode-can-do" aria-label="永久链接:OCode 能做什么"></a></div> <table> <thead> <tr> <th>领域</th> <th>功能</th> </tr> </thead> <tbody> <tr> <td>代码生成和修改</td> <td>多文件重构、TDD 脚手架、优化、文档</td> </tr> <tr> <td>项目理解</td> <td>架构分析、依赖关系跟踪、跨文件推理</td> </tr> <tr> <td>开发自动化</td> <td>Git 工作流、测试执行、构建和 CI 集成</td> </tr> <tr> <td>数据处理</td> <td>JSON/YAML解析和查询、数据验证、格式转换</td> </tr> <tr> <td>系统操作</td> <td>进程监控、环境管理、网络连通性测试</td> </tr> <tr> <td>交互式操作</td> <td>自然语言查询、上下文探索、调试辅助</td> </tr> </tbody> </table> <div class="markdown-heading" dir="auto"> <h3 class="heading-element" dir="auto" tabindex="-1">🛠️ 可用工具</h3> <a id="user-content-️-available-tools" class="anchor" href="https://github.com/haasonsaas/ocode#%EF%B8%8F-available-tools" aria-label="永久链接:🛠️ 可用工具"></a></div> <p>OCode 包含 19 多个按类别组织的专用工具:</p> <div class="markdown-heading" dir="auto"> <p>文件操作</p> <a id="user-content-file-operations" class="anchor" href="https://github.com/haasonsaas/ocode#file-operations" aria-label="永久链接:文件操作"></a></div> <ul dir="auto"> <li><code>file_edit</code>- 精确编辑和修改源文件</li> <li><code>file_ops</code>- 读取、写入和管理文件操作</li> <li><code>glob</code>- 基于模式的文件发现和匹配</li> <li><code>find</code>- 搜索文件和目录</li> <li><code>ls</code>- 使用过滤功能列出目录内容</li> <li><code>head_tail</code>- 读取文件的开头和结尾</li> <li><code>wc</code>- 计算行数、单词数和字符数</li> </ul> <div class="markdown-heading" dir="auto"> <p>文本处理</p> <a id="user-content-text-processing" class="anchor" href="https://github.com/haasonsaas/ocode#text-processing" aria-label="永久链接:文本处理"></a></div> <ul dir="auto"> <li><code>grep</code>- 支持正则表达式的高级文本搜索</li> <li><code>text_tools</code>- 文本处理和格式化</li> <li><code>diff</code>- 比较文件并显示差异</li> </ul> <div class="markdown-heading" dir="auto"> <p>数据处理</p> <a id="user-content-data-processing" class="anchor" href="https://github.com/haasonsaas/ocode#data-processing" aria-label="永久链接:数据处理"></a></div> <ul dir="auto"> <li><code>json_yaml</code>- 使用 JSONPath 解析、查询和操作 JSON/YAML 数据</li> <li><code>notebook_tools</code>- 使用 Jupyter 笔记本</li> </ul> <div class="markdown-heading" dir="auto"> <p>系统操作</p> <a id="user-content-system-operations" class="anchor" href="https://github.com/haasonsaas/ocode#system-operations" aria-label="永久链接:系统操作"></a></div> <ul dir="auto"> <li><code>ps</code>- 监控和查询系统进程</li> <li><code>env</code>- 管理环境变量和.env 文件</li> <li><code>ping</code>- 测试网络连接</li> <li><code>bash</code>- 安全地执行 shell 命令</li> <li><code>which</code>- 定位系统命令</li> </ul> <div class="markdown-heading" dir="auto"> <p>开发工具</p> <a id="user-content-development-tools" class="anchor" href="https://github.com/haasonsaas/ocode#development-tools" aria-label="永久链接:开发工具"></a></div> <ul dir="auto"> <li><code>git_tools</code>- Git 操作和存储库管理</li> <li><code>architect</code>- 项目架构分析和文档</li> <li><code>agent</code>- 将复杂的任务委托给专门的代理</li> <li><code>memory_tools</code>- 管理上下文和会话内存</li> </ul> <div class="markdown-heading" dir="auto"> <p>一体化</p> <a id="user-content-integration" class="anchor" href="https://github.com/haasonsaas/ocode#integration" aria-label="永久链接:集成"></a></div> <ul dir="auto"> <li><code>mcp</code>- 模型上下文协议集成</li> <li><code>curl</code>- HTTP 请求和 API 测试</li> </ul> <div class="markdown-heading" dir="auto"> </div> <p> </p>

Kilo Code

Kilo Code

<p>Kilo Code 是开源的VS Code AI Agent扩展程序,提升开发人员的编码效率。具备强大的代码生成能力,能根据自然语言描述快速生成代码片段,有效减少手动编写代码的时间。Kilo Code 能自动化执行多种重复性编码任务,例如代码格式化、重构以及生成样板代码等,进一步提高开发效率。内置最新的AI模型,如Claude和 Gemini 2.5 Pro,无需用户手动配置API密钥,提供MCP服务器市场,用户可以轻松查找和使用各种MCP服务器来扩展代理功能,满足不同开发场景的需求。</p> <h2 style="font-size: 20px;">Kilo Code的主要功能</h2> <ul> <li>自然语言生成代码:用户可以通过自然语言描述所需逻辑或函数,Kilo Code 转换为代码片段,帮助快速入门或克服障碍。</li> <li>任务自动化:Kilo Code 能自动化执行常见的编码任务,如代码格式化、注释生成、批量重命名变量等。</li> <li>自动化重构:选择现有代码后,Kilo Code 可以优化性能、增强可读性或识别潜在错误,帮助开发者完善工作。</li> <li>多种预设模式:Kilo Code 提供多种预设模式,如架构师模式(Architect)、编码器模式(Coder)和调试器模式(Debugger),用户还可以创建自定义模式。</li> <li>MCP 服务器市场:通过 MCP 服务器市场,用户可以轻松查找和使用 MCP 服务器来扩展代理功能。</li> <li>智能补全:在用户键入时,Kilo Code 会提供上下文相关的代码建议,减少拼写错误并加快常见模式的实现。</li> <li>直接操作文件:Kilo Code 可以根据用户指令直接在项目结构中创建新文件或修改现有文件。</li> <li>终端命令执行:用户可以直接从聊天界面要求 Kilo Code 执行命令行操作,无需切换上下文。</li> </ul> <h2 style="font-size: 20px;">Kilo Code的官网地址</h2> <ul> <li>官网地址:<a class="external" href="https://kilocode.ai/?utm_source=medsci" target="_blank" rel="noopener">kilocode.ai</a></li> </ul>

mark.js

mark.js

前端实现搜索文本高亮的技术,十分简单易用,明了. mark.js 是一个用 JavaScript 编写的文本高亮器。它可以用来动态标记搜索词或自定义正则表达式,并提供一些内置选项,例如变音符号支持、单词搜索、自定义同义词、iframe 支持、自定义过滤器、精度定义、自定义元素、自定义类名等等。

GSAP

GSAP

GSAP 是一个强大的 JavaScript 工具集,可以将开发人员变成动画超级英雄。构建适用于所有主流浏览器的高性能动画。动画化 CSS、SVG、画布、React、Vue、WebGL、颜色、字符串、运动路径、通用对象……任何 JavaScript 可以触及的东西! GSAP 的 ScrollTrigger 插件可让您使用最少的代码创建令人惊叹的基于滚动的动画。

augment code

augment code

Code 是一款面向团队的开发者 AI,它将您组织的专业知识和实践融入到每一次交互中。我们将您团队的集体编码知识放在您指尖,帮助每位开发人员更智能、更快速地工作。 Augment 是一个开发者 AI 平台,它能够理解您的代码库,帮助您理解代码、调试问题并加快交付速度。使用聊天、下一步编辑和代码补全功能,您可以完成更多工作。

Firebase Studio

Firebase Studio

集成Google基础设施的AI编程工具,支持一键构建前端、后端和移动应用,覆盖从开发到发布的全流程。 结合了类似Lovable、Cursor、Replit的功能,内置数据监控能力,适合快速部署和迭代。X用户称其为“Lovable+Cursor+Replit”的综合体,受到开发者关注。

trae.ai

trae.ai

Trae是字节跳动推出的一款免费AI编程工具,它集成了Claude3.5和GPT-4o等主流AI 模型,旨在为开发者打造一个全方位的智能编程环境。 Trae,致力于成为真正的 AI 工程师(The Real Al Engineer)。Trae 旗下的 AI IDE 产品,以智能生产力为核心,无缝融入你的开发流程,与你默契配合,更高质量、高效率完成每一个任务。

n8n

n8n

n8n帮助你将任何具有API的应用程序与任何其他应用程序连接起来,并在很少或没有代码的情况下操作其数据,完成工作流自动化。

Codex CLI

Codex CLI

一款轻量级终端运行编码智能体 —— Codex CLI,该工具现已在 GitHub 完全开源。是OpenAI开发的。 Codex CLI 可以直接在用户的计算机上工作,旨在最大化 o3 和 o4-mini 等模型的推理能力,并即将支持 GPT-4.1 等额外的 API 模型。 Codex CLI 可以在 macOS 12+、Ubuntu 20.04+/Debian 10+、Windows 11 的 WSL2 子系统中使用,要求最少拥有 4GB 内存(建议 8GB)。