Token导航 LogoToken导航TokenDH.com
研究检索需要联网github未标认证来源可访问许可证需确认审计通过

pyrefly-type-coveragePyrefly 类型覆盖

Agent Skill

pyrefly-type-coverage 用于查找、检索和筛选相关信息,适合在 Codex、Claude、Cursor、Gemini CLI 中需要根据关键词、任务场景或来源线索快速定位候选结果时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

总安装

15,804

周安装

652

GitHub Stars

99,526

下载量

5,164
CodexClaudeCursorGemini CLI

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

GitHub

来源数

2

许可证

unknown

最后核验

2026-05-01

来源状态

来源可访问

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:pyrefly-type-coverage(Pyrefly 类型覆盖)
来源仓库:https://github.com/pytorch/pytorch
仓库路径:skills/pyrefly-type-coverage
安装命令:
npx skills add https://github.com/pytorch/pytorch --skill pyrefly-type-coverage
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 npx skills 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

skills.shnpx skills
npx skills add https://github.com/pytorch/pytorch --skill pyrefly-type-coverage

简介

用于查找、检索和筛选相关信息。pyrefly-type-coverage 属于研究检索类 Skill,可作为该场景下的辅助能力补充。

  • 适合根据关键词或任务场景快速定位候选结果。
  • 通过 GitHub 安装,需结合原始 README 核验具体用法。
  • 安装前建议确认权限范围和维护状态。
  • 注意是否会触发联网、命令执行或文件读写操作。

SKILL.md

Pyrefly Type Coverage Skill

Prerequisites

  • The file must live in a project with a pyrefly.toml.
  • pyrefly, lintrunner, and the project's test runner must be on PATH. If any are missing, stop and ask whether a conda environment needs activating — don't install or substitute (per repo CLAUDE.md).

Step 1: Remove file-level type-check suppressions

