🔥 The Problem Every Python Developer Has
You're in the zone. Deep in a pandas pipeline, a NumPy reshape, an asyncio task. You forget one parameter. You have two choices:
Option A: Break your flow. Open a browser. Search. Scroll. Find it. Come back. Lose your train of thought. Repeat 20Γ a day.
Option B: Just hover.
df.groupby('category').agg(???) # hover β full signature + examples
np.einsum('ij,jk->ik', A, B) # hover β subscript syntax explained
async with asyncio.timeout(???) # hover β parameters, raises, version added
response = requests.get(url, headers=?) # hover β complete parameter table
Python Hover is Option B. Zero configuration. Instant. Accurate.
β¨ What Makes It Different
Most hover extensions show you a one-liner from PyPI. Python Hover fetches from the actual Sphinx documentation β the same source as the official docs site β and combines it with live runtime introspection (docstrings, __init__ signatures, @dataclass fields, asyncio coroutine parameters) for true Python IntelliSense on hover.
|
Generic hover |
Python Hover |
np.array |
"Create an array" |
Full signature, dtype param, order, subok, copy β with types |
df.merge |
"DataFrame.merge" |
All 10+ params, how/on/left_on/right_on explained |
typing.Union |
"Support for type hints" β |
"Union type; Union[X, Y] is equivalent to X \| Y" β |
for keyword |
Nothing or wrong page |
Exact anchor on the language reference |
| Any keyword |
Nothing |
BNF syntax, description, PEP links |
| Private library |
Nothing |
Works if the package has Sphinx docs |
🆕 New in 0.7.4
- Contextual parameter lens shows the active argument slot inside hovers, then promotes the callableβs docs when the symbol under your cursor is just an argument value.
- PyHover Activity Bar adds Inspector, Saved Docs, History, and Recent Packages views so you can keep working from inside VS Code instead of reopening docs from scratch.
- PyHover Studio now exposes hover presets, docs-routing controls, integrated-browser behavior, and module-browser defaults from one place.
- Integrated docs workflows now support saved docs, recent-session recovery, module browsing, and a command-center status bar without leaving the editor.
🚀 Zero to Hover in 10 Seconds
1. Install from the VS Code Marketplace
2. Open any .py file
3. Hover over any symbol
No API keys. No Python packages to install. No configuration. Just works.
📖 Everything You Can Hover
🔑 All 37+ Keywords & Operators β with exact doc anchors
No more landing on the wrong page. Every keyword links to its precise section:
| Keyword |
Correct anchor |
if / elif / else |
compound_stmts.html#the-if-statement |
for / while |
compound_stmts.html#the-for-statement |
try / except / finally |
compound_stmts.html#the-try-statement |
with |
compound_stmts.html#the-with-statement |
match / case |
compound_stmts.html#the-match-statement |
async / await |
compound_stmts.html#coroutine-function-definition |
yield |
simple_stmts.html#the-yield-statement |
lambda |
expressions.html#lambda |
not / and / or |
expressions.html#boolean-operations |
in / not in |
expressions.html#membership-test-operations |
is / is not |
expressions.html#identity-comparisons |
β‘ All 70+ Built-in Functions
print(), len(), zip(), enumerate(), sorted(), map(), filter(), isinstance(), getattr(), open(), range(), type(), vars(), dir(), repr(), next(), iter(), and every other built-in β all with complete parameter docs.
🔤 Built-in Constants
None, True, False, Ellipsis, ..., __debug__, __name__ β each linked to its anchor on library/constants.html.
🏷οΈ Typing Module β the right description, not the backport summary
Optional, Union, Literal, TypeVar, Protocol, overload, Final, TypedDict, ParamSpec, Concatenate, Never, Annotated, Generic β all with the actual Python runtime docstring, not PyPI's generic "Support for type hints" blurb.
📦 Third-Party Libraries β auto-discovered
Works out of the box with popular libraries, and auto-discovers thousands more:
| Data Science |
Web Frameworks |
HTTP & Network |
Data & Typing |
NumPy Β· Pandas Matplotlib Β· SciPy PyTorch Β· scikit-learn |
Django Β· Flask FastAPI Β· Starlette Litestar |
Requests Β· HTTPX aiohttp Β· httpcore |
SQLAlchemy Β· Pydantic attrs Β· Redis lxml Β· BeautifulSoup |
Using something not on this list? If the package publishes Sphinx docs, Python Hover discovers it automatically via PyPI β no configuration needed.
🧠 How It Works (The Smart Part)
Python Hover uses a 6-layer resolution pipeline so you always get the best answer:
Hover triggered
β
βΌ
Static MAP ββββββββ <1ms Β· offline Β· keywords, operators, constants, typing
β miss
βΌ
LSP (Pylance) ββββββ qualified name, kind, signature, source path
β
βΌ
AST identifier βββββ literal type detection even in unsaved files
β
βΌ
Python runtime ββββββ subprocess introspection: docstring, module, isStdlib
β
βΌ
Sphinx inventory ββββ objects.inv lookup β exact versioned docs URL
β miss
βΌ
DevDocs (scoped) ββββ #q=docset search, never cross-language
Context-aware alias resolution: writes import numpy as np and hovers np.array? Python Hover resolves it to numpy.array automatically before looking anything up.
Concurrent deduplication: if you move the cursor quickly over multiple symbols, Python Hover deduplicates all in-flight requests so the Python subprocess never gets overwhelmed.
Multi-tier caching: Sphinx inventories cached to disk (7 days). Hover results cached per session. Position results cached per document version. Cold start after the first hover is instant.
βοΈ Configuration
Works with zero config. Everything below is optional:
| Setting |
Default |
Description |
python-hover.enable |
true |
Enable or disable the extension |
python-hover.runtimeHelper |
true |
Use the persistent Python helper for runtime introspection and better symbol identity |
python-hover.onlineDiscovery |
true |
Fetch Sphinx inventories and docs from the web |
python-hover.docScraping |
false |
Fetch richer third-party documentation prose, examples, and see-also sections |
python-hover.docsVersion |
"auto" |
Python docs version ("auto", "3.11", "3.12", ...) |
python-hover.ui.showStatusBar |
true |
Show the PyHover status bar entry for quick actions and cache size |
python-hover.ui.showSignatures |
true |
Show function signatures in hover |
python-hover.ui.showParameters |
true |
Show the parameters table in hover |
python-hover.ui.maxParameters |
6 |
Maximum number of parameters shown before truncating the table |
python-hover.showPracticalExamples |
true |
Show code examples in hover |
python-hover.ui.showSeeAlso |
true |
Show related links and see-also references |
python-hover.requestTimeout |
10000 |
Network timeout in milliseconds |
python-hover.cacheTTL.inventoryDays |
7 |
Retention hint for inventory downloads; cached inventories persist until you clear the cache |
python-hover.hoverActivationDelay |
75 |
Extra delay before resolution starts on slower machines |
python-hover.ui.maxContentLength |
800 |
Max characters before "Read moreβ¦" truncation |
🏢 Custom / Private Libraries
Point Python Hover at any internal package with a Sphinx inventory:
{
"python-hover.customLibraries": [
{
"name": "my-internal-lib",
"inventoryUrl": "https://docs.internal.company.com/objects.inv",
"baseUrl": "https://docs.internal.company.com"
}
]
}
inventoryUrl is optional when the inventory lives at baseUrl/objects.inv.
Works with ReadTheDocs, GitHub Pages, self-hosted docs β anywhere that serves a standard objects.inv file.
βοΈ Offline / Air-Gapped Mode
{
"python-hover.onlineDiscovery": false
}
In offline mode you still get:
- All Python keywords, operators, and control flow (instant, static, zero network)
- All built-in constants (
None, True, False, Ellipsis, β¦)
- All
typing module constructs
- All previously cached library documentation
🔧 Troubleshooting
Hover not appearing?
- Make sure the Python extension (
ms-python.python) is installed and active
- Check the
python-hover.enable setting is still true
- Reload VS Code:
Ctrl+Shift+P β "Reload Window"
- Run
PyHover: Show Actions and choose Show PyHover Logs
Library documentation not found?
- Make sure the library is imported in the file you are hovering
- Check the library has Sphinx docs (most popular packages do)
- Confirm
python-hover.onlineDiscovery is enabled
- Run
PyHover: Show Actions and choose Clear Documentation Cache (Keep Python Corpus) if you want to force a fresh fetch
- For private packages, use the
customLibraries setting
Hover shows the wrong type or method?
Python Hover uses Pylance + AST + runtime introspection in layers. For best accuracy:
- Ensure Pylance is installed and type-checking is enabled
- Add type annotations so Pylance can infer the correct type
- File a bug with the symbol and a minimal snippet: GitHub Issues
📊 By the Numbers
| Area |
Snapshot |
| Coverage |
37+ Python keywords and operators with exact doc anchors |
| Built-ins |
70+ built-in functions with complete parameter docs |
| Popular libraries |
20+ third-party libraries pre-configured |
| Auto-discovery |
Thousands of libraries discoverable via Sphinx |
| Static speed |
< 1 ms for keywords and operators |
| Cached speed |
< 5 ms for cached library lookups |
| Package size |
153 KB total installed size |
| Setup cost |
0 configuration required to get started |
💬 What Developers Say
"Finally I don't have to leave VS Code to check pandas documentation."
"The context-awareness is incredible. It knows exactly which method I'm looking at."
"Hover over elif and get the right docs page. Details matter."
"Saved me hours of alt-tabbing. Worth every star."
🤝 Contributing & Support
Love Python Hover? Here is how to help:
- β Star the repo β helps other Python developers find it
- 📝 Leave a review β on the VS Code Marketplace
- 🐛 Report a bug β open an issue
- 💡 Suggest a feature β start a discussion
View Contributing Guide β
β Keep the Coffee Coming
Python Hover is free and open source. If it saves you time every day, a coffee keeps the bugs squashed and the features shipping:

Made with β€οΈ by KiidxAtlas
MIT License Β· Changelog Β· Contributing
β¬οΈ Back to Top