Skip to content

v3.3.5

Choose a tag to compare

@github-actions github-actions released this 25 Aug 15:47
· 173 commits to master since this release
  • Signature Help for JS/TS: Added a floating signature hint tooltip (SignatureHintPopup) that appears above the cursor when typing function arguments in JavaScript and TypeScript files. This feature highlights the active parameter and parses local signatures without requiring heavy AST analysis.
  • LSP Refactoring & Performance:
    • Unified project indexers (ProjectIndex and ProjectSymbolIndex) to eliminate redundant disk I/O and inconsistent file scanning. ProjectSymbolIndex now uses the ProjectIndex document cache as the single source of truth.
    • Optimized the diagnostic pipeline by removing the legacy LspDiagnostic conversion layer, allowing LSP servers to return Problem objects directly to the editor.
  • Floating LSP Toolbar: Added a context-aware popup toolbar that automatically appears when the cursor is idle on a symbol, providing quick access to "Go to Definition" and "Find References". It intelligently avoids overlapping with other popups (like autocomplete or signature hints) and automatically hides upon editor focus loss or tab switching.
  • LSP Bug Fixes:
    • Fixed a context loss bug where autocomplete popup would disappear when typing inside arrow function callbacks (e.g., map(x => { ... })).
    • Cross-File Symbol Resolution Fix: Constructors and exports added to a file are now immediately visible to the LSP engine in other files without requiring an app restart. This was achieved by introducing a real-time incremental project indexer that properly flushes all open files' states to ProjectIndex when switching tabs, completely decoupling LSP features from the disk auto-save mechanism. Also fixed a cache-miss issue when paths contained relative notations (like ./mathUtils.js) and prevented the editor from wiping the live index on every tab switch.
    • LSP Index Desync Fix: Fixed a lifecycle bug where discarding unsaved changes by closing a tab (with Auto-Save off) would leave the discarded changes trapped in the LSP index. The index now immediately reverts to the disk state when a tab is closed, ensuring autocomplete and diagnostics remain perfectly synced.
    • Scroll Restoration Bug: Fixed an annoying UI bug where the editor's scroll position would reset to line 1, character 1 every time you switched tabs or reopened a file. The restoration logic now waits for the async text loader to safely finish before restoring bounds.
    • Critical Data Corruption on Tab Switch: Fixed two severe race conditions where rapidly switching tabs could cause the editor to silently overwrite a file on disk with the contents of a different file. The diagnostic engine and the tab-flush mechanism now both strictly abort their snapshot routines if the editor is currently engaged in background text loading, guaranteeing that a file's data model is never cross-contaminated with transitional text from another tab.
    • Thread Race Condition on Fast Typing: Fixed a subtle data corruption bug where rapidly typing could cause older background diagnostic threads to overwrite the file's data model with stale keystrokes, permanently reverting recent changes right before an auto-save. Model updates are now strictly processed synchronously on the main thread.
    • Cursor Drift on Identical Files: Fixed an edge case where switching between two files containing the exact same text (or two empty files) would skip the async loading phase but completely fail to restore the cursor and scroll position for the new tab.
    • Diagnostic Bar Performance Fix: Fixed an extreme performance regression where the "Analyzing..." progress bar would spin for minutes even for a single line of code. Root cause: diagnostics were queued behind all other I/O work (auto-saves, project indexing, symbol extraction) on a single-threaded executor. Fix: added a dedicated diagnosticExecutor in ExecutorProvider so linting/LSP diagnostics always run immediately, isolated from disk I/O. Additionally moved the "Analyzing..." UI indicator inside the debounce runnable so it only appears after the user stops typing, not on every keystroke.
    • Diagnostic UI Freezing: Fixed an infinite "Analyzing..." loading bar bug that occurred when the LSP server rejected a diagnostic request or threw an internal error. The diagnostic engine now properly informs the UI to clear its loading state upon failure.
    • Multi-Import Completion Fix: Added support for properly completing multiple exports inside a single import block (e.g., import { a, b }).
    • Diagnostic Listener Memory Leak Fix: Fixed a critical UI bug where the diagnostic loading bar would repeatedly spin and hang due to duplicate listener registrations piling up during asynchronous file loads.
    • Undo/Redo Atomic Depth Fix: Fixed a subtle bug in the undo history where mismatched key types (e.g. typing a bracket after deleting a character) would prematurely close atomic edit groups, causing subsequent keystrokes to fragment the undo stack.
    • Tab Switch UX Improvements: Fixed annoying behavior when switching between tabs. The soft keyboard now instantly dismisses so it doesn't block the new file, and any leftover signature popups are correctly hidden. Additionally, the editor no longer attempts to forcefully save and restore the text cursor position across session reloads and tab switches, which felt unnatural; it now only persists the scroll viewport.
    • Hardware Keyboard Atomicity Fix: Brought the hardware keyboard Enter key path into parity with the software keyboard by properly wrapping its auto-indent operations inside an atomic undo group, ensuring the entire insertion can be undone in a single step.
    • Undo/Redo Critical Regression Fix: Fixed a severe logic bug where handleAutoClose and handleAutoIndent were opening redundant inner atomic groups. This double-nesting caused the undo group tracker to permanently leak, which silently disabled the Undo function entirely after typing brackets or newlines.
    • Git Diff Viewer Improvements: Added a vertical ScrollView to the bottom_sheet_diff_viewer to ensure proper vertical scrolling for large diffs.
  • ProjectsActivity Crash Fix: Fixed a fatal crash (IllegalArgumentException: Receiver not registered) occurring on Android 12 when users interacted with the system permission dialog before the broadcast receiver was fully registered.