Delete any of these from the top of the file (pyrefly honors # mypy: ignore-errors for mypy compat, so that one must go too):

# pyre-ignore-all-errors
# pyre-ignore-all-errors[16,21,53,56]
# @lint-ignore-every PYRELINT
# mypy: ignore-errors

Step 2: Add a sub-config entry to pyrefly.toml

[[sub-config]]
matches = "path/to/directory/**"
[sub-config.errors]
implicit-import = false
implicit-any = true
bad-param-name-override = false
unannotated-return = true
unannotated-parameter = true

IMPORTANT: Setting any error key in [sub-config.errors] overrides only that key relative to the parent — but enabling unannotated-return / unannotated-parameter / implicit-any will resurface errors that were previously hidden file-wide. If you see unrelated errors (e.g., bad-param-name-override) flooding the output, mirror the parent config's setting for that key in the sub-config to silence them.

Step 3: Run pyrefly

pyrefly check <FILENAME>

Goal: resolve all unannotated-return, unannotated-parameter, and implicit-any errors by adding annotations — see Step 4's ladder. These three target categories are always resolvable; never suppress them with # pyrefly: ignore. The single exception is @compatibility(is_backward_compatible=True) (Step 4).

Other categories (bad-argument-type, missing-attribute, …) are real type bugs. Handle them by where pyrefly reports them:

  • Reported in another file (path!= target): leave it. Don't widen scope. If the error is now blocking the target, suppress at the report site with # pyrefly: ignore[<category>] # TODO.
  • Reported in the target file but the message names a symbol defined elsewhere (e.g., bad-return because an imported function's annotation is wrong): suppress locally with the same TODO comment. Don't invent a cast() that papers over the upstream gap.
  • Reported in the target file, originates locally: fix it.

Use # pyrefly: ignore[...] only as a last resort, and only on non-target categories.

Step 4: Add annotations

Examine call sites when the right type isn't obvious from the function body.

Annotation conventions

  • Use PEP 604 / PEP 585 syntax (int | None, list[str]) — assume Python >= 3.10.
  • Prefer collections.abc over typing for ABCs (Callable, Sequence, Generator,...).
  • For generic helpers, import from typing when available on the project's minimum Python version, and from typing_extensions only when you need a newer feature (e.g., Self and override if supporting < 3.11/3.12, or PEP 696 default= for TypeVar / ParamSpec). Don't blanket-import from typing_extensions.
  • Always parameterize CallableCallable[..., Any] when the signature is genuinely unknown, never bare Callable. (See ParamSpec below for the signature-preserving wrapper case.)
  • Class attributes assigned in __init__ should get a class-level annotation so pyrefly can see them.
  • Break import cycles with if TYPE_CHECKING: — annotation-only imports go inside the guard, and use from __future__ import annotations (or string forward refs) so runtime imports stay lazy: from __future__ import annotations from typing import TYPE_CHECKING if TYPE_CHECKING: from torch.fx import GraphModule def transform(gm: GraphModule) -> GraphModule:...
  • Never suppress the three target categories. unannotated-return, unannotated-parameter, and implicit-any are always resolvable by adding an annotation; # pyrefly: ignore[<one of those>] is not an acceptable outcome. The single exception is the Backward compatibility carve-out below.
  • Widen, don't bail. When the right type is hard to infer, walk down this ladder rather than reaching for an ignore:

1. Most specific concrete type observable from call sites and return paths. 2. A union (X | Y), Sequence[X]-style abstract type, or a bound TypeVar for genuinely generic functions (identity-passthrough, container helpers). 3. object — strictest fallback that still type-checks. Forces callers to narrow before use, e.g., def serialize(value: object) -> str:. Visually similar to Any but stricter — pyrefly rejects value.foo() without an isinstance. 4. Any — last rung. Always preferred over a # pyrefly: ignore on a target category, but only after rungs 1–3 fail. Be able to articulate why each earlier rung doesn't fit (e.g., "union exceeds 8 types", "no observable common bound", "callers genuinely never narrow").

  • Read at least three call sites before deciding a parameter must be Any — don't pattern-match "looks dynamic" on the first try.
  • Narrow-scope # pyrefly: ignore[...] (on a non-target category) is reserved for cases where pyrefly is *actually wrong* about a specific local error — dynamic metaprogramming, third-party stub gaps: # pyrefly: ignore[attr-defined] result = getattr(obj, dynamic_name)()

Backward compatibility (the one exception to never-suppress)

CRITICAL: Functions decorated with @compatibility(is_backward_compatible=True) must NOT have their signatures changed. The backward-compat test (test_function_back_compat) compares stringified inspect.signature against a golden file — adding annotations (even -> None) changes that string and the test fails. Use pyrefly ignore comments instead:

@compatibility(is_backward_compatible=True)
def my_function(  # pyrefly: ignore[unannotated-return]
    self,
    arg1,  # can't add type here either
):
    ...

The # pyrefly: ignore comment must be on the def line (where pyrefly reports the error), not on the closing ).

ParamSpec for signature-preserving wrappers (decorators, functools.wraps-style helpers). Use Callable[P, R] so the wrapped function's signature flows through to the caller — Callable[..., Any] loses it. Skip ParamSpec if the wrapper genuinely accepts arbitrary callables. Pair with Concatenate[X, P] when the wrapper prepends or appends args.

from collections.abc import Callable
from typing import ParamSpec, TypeVar

P = ParamSpec("P")
R = TypeVar("R")

def log_calls(fn: Callable[P, R]) -> Callable[P, R]:
    def wrapper(*args: P.args, **kwargs: P.kwargs) -> R:
        return fn(*args, **kwargs)
    return wrapper

Step 5: Iterate

Re-run pyrefly check. New annotations often surface bad-return errors where the function actually returns an incompatible type — fix those. Repeat until clean.

Step 6: Lint

Required before handing off — annotations frequently shift import order and line length:

lintrunner -a <files...>

Resolve anything lintrunner can't auto-fix manually.

Step 7: Test

Precedence when something fails: tests passing > pyrefly clean > annotation strictness. If a freshly-added annotation breaks a test, narrow it one rung in the discipline ladder (e.g., concrete → object, or remove an Any widening that broke a downstream isinstance check) before reverting the file.

  1. Backward-compat check. Run iff grep -l '@compatibility(is_backward_compatible=True)' <target> returns the file — the decorator is the actual precondition for the golden file. The broader "imports torch.fx" heuristic catches half of torch/. python -m pytest test/test_fx.py::TestFXAPIBackwardCompatibility -x -v
  2. Unit tests for the modified module. Search both ways before concluding no coverage exists: # torch/foo/bar.py is usually covered by test/test_foo.py or test/test_bar.py ls test/ | grep -i <module-name> # or by import grep -rl "from torch.foo.bar import\|import torch.foo.bar" test/ If both come up empty, tell the user — don't silently skip. Type changes can introduce real runtime regressions (Optional[X] vs X, Sequence vs list when .append is called, etc.).

Notes

  • Forward refs in class bodies without from __future__ import annotations still need string quoting: class MyClass: def __new__(cls) -> "MyClass":...
  • Committing: don't commit unless the user explicitly asks (per repo CLAUDE.md). Stop and surface the diff for review when the file is clean.

适合场景

01

研究助手

02

事实核查

03

知识库问答

04

带来源的搜索总结

能力概览

能力 1

组合搜索和大模型调用

能力 2

支持多来源检索和总结

能力 3

强调引用来源和事实核查

能力 4

适合研究型 Agent 流程

安装后应在对应宿主中按原始 README 的触发条件使用;具体调用方式请以来源页面和 README 为准。

平台分布

Codex

36.63%
按下载量换算1,892

Claude

26.63%
按下载量换算1,375

Cursor

18.79%
按下载量换算970

Gemini CLI

7.96%
按下载量换算411

安全审计

Gen Agent Trust Hub

通过

Socket

通过

Snyk

通过

权限和风险

需要联网

该 Skill 可能需要联网访问来源站点、仓库或外部 API;具体网络访问范围需要结合源码和 README 复核。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。当前只有一个来源,正式发布前建议补源仓库或其他目录站核验。

来源信息

继续浏览同类 Skills