Releases: interactive-data-language/vscode-idl
v3.2.4
Fixed an issue where improper versions of node.js were used for the language server startup. This caused failures in the language server starting which would prevent any of the feature goodness of the language server from being accessible.
Added in a sidebar entry for notebooks
Updated cache logic to fix a potential circular JSON error when adding items to our cache
Renamed "Additional Actions" sidebar to "Quick Access" and updated the icon used
Resolve an edge case when running notebooks where a false-failure would be detected that halts notebook execution.
Fixed an issue when launching IDL on Mac where ENVI crashes because "LANG" is missing from the environment
v3.2.3
Re-work cancellation to handle cases where the worker threads were too busy to get the messages that work needs to be stopped. If you now use a very large file (take "slicer3.pro" from the IDL distribution) events are interrupted as expected.
This also includes a fix where false error messages would show up in the UI for work that was canceled.
Update most dependencies with changes from first re-release of the extension. This includes to VSCode 1.82.
Fixed a bug where the "strictarrsubs" compile option was missing from the list of valid compile options
v3.2.2
Major change to the language server and worker threads to implement a cancellation framework. The ability to cancel work happens automatically for PRO files and IDL Notebooks.
This change will address performance issues where, if the code can not be parsed as quickly as you were typing, you would not get auto-complete, outlines, hover-help, semantic tokens, formatting on save, etc.
In these cases it could take 15-30 seconds for the language server to respond while it worked through a backlog of processing that was no longer relevant.
v3.2.1
Notebook key behavior change: If you are running one or more cells, and there is an error from IDL for any cell being executed, all pending cells are cleared and not executed. This makes sure that, if later cells depend on earlier ones, that you don't have cascading failures.
Resolve a problem with the language server where you can get into an infinite loop trying to resolve include statements in IDL when they end up including one another
Add a potential fix for always-increasing loops when doing change detection for parsed files
Fix an issue where, if you have the same folder or sub folder on IDL's path and in an open workspace, then you would get duplicate problems being reported. We now get the unique files from all folders on startup at once to resolve this.
Fixed a bug where notebook cells would sometimes process in the wrong worker thread, causing inconsistencies with things like semantic tokens.
Fixed a bug where semantic tokens (highlighting static class references) was wrong when tokens were built out of order from top down and left to right
Added a new problem code that detects when the IDL include statement creates a circular include pattern
Fixed a bug with semantic tokens in notebooks where the text would be highlighted as a semantic token in cells that don't have any semantic tokens
When you click into the outputs from an IDL notebook that is being rendered by the IDL Extension, a blue outline appears over what you have selected to match VSCode's behavior
Added logic when retrieving outputs from IDL to be more backwards compatible. As it was, you needed at least IDL 8.8.3, but it now supports pre-8.8.3 at your own risk.
v3.2.0
We skipped from 3.1.5 to 3.2.0 as the feature list grew a fair amount. See below for details.
3.2.0 August 2023
When the language server does not use a full parse, extract structure definitions. Before, this was a logic gap (and made the code faster), but they should be correctly resolved now with minimal performance hits.
- For context, using non-full parse can give a 4x improvement in performance (parse rate with 6 workers goes from 90k lines/second to 425k lines/second).
Change execution path for notebooks so cells are compiled in the same folder that a notebook lives in. This makes it much easier to load datasets that are next to the notebook (for data scientists) and mimics the behavior of PRO code. This means that, if you use "routine_dir()" or "routine_filepath()" from a notebook, it will resolve to the path that you expect.
For images, added a button that allows you to save the graphic to disk. All files saved to disk are in PNG format and come from the embedded images within the notebook file format. However, this makes it easy to generate graphics and export them from notebooks!
Added auto-complete for structure names when there are no properties or only the beginning of a name has been typed
Fixed a bug where task files and idl.json files were being processed as PRO files and reporting crazy errors
Re-worked the notebook file format to be human readable (as JSON). Do not edit the files by hand as you risk breaking your notebooks. This new format:
-
Is pretty-printed JSON which can easily be read and is easier for git GUI applications to manage
-
Has a reduced size when we embed graphics
-
Uses a schema for complex output types (i.e. images, animations) with the pipes in place to have custom renderers or applets embedded in notebooks
-
Normalizes line endings on save which makes sure notebooks are the same on Windows vs Linux/Mac
-
Allows some transparency into the notebook format with what gets stored
-
All outputs from IDL are stored as a JSON string. This is to reduce file size and improve parsing speed (future concept is embedding plots/graphs which requires data that pretty-printed JSON would make unreasonably large)
For all notebooks, we add extra catches when attempting to restore notebook outputs saved in the file. This means that we can update the way outputs are stored/processed in the future without breaking notebooks completely. You would just need to re-run cells and regenerate outputs in the format that we expect it to be.
Fix an un handled case for auto-doc with structures where we didn't add spaces after an empty structure definition (even though that is invalid for IDL).
Fixed a bug with notebooks where cells weren't cleaned up properly and you would get fake duplicate routines reported as a problem. Added tests to catch this in the future.
Fixed a bug where docs header regular expressions were being over-zealous and grabbing more than they should.
Fixed some bugs with styles of embedded graphics not appearing quite like they should when the notebooks are small.
Fixed a bug where error resolving completion would show a message about hover help
Fixed a bug where auto-complete would fail when you had fatal syntax errors in code and for/foreach loops
Fixed a bug where auto-complete in notebooks wouldn't get the code from the cell for the right auto-complete user experience
Further increase node.js timeout for edge cases where it wouldn't respond/start fast enough
Changed the formatting behavior for structures when they have line continuations.
-
Before:
!null = $ {MyStruct, $ _foo: 5} !null = $ { $ _foo: 5}
-
After:
!null = $ {MyStruct, $ _foo: 5} !null = $ { $ _foo: 5}
v3.1.5-preview1
Preview release for bug with task files.
3.1.5 August 2023
Change execution path for notebooks so cells are compiled in the same folder that a notebook lives in. This makes it much easier to load datasets that are next to the notebook (for data scientists) and mimics the behavior of PRO code.
For images embedded in notebooks as outputs (i.e. creating an IDL graph), added a save button that lets you save to disk as a PNG
Added auto-complete for structure names when there are no properties or only the beginning of a name has been typed
Fixed a bug where task files and idl.json files were being processed as PRO files and reporting crazy errors
Re-worked the notebook file format to be human readable (as JSON). Do not edit the files by hand as you risk breaking your notebooks. This new format:
-
Is pretty-printed JSON which can easily be read and is easier for git GUI applications to manage
-
Has a reduced size when we embed graphics
-
Uses a schema for complex output types (i.e. images, animations) with the pipes in place to have custom renderers or applets embedded in notebooks
-
Normalizes line endings on save which makes sure notebooks are the same on Windows vs Linux/Mac
-
Allows some transparency into the notebook format with what gets stored
Changed the formatting behavior for structures when they have line continuations.
-
Before:
!null = $ {MyStruct, $ _foo: 5} !null = $ { $ _foo: 5}
-
After:
!null = $ {MyStruct, $ _foo: 5} !null = $ { $ _foo: 5}
Fix an un handled case for auto-doc with structures where we didn't add spaces after an empty structure definition (even though that is invalid for IDL)
v3.1.4
This release offers bug fixes and a sneak preview of notebooks, easily accessible through hover help!!
For feedback regarding notebooks, feel free to chime in on this discussion: #6
For routine documentation, add button "Open Examples in Notebook" Which opens the routine, the description, and likely code examples as runnable notebook cells
-
If there are no code block examples for the routine you are hovered over, no notebook will appear
-
By default, the notebook opens to the side. If you have one editor group open, a new one is created to the right.
-
If more than one editor group is open, we open to the left or the right of the active editor, depending on which editor is active (this makes sure we don't keep opening new tabs)
Resolved an issue where problems were not being synced when no workspaces were open in VSCode and added tests to verify they are sent.
Normalized language server events to all wait for startup before they process requests from VSCode
Get framework for supporting notebook cells in language server with first pass at same language server methods for PRO files and notebooks
Re-work the ENVI and IDL documentation parse logic to use "Online Docs" instead of the routine name and a link for the web-version of documentation
Use better practices when normalizing code from docs. We now auto-fix problems so that compile-opt idl2 and other best-practices are always present
Fixed a problem when running notebook cells that would cause them to fail executing when the .idl sub-folder we use wasn't present and added tests for it
Fixed a bug and added tests for an issue where non-standard docs blocks would continue to be indented after every save. We now use the intent level of the first non-empty line in docs as where it starts and use that to normalize the indentation.
Fixed auto-complete sending keywords in a few scenarios where it shouldn't and added tests
When checking for node.js, increase timeout from 100 to 250 ms
Resolve an issue with the newly added token cache where all problems were not reported to the user when you changed your path after opening VSCode
v3.1.3
Fix bug where, if you had a function or procedure without a name, parsing would occasionally break and cause a bad state for the language server
Change order of some language server startup events
Indicate we are done parsing before we sync problems with the VSCode UI
Add in some manual cleanup checks for main language server process to reduce memory growth over time
Every 5 minutes, the language server runs garbage collection in an attempt to reduce memory usage and logs approximate memory used in mb to help logging/track over time
Update bundled documentation for ENVI and IDL routines to look nicer and give better visual experience for routines with keywords
Change the way we check for node.js to try and work around a hang on extension start
v3.1.2
Attempt to fix likely hang when detecting node.js to use for the language server
v3.1.1
This release has some potential fixes for performance issues with complex paths on startup. It also adds some additional output on language server startup to help understand where slowness is coming from.
Fix likely bug with docs parsing without full parse language server setting
Tweak file discovery process to use a single glob pattern and search once instead of 5+ times for each kind of file to try and address performance issues
Add more debug information on language server startup to tell us how long it takes to do each part of workspace indexing, including discovering files
In case some of our messages with worker threads are slowing down overall performance, add some optimizations for message sending to only serialize messages a single time