Releases: interactive-data-language/vscode-idl
v6.0.2
v6.0.1
Add special instructions back in for ENVI Agent like we have for IDL Agent. These were disabled as a release in February broke the functionality, but it works again now.
This means that you don't need to type "/envi" to have workflow planning happen.
v6.0.0
Introducing IDL Agent and ENVI Agent! This marks our first initiative to enable LLMs to more effectively use ENVI and IDL. Here's what they can do:
-
Write and run IDL code like a modern developer
-
IDL instructions are automatically configured for you and, through our extension settings, you can add your own instructions too
-
Plan and execute remove sensing workflows with ENVI (requires ENVI to be installed)
-
Open data in ENVI, run tools interactively, and summarize workflows as notebooks or code
Important note: These agents are auto-configured through VSCode and are based on MCP tools and instructions. Note that they are agents in name and not the VSCode agents that you can select in new chats.
Other Changes
Migrated support for our MCP server to use the formal VSCode API instead of setting configuration.
The MCP server will automatically find a port and be accessible when creating a nee chat.
You need to have ENVI installed to run the ENVI MCP tools.
The IDL type parsing logic uses a formal parser which addressed some issues and bugs. This new parser is more robust and offers some added benefits:
-
Full support for literal types (numbers, strings, etc.)
-
Track the literal value for types, which you will see in hover help
-
Reworked hover help for types that uses our IDL syntax highlighting and is aware of variables, keywords, properties, and more.
-
Our hover-help for properties from task files now uses choice lists and gives more insight into what valid parameters can be.
-
Another benefit of the new type parser is much richer type information about parameters and their literal values
Syntax highlighting for types has been updated to match the new type parser which resolved some issues with types not being highlighted in docs blocks.
Revamped hover help for variables, arguments, keywords, and properties to support new type changes.
Fixed a typo in one of the paths we check to find IDL on Mac when you have ENVI + IDL installed
New preference (enabled by default) that has the theme of IDL and ENVI match that of VSCode. This means, if you have a dark mode programming theme, IDL and ENVI will launch in dark mode. Do note that, if we detect IDL_THEME as an environment variable, this preference has no effect.
Change the way that we detect the types from ENVI and IDL tasks in your code. If we don't know which ENVI or IDL task you are using, we set the type as a generic ENVITask or IDLTask. This makes sure you still get some type of auto-complete and hover help for a better developer experience.
Fixed an issue with task generation not correctly adjusting the names of paired parameters.
Fixed a bug with IDL Notebooks embedding odd graphics from the ENVI UI when running cells with the ENVI UI open.
Fixed an issue where empty paths could be added to the IDL search path through VSCode settings.
Re-worked the logic for managing and setting IDL's search path. It follows this process:
- If you have workspaces open, and have opted in to adding to the path (default), add each folder
- If you have set IDL's path through VSCode preferences, add each folder
- If you have IDL_PATH in your environment variable, add each folder
- Always make sure the IDL_DEFAULT path is present
Added a new utility to migrate ENVI Deep Learning IDL code to ENVI Deep Learning 4.0 API (there were some task name changes.)
Fixed an issue where the IDL directory was not being automatically set on extension startup when it hasn't been specified.
Fixed an issue where, if IDL was not configured on a machine, that hover help generation would fail when getting links for images.
v5.1.0
5.1.0 - August 2025
This verion introduces a new selection of IDL Tutorials! These come as a collection of notebooks to help new users get up and running. In the IDL sidebar, you'll see a new section called "IDL Tutorials" with language-specific content.
With this change, we have also migrated the ENVI and IDL Example notebooks under the tutorials section.
Add a new auto-complete for block statements (i.e. if-then-begin) that functions much better compared to what we had. If there are any weird cases, or cases for block auto-complete that are missing, let us know and we can add them in.
Add a new sidebar entry to launch a session of ENVI and IDL. Requires an ENVI license and that you are using the IDL that is packaged with ENVI.
With the extension including GitHub Copilot integration, we have changed the extension so that it always activates in VSCode. Otherwise tools in Agent mode through GitHub Copilot would fail to run as our extension was not started.
Tweak hanging indent for procedures and procedure methods to use the first comma as the syntax we align to.
Fix an issue with catching standalone expressions where the problem would be incorrectly reported for chained property access.
Fix docs issues with colorbar() function not having all properties for keywords.
Fix docs issue where "ipm" was an unknown structure and would throw fake errors when using the static methods on the class.
Fixed an issue where IDL would show an error message about being unable to check the version if you had an IDL_STARTUP file specified that generated output.
Potentially fix an issue with auto-complete that would occur sometimes with code blocks.
Updated type parsing to support older code that used the name of the functions to create arrays as array types. We now map types such as "bytarr" to the proper IDL types of "Array" for full type/auto complete support.
Tweak notebook formatting that removes the trailing space at the end of cells. When you have many cells, this adds empty space that's not always needed or helpful.
v5.0.0
5.0.0 – July 2024
This release introduces a significant evolution in extension functionality, warranting the major version bump to 5.0.0.
⚠️ IDL 9.2 Dependency Notice
Some features introduced in this release depend on IDL 9.2, which is scheduled for release in July–August 2025. If you are not using IDL 9.2, these not all features will not be available.
The IDL Machine
With IDL 9.2, IDL now offers native integration with VSCode, bringing substantial improvements in performance and user experience.
-
Faster startup and more responsive command execution
-
Pause support is now fully functional on Windows
-
Debugging shows better information about variables and their values
-
Debugging workflow, and inputting commands in the debug console, has been completely re-worked for a more streamlined user experience and consistent keyboard focus
-
Improved detection of when IDL is idle and ready for input
-
Internal commands are excluded from command history
-
Support for the
readprocedure (interactive user input) in the VSCode Debug Console and IDL Notebooks -
Enhanced progress reporting:
-
Native integration with IDL Notebooks
-
Cleaner output in the VSCode Debug Console
-
VSCode will automatically detect whether your IDL version supports these new features. The legacy debugger remains available for compatibility with older IDL versions and continues to work with both debug sessions and notebooks.
Note: The status bar (bottom-left of VSCode) will no longer display a custom prompt unless you're using IDL 9.2 or newer. This was necessary to streamline the new integration.
🤖 GitHub Copilot Integration
We've added initial support for GitHub Copilot in Agent Mode, enabling AI-powered interactions with IDL.
Available Actions:
-
Start an IDL session
-
Execute IDL code
-
Create and run IDL Notebooks
-
Launch ENVI
-
Open files in ENVI
This marks our first step toward AI-assisted development in IDL. More capabilities will follow and feedback is welcome!
🌐 Web Extension Support
We now provide a lightweight version of the extension for the web-based version of VSCode.
Current Features:
-
Syntax highlighting
-
File association for
.pro,.sav, and related files -
View support for IDL Notebooks
⚠️ This version does not support advanced language features such as auto-completion, hover help, or code execution.
Let us know if you'd like to see more features supported in the web version.
Fixes and Improvements
-
Windows-specific fix: Resolved an issue where IDL's path was incorrectly set when no workspace was open, potentially causing slow startup.
-
Notebook stability: No longer reports false errors when stopping a cell mid-execution.
-
Cancellation handling: User actions like code execution now correctly respond to cancellations, preventing misleading error messages.
-
Format-on-save: Fixed an issue where saving twice was required to trigger formatting.
-
Formatting supports hanging indent: There's a new option in the formatter that allows you to enable hanging indent instead of the default block indent.
-
Formatting with syntax errors: Improved handling of two scenarios where formatting would run when it shouldn't and would break your code.
-
Outline now enables sticky headers: The outline has been updated to provide a sticky header showing you what routine you are working inside of
-
CLI progress handling:
-
IDL Notebooks now mimic terminal output
-
VSCode Debug Console shows progress updates on new lines (due to inherent limitations)
-
-
Notebook auto-print logic: Corrected auto-detection of implied print for consecutive lines.
-
Startup checks: Directory validation for IDL now occurs when starting a session, not during extension startup.
-
Autocomplete improvements: Property and keyword documentation in hover and auto-complete lists are now alphabetically sorted for easier navigation.
-
Syntax highlighting: Enhanced for commands like
.compile, with proper support for strings, comments, and theme-friendly styling. -
Hover help: Fixed a typo in task file documentation.
-
ENVI + Notebooks: Starting ENVI UI in a notebook now disables graphics embedding in that cell to prevent blank/empty outputs. For best results, use a dedicated cell to start ENVI and separate cells for visual output. issue where saving twice was required to trigger formatting.
-
Syntax highlighting and method detection: Fixed an issue where we would not properly highlightor parse procedure and function methods when in case/switch statements.
-
Legacy Documentation Parsing: Updated the docs parsing for older style code comments to support a wider range of parameters that we parse (i.e. data type, direction) and multi-line starter blocks of docs
-
Logical Operator Detection: When using compile option
idl3, we now detect and warn about certain operators being used. These have custom code actions to fix and also get fixed with formatting on save -
Notebook Variable Detection: Fixed an issue where IDL Notebooks would incorrectly report a variable as undefined when it was, in fact, defined.
Other Bug Fixes
Fixed a parsin error where we would confuse case/switch if statements and methods
Manually updated some documentation to account for missing/invalid keywords that were actually correct.
v5.0.0-rc1
5.0.0. Beta 1
This release introduces a significant evolution in extension functionality, warranting the major version bump to 5.0.0.
⚠️ IDL 9.2 Dependency Notice
Some features introduced in this release depend on IDL 9.2, which is scheduled for release in July–August 2025. If you are not using IDL 9.2, these not all features will not be available.
The IDL Machine
With IDL 9.2, IDL now offers native integration with VSCode, bringing substantial improvements in performance and user experience.
-
Faster startup and more responsive command execution
-
Pause support is now fully functional on Windows
-
Debugging shows better information about variables and their values
-
Debugging workflow, and inputting commands in the debug console, has been completely re-worked for a more streamlined user experience and consistent keyboard focus
-
Improved detection of when IDL is idle and ready for input
-
Internal commands are excluded from command history
-
Support for the
readprocedure (interactive user input) in the VSCode Debug Console and IDL Notebooks -
Enhanced progress reporting:
-
Native integration with IDL Notebooks
-
Cleaner output in the VSCode Debug Console
-
VSCode will automatically detect whether your IDL version supports these new features. The legacy debugger remains available for compatibility with older IDL versions and continues to work with both debug sessions and notebooks.
Note: The status bar (bottom-left of VSCode) will no longer display a custom prompt unless you're using IDL 9.2 or newer. This was necessary to streamline the new integration.
🤖 GitHub Copilot Integration
We've added initial support for GitHub Copilot in Agent Mode, enabling AI-powered interactions with IDL.
Available Actions:
-
Start an IDL session
-
Execute IDL code
-
Create and run IDL Notebooks
-
Launch ENVI
-
Open files in ENVI
This marks our first step toward AI-assisted development in IDL. More capabilities will follow and feedback is welcome!
🌐 Web Extension Support
We now provide a lightweight version of the extension for the web-based version of VSCode.
Current Features:
-
Syntax highlighting
-
File association for
.pro,.sav, and related files -
View support for IDL Notebooks
⚠️ This version does not support advanced language features such as auto-completion, hover help, or code execution.
Let us know if you'd like to see more features supported in the web version.
Fixes and Improvements
-
Windows-specific fix: Resolved an issue where IDL's path was incorrectly set when no workspace was open, potentially causing slow startup.
-
Notebook stability: No longer reports false errors when stopping a cell mid-execution.
-
Cancellation handling: User actions like code execution now correctly respond to cancellations, preventing misleading error messages.
-
Format-on-save: Fixed an issue where saving twice was required to trigger formatting.
-
Formatting supports hanging indent: There's a new option in the formatter that allows you to enable hanging indent instead of the default block indent.
-
Formatting with syntax errors: Improved handling of two scenarios where formatting would run when it shouldn't and would break your code.
-
Outline now enables sticky headers: The outline has been updated to provide a sticky header showing you what routine you are working inside of
-
CLI progress handling:
-
IDL Notebooks now mimic terminal output
-
VSCode Debug Console shows progress updates on new lines (due to inherent limitations)
-
-
Notebook auto-print logic: Corrected auto-detection of implied print for consecutive lines.
-
Startup checks: Directory validation for IDL now occurs when starting a session, not during extension startup.
-
Autocomplete improvements: Property and keyword documentation in hover and auto-complete lists are now alphabetically sorted for easier navigation.
-
Syntax highlighting: Enhanced for commands like
.compile, with proper support for strings, comments, and theme-friendly styling. -
Hover help: Fixed a typo in task file documentation.
-
ENVI + Notebooks: Starting ENVI UI in a notebook now disables graphics embedding in that cell to prevent blank/empty outputs. For best results, use a dedicated cell to start ENVI and separate cells for visual output. issue where saving twice was required to trigger formatting.
-
Syntax highlighting and method detection: Fixed an issue where we would not properly highlightor parse procedure and function methods when in case/switch statements.
-
Legacy Documentation Parsing: Updated the docs parsing for older style code comments to support a wider range of parameters that we parse (i.e. data type, direction) and multi-line starter blocks of docs
-
Logical Operator Detection: When using compile option
idl3, we now detect and warn about certain operators being used. These have custom code actions to fix and also get fixed with formatting on save -
Notebook Variable Detection: Fixed an issue where IDL Notebooks would incorrectly report a variable as undefined when it was, in fact, defined.
Other Bug Fixes
Fixed a parsin error where we would confuse case/switch if statements and methods
Manually updated some documentation to account for missing/invalid keywords that were actually correct.
4.7.1
Fixed an issue with the IDL Webview that showed a blank tab when opened. This affect things like the profiler in the extension.
If there are unexpected errors in the webview, we now try to catch them and alert the user. Errors should be printed to the logs and a button will appear to make it easy to report an issue if this happens in the future.
Added basic support for symbolic links and managing files that have symbolic links. This includes tests for baseline user experience as well.
When we encounter a file with a symbolic link, we report problems for the true file on disk (not the path including the link). This means you won't see problems actively reported for the file if you edit it as a link.
Resolved an issue where task file generation wouldn't update your original code with a main level program if you didn't have one.
v4.7.0
4.7.0 - November 2024
Added the ability to statically determine the return types for functions and function methods that don't have documentation. This means that, for the following example, we properly detect that we return an IDL Long (because of compile_opt idl2):
function myFunc
compile_opt idl2
return, 42 ; or is it 84?
endThis marks the first step of an iterative process to automatically detect types from code when you don't have strict documentation. We can also, in the future, check to make sure actual return values match docs.
In order to detect types from your code, we had to make some pretty big changes to the language server in order to properly resolve types that don't come from documentation. With that, if you notice any odd behaviors or issues, please reach out to us on Github to let us know of any problems. For large workspaces, such as the IDL lib folder, this means it will take about 1.5-2.5 more seconds to parse your code (depending on complexity of your code base and how many routines are called in other files).
In order for our type detection functionality to work correctly, we did have to revert a change we recently made to reduce long-term memory usage of the language server.
However, we did tweak the in-memory cache for parsed files to optimize performance. We no longer copy complex data structures which adds a 10-15% performance improvement parse speed and helps reduce memory usage.
Optimized the language server change detection process to focus on only routines/globals that have changed and not everything in a file (change detection is a process for validating usage of routines in other files when the source definition is updated).
Changed the error message reported when we can't find a structure definition. This adds some context for why we might not know about a structure definition to help users who aren't following best practices/standards.
Fixed a bug where code actions were not appearing in notebook cells.
Fixed an issue where code actions, in notebooks, incorrectly fixed issues on the first line of a cell.
Fixed an issue where the language server was not correctly detecting pointers being de-referenced. This caused false errors for "standalone expressions" to be reported and for formatting to not function correctly.
Update extension docs with the latest version of node.js that we require (to work around language server crashes).
Updated hover help packaged with the extension with ENVI 6.1, IDL 9.1, and ENVI Deep Learning 3.0.1 docs
Tweak the logic for how we respond to settings changes for problems that we report. This change means, as you change which problems you want reported in real-time, the problems tab in VSCode will add/remove problems that you do/don't want to see. Previously you would need to restart VSCode for the changes to take effect.
Improved the logic when checking if we report problems or not for a file to account for the folder on IDL's path being recursive or not.
Fixed an issue where, when disabling problems from duplicate routines, they were still being reported.
Updating our formatting logic to add a final line feed or carriage return after the last line of a file when formatting your code.
Potential fix to resolve canonical (true) filepaths when you have symbolic links in your workspace or on IDL's search path. This should fix a problem where the same file was incorrectly having two paths and reporting duplicate problems.
v4.6.2
Changed the language server startup process to remove all files from memory after initial startup. This reduces RAM by 0.25-0.5 GB of memory after startup, depending on the volume of code in workspaces and on your path.
When we clean up the language server (happens every 5 minutes), we now check our in-memory cache and remove any files that haven't been accessed recently. Helps reduce overall RAM when VSCode is open for long periods at a time.
Changed the way that the language server sends work to the threads that parse code. The main difference is that we no longer send the parsed version of code back to the main thread which we were doing.
For large files, this had a significant impact on perceived performance as the worker threads could get locked serializing and de-serializing objects (also leads to more memory usage). Now, large files like slicer3.pro which are included in the IDL installation, provide auto-complete and hover help in about ~0.5 seconds instead of 5+ seconds.
Fixed an issue where, from the JSON settings editor, a valid extension setting would be highlighted as being an incorrect value.
Fixed an issue where the "don't ask again" options didn't honor your choice for using IDL as the formatter.
v4.6.1
Added layer controls to the Notebook Map.
- Generic title for each layer (raster/vector)
- Slider to make transparent or not
Layers have a handle which allows you to use drag and drop to re-order them. As you re-order, the map updates with changes.
Notebook maps now listen to theme changes from VSCode and, when swapping between light and dark themes, the basemap will update to match the theme of VSCode (light map for light theme; dark map for dark theme)
Fixed an issue where we weren't properly detecting keywords for obj_destroy when a custom object class had a ::cleanup method present
Fixed a bug with auto-complete where, instead of variables, arguments, or functions, you would end up with procedures being suggested inside of a procedure call.
Similar to call_function() and obj_new(), add special auto-complete for call_procedure to give you the list of procedure names with string literals
Fixed a bug where we were incorrectly detecting standalone expressions and reporting as problems.
Fixed a parsing issue where we would not correctly determine the end of ternary operators which could report errors incorrectly in your code.
Re-worked auto-complete to function the same way as hover help. Now, we determine types of features to send from one of our worker threads and then the main thread builds out the completion items. The advantage of this is that we can now send back documentation and other information (which doesn't exist in our worker threads).