Skip to content

Latest commit

 

History

History
280 lines (240 loc) · 14.1 KB

File metadata and controls

280 lines (240 loc) · 14.1 KB

Changelog

[1.0.0] — 2026-05-10 — First public release 🌹

The first Marketplace release of Roseline. Brings together every feature delivered across the 0.x prereleases — Phase 1–3 from the original spec plus substantial polish, monorepo support, and a performance pass — into one production-grade build.

Highlights

  • 🔍 Component Graph QuickPickCtrl+Shift+. opens parents/children of any .tsx/.jsx/.ts/.js file; click jumps you there.
  • 🧭 Tree View in the Activity Bar — auto-syncs as you switch tabs, so the graph of the active file is always one glance away.
  • 🌳 Project Tree mode — full hierarchy of every React project in the workspace, with cycle markers (), orphan fallback for UI-library projects, and roseline.projectScope (auto/all/active) to focus on the project that contains your active file.
  • 📦 Barrel re-export tracing — named, wildcard, as-rename, and chained barrels all resolve through to the leaf component.
  • 🛡️ External libraries excluded — react-icons, MUI, framer-motion, etc. never leak into the graph (node_modules guard at the resolver level).
  • 🖱️ Right-click everywhere — Explorer, editor, and tree node context menus (Reveal in Explorer · Copy Path · Find All References).
  • ⚡ Reverse parent index + background pre-indexing — switching tabs in a monorepo of 30+ React apps is O(1) once a scope is indexed; first scan runs in 40-file batches that yield to the UI between batches, so the editor stays responsive and the CPU stays cool.
  • 💾 Smart cache — RAM-only or persisted to disk at a custom path (defaults to E:\roseline-cache). LRU + age-based eviction (cacheMaxEntries 5000 · cacheMaxAgeDays 7).
  • 👁️ Live updates — FileSystemWatcher invalidates only the affected scope; next access self-heals through getParents.
  • 📋 Output log + Roseline: Diagnose — dump the detection state, cache stats, and active-file children to an Output channel anytime.

Detection signals

A directory becomes a project boundary if it contains any of: tsconfig.json, jsconfig.json, package.json declaring react, or a vite.config.* / next.config.* / remix.config.* / webpack.config.* / rsbuild.config.* alongside a package.json. Bare React workspace folders (no config at all) are detected via the workspace folder root as a fallback.

Numbers

  • 59 / 59 manual test cases verified across Phase 1, Phase 2, Phase 3, Polish, and Performance suites.
  • Verified on a real-world npm-workspaces monorepo (31 React exercises with hoisted react dependency).
  • CPU peaks during indexing: ~30% on AC, ~50% on battery, with a 4-core i5-10300H + 16 GB.

Branding

  • Marketplace icon refreshed to a deep-magenta compass rose (the rose, finally red 🌹). Activity Bar icon kept unchanged — a long-verified design that reads cleanly at 76×76 on dark themes.

[0.4.1] — 2026-05-09 — Patch

Fixed

  • Roseline: Diagnose command was registered in code but missing from package.json contributes.commands, so it didn't appear in the Command Palette. Now visible.

[0.4.5] — 2026-05-09 — Diagnose: cache + index stats

Added

  • Roseline: Diagnose now appends a Cache & index section to its output: current cache size + cap, cumulative LRU evictions since process start, reverse-index sizes (children referenced, parents indexed, scopes fully walked). Lets users verify LRU eviction (T53) and overall index health without a profiler.
  • GraphCache.lastEvictionCount exposes a running tally of LRU evictions — surfaced via Diagnose, can also be inspected programmatically.

[0.4.4] — 2026-05-09 — Faster first-click

Fixed

  • Race when clicking the rose icon right after install/reload. Roseline used to defer activation until the user clicked the view, but the bundle (~3.4 MB — bundles the TypeScript compiler) takes a few hundred ms to parse on V8's first load. If the user clicked while that was happening, the view rendered VS Code's default "There is no data provider registered" placeholder.
  • Added "activationEvents": ["onStartupFinished"] so Roseline pre-warms shortly after VS Code finishes its own startup, before the user has a chance to click. The first click is now instant; subsequent reloads are too because V8's compilation cache is already warm.

[0.4.3] — 2026-05-09 — Status bar icon

Fixed

  • Replaced $(rose) (which doesn't exist in VS Code's codicon set — rendered as a blank/placeholder glyph) with the standard animated $(loading~spin). The status-bar now reads ⟳ Roseline: indexing X/Y files with a continuously spinning indicator — the conventional "in progress" pattern, instantly recognisable as live work and not a stuck UI.

[0.4.2] — 2026-05-09 — Status bar UX

Fixed

  • Status bar now stays visible long enough to see. Indexing a small project (8 files) finished in ~30 ms — faster than the eye registers — so the 🌹 Roseline: indexing… indicator flashed and vanished. Status bar now stays shown for at least 600 ms, even when the underlying job completes sooner.

[0.4.1] — 2026-05-09 — Diagnose command registered

Fixed

  • Roseline: Diagnose is now exposed in the Command Palette (the registration was present in code but missing from package.json contributes — added).

[0.4.0] — 2026-05-09 — Performance pass for big workspaces

Added

  • Reverse parent index. Roseline now maintains a child → parents map as a side effect of parsing children. Once a scope is fully indexed, getParents switches from a workspace-wide scan to an O(1) lookup — switching tabs in a monorepo of 30+ React apps goes from "scan again" to instant.
  • Background pre-indexing on activate. When the extension boots with a React file open, it walks that file's project in the background (40-file batches, yielding to the UI between batches so the editor stays responsive and the CPU stays cool). Subsequent operations are instant. Re-runs whenever the active editor moves into a new project boundary.
  • Status-bar progress. A 🌹 Roseline: indexing 240/1024 files… indicator shows up while a background scan is running, and disappears the moment it's done. No permanent status-bar real estate.
  • roseline.cacheMaxEntries setting (default 5000, 0 = unbounded). LRU eviction once the cap is hit, so RAM use is predictable on huge repos. Combined with the existing cacheMaxAgeDays, the cache is bounded on both size and freshness axes.
  • findActiveProject helper. Walks up from a file to the nearest project boundary without doing a full workspace scan — used internally for the pre-index trigger.

Changed

  • Cache file format bumped to v3 (older formats are dropped silently and rebuilt at next use; mtime-stale entries also drop on read).
  • getParents now reuses cached children when scanning, saving a re-read + re-parse for every workspace file even on the cold path.

[0.3.7] — 2026-05-09 — Active-project scope + boundary walk-up fix

Fixed

  • Active-file boundary detection. findNearestTsConfig used to walk up the filesystem looking only for tsconfig.json. Files in projects that ship only package.json + vite.config.js (npm workspaces, plain Vite) walked all the way to the drive root, which made getParents scan the whole disk and silently fail — leaving the Component Graph blank for those files. The walk now also recognises jsconfig.json, package.json, vite/next/remix/rsbuild/webpack.config.*, and stops hard at workspace folder roots.

Added

  • roseline.projectScope setting (auto · all · active, default auto). In Project Tree mode this narrows the visible list to just the project that contains the active editor's file when the workspace has more than 5 detected projects — perfect for monorepos of 30+ exercise apps. all keeps the previous full-list behaviour; active always narrows.
  • Project Tree now re-renders automatically when the active editor changes (under auto/active scope) so the visible project follows you across files.

[0.3.6] — 2026-05-09 — Workspaces monorepo fix

Fixed

  • npm/yarn/pnpm workspaces detection. In monorepos that hoist react to the root (very common — Vite teaching repos, multi-app projects), each leaf package.json doesn't declare react itself. v0.3.5 missed these and showed the whole monorepo as one big project with all apps as orphans.
  • A package.json next to a vite.config.*, next.config.*, remix.config.*, webpack.config.*, or rsbuild.config.* is now treated as a project boundary even when it doesn't list react in its own dependencies.

Added

  • Roseline: Diagnose command — dumps a full snapshot to the Output channel: workspace folders, every tsconfig.json / jsconfig.json / package.json found, which ones promote to a React project, the final detected project list, and the active file's children. Use this when something looks wrong.

Performance

  • Workspace scans for configs and package.json files now run in parallel.

[0.3.5] — 2026-05-09 — Multi-project workspace fix

Fixed

  • Project nodes no longer auto-expand in multi-project workspaces. Opening a workspace with many React sub-projects (e.g. a teaching repo with 30+ exercise folders) used to render every project's full orphan tree on the first frame — triggering AST parses across the whole workspace. Projects now stay collapsed when there are 2+ of them and only expand on click. Single-project workspaces still auto-expand as before.

Added

  • package.json with react dep is now a project boundary signal, alongside tsconfig.json / jsconfig.json. Each CRA / Vite app inside a monorepo is detected as its own project automatically — no need to add a jsconfig.json to every sub-folder. Non-React package.json files (Node CLIs etc.) are ignored.

[0.3.4] — 2026-05-09

Fixed

  • Nested config no longer hides the parent project. Adding a jsconfig.json inside a sub-folder (e.g. src/components/ui/foo/) used to demote the parent tsconfig.json from "leaf" status and make the whole workspace vanish from the Project Tree. Detection now keeps a parent project as long as it owns JSX files outside any nested config's subtree.

Added

  • node_modules guard — even with unusual baseUrl configs that could otherwise resolve an import into node_modules, the resolver now refuses to trace dependency files. External libraries (react-icons, framer-motion, MUI, Tailwind plugins, etc.) are silently excluded from parents/children/project tree.

[0.3.3] — 2026-05-09

Fixed

  • Find All References is now consistent — the cursor is positioned on the component declaration before the references command runs, so the language server always resolves the right symbol. Previously the result depended on wherever the cursor happened to be in the file.

[0.3.2] — 2026-05-09 — Pro Polish Pass

Added

  • Right-click integration — Explorer + editor context menus now offer "Roseline: Show Component Graph" on .jsx/.tsx/.ts/.js files. No need to focus the file first.
  • Tree node context menu — right-click a component in the sidebar to Reveal in Explorer, Copy Path, or Find All References.
  • True recursive Expand All — BFS-based expansion now walks past the 3-level reveal cap, opening every expandable node up to a 5,000-node safety limit (warns if it hits the cap).
  • Output log — errors are now written to View → Output → Roseline instead of being swallowed silently. New "Roseline: Show Output Log" command surfaces it from the Command Palette.
  • Visual polish — tree component nodes now use VS Code's themed file icons (matches your Material Icon Theme etc.) and tooltips show the full absolute path.
  • Title bar swap — Expand All now sits adjacent to the built-in Collapse All for natural + / pairing.

Changed

  • Tree node parent references — required for TreeView.reveal() to traverse nested elements during recursive Expand All.

[0.3.1] — 2026-05-09

Added

  • Expand All button in the view title bar (alongside the built-in Collapse All). Expands up to 3 levels per click — re-click for deeper trees.

[0.3.0] — 2026-05-09

Added

  • Project Tree mode — toggle button in the view title bar to switch between "Active File" view (parents/children of current file) and "Project Tree" view (full component hierarchy of every React project in the workspace).
  • Multi-project safe: detects each {ts,js}config.json boundary as its own project, only includes those containing .tsx/.jsx files. Non-React folders (extension source, scripts, templates) are filtered out automatically.
  • Bare CRA/Vite projects (no config) are detected via workspace folder fallback.
  • Cycle markers (↻) when a component branch loops back to an ancestor — expansion stops, file still openable on click.
  • Orphan-as-root fallback for UI library projects (no main/App entry).
  • roseline.refreshProjectTree command to manually rebuild the project list.
  • New tsconfig/jsconfig watcher invalidates project boundaries automatically.

[0.2.0] — 2026-05-09

Added

  • FileSystemWatcher — cache invalidates and tree refreshes automatically on file change/create/delete (200ms debounce)
  • Barrel file / re-export tracing
    • export { X } from './path' and export { X as Y } from './path'
    • export * from './path' (wildcards) — verified against own exports of leaf
    • Chained barrels resolve all the way to the defining file
    • Cache bumped to v2 to track each file's own exports

[0.1.0] — 2026-05-09

Added

  • QuickPick component graph navigation (Ctrl+Shift+.)
  • Tree View in Activity Bar with auto re-sync on file switch (300ms debounce)
  • Path alias resolution via per-file tsconfig.json walk-up (monorepo support)
  • Graph cache with mtime invalidation
    • roseline.cacheMode (memory | custom)
    • roseline.cachePath (default E:\roseline-cache)
    • roseline.cacheMaxAgeDays (auto-delete on activate)
  • roseline.clearCache command
  • Supports .tsx .jsx .ts .js