Releases: interactive-data-language/vscode-idl
v4.3.0
Preview Features
This section of the CHANGELOG documents features that have been added to the extension, but are still in an experimental phase. Feel free to try them out and provide feedback via discussions or issues on our GitHub page.
Document some advanced types so users may try them out and provide feedback. The following types are exclusive to functions and are:
-
TypeOfArg<idx>
to indicate the function returns a matching data type for the zero-based index of the indicated argument -
ArrayPromotion<type>
will have the function return an array of the indicated type if any argument is an array. Otherwise it returns a scalar -
Read more in the extension documentation
Added the ability to convert a notebook to a PDF! This requires an additional extension called ":"Markdown PDF", which you will be prompted to install. This includes:
-
A new sidebar entry for PDF generation and a button in the top-right of the notebook to generate a PDF
-
When you click either, as long as your notebook is saved to disk, it will create Markdown, open it, and start the PDF generation process
-
Once finished, it closes the Markdown file
-
The Markdown and PDF file use the same base name as your notebook. Meaning if your notebook is called "My-notebook.idlnb" you will have a "My-notebook.md" and "My-notebook.pdf" file generated in the same folder
-
You do need to save your notebook to disk so we have a path to write the Markdown and PDF files
4.3.0
Added official documentation to the extension! It is hosted on Github pages and a local copy is included with the extension.
-
If you are offline, and working locally, you can update your preferences to serve the docs through the language server
-
If you do use local docs, make sure that the port is free and not currently in use
-
All problem codes include links that, based on your preference, will take you to examples in the docs and tips to fix
-
Let us know if there are more things that need to be documented, or if documentation can be improved in any way
Fixed a bug where python statements of the form ">>>" were incorrectly formatted with an extra space after the arrows.
For the upcoming release of ENVI Deep Learning 3.0, added a new pipeline for migrating code from older to newer versions. While we typically do not make breaking changes, if we ever do, we now have a pattern to help automate getting your code up-to-date with the latest version of IDL, ENVI, and module APIs.
Updated the routine signatures (docs) to IDL 9.0, ENVI 6.0, and ENVI Deep Learning 3.0.
When converting notebooks to PRO code, any markdown cells now get added in-line to the content at the main program level. This helps create code that more accurately follows the flow of what you had in your notebook (assuming not many routine definitions in the notebook cells).
When converting notebooks to PRO code, any markdown cells now have leading and training white space removed before converting to comments.
When an IDL Notebook is open, added a new, quick-access button in the top-right of the Notebook that allows you to convert your notebook to PRO code.
When an IDL Notebook is open, we migrated the "Reset IDL" and "Stop IDL" buttons to the top-right of the Notebooks view to clean up the main action area.
When IDL starts for a notebook, a notification message appears telling you which version of IDL is being used
When creating a PDF from a notebook, we no longer keep the Markdown conversion of the notebook open. The file still sticks around on disk, but we thought this would cause less confusion.
Fixed an issue where post-processing would fail with specific syntax errors and ENVI or IDL Task functions
Added a new auto-completion method for the names of ENVI and IDL tasks which will insert the appropriate names for syntax cases matching:
-
ENVITask('')
which lists all ENVI Tasks when auto-completion is triggered in the quotes -
IDL('')
which lists all IDL Tasks when auto-completion is triggered in the quotes -
Supports single quotes, double quotes, and string literal strings
Similar to ENVITask
and IDLTask
, add special auto-complete cases for call_function()
and obj_new()
Auto-complete for call_function()
now shows keywords like obj_new()
does
Go-to-definition for call_function()
goes to the function definition if in PRO code
Hover-help for call_function()
pulls the hover help for the function being called
We now automatically detect the type from call_function()
if we have a known function
Fixed an edge case with types where the "any" type was not properly being detected with arrays of structures
Fixed an issue where on_ioerror
was treated as a procedure when it should be a control statement
Fixed a typo in the problem code alias docs-invalid-require
to correctly be docs-invalid-required
. If you had this problem disabled, you will need to disable it again.
Fixed a typo in the problem code alias docs-missing-arg
to correctly be docs-missing-args
. If you had this problem disabled, you will need to disable it again.
Fixed a typo in the problem code alias docs-missing-kw
to correctly be docs-missing-kws
. If you had this problem disabled, you will need to disable it again.
Migrated the following features from "Preview Features" above:
Code style revamp! We reworked how routines, routine methods, properties, and structure names get formatted. This includes:
-
Support for camel case ("camelCase") and pascal case ("PascalCase") styling. Mileage may vary here, based on the routine names, so please let us know if this doesn't look quite right or do what you expect. Some routines that start with "IDL" or "ENVI" might surprise you with the case conversion.
-
New style setting called "routineMethods" so that you can indicate the styling for methods apart from normal functions or procedures
-
New style setting called "structureNames" so that you can have structure names have consistent formatting.
-
We also now format the structure names in inheritance statements.
-
We also use structure formatting preferences when auto-completing structure names
-
Routine formatting now gives you the benefit-of-the-doubt when formatting routines and routine methods. In the past, if we encountered an unknown routine, we would not change the appearance. Now, even if we don't know the class method or routine, we apply styling. Milage may vary here based on the style you use when we can't get the source information.
-
New defaults:
-
Properties: camelCase
-
Routines: match definition
-
Routine methods: camelCase
-
Structure names: PascalCase
-
-
When generating ENVI and IDL tasks, using our new case libraries, we attempt to make a pretty display name from parameter names. For example converting the keyword "my_keyword" to "My Keyword". This applied to task and parameter display names.
v4.2.3
Resolved an issue with the auto-complete performance improvements where auto-complete would include character-by-character auto-completions for routines and structures. For example, if you created a function called myplot
, you would get auto complete for m
, my
, myp
, etc. depending on how fast you typed.
v4.2.2
Resolved a performance issue with notebooks where auto-complete and hover help would take a while to return if you have been making many edits in a short amount of time
Fixed an issue with semantic tokens not showing up like they should.
Tweaked the styling for PDF generation to have output cells look a little different than input.
v4.2.1
Fixed an issue where logs were sharing too much information and other logs were not properly reporting
v4.2.0
Preview Features
Added the ability to convert a notebook to a PDF! This requires an additional extension called ":"Markdown PDF", which you will be prompted to install. This includes:
-
A new sidebar entry for PDF generation and a button in the top-right of the notebook to generate a PDF
-
When you click either, as long as your notebook is saved to disk, it will create Markdown, open it, and start the PDF generation process
-
Once finished, it closes the Markdown file
-
The Markdown and PDF file use the same base name as your notebook. Meaning if your notebook is called "My-notebook.idlnb" you will have a "My-notebook.md" and "My-notebook.pdf" file generated in the same folder
-
You do need to save your notebook to disk so we have a path to write the Markdown and PDF files
Official Features
Updated the ENVI Notebook maps to no longer show "No data available" images and, instead, zoom into the highest zoom level available for basemaps
When you create a new notebook, you are prompted to save so that we can have auto-complete, hover help, and other user interactions.
Also updated the content of the sample notebook to add a note about saving to disk in order to enable those features.
Fixed an issue where we didn't have the right paths for IDL 9.0 on Mac and included a path for ARM64 for Apple Silicon
Re-worked the way that data is moved around between the IDL Language Server and worker threads to be more efficient. Now, no representations of PRO code should be transferred between processed which will provide lower CPU usage and RAM spikes from sharing our syntax tree.
This change ensures that work that happens will occur next to the data that is needed. This should improve:
-
Hover help
-
Auto-complete
-
Go-to definition
-
Formatting PRO code
-
Formatting IDL and ENVI notebooks
With this change, and if you have very large files, you should notice a dramatic difference performance. For example, the file "slicer3.pro" in the IDL lib folder used to take 4-5 seconds for hover help to appear. Now it takes ~30 milliseconds!
Considering this is a large change, please let us know if there are any noticeable differences that our tests have not captured.
While re-working our data transfer pipeline, we also made some fixes and improvements to auto-complete. There were some test gaps which have now been resolved which will:
-
Fixed a problem where auto-complete for procedure methods would add properties when inside the procedure method call
-
Fixed a problem where auto-complete for procedure methods would not add variables
-
Fixed a problem where auto-complete for procedure methods would not add keywords
-
Fixed a problem where auto-complete for methods would not functions
-
Changed the logic for when we send properties, procedure methods, and function methods and made it context aware to only send things like procedure methods where they are allowed
Resolve an issue where a circular error would be reported when creating JSON
Fixed an issue where go-to-definition for a notebook cell wouldn't take you to the definition
v4.1.2
Change the way we extract comments to reduce memory and speed up parsing by about 10%
v4.1.1
Added a new preference for notebooks called "Quiet Mode" that allows you to control the IDL preference for !quiet
when executing notebook cells.
When using ".edit" in the debug console, added a message that let's you know that a matching file was not found.
v4.1.0
Fixed a bug with the debugger that would fail to get information about your IDL session.
Add auto-complete within compile_opt statements! This now shows you all the compile options that are available and is smart enough to filter out compile opts that have already been specified.
Add a new option to disable reporting problems with user docs. This setting can be found under "Problem Reporting => Report Docs Problems".
Fixed an issue that incorrectly handled when a system had an odd number of CPUs and we could not create the right number of worker threads causing the language server to not start up
Added the ability to parse legacy IDL Doc style tags that use the @tag
style approach. Not all of the same docs functionality and validation works, but the core information is brought into the language server.
-
If you are using AutoDoc when formatting code, any of these legacy IDL Doc docs will automatically be migrated to the RST (i.e. new) flavor of IDL Doc. This way, if you want, you have an option to migrate to the latest and greatest doc style automatically.
-
Also updated syntax highlighting to account for these docs tags
v4.0.1
Resolved an issue where problems were reported for the IDL Notebook Pro code that ships with the extension.
v4.0.0
This release includes official support for IDL Notebooks, rebranding, and revisit of our styling and parsing for different kinds of IDL Doc docs tags.
Preview Features
This section of the CHANGELOG documents features that have been added to the extension, but are still in an experimental phase. Feel free to try them out and provide feedback via discussions or issues on our GitHub page.
Code style revamp! We reworked how routines, routine methods, properties, and structure names get formatted. This includes:
-
Support for camel case ("camelCase") and pascal case ("PascalCase") styling. Mileage may vary here, based on the routine names, so please let us know if this doesn't look quite right or do what you expect. Some routines that start with "IDL" or "ENVI" might surprise you with the case conversion.
-
New style setting called "routineMethods" so that you can indicate the styling for methods apart from normal functions or procedures
-
New style setting called "structureNames" so that you can have structure names have consistent formatting.
-
We also now format the structure names in inheritance statements.
-
We also use structure formatting preferences when auto-completing structure names
-
Routine formatting now gives you the benefit-of-the-doubt when formatting routines and routine methods. In the past, if we encountered an unknown routine, we would not change the appearance. Now, even if we don't know the class method or routine, we apply styling. Milage may vary here based on the style you use when we can't get the source information.
-
New defaults:
-
Properties: camelCase
-
Routines: match definition
-
Routine methods: camelCase
-
Structure names: PascalCase
-
-
When generating ENVI and IDL tasks, using our new case libraries, we attempt to make a pretty display name from parameter names. For example converting the keyword "my_keyword" to "My Keyword". This applied to task and parameter display names.
4.0.0 November 2023
The official release of IDL Notebooks! This is a first pass at adding notebook support for IDL (which is independent from Jupyter). We are hoping to have early adopters try it out and provide feedback on how notebooks behave. Read below to learn more or find an example IDL and ENVI Notebook directly within VSCode in the IDL sidebar.
Here are some of the features that notebooks bring:
-
Notebook files should end with the extension ".idlnb" which are managed and rendered by the IDL extension.
-
Notebooks support highlighting, problem reporting, hover help, auto-complete, go-to-definition, formatting, and semantic token highlighting.
Pro tip: See the FORMATTING.md doc for information regarding how to format notebooks on save.
-
Basic notebook functionality for saving (including outputs and images) and restoring all works as expected
-
Notebooks embed images. If you use function or object graphics, all windows will be embedded.
- At this time, there may be some graphics that shouldn't be grabbed (like when you run ENVI processing with the ENVI UI open)
-
Notebooks do not embed widgets.
-
Notebooks only support Markdown and IDL cell types
-
-
When running cells, notebooks automatically start an IDL process. Notebooks provide two custom buttons for managing IDL: Reset and Stop.
-
Reset will stop and restart IDL so that it is fresh (this way you can interrupt cell execution)
-
Stop will stop the IDL process and interrupt cell execution. A new IDL session won't be launched until you run a new cell.
-
-
Ability to run cells:
-
Cells are executed as-is and don't support debugging or interactive processes.
-
See the "Hello World" notebook for details on how cell execution works and how you can write code
-
After each cell is executed we issue a
retall
command to make sure that we are at the top-level and not stopped in a weird state
-
Updated the IDL and ENVI icons throughout the extension and on our github pages. This is the same icon that will be used as part of the next official release of ENVI and IDL.
We now use colored icons for file icons and added some new file associations for our ENVI within the editor. If you have a theme that doesn't look great with our icon colors, let us know!
With the new icons, updated our custom icon theme to include the new ENVI logo for key ENVI file extensions.
Added the ability to convert your IDL notebooks to PRO code! This exciting features uses intimate knowledge of IDL to break down the code in your cells and put it back together as a single PRO file.
-
Any routines and non-main level program code is put together first and follows the order of the cells. Then, any main-level programs within cells or single lines of code are added as one, large main level program at the end.
-
Milage may vary based on how you wrote your notebook, but it is very easy to get out your routine definitions
-
Use GitHub to let us know if this should behave differently!
Expanded sidebar for notebooks with buttons for:
-
Creating a new notebook
-
Formatting the IDL Code in your notebook cells (shortcut for VSCode native command)
-
Ability to open an example IDL Notebook
-
Ability to open example ENVI Notebook
-
Converting notebooks to PRO code
There's also a command added that will reset your example notebooks to what we had originally. it is called "IDL: Reset IDL and ENVI Example Notebooks'.
When automatically opening ENVI files, the text displayed adds a note about how you can disable the behavior by looking at the extension documentation.
Optimize the generation of the code outline and semantic tokens (static class references) to calculate both at the same time we are parsing a file or cell of code. This reduces extra CPU usage from retrieving complex information from our cache.
When notebooks start, we now perform an extra check to make sure we have the routines needed to function correctly. This is mainly for developers and edge-cases where you weren't provided any feedback on the startup process and wouldn't know there was a problem.
Resolved an issue where you couldn't view the output from a notebook cell in VSCode. We provided a default VSCode configuration which fixes this problem and added a new doc to the extension to capture known issues and how to solve them.
Fixed an issue where statements being sent to IDL were not executing correctly for implied print
When generating ENVI and IDL tasks, we try to make a nice display name for task and parameter names
Added auto-complete for "inherits" statements in structure definitions
Fixed an issue where we incorrectly identified main level programs in parsed PRO code that were only comments
When we parse documentation for routines, we now accept docs within routine definitions. If you have a comment block immediately following parameters, then that takes priority over comment blocks above.