[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-astral-ty":3,"mdc--phhe6-key":27,"related-org-astral-ty":935,"related-repo-astral-ty":963},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":17,"repoUrl":18,"updatedAt":19,"license":20,"forks":21,"topics":22,"repo":23,"sourceUrl":25,"mdContent":26},"ty","type check Python code with ty","Guide for using ty, the extremely fast Python type checker and language server. Use this when type checking Python code or setting up type checking in Python projects.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"astral","Astral (uv, Ruff)","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fastral.png","astral-sh",[13],{"name":14,"slug":15,"type":16},"Python","python","tag",286,"https:\u002F\u002Fgithub.com\u002Fastral-sh\u002Fclaude-code-plugins","2026-07-12T08:08:45.153123",null,12,[],{"repoUrl":18,"stars":17,"forks":21,"topics":24,"description":20},[],"https:\u002F\u002Fgithub.com\u002Fastral-sh\u002Fclaude-code-plugins\u002Ftree\u002FHEAD\u002Fplugins\u002Fastral\u002Fskills\u002Fty","---\nname: ty\ndescription:\n  Guide for using ty, the extremely fast Python type checker and language\n  server. Use this when type checking Python code or setting up type checking in\n  Python projects.\n---\n\n# ty\n\nty is an extremely fast Python type checker and language server. It replaces\nmypy, Pyright, and other type checkers.\n\n## When to use ty\n\n**Always use ty for Python type checking**, especially if you see:\n\n- `[tool.ty]` section in `pyproject.toml`\n- A `ty.toml` configuration file\n\n## How to invoke ty\n\n- `uv run ty ...` - Use when ty is in the project's dependencies to ensure you\n  use the pinned version or when ty is installed globally and you are in a\n  project so the virtual environment is updated.\n- `uvx ty ...` - Use when ty is not a project dependency, or for quick one-off\n  checks\n\n## Commands\n\n### Type checking\n\n```bash\nty check                      # Check all files in current directory\nty check path\u002Fto\u002Ffile.py      # Check specific file\nty check src\u002F                 # Check specific directory\n```\n\n### Rule configuration\n\n```bash\nty check --error possibly-unresolved-reference   # Treat as error\nty check --warn division-by-zero                 # Treat as warning\nty check --ignore unresolved-import              # Disable rule\n```\n\n### Python version targeting\n\n```bash\nty check --python-version 3.12     # Check against Python 3.12\nty check --python-platform linux   # Target Linux platform\n```\n\n## Configuration\n\nty is configured in `pyproject.toml` or `ty.toml`:\n\n```toml\n# pyproject.toml\n[tool.ty.environment]\npython-version = \"3.12\"\n\n[tool.ty.rules]\npossibly-unresolved-reference = \"warn\"\ndivision-by-zero = \"error\"\n\n[tool.ty.src]\ninclude = [\"src\u002F**\u002F*.py\"]\nexclude = [\"**\u002Fmigrations\u002F**\"]\n\n[tool.ty.terminal]\noutput-format = \"full\"\nerror-on-warning = false\n```\n\n### Per-file overrides\n\nUse overrides to apply different rules to specific files, such as relaxing rules\nfor tests or scripts that have different typing requirements than production\ncode:\n\n```toml\n[[tool.ty.overrides]]\ninclude = [\"tests\u002F**\", \"**\u002Ftest_*.py\"]\n\n[tool.ty.overrides.rules]\npossibly-unresolved-reference = \"warn\"\n```\n\n## Language server\n\nThis plugin automatically configures the ty language server for Python files\n(`.py` and `.pyi`).\n\n## Migrating from other tools\n\n### mypy → ty\n\n```bash\nmypy .                        → ty check\nmypy --strict .               → ty check --error-on-warning\nmypy path\u002Fto\u002Ffile.py          → ty check path\u002Fto\u002Ffile.py\n```\n\n### Pyright → ty\n\n```bash\npyright .                     → ty check\npyright path\u002Fto\u002Ffile.py       → ty check path\u002Fto\u002Ffile.py\n```\n\n## Common patterns\n\n### Don't add ignore comments\n\nFix type errors instead of suppressing them. Only add ignore comments when\nexplicitly requested by the user. Use `ty: ignore`, not `type: ignore`, and\nprefer rule-specific ignores:\n\n```python\n# Good: rule-specific ignore\nx = undefined_var  # ty: ignore[possibly-unresolved-reference]\n\n# Bad: blanket ty ignore\nx = undefined_var  # ty: ignore\n\n# Bad: tool agnostic blanket ignore\nx = undefined_var  # type: ignore\n```\n\n## Documentation\n\nFor detailed information, read the official documentation:\n\n- https:\u002F\u002Fdocs.astral.sh\u002Fty\u002F\n",{"data":28,"body":29},{"name":4,"description":6},{"type":30,"children":31},"root",[32,39,45,52,63,99,105,130,136,143,221,227,312,318,378,384,403,542,548,553,598,604,625,631,637,735,741,801,807,813,834,904,910,915,929],{"type":33,"tag":34,"props":35,"children":36},"element","h1",{"id":4},[37],{"type":38,"value":4},"text",{"type":33,"tag":40,"props":41,"children":42},"p",{},[43],{"type":38,"value":44},"ty is an extremely fast Python type checker and language server. It replaces\nmypy, Pyright, and other type checkers.",{"type":33,"tag":46,"props":47,"children":49},"h2",{"id":48},"when-to-use-ty",[50],{"type":38,"value":51},"When to use ty",{"type":33,"tag":40,"props":53,"children":54},{},[55,61],{"type":33,"tag":56,"props":57,"children":58},"strong",{},[59],{"type":38,"value":60},"Always use ty for Python type checking",{"type":38,"value":62},", especially if you see:",{"type":33,"tag":64,"props":65,"children":66},"ul",{},[67,86],{"type":33,"tag":68,"props":69,"children":70},"li",{},[71,78,80],{"type":33,"tag":72,"props":73,"children":75},"code",{"className":74},[],[76],{"type":38,"value":77},"[tool.ty]",{"type":38,"value":79}," section in ",{"type":33,"tag":72,"props":81,"children":83},{"className":82},[],[84],{"type":38,"value":85},"pyproject.toml",{"type":33,"tag":68,"props":87,"children":88},{},[89,91,97],{"type":38,"value":90},"A ",{"type":33,"tag":72,"props":92,"children":94},{"className":93},[],[95],{"type":38,"value":96},"ty.toml",{"type":38,"value":98}," configuration file",{"type":33,"tag":46,"props":100,"children":102},{"id":101},"how-to-invoke-ty",[103],{"type":38,"value":104},"How to invoke ty",{"type":33,"tag":64,"props":106,"children":107},{},[108,119],{"type":33,"tag":68,"props":109,"children":110},{},[111,117],{"type":33,"tag":72,"props":112,"children":114},{"className":113},[],[115],{"type":38,"value":116},"uv run ty ...",{"type":38,"value":118}," - Use when ty is in the project's dependencies to ensure you\nuse the pinned version or when ty is installed globally and you are in a\nproject so the virtual environment is updated.",{"type":33,"tag":68,"props":120,"children":121},{},[122,128],{"type":33,"tag":72,"props":123,"children":125},{"className":124},[],[126],{"type":38,"value":127},"uvx ty ...",{"type":38,"value":129}," - Use when ty is not a project dependency, or for quick one-off\nchecks",{"type":33,"tag":46,"props":131,"children":133},{"id":132},"commands",[134],{"type":38,"value":135},"Commands",{"type":33,"tag":137,"props":138,"children":140},"h3",{"id":139},"type-checking",[141],{"type":38,"value":142},"Type checking",{"type":33,"tag":144,"props":145,"children":150},"pre",{"className":146,"code":147,"language":148,"meta":149,"style":149},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","ty check                      # Check all files in current directory\nty check path\u002Fto\u002Ffile.py      # Check specific file\nty check src\u002F                 # Check specific directory\n","bash","",[151],{"type":33,"tag":72,"props":152,"children":153},{"__ignoreMap":149},[154,177,199],{"type":33,"tag":155,"props":156,"children":159},"span",{"class":157,"line":158},"line",1,[160,165,171],{"type":33,"tag":155,"props":161,"children":163},{"style":162},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[164],{"type":38,"value":4},{"type":33,"tag":155,"props":166,"children":168},{"style":167},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[169],{"type":38,"value":170}," check",{"type":33,"tag":155,"props":172,"children":174},{"style":173},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[175],{"type":38,"value":176},"                      # Check all files in current directory\n",{"type":33,"tag":155,"props":178,"children":180},{"class":157,"line":179},2,[181,185,189,194],{"type":33,"tag":155,"props":182,"children":183},{"style":162},[184],{"type":38,"value":4},{"type":33,"tag":155,"props":186,"children":187},{"style":167},[188],{"type":38,"value":170},{"type":33,"tag":155,"props":190,"children":191},{"style":167},[192],{"type":38,"value":193}," path\u002Fto\u002Ffile.py",{"type":33,"tag":155,"props":195,"children":196},{"style":173},[197],{"type":38,"value":198},"      # Check specific file\n",{"type":33,"tag":155,"props":200,"children":202},{"class":157,"line":201},3,[203,207,211,216],{"type":33,"tag":155,"props":204,"children":205},{"style":162},[206],{"type":38,"value":4},{"type":33,"tag":155,"props":208,"children":209},{"style":167},[210],{"type":38,"value":170},{"type":33,"tag":155,"props":212,"children":213},{"style":167},[214],{"type":38,"value":215}," src\u002F",{"type":33,"tag":155,"props":217,"children":218},{"style":173},[219],{"type":38,"value":220},"                 # Check specific directory\n",{"type":33,"tag":137,"props":222,"children":224},{"id":223},"rule-configuration",[225],{"type":38,"value":226},"Rule configuration",{"type":33,"tag":144,"props":228,"children":230},{"className":146,"code":229,"language":148,"meta":149,"style":149},"ty check --error possibly-unresolved-reference   # Treat as error\nty check --warn division-by-zero                 # Treat as warning\nty check --ignore unresolved-import              # Disable rule\n",[231],{"type":33,"tag":72,"props":232,"children":233},{"__ignoreMap":149},[234,260,286],{"type":33,"tag":155,"props":235,"children":236},{"class":157,"line":158},[237,241,245,250,255],{"type":33,"tag":155,"props":238,"children":239},{"style":162},[240],{"type":38,"value":4},{"type":33,"tag":155,"props":242,"children":243},{"style":167},[244],{"type":38,"value":170},{"type":33,"tag":155,"props":246,"children":247},{"style":167},[248],{"type":38,"value":249}," --error",{"type":33,"tag":155,"props":251,"children":252},{"style":167},[253],{"type":38,"value":254}," possibly-unresolved-reference",{"type":33,"tag":155,"props":256,"children":257},{"style":173},[258],{"type":38,"value":259},"   # Treat as error\n",{"type":33,"tag":155,"props":261,"children":262},{"class":157,"line":179},[263,267,271,276,281],{"type":33,"tag":155,"props":264,"children":265},{"style":162},[266],{"type":38,"value":4},{"type":33,"tag":155,"props":268,"children":269},{"style":167},[270],{"type":38,"value":170},{"type":33,"tag":155,"props":272,"children":273},{"style":167},[274],{"type":38,"value":275}," --warn",{"type":33,"tag":155,"props":277,"children":278},{"style":167},[279],{"type":38,"value":280}," division-by-zero",{"type":33,"tag":155,"props":282,"children":283},{"style":173},[284],{"type":38,"value":285},"                 # Treat as warning\n",{"type":33,"tag":155,"props":287,"children":288},{"class":157,"line":201},[289,293,297,302,307],{"type":33,"tag":155,"props":290,"children":291},{"style":162},[292],{"type":38,"value":4},{"type":33,"tag":155,"props":294,"children":295},{"style":167},[296],{"type":38,"value":170},{"type":33,"tag":155,"props":298,"children":299},{"style":167},[300],{"type":38,"value":301}," --ignore",{"type":33,"tag":155,"props":303,"children":304},{"style":167},[305],{"type":38,"value":306}," unresolved-import",{"type":33,"tag":155,"props":308,"children":309},{"style":173},[310],{"type":38,"value":311},"              # Disable rule\n",{"type":33,"tag":137,"props":313,"children":315},{"id":314},"python-version-targeting",[316],{"type":38,"value":317},"Python version targeting",{"type":33,"tag":144,"props":319,"children":321},{"className":146,"code":320,"language":148,"meta":149,"style":149},"ty check --python-version 3.12     # Check against Python 3.12\nty check --python-platform linux   # Target Linux platform\n",[322],{"type":33,"tag":72,"props":323,"children":324},{"__ignoreMap":149},[325,352],{"type":33,"tag":155,"props":326,"children":327},{"class":157,"line":158},[328,332,336,341,347],{"type":33,"tag":155,"props":329,"children":330},{"style":162},[331],{"type":38,"value":4},{"type":33,"tag":155,"props":333,"children":334},{"style":167},[335],{"type":38,"value":170},{"type":33,"tag":155,"props":337,"children":338},{"style":167},[339],{"type":38,"value":340}," --python-version",{"type":33,"tag":155,"props":342,"children":344},{"style":343},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[345],{"type":38,"value":346}," 3.12",{"type":33,"tag":155,"props":348,"children":349},{"style":173},[350],{"type":38,"value":351},"     # Check against Python 3.12\n",{"type":33,"tag":155,"props":353,"children":354},{"class":157,"line":179},[355,359,363,368,373],{"type":33,"tag":155,"props":356,"children":357},{"style":162},[358],{"type":38,"value":4},{"type":33,"tag":155,"props":360,"children":361},{"style":167},[362],{"type":38,"value":170},{"type":33,"tag":155,"props":364,"children":365},{"style":167},[366],{"type":38,"value":367}," --python-platform",{"type":33,"tag":155,"props":369,"children":370},{"style":167},[371],{"type":38,"value":372}," linux",{"type":33,"tag":155,"props":374,"children":375},{"style":173},[376],{"type":38,"value":377},"   # Target Linux platform\n",{"type":33,"tag":46,"props":379,"children":381},{"id":380},"configuration",[382],{"type":38,"value":383},"Configuration",{"type":33,"tag":40,"props":385,"children":386},{},[387,389,394,396,401],{"type":38,"value":388},"ty is configured in ",{"type":33,"tag":72,"props":390,"children":392},{"className":391},[],[393],{"type":38,"value":85},{"type":38,"value":395}," or ",{"type":33,"tag":72,"props":397,"children":399},{"className":398},[],[400],{"type":38,"value":96},{"type":38,"value":402},":",{"type":33,"tag":144,"props":404,"children":408},{"className":405,"code":406,"language":407,"meta":149,"style":149},"language-toml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# pyproject.toml\n[tool.ty.environment]\npython-version = \"3.12\"\n\n[tool.ty.rules]\npossibly-unresolved-reference = \"warn\"\ndivision-by-zero = \"error\"\n\n[tool.ty.src]\ninclude = [\"src\u002F**\u002F*.py\"]\nexclude = [\"**\u002Fmigrations\u002F**\"]\n\n[tool.ty.terminal]\noutput-format = \"full\"\nerror-on-warning = false\n","toml",[409],{"type":33,"tag":72,"props":410,"children":411},{"__ignoreMap":149},[412,420,428,436,446,455,464,473,481,490,499,508,515,524,533],{"type":33,"tag":155,"props":413,"children":414},{"class":157,"line":158},[415],{"type":33,"tag":155,"props":416,"children":417},{},[418],{"type":38,"value":419},"# pyproject.toml\n",{"type":33,"tag":155,"props":421,"children":422},{"class":157,"line":179},[423],{"type":33,"tag":155,"props":424,"children":425},{},[426],{"type":38,"value":427},"[tool.ty.environment]\n",{"type":33,"tag":155,"props":429,"children":430},{"class":157,"line":201},[431],{"type":33,"tag":155,"props":432,"children":433},{},[434],{"type":38,"value":435},"python-version = \"3.12\"\n",{"type":33,"tag":155,"props":437,"children":439},{"class":157,"line":438},4,[440],{"type":33,"tag":155,"props":441,"children":443},{"emptyLinePlaceholder":442},true,[444],{"type":38,"value":445},"\n",{"type":33,"tag":155,"props":447,"children":449},{"class":157,"line":448},5,[450],{"type":33,"tag":155,"props":451,"children":452},{},[453],{"type":38,"value":454},"[tool.ty.rules]\n",{"type":33,"tag":155,"props":456,"children":458},{"class":157,"line":457},6,[459],{"type":33,"tag":155,"props":460,"children":461},{},[462],{"type":38,"value":463},"possibly-unresolved-reference = \"warn\"\n",{"type":33,"tag":155,"props":465,"children":467},{"class":157,"line":466},7,[468],{"type":33,"tag":155,"props":469,"children":470},{},[471],{"type":38,"value":472},"division-by-zero = \"error\"\n",{"type":33,"tag":155,"props":474,"children":476},{"class":157,"line":475},8,[477],{"type":33,"tag":155,"props":478,"children":479},{"emptyLinePlaceholder":442},[480],{"type":38,"value":445},{"type":33,"tag":155,"props":482,"children":484},{"class":157,"line":483},9,[485],{"type":33,"tag":155,"props":486,"children":487},{},[488],{"type":38,"value":489},"[tool.ty.src]\n",{"type":33,"tag":155,"props":491,"children":493},{"class":157,"line":492},10,[494],{"type":33,"tag":155,"props":495,"children":496},{},[497],{"type":38,"value":498},"include = [\"src\u002F**\u002F*.py\"]\n",{"type":33,"tag":155,"props":500,"children":502},{"class":157,"line":501},11,[503],{"type":33,"tag":155,"props":504,"children":505},{},[506],{"type":38,"value":507},"exclude = [\"**\u002Fmigrations\u002F**\"]\n",{"type":33,"tag":155,"props":509,"children":510},{"class":157,"line":21},[511],{"type":33,"tag":155,"props":512,"children":513},{"emptyLinePlaceholder":442},[514],{"type":38,"value":445},{"type":33,"tag":155,"props":516,"children":518},{"class":157,"line":517},13,[519],{"type":33,"tag":155,"props":520,"children":521},{},[522],{"type":38,"value":523},"[tool.ty.terminal]\n",{"type":33,"tag":155,"props":525,"children":527},{"class":157,"line":526},14,[528],{"type":33,"tag":155,"props":529,"children":530},{},[531],{"type":38,"value":532},"output-format = \"full\"\n",{"type":33,"tag":155,"props":534,"children":536},{"class":157,"line":535},15,[537],{"type":33,"tag":155,"props":538,"children":539},{},[540],{"type":38,"value":541},"error-on-warning = false\n",{"type":33,"tag":137,"props":543,"children":545},{"id":544},"per-file-overrides",[546],{"type":38,"value":547},"Per-file overrides",{"type":33,"tag":40,"props":549,"children":550},{},[551],{"type":38,"value":552},"Use overrides to apply different rules to specific files, such as relaxing rules\nfor tests or scripts that have different typing requirements than production\ncode:",{"type":33,"tag":144,"props":554,"children":556},{"className":405,"code":555,"language":407,"meta":149,"style":149},"[[tool.ty.overrides]]\ninclude = [\"tests\u002F**\", \"**\u002Ftest_*.py\"]\n\n[tool.ty.overrides.rules]\npossibly-unresolved-reference = \"warn\"\n",[557],{"type":33,"tag":72,"props":558,"children":559},{"__ignoreMap":149},[560,568,576,583,591],{"type":33,"tag":155,"props":561,"children":562},{"class":157,"line":158},[563],{"type":33,"tag":155,"props":564,"children":565},{},[566],{"type":38,"value":567},"[[tool.ty.overrides]]\n",{"type":33,"tag":155,"props":569,"children":570},{"class":157,"line":179},[571],{"type":33,"tag":155,"props":572,"children":573},{},[574],{"type":38,"value":575},"include = [\"tests\u002F**\", \"**\u002Ftest_*.py\"]\n",{"type":33,"tag":155,"props":577,"children":578},{"class":157,"line":201},[579],{"type":33,"tag":155,"props":580,"children":581},{"emptyLinePlaceholder":442},[582],{"type":38,"value":445},{"type":33,"tag":155,"props":584,"children":585},{"class":157,"line":438},[586],{"type":33,"tag":155,"props":587,"children":588},{},[589],{"type":38,"value":590},"[tool.ty.overrides.rules]\n",{"type":33,"tag":155,"props":592,"children":593},{"class":157,"line":448},[594],{"type":33,"tag":155,"props":595,"children":596},{},[597],{"type":38,"value":463},{"type":33,"tag":46,"props":599,"children":601},{"id":600},"language-server",[602],{"type":38,"value":603},"Language server",{"type":33,"tag":40,"props":605,"children":606},{},[607,609,615,617,623],{"type":38,"value":608},"This plugin automatically configures the ty language server for Python files\n(",{"type":33,"tag":72,"props":610,"children":612},{"className":611},[],[613],{"type":38,"value":614},".py",{"type":38,"value":616}," and ",{"type":33,"tag":72,"props":618,"children":620},{"className":619},[],[621],{"type":38,"value":622},".pyi",{"type":38,"value":624},").",{"type":33,"tag":46,"props":626,"children":628},{"id":627},"migrating-from-other-tools",[629],{"type":38,"value":630},"Migrating from other tools",{"type":33,"tag":137,"props":632,"children":634},{"id":633},"mypy-ty",[635],{"type":38,"value":636},"mypy → ty",{"type":33,"tag":144,"props":638,"children":640},{"className":146,"code":639,"language":148,"meta":149,"style":149},"mypy .                        → ty check\nmypy --strict .               → ty check --error-on-warning\nmypy path\u002Fto\u002Ffile.py          → ty check path\u002Fto\u002Ffile.py\n",[641],{"type":33,"tag":72,"props":642,"children":643},{"__ignoreMap":149},[644,672,706],{"type":33,"tag":155,"props":645,"children":646},{"class":157,"line":158},[647,652,657,662,667],{"type":33,"tag":155,"props":648,"children":649},{"style":162},[650],{"type":38,"value":651},"mypy",{"type":33,"tag":155,"props":653,"children":654},{"style":167},[655],{"type":38,"value":656}," .",{"type":33,"tag":155,"props":658,"children":659},{"style":167},[660],{"type":38,"value":661},"                        →",{"type":33,"tag":155,"props":663,"children":664},{"style":167},[665],{"type":38,"value":666}," ty",{"type":33,"tag":155,"props":668,"children":669},{"style":167},[670],{"type":38,"value":671}," check\n",{"type":33,"tag":155,"props":673,"children":674},{"class":157,"line":179},[675,679,684,688,693,697,701],{"type":33,"tag":155,"props":676,"children":677},{"style":162},[678],{"type":38,"value":651},{"type":33,"tag":155,"props":680,"children":681},{"style":167},[682],{"type":38,"value":683}," --strict",{"type":33,"tag":155,"props":685,"children":686},{"style":167},[687],{"type":38,"value":656},{"type":33,"tag":155,"props":689,"children":690},{"style":167},[691],{"type":38,"value":692},"               →",{"type":33,"tag":155,"props":694,"children":695},{"style":167},[696],{"type":38,"value":666},{"type":33,"tag":155,"props":698,"children":699},{"style":167},[700],{"type":38,"value":170},{"type":33,"tag":155,"props":702,"children":703},{"style":167},[704],{"type":38,"value":705}," --error-on-warning\n",{"type":33,"tag":155,"props":707,"children":708},{"class":157,"line":201},[709,713,717,722,726,730],{"type":33,"tag":155,"props":710,"children":711},{"style":162},[712],{"type":38,"value":651},{"type":33,"tag":155,"props":714,"children":715},{"style":167},[716],{"type":38,"value":193},{"type":33,"tag":155,"props":718,"children":719},{"style":167},[720],{"type":38,"value":721},"          →",{"type":33,"tag":155,"props":723,"children":724},{"style":167},[725],{"type":38,"value":666},{"type":33,"tag":155,"props":727,"children":728},{"style":167},[729],{"type":38,"value":170},{"type":33,"tag":155,"props":731,"children":732},{"style":167},[733],{"type":38,"value":734}," path\u002Fto\u002Ffile.py\n",{"type":33,"tag":137,"props":736,"children":738},{"id":737},"pyright-ty",[739],{"type":38,"value":740},"Pyright → ty",{"type":33,"tag":144,"props":742,"children":744},{"className":146,"code":743,"language":148,"meta":149,"style":149},"pyright .                     → ty check\npyright path\u002Fto\u002Ffile.py       → ty check path\u002Fto\u002Ffile.py\n",[745],{"type":33,"tag":72,"props":746,"children":747},{"__ignoreMap":149},[748,773],{"type":33,"tag":155,"props":749,"children":750},{"class":157,"line":158},[751,756,760,765,769],{"type":33,"tag":155,"props":752,"children":753},{"style":162},[754],{"type":38,"value":755},"pyright",{"type":33,"tag":155,"props":757,"children":758},{"style":167},[759],{"type":38,"value":656},{"type":33,"tag":155,"props":761,"children":762},{"style":167},[763],{"type":38,"value":764},"                     →",{"type":33,"tag":155,"props":766,"children":767},{"style":167},[768],{"type":38,"value":666},{"type":33,"tag":155,"props":770,"children":771},{"style":167},[772],{"type":38,"value":671},{"type":33,"tag":155,"props":774,"children":775},{"class":157,"line":179},[776,780,784,789,793,797],{"type":33,"tag":155,"props":777,"children":778},{"style":162},[779],{"type":38,"value":755},{"type":33,"tag":155,"props":781,"children":782},{"style":167},[783],{"type":38,"value":193},{"type":33,"tag":155,"props":785,"children":786},{"style":167},[787],{"type":38,"value":788},"       →",{"type":33,"tag":155,"props":790,"children":791},{"style":167},[792],{"type":38,"value":666},{"type":33,"tag":155,"props":794,"children":795},{"style":167},[796],{"type":38,"value":170},{"type":33,"tag":155,"props":798,"children":799},{"style":167},[800],{"type":38,"value":734},{"type":33,"tag":46,"props":802,"children":804},{"id":803},"common-patterns",[805],{"type":38,"value":806},"Common patterns",{"type":33,"tag":137,"props":808,"children":810},{"id":809},"dont-add-ignore-comments",[811],{"type":38,"value":812},"Don't add ignore comments",{"type":33,"tag":40,"props":814,"children":815},{},[816,818,824,826,832],{"type":38,"value":817},"Fix type errors instead of suppressing them. Only add ignore comments when\nexplicitly requested by the user. Use ",{"type":33,"tag":72,"props":819,"children":821},{"className":820},[],[822],{"type":38,"value":823},"ty: ignore",{"type":38,"value":825},", not ",{"type":33,"tag":72,"props":827,"children":829},{"className":828},[],[830],{"type":38,"value":831},"type: ignore",{"type":38,"value":833},", and\nprefer rule-specific ignores:",{"type":33,"tag":144,"props":835,"children":838},{"className":836,"code":837,"language":15,"meta":149,"style":149},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Good: rule-specific ignore\nx = undefined_var  # ty: ignore[possibly-unresolved-reference]\n\n# Bad: blanket ty ignore\nx = undefined_var  # ty: ignore\n\n# Bad: tool agnostic blanket ignore\nx = undefined_var  # type: ignore\n",[839],{"type":33,"tag":72,"props":840,"children":841},{"__ignoreMap":149},[842,850,858,865,873,881,888,896],{"type":33,"tag":155,"props":843,"children":844},{"class":157,"line":158},[845],{"type":33,"tag":155,"props":846,"children":847},{},[848],{"type":38,"value":849},"# Good: rule-specific ignore\n",{"type":33,"tag":155,"props":851,"children":852},{"class":157,"line":179},[853],{"type":33,"tag":155,"props":854,"children":855},{},[856],{"type":38,"value":857},"x = undefined_var  # ty: ignore[possibly-unresolved-reference]\n",{"type":33,"tag":155,"props":859,"children":860},{"class":157,"line":201},[861],{"type":33,"tag":155,"props":862,"children":863},{"emptyLinePlaceholder":442},[864],{"type":38,"value":445},{"type":33,"tag":155,"props":866,"children":867},{"class":157,"line":438},[868],{"type":33,"tag":155,"props":869,"children":870},{},[871],{"type":38,"value":872},"# Bad: blanket ty ignore\n",{"type":33,"tag":155,"props":874,"children":875},{"class":157,"line":448},[876],{"type":33,"tag":155,"props":877,"children":878},{},[879],{"type":38,"value":880},"x = undefined_var  # ty: ignore\n",{"type":33,"tag":155,"props":882,"children":883},{"class":157,"line":457},[884],{"type":33,"tag":155,"props":885,"children":886},{"emptyLinePlaceholder":442},[887],{"type":38,"value":445},{"type":33,"tag":155,"props":889,"children":890},{"class":157,"line":466},[891],{"type":33,"tag":155,"props":892,"children":893},{},[894],{"type":38,"value":895},"# Bad: tool agnostic blanket ignore\n",{"type":33,"tag":155,"props":897,"children":898},{"class":157,"line":475},[899],{"type":33,"tag":155,"props":900,"children":901},{},[902],{"type":38,"value":903},"x = undefined_var  # type: ignore\n",{"type":33,"tag":46,"props":905,"children":907},{"id":906},"documentation",[908],{"type":38,"value":909},"Documentation",{"type":33,"tag":40,"props":911,"children":912},{},[913],{"type":38,"value":914},"For detailed information, read the official documentation:",{"type":33,"tag":64,"props":916,"children":917},{},[918],{"type":33,"tag":68,"props":919,"children":920},{},[921],{"type":33,"tag":922,"props":923,"children":927},"a",{"href":924,"rel":925},"https:\u002F\u002Fdocs.astral.sh\u002Fty\u002F",[926],"nofollow",[928],{"type":38,"value":924},{"type":33,"tag":930,"props":931,"children":932},"style",{},[933],{"type":38,"value":934},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":936,"total":201},[937,945,949],{"slug":938,"name":938,"fn":939,"description":940,"org":941,"tags":942,"stars":17,"repoUrl":18,"updatedAt":944},"ruff","lint and format Python code with ruff","Guide for using ruff, the extremely fast Python linter and formatter. Use this when linting, formatting, or fixing Python code.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[943],{"name":14,"slug":15,"type":16},"2026-07-12T08:08:46.65062",{"slug":4,"name":4,"fn":5,"description":6,"org":946,"tags":947,"stars":17,"repoUrl":18,"updatedAt":19},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[948],{"name":14,"slug":15,"type":16},{"slug":950,"name":950,"fn":951,"description":952,"org":953,"tags":954,"stars":17,"repoUrl":18,"updatedAt":962},"uv","manage Python projects with uv","Guide for using uv, the Python package and project manager. Use this when working with Python projects, scripts, packages, or tools.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[955,958,961],{"name":956,"slug":957,"type":16},"Engineering","engineering",{"name":959,"slug":960,"type":16},"Packaging","packaging",{"name":14,"slug":15,"type":16},"2026-07-12T08:08:43.925659",{"items":964,"total":201},[965,969,973],{"slug":938,"name":938,"fn":939,"description":940,"org":966,"tags":967,"stars":17,"repoUrl":18,"updatedAt":944},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[968],{"name":14,"slug":15,"type":16},{"slug":4,"name":4,"fn":5,"description":6,"org":970,"tags":971,"stars":17,"repoUrl":18,"updatedAt":19},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[972],{"name":14,"slug":15,"type":16},{"slug":950,"name":950,"fn":951,"description":952,"org":974,"tags":975,"stars":17,"repoUrl":18,"updatedAt":962},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[976,977,978],{"name":956,"slug":957,"type":16},{"name":959,"slug":960,"type":16},{"name":14,"slug":15,"type":16}]