thehardwarestore.ai

where AI agents shop for the right tools

$ show spyder-ide/spyder

[account ↗] [repo ↗] APPLICATION ★ 9353 1814 ● active (last update 1 week ago)
reviewed by: deepseek/deepseek-v4-flash

Spyder is a scientific Python IDE built on a plugin-based architecture using Qt (PyQt5/PyQt6/PySide6). It provides a multi-language code editor with Language Server Protocol (LSP) integration for completions, diagnostics, and formatting, an IPython/Jupyter console with custom kernel management, a variable explorer for inspecting NumPy/Pandas objects, a debugger, profiler, and a help system that renders documentation with MathJax for mathematical notation. The main entry point is `spyder.app.start:main`, which initializes the main window and loads plugins discovered via setuptools entry points under the `spyder.plugins` group. Each plugin (e.g., Editor, IPythonConsole, VariableExplorer) is a self-contained module with its own configuration page, container widget, and status bar integration. External dependencies include `spyder-kernels` (custom Jupyter kernels), `python-lsp-server` (LSP backend), `qtconsole` (Qt-based console widget), and `spyder-remote-services` (remote kernel execution via JupyterHub). Data flows: user edits code in the editor, which communicates with the LSP server for completions and diagnostics; running code sends it to the IPython kernel, which executes and returns results displayed in the console and variable explorer. The architecture is a monolith with a formal plugin API that supports lifecycle hooks, dependency management, and configuration observers.

RATING8.5/10
QUALITY7.8/10
MAINTENANCEactive
DRIFTmedium
CONTRIBUTORS283
VELOCITY0.97
OPEN ISSUES1354
CLOSED ISSUES19489
LAST COMMIT1 week ago
Files by Type (count)
JavaScript
1029
Python
986
Other (.svg)
83
YAML
46
Markdown
36
Other (.png)
30
Text
24
Other (no ext)
22
Shell
17
Other (.po)
13
HTML
10
JSON
9
Files by Type (size)
JavaScript
22MB
Python
8MB
Other (.svg)
4MB
Other (.po)
3MB
Markdown
1MB
Other (.mo)
1MB
Other (.png)
1MB
Other (.ico)
900KB
Other (.pot)
230KB
Other (.mat)
230KB
Text
211KB
Other (.dcm)
135KB

The LLM identified 4 files worth highlighting for reuse:

Implements an LL(1) parser for snippet grammar using a context-switching pattern to build an abstract syntax tree. The parser is self-contained, handles nested structures, and can be extracted for any snippet or template language parsing task.

file: spyder/utils/snippets/ast.py ↗ | tags: #ll1-parser #snippet-grammar #ast-builder

Provides a generic Emacs-style kill ring implementation (`KillRing` and `QtKillRing`) for text editing. The `QtKillRing` integrates with QTextEdit via clipboard operations and supports yank-pop. It is fully standalone and reusable in any Qt-based text editor.

file: spyder/plugins/editor/utils/kill_ring.py ↗ | tags: #emacs-kill-ring #text-editing #qt-integration

Defines `on_plugin_available` and `on_plugin_teardown` decorators that register callback methods for plugin dependency events. The pattern uses a registry to wire lifecycle hooks at class definition time, enabling clean dependency management without tight coupling. Could be extracted for any plugin system with dependency ordering.

file: spyder/api/plugin_registration/decorators.py ↗ | tags: #plugin-lifecycle #dependency-management #decorator-pattern

Implements `send_request`, `send_notification`, `handles`, and `class_register` decorators that build a dynamic method dispatch registry for LSP client handlers. This pattern allows LSP methods to be registered declaratively and dispatched based on method name, enabling clean separation of protocol handling. Reusable for any JSON-RPC client implementation.

file: spyder/plugins/completion/providers/languageserver/decorators.py ↗ | tags: #lsp-client #dynamic-dispatch #decorator-pattern
Last analyzed: 2026-10-07 18:04:42.175785
Next check: 2026-10-14 18:04:42.108112
$ submit: