en un clic
fix-types
Interactively fix any type checking issues in Python code
Installer avec Codex ou Claude Copiez ce prompt, collez-le dans Codex, Claude ou un autre assistant, puis laissez-le vérifier la page du skill et l'installer pour vous.
Menu
Interactively fix any type checking issues in Python code
Installer avec Codex ou Claude Copiez ce prompt, collez-le dans Codex, Claude ou un autre assistant, puis laissez-le vérifier la page du skill et l'installer pour vous.
Basé sur la classification professionnelle SOC
Use when the user asks to create, view, or modify a SaaS Pegasus project via the `pegasus` CLI — e.g. "create a new Pegasus project for X", "add subscriptions to my Pegasus project", "show me my project settings", "switch the front-end framework to React", "what features can I use on my license tier".
Resolve merge conflicts when upgrading SaaS Pegasus. Use when the user has merge conflicts after running git merge during a Pegasus upgrade, or when they need help with the merge process. Also use when the user mentions 'merge pegasus".
Upgrade JavaScript dependencies using npm-check-updates, then run post-upgrade checks to ensure nothing is broken.
Upgrade to the latest version of SaaS Pegasus. Use when the user mentions 'upgrade pegasus,' or 'pegasus upgrade.'
Upgrade Python dependencies using uv, then run post-upgrade checks to ensure nothing is broken.
| name | fix-types |
| description | Interactively fix any type checking issues in Python code |
| allowed-tools | ["Bash(uv run mypy *)"] |
To fix types, do the following.
uv run mypy .
cast() over type: ignoreWhen mypy can't infer the correct type, prefer using cast() over # type: ignore:
# Preferred - documents the expected type
choices = cast(list[tuple[str, str]], field.choices)
# Avoid when cast is possible - just silences the error
choices = list(field.choices) # type: ignore[arg-type]
Why: cast() explicitly documents what type you expect, making the code more readable and maintainable. It also doesn't silence other potential errors on the same line.
When adding null checks to satisfy mypy, prefer raising proper exceptions over using assert:
# Preferred - proper error handling
if obj.related_field is None:
raise ValueError("Object must have a related field")
result = obj.related_field.some_method()
# Avoid - assertions can be disabled with -O flag
assert obj.related_field is not None
result = obj.related_field.some_method()
Why: Assertions can be disabled in production with python -O, making them unreliable for runtime validation. Proper exceptions ensure the check always runs and provides better error handling.
type: ignore, add a commentIf type: ignore is necessary (e.g., mypy limitation with valid code), always add a short explanation:
# Good - explains why the ignore is needed
self.tier = tier # type: ignore[misc] # mypy can't handle Enum tuple values with custom __init__
# Bad - no explanation
self.tier = tier # type: ignore[misc]
When using type hints with Django's lazy translation strings (gettext_lazy), use the following pattern to avoid mypy errors while keeping the code working in production (where django-stubs-ext is not installed):
from __future__ import annotations # Must be the first import
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from django_stubs_ext import StrOrPromise
# Then use StrOrPromise in type hints
def my_function(name: StrOrPromise) -> StrOrPromise:
...
class MyData:
title: StrOrPromise
description: StrOrPromise
Why this pattern:
from __future__ import annotations makes type annotations strings at runtime (not evaluated)if TYPE_CHECKING: ensures the import only happens during type checking, not at runtimedjango-stubs-ext is a dev dependency and won't be available in production