abstract_ide
Project description
Abstract IDE
Abstract IDE is a modular, extensible Python-based Integrated Development Environment (IDE) toolset designed for developers working with web projects, particularly React/TypeScript applications. It provides a graphical user interface (GUI) built with PyQt for code analysis, import graphing, content searching, build automation, and more. The tool leverages background workers for non-blocking operations and integrates with external utilities for tasks like code searching, API testing, and file management.
This project is part of a larger ecosystem of "abstract" modules (e.g., abstract_paths, abstract_apis) and is ideal for analyzing large codebases, debugging builds, and automating repetitive development tasks.
Table of Contents
- Features
- Installation
- Usage
- Configuration
- Dependencies
- Project Structure
- Contributing
- License
- Acknowledgments
Features
Abstract IDE offers a tabbed GUI interface with the following core functionalities:
-
Runner Tab: Execute TypeScript compilation (
tsc) and React builds (yarn build) locally or via SSH. Displays errors and warnings with clickable links to open files in VS Code. Supports ANSI stripping, severity filtering, and alternate file extension resolution (e.g.,.ts↔.tsx). -
Functions Map Tab: Scans the project for import/export graphs, displaying functions as interactive buttons. Filter by name, view exporters/importers, and open files directly. Supports "all" or "reachable" scopes with customizable entry points (e.g.,
index.tsx,main.tsx).
- Find Content Tab: Advanced code search across directories. Supports recursive searches, string matching (partial or exact), file extensions, path filters, and line-specific queries. Results are clickable for editing in VS Code.
- API Client Tab: A console for testing APIs with dynamic endpoints, headers, and parameters. Fetches remote endpoints from
/api/endpointsand supports GET/POST methods.
- ClipIt Tab: Drag-and-drop file browser with clipboard integration for quick file operations.
-
Window Manager Tab: Manages multiple windows and layouts within the IDE.
-
Directory Map Tab: Generates a visual tree map of the project directory, with filters for extensions, types, and patterns.
- Collect Files Tab: Collects and lists files based on criteria like extensions and paths, with options to open all in VS Code.
- Extract Python Imports Tab: Scans Python files for imports and module paths, displaying them in a readable format.
Additional tools (integrated via workers):
- Code execution in a REPL-like environment with pre-installed libraries (e.g., NumPy, SciPy, PyTorch).
- Web browsing, searching, and snippet extraction.
- X (Twitter) post searching (keyword, semantic, user, threads).
- Image/PDF viewing and searching.
- Render components for inline citations.
The IDE uses multi-threading (QThread) for background tasks to keep the UI responsive.
Installation
Prerequisites
- Python 3.8+
- Git (for cloning the repository)
From PyPI
pip install abstract-ide
From Source
-
Clone the repository:
git clone https://github.com/yourusername/abstract-ide.git cd abstract-ide
-
Install dependencies:
pip install -r requirements.txt
(Or use the list from
abstract_ide.egg-info/requires.txt.) -
Run the IDE:
python -m abstract_ide
Usage
Launch the application:
python -m abstract_ide
Basic Workflow
- Set Project Path: In the Runner tab, enter the project directory (e.g.,
/path/to/react-app). - Run Build: Click "Run" to compile and build. Errors/warnings appear in lists—click to view snippets or open in editor.
- Map Functions: Switch to Functions Map tab, select scope ("all" or "reachable"), and scan. Filter functions and inspect imports/exports.
- Search Code: In Find Content tab, specify directory, strings (comma-separated), extensions, and flags. Results are listed for quick navigation.
- Test APIs: In API Client tab, select base URL, fetch endpoints, add headers/params, and send requests.
- Advanced: Use workers for background tasks like web searches or PDF analysis via function calls (see Tools).
Keyboard Shortcuts
- Double-click list items: Open in VS Code.
- Filter radios: Toggle error/warning views dynamically.
Example: Analyzing a React Project
- Load
/var/www/html/clownworld/bolshevid(as in the sample import graph). - Scan functions: View exports like
getIps,fetchMedia, and their importers/exporters. - Search for "useState": Find all occurrences in
.tsxfiles recursively.
Configuration
- Import Graph: Generated via
create_import_maps()and stored asimport-graph.jsonandgraph.dotin/data/import_tools/. - Custom Entries: Override entry points (e.g.,
index.tsx) in the Functions Map tab. - Extensions: Configurable via UI inputs (e.g., comma-separated lists).
- SSH Builds: Specify
user@hostfor remote execution.
Customize via environment variables:
BASE_DIRECTORY: Default project root (e.g.,/var/www/html/clownworld/bolshevid).
Dependencies
From abstract_ide.egg-info/requires.txt:
- abstract_apis
- PyQt5 (or PyQt6)
- abstract_webtools
- abstract_utilities
- abstract_gui
- pydot
- abstract_clipit
- flask
- abstract_paths
Install via pip install -r requirements.txt.
Project Structure
├── Docs/
├── README.md
├── finditGUI.py
├── logs/
├── pyproject.toml
├── setup.cfg
├── setup.py
├── src/
│ └── abstract_ide/
│ ├── console_utils/
│ │ ├── collapsable_log_panel.py
│ │ ├── consoleBase.py
│ │ ├── ensure_resizable.py
│ │ ├── initFuncsCall.py
│ │ ├── log_manager.py
│ │ ├── startConsole.py
│ │ └── worker_scans.py
│ ├── consoles/
│ │ ├── apiTab/
│ │ │ ├── _build_ui.py
│ │ │ ├── functions/
│ │ │ │ ├── base_utils.py
│ │ │ │ ├── build_ui.py
│ │ │ │ ├── collect_utils.py
│ │ │ │ ├── combo_utils.py
│ │ │ │ ├── endpoint_utils.py
│ │ │ │ ├── fetch_utils.py
│ │ │ │ ├── http_helpers.py
│ │ │ │ ├── imports.py
│ │ │ │ ├── logging_utils.py
│ │ │ │ ├── pyproject.toml
│ │ │ │ ├── request_utils.py
│ │ │ │ └── row_utils.py
│ │ │ ├── getFnames.py
│ │ │ ├── imports/
│ │ │ │ ├── constants.py
│ │ │ │ └── imports.py
│ │ │ ├── initFuncs.py
│ │ │ └── main.py
│ │ ├── appRunnerTab/
│ │ │ ├── functions/
│ │ │ │ └── core_utils.py
│ │ │ ├── getLines.py
│ │ │ ├── imports.py
│ │ │ ├── initFuncs.py
│ │ │ └── main.py
│ │ ├── clipitTab/
│ │ │ ├── FileDropArea/
│ │ │ │ ├── functions/
│ │ │ │ │ ├── directory_utils.py
│ │ │ │ │ ├── python_utils.py
│ │ │ │ │ ├── rebuild_utils.py
│ │ │ │ │ └── view_utils.py
│ │ │ │ ├── imports.py
│ │ │ │ ├── initFuncs.py
│ │ │ │ └── main.py
│ │ │ ├── FileSystemTree/
│ │ │ │ ├── functions/
│ │ │ │ │ └── text_utils.py
│ │ │ │ ├── imports.py
│ │ │ │ ├── initFuncs.py
│ │ │ │ └── main.py
│ │ │ ├── JSBridge/
│ │ │ │ └── JSBridge.py
│ │ │ ├── clipitTab/
│ │ │ │ ├── functions/
│ │ │ │ │ └── drop_utils.py
│ │ │ │ ├── getFnames.py
│ │ │ │ ├── imports.py
│ │ │ │ ├── initFuncs.py
│ │ │ │ └── main.py
│ │ │ ├── imports/
│ │ │ │ ├── imports.py
│ │ │ │ ├── qt_funcs.py
│ │ │ │ └── utils.py
│ │ │ ├── imports.py
│ │ │ ├── initFuncs.py
│ │ │ ├── main.py
│ │ │ └── utils/
│ │ │ └── read_utils.py
│ │ ├── finderTab/
│ │ │ ├── imports/
│ │ │ ├── main.py
│ │ │ └── tabs/
│ │ │ ├── collectFilesTab/
│ │ │ │ ├── functions.py
│ │ │ │ ├── initFuncs.py
│ │ │ │ └── main.py
│ │ │ ├── diffParserTab/
│ │ │ │ ├── functions/
│ │ │ │ │ ├── edit_funcs.py
│ │ │ │ │ ├── files_funcs.py
│ │ │ │ │ ├── getkeys.py
│ │ │ │ │ └── select_funcs.py
│ │ │ │ ├── imports.py
│ │ │ │ ├── initFuncs.py
│ │ │ │ └── main.py
│ │ │ ├── directoryMapTab/
│ │ │ │ ├── functions.py
│ │ │ │ ├── initFuncs.py
│ │ │ │ └── main.py
│ │ │ ├── extractImportsTab/
│ │ │ │ ├── functions.py
│ │ │ │ ├── initFuncs.py
│ │ │ │ └── main.py
│ │ │ ├── finderTab/
│ │ │ │ ├── functions.py
│ │ │ │ ├── initFuncs.py
│ │ │ │ └── main.py
│ │ │ ├── getFnames.py
│ │ │ ├── imports.py
│ │ │ └── testTab/
│ │ │ ├── functions.py
│ │ │ ├── initFuncs.py
│ │ │ └── main.py
│ │ ├── imageTab/
│ │ │ ├── imports/
│ │ │ │ ├── functions.py
│ │ │ │ ├── green_screen_delimiter/
│ │ │ │ │ ├── compare_screens.py
│ │ │ │ │ ├── detect_allgreen.py
│ │ │ │ │ ├── detect_green_screen_blur.py
│ │ │ │ │ ├── get_new_imagepath.py
│ │ │ │ │ └── utils.py
│ │ │ │ └── imports.py
│ │ │ └── main.py
│ │ ├── imports/
│ │ ├── launcherWindowTab/
│ │ │ ├── functions/
│ │ │ │ └── core_utils.py
│ │ │ ├── imports.py
│ │ │ ├── initFuncs.py
│ │ │ └── main.py
│ │ ├── logPaneTab/
│ │ │ ├── functions/
│ │ │ │ └── core_utils.py
│ │ │ ├── imports.py
│ │ │ ├── initFuncs.py
│ │ │ └── main.py
│ │ ├── main.py
│ │ ├── reactRunnerTab/
│ │ │ ├── functionsTab/
│ │ │ │ ├── flowLayout/
│ │ │ │ │ ├── functions/
│ │ │ │ │ │ └── function_utils.py
│ │ │ │ │ ├── imports.py
│ │ │ │ │ ├── initFuncs.py
│ │ │ │ │ └── main.py
│ │ │ │ ├── functionsTab/
│ │ │ │ │ ├── functions/
│ │ │ │ │ │ ├── build_ui.py
│ │ │ │ │ │ ├── filter_utils.py
│ │ │ │ │ │ ├── function_utils.py
│ │ │ │ │ │ ├── init_yabs_creator.py
│ │ │ │ │ │ ├── log_utils.py
│ │ │ │ │ │ └── variable_filter_utils.py
│ │ │ │ │ ├── imports.py
│ │ │ │ │ ├── initFuncs.py
│ │ │ │ │ └── main.py
│ │ │ │ ├── getFnames.py
│ │ │ │ ├── imports.py
│ │ │ │ └── main.py
│ │ │ ├── imports/
│ │ │ ├── main.py
│ │ │ └── runnerTab/
│ │ │ ├── functions/
│ │ │ │ ├── action_utils.py
│ │ │ │ ├── analyser.py
│ │ │ │ ├── clickHandlers_utils.py
│ │ │ │ ├── edit_utils.py
│ │ │ │ ├── helper_utils.py
│ │ │ │ ├── highlight_utils.py
│ │ │ │ ├── init_dict_panel.py
│ │ │ │ ├── init_split_edit.py
│ │ │ │ ├── init_trees.py
│ │ │ │ ├── initialize_init.py
│ │ │ │ ├── logEntries_utils.py
│ │ │ │ └── warning_utils.py
│ │ │ ├── imports.py
│ │ │ ├── initFuncs.py
│ │ │ └── main.py
│ │ ├── start_gui.py
│ │ └── windowManagerTab/
│ │ ├── functions/
│ │ │ ├── build_ui.py
│ │ │ ├── command_utils.py
│ │ │ ├── core_utils.py
│ │ │ ├── file_utils.py
│ │ │ ├── update_utils.py
│ │ │ └── wmctrl_utils.py
│ │ ├── getFnames.py
│ │ ├── imports/
│ │ │ ├── functions.py
│ │ │ └── imports.py
│ │ ├── initFuncs.py
│ │ └── main.py
│ ├── logTab/
│ │ ├── functions/
│ │ │ └── toggle_funcs.py
│ │ ├── imports.py
│ │ ├── initFuncs.py
│ │ └── main.py
│ └── test_gui.py
└── test/
├── finditGUI.py
├── get_all_import_classes.py
├── separate.py
├── spliceerrs.py
├── test_consoles.py
└── testit.py
- utils/managers: Core GUI logic and workers.
- utils/imports: Import graphing and utilities.
- utils/widgets: Reusable Qt widget helpers.
To integrate the provided screenshots into this README:
-
Save the Screenshots: Download or capture the screenshots and save them in a dedicated folder, e.g.,
docs/images/. Name them descriptively:directory_map.pngfind_content.pngclipit.pngextract_imports.pngapi_client.pngfunctions_map.pngcollect_files.png
-
Update the README: Insert the Markdown image syntax under the relevant feature descriptions, as shown above (e.g.,
). Ensure the path is relative to the README file. -
Commit and Push: Add the images to your Git repo and push the changes. This will make them visible on GitHub or other hosts.
If the screenshots need processing (e.g., cropping, annotations), use tools like ImageMagick or online editors before adding.
Contributing
- Fork the repository.
- Create a feature branch:
git checkout -b feature/new-tool. - Commit changes:
git commit -am 'Add new tool'. - Push:
git push origin feature/new-tool. - Submit a Pull Request.
Report issues via GitHub Issues.
License
MIT License. See LICENSE for details.
Acknowledgments
- Built with PyQt for cross-platform GUI.
- Integrates with
pydotfor graph visualization. - Thanks to xAI for inspiration in tool integration.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file abstract_ide-0.0.0.348.tar.gz.
File metadata
- Download URL: abstract_ide-0.0.0.348.tar.gz
- Upload date:
- Size: 204.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fc5ef9e551334c5d5c8b6881fcc4b04c2d61a3f1eb6e62982dcec9b56d7764ab
|
|
| MD5 |
6a93298df07efe1c8372f3df4db6b6f5
|
|
| BLAKE2b-256 |
884c8c39dc03ef416fd73c277b476cc7855323ea365d58f6480c3c3022a2e79e
|
File details
Details for the file abstract_ide-0.0.0.348-py3-none-any.whl.
File metadata
- Download URL: abstract_ide-0.0.0.348-py3-none-any.whl
- Upload date:
- Size: 297.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b14114293535c8467ff4d68b8be4abdd6866630b40e41795626c421dee236ed0
|
|
| MD5 |
e958ad01e4af5e90d44f21e2be2851f4
|
|
| BLAKE2b-256 |
bb2cc7a99b115961672fdddfec5d38816209bd6afb4e9408caecdc9a435c1cde
|