IDE Supported Features
Pyrefly’s language server powers a complete editing experience while fully disabling Pylance, ensuring no interference between checkers.
Each feature below links to the official LSP specification and shows what’s currently supported by Pyrefly.
Go to definition
Jump to where a symbol was originally defined with a click or F12. If there is both a .pyi and .py file, we will jump to the .py.
Go to type definition
Navigate to the underlying type of any expression. If the expression is a type, we will navigate to the .pyi file if both a .py and .pyi exist.
Go to declaration
Navigate to where the type was defined, but stop at imports.
Go to implementation
On a method, navigate to all reimplementations.
Move/rename file
When moving or renaming a file, Pyrefly will do it's best to rename all references to it.
Find references
List all usages of a symbol across your codebase.
Document symbols
See an outline of all top-level items in the current file.
Workspace symbols
Search globally for functions, classes, and variables.
Hover
See type info and docstrings when hovering over code.
Document highlights
Highlights all other instances of the symbol under your cursor.
Signature help
Live function signatures as you type, with parameter hints.
Completion
Autocomplete suggestions for project-specific symbols and imports.
Rename
Safely rename symbols project-wide.
Diagnostics
Type errors and warnings from Pyrefly’s checker appear in the diagnostics pane ("Problems" pane in VSCode).
Semantic tokens
Rich syntax highlighting based on token type and origin.
Inlay hints
Inline hints for types, parameter names, and return values.
We reuse Pyright's python.analysis.inlayHints.<> settings for backwards compatibility. If you have or had Pyright, check these settings if inlay hints do not appear.
You can turn inlay hints on or off using the VSCode Setting editor.inlayHints.enabled.
Inlay hints can be double clicked to insert them as an annotation.
Go-to-definition can be used on a type in an inlay hint to jump its definition. This works even if the type isn't explicitly imported by the current file.
Notebook support
Pyrefly provides language services for Jupyter notebooks directly in VS Code and also in Jupyter Lab.
In Jupyter Lab, once you install the jupyterlab-lsp extension, and Pyrefly will appear on the list of automatically-detected language servers.
Notebook support is experimental. Please report any bugs on our Github.
Call Hierarchy
See all incoming functions calls to a particular function, as well as all outgoing function calls from a function. Call Hierarchy provides a full picture of how a particular function is used within a call stack.
Type Hierarchy
See all subclasses and superclasses of a selected class.
Refactor: Pull Member Up and Push Member Down
Pull a method from a subclass to a superclass, or push a method from a superclass to a subclass.
Pull Member Up
Push Member Down
Refactor: Convert to Package and Convert to Module
Convert to Package takes .py file and moves it to a package directory with all logic moved into an init.py file.
Convert to Module takes an existing package with all logic defined in its init.py and creates a named .py file from it.
Refactor: Move function to top level
Takes a function nested within another function or statement and moves it to the top level of the module.
Refactor: Introduce Parameter
Adds a new parameter to a function definition and update all call sites to pass the new parameter.
Refactor: Inline Variable
Removes redundant variables by replacing them with their value.
Refactor: Extract to Field
Declare a new field on a class with the value of the selected expression.
Refactor: Extract to Variable
Declare a new variable with the value of the selected expression.
Refactor: Invert Boolean
Flips the value of a boolean and updates all usages to work with new value.
Planned features
See planned features and request your own on GitHub.