Skip to content

v0.7.0 — Project Path Caching

Latest

Choose a tag to compare

@github-actions github-actions released this 11 Jul 23:02
a2d4665
release-0 7 0

Added

  • Project Path Caching: the extension now caches your project's module structure so relative-to-absolute path conversion resolves faster, especially in large projects. Enabled by default. ([#41])
    • New setting cache.enableProjectCache (default: on) to toggle caching
    • New setting cache.autoRebuildOnStartup (default: off) to rebuild the cache when VS Code starts
    • New setting cache.watcherDebounceMs (default: 500) to tune how quickly file changes refresh the cache
    • New command Verse: Rebuild Project Path Cache to refresh the cache on demand
    • New command Verse: Show Cache Status to inspect the current cache state
  • Capture Diagnostics Corpus: new command Verse: Capture Diagnostics Corpus exports the verbatim compiler diagnostics of open Verse files to JSON. Used to maintain the message-format regression corpus (test-fixtures/corpus/) that guards import extraction against wording changes between UEFN releases

Changed

  • Faster Cache Rebuilds: project files are scanned concurrently when rebuilding the path cache. The cache storage format changed; existing caches are rebuilt automatically on first use after updating. ([#41])
  • Quick Fix Titles Are Plain Text: quick-fix menu entries no longer prefix titles with a checkmark symbol, and the confidence markers on multi-option import suggestions now read [medium confidence] / [low confidence] instead of emoji indicators
  • Assets Digest Cache Duration: the cached list of project asset class names now refreshes every 5 minutes instead of every 30 seconds, matching the API digest cache. Asset changes are normally picked up immediately by the file watcher; the longer interval only applies as a fallback when a digest change is not observed by the watcher

Fixed

  • Optimize Imports Diagnostic Parsing: "Optimize Imports" no longer inserts a malformed import when the compiler suggests an assignment fix (for example using { to write 'set Foo }), and no longer adds every candidate module of an ambiguous "one of" error at once; ambiguous cases are left to the quick-fix menu ([#69])
  • Quick Fix Menu Noise: "Did you mean any of" compiler suggestions no longer produce import options for bare identifiers (such as local definitions echoed in the option list), which generated invalid using statements when applied ([#70])
  • Path Conversion with Project Cache: "Use Absolute Path" and related commands produced malformed import paths or wrong module suggestions when the project path cache was enabled (the default) ([#41])
    • Cache results now use the same location format as the filesystem scan instead of raw declaration paths
    • Module names are matched exactly: unrelated identifiers like MyUtils no longer match Utils, and class or struct names are never offered as module locations
    • Cached results are validated against the filesystem before use, with automatic fallback to a full scan when the cache is stale
    • The search near the current file runs first again, so the nearest module is preferred over project-wide matches
  • Optimize Imports Reliability: with auto-import enabled (the default), "Optimize Imports" could momentarily strip every import, report success, and leave the file unorganized while the imports reappeared a moment later. The command now organizes imports in a single step and never leaves the file without them; behavior no longer depends on the auto-import debounce delay ([#42])
  • Auto-Import Asset Class Names: automatic imports now exclude asset class names from the import path, matching the quick-fix behavior. Previously the automatic path could import using { A.B.ClassName } where the quick fix correctly used using { A.B } ([#43])
  • Indented Imports No Longer Corrupted: adding an import to a file that uses the indented style (using: with the path on the next line) no longer deletes the using: line while leaving the path line orphaned, which lost the existing import and broke compilation ([#68])
  • Module-Scoped Imports Left in Place: a using statement inside a module body is no longer moved to the top of the file by auto-import or "Optimize Imports", and saving no longer inserts blank lines after it in the middle of the module ([#67])
  • Asset Changes Detected Promptly: adding or renaming assets in UEFN is now picked up as soon as the assets digest regenerates, instead of after a delay. The file watcher for the out-of-workspace assets digest was not firing ([#43])
  • Ambiguous Module Detection: when a module is defined in several files, path conversion no longer drops valid locations depending on the order files are scanned ([#43])
  • Snooze Timer: repeatedly starting snooze from the command palette no longer leaves extra countdown timers running, and an active snooze is cleaned up when the extension is disabled or reloaded ([#43])
  • Diagnostics Noise in UEFN Workspaces: the auto-import listener no longer tries to open VS Code internal documents (which logged an error on every edit preview) and no longer reprocesses Epic's read-only *.digest.verse files, which carry permanent compiler errors in the standard UEFN workspace, on every diagnostics update ([#46])
  • Path Conversion Scan Scope: the fallback scan for explicit module declarations no longer reads Epic's digest files on every lookup in the standard UEFN multi-root workspace; it is now scoped to the project folder
  • Debounce Delay Setting Restored: general.autoImportDebounceDelay now actually controls the auto-import debounce. The deprecated general.diagnosticDelay setting's registered default (1000ms) silently overrode it, so the intended 3000ms default never applied and changing the new setting had no effect. An explicitly set diagnosticDelay is still honored when the new setting is left unset ([#76])
  • Status Bar Menu Error Feedback: when a status bar menu action fails (for example, a settings update is rejected), the error is now shown as a notification and written to the extension log instead of failing silently
  • Digest Suggestions Survive Broken Bundled Data: when none of the extension's bundled pre-compiled digest files can be loaded (for example after a corrupted install), import suggestions now fall back to parsing digest files at runtime instead of silently operating with an empty digest index, which previously left digest-based suggestions returning no results
  • Ambiguous Import Mappings Reconnected: the behavior.ambiguousImports setting (and its shipped vector3/vector2/rotation defaults) is applied again. The code read a stale pre-0.6.0 configuration key, so configured mappings never took effect and every activation logged a settings write error. Mappings stored under the pre-0.6.0 verseAutoImports.ambiguousImports key must be moved to verseAutoImports.behavior.ambiguousImports ([#77])
  • Asset Class Names Parsed on UEFN 41.10: asset class detection recognizes the 41.10 Assets.digest.verse format again. The parser only matched Name<public|internal|private> := class, so the 41.10 shapes (specifiers carrying {...} arguments such as <scoped {...}>, stacked specifiers including on the class keyword like class<final><scoped {...}>, protected, and name<...>:type = external {} instance declarations) parsed to zero names and silently disabled the asset-class-boundary feature. All of these shapes are now recognized, while the older formats still parse and indented class members are no longer mistaken for asset names ([#63])

Full Changelog: v0.6.4...v0.7.0