Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

0.10 - 2025-09-03

Added

  • The --summary flag to ipt format, ipt check and ipt lint is added. Instead of a full error log, this shows a brief summary of all errors during operation.

  • Linting rule CodeStyleTrailingEmptyLine added

Fixed

  • Linting errors now display the correct context output when no file is overwritten and no fixes are applied.

  • The value of an operation flag is no longer merged with the first argument. The previous version handled the following code

    WAVE/SDFR=root: bigWave
    

    as

    WAVE/SDFR=root:bigWave
    

    This is no longer the case and correctly parsed. This limitation is removed from the list of know limitations.

  • The value of an operation flag can now be a function call.

    DoAlert/T=func(0) ""
    

    There is no longer a need to add parenthesis around the argument.

  • Operation argument parsing has been improved in cases where no comma is set. Ipt can now correctly parse operation calls where each argument is separated by one or more spaces.

  • Support multiple function return flags

  • Allow to omit values for arguments in a macro call

  • Fixed parsing of dollar expressions. We can now additionally support the following dollar variants:

    // assignments to a global variable/string/wave using a global string in macros
    $path:to:name = 42
    $path:to:name:of:wave(0, 10) = 1
    $(cfs)[0, ncoefs - 2] = $(cfs)[2 * ncoefs - 2 - p]
    
    // subwindow with a dollar part
    DefaultGUIFont/W=$(currentPanel)#Tab0/MAC popup={"Geneva", 12, 0}
    
    // dollar part in FuncFit
    FuncFit $funcname, ... // all remaining arguments and flags are striped away for simplicity
    
    // dollar part in the middle of a data folder path
    root:Packages:foo:$(name):var
    
    // calculations for which each part has a dollar expression
    abs($wx[0] - $wx[1])
    
    // structure access after a dollar expression
    RemoveFromTable/W=$tableName $(pathToWave).l
    
    // static constants as a source of a dollar expression
    $MainProc#MAGIC = -1
    
  • Allow ranged access at string literals

  • Fixed Windows installer:

    • The “Create shortcut on desktop” checkbox is no longer shown. This had no effect on the previous version.

    • The create start menu entry page is no longer shown.

    • ipt will now always added to PATH by default.

    • The winget installation will add ipt always to PATH

    • ipt will now correctly be removed from PATH during uninstall

    • The installation directory is now completely removed during uninstall

Changed

  • Our parsing strategy has been changed. We explicitely parse whitespace characters and do no longer ignore them now. This allows us to parse more code correctly.

  • Function calls, wave access and string access do no longer allow whitespace characters between the name and the call/access parenthesis.

  • We changed our line continuation parsing strategy. The new strategy more closely follows the natural flow of the source code and allows for the correct placement of line continuation characters in more edge cases than the old strategy.

  • The AST printout (e.g. when done with --print-ast) now shows line continuation markers for single tokens correctly.

  • Statements now include their trailing comment in their own range. This can be seen when inspecting the AST printout (e.g. with --print-ast).

  • Our MacOSX binary is now signed with an Apple Distribution certificate and we switched back to a plain binary instead of a MacOSX bundle.

  • We updated our user documentation to make it more readable. This includes, but is not limited to, the following:

    • ipt command details are now moved to their respective sub pages

    • the special features page is now moves to the ipt format section

    • analyze rules and linting rules are now moved to their respective sections

    • added a specification what “error” means to the main page

    • specify that ipt lint always implies ipt format

Removed

0.9 - 2025-06-24

Added

  • The linting rule CodeStyleEmptyLineBetweenCodeBlocks is now added

  • All pragmas are now aligned like this:

    #pragma TextEncoding     = "UTF-8"
    #pragma rtGlobals        = 3
    #pragma rtFunctionErrors = 1
    
  • Multiline function headers are now supported

    Function name(
        variable argument1, // documentation of argument 1
        variable argument2  // documentation of argument 2
    )
    End
    
  • Command line interface flag --noreturn-func added

  • Documentation for potential issues with output coloring and unicode output added.

Fixed

  • linting rule ReadabilityMissingParenthesis does no longer show repeated log output with recursive ternaries like

    variable div  = unit == 1 ? 1 : (unit == 2 ? 72 : 72/2.54)
    
  • multiline statements are no longer broken if they have a trailing semicolon

  • Fixed context output of linting error messages. It was gone with a previous update.

  • log entries will now contain correct positions regardless of the line ending style of the input file. It was broken if old mac style line ending was used (just a carriage return \r).

Changed

  • error message of linting rule ReadabilityMissingParenthesis is now simplified

  • a comma is no longer printed between the arguments of AppendLayoutObject. Igor Pro does not support a comma with this operation.

  • ANSI escape codes are now automatically enabled if the terminal supports it. This is used for coloring the log entries.

  • Even if linting errors remain, partial changes will now be applied to the target file.

  • The debug AST output has been slightly changed. Some printing routines have been simplified.

Removed

  • The feature ReadabilityElseAfterReturn:Else has been removed because inverting the logic of the condition produces an unexpected result if the condition results in NaN. In Igor Pro, NaN is evaluated as false and !NaN is also evaluated as false. Therefore, we cannot provide a simple and generally valid fix.

0.8 - 2025-03-14

Added

  • add installer for Windows

  • Windows binary, installer and uninstaller now have a code sign certificate

  • add linting rules CodyStyleFallthroughCaseRequireComment, CodeStyleNoFixme, ReadabilityElseAfterReturn, ReadabilityOneLineVariableInitialization. More information can be found in the respective section.

  • allow to include/exclude rule feature on the cli

  • allow to use // NOLINT(rulename) in code to exclude specific rules

  • add // IPT_NORETURN code tag to calls that never return

  • add winget as an install option for Windows

  • add support to list all features of a specified rule using ipt lint --list ruleName or ipt analyze --list ruleName

  • document limitation on recursive evaluations of linting rules

Fixed

  • fix bug in linting rule BugproneReservedKeywordsAsIdentifier which reported the following line as an error but it isn’t one

    Make/O dfr:$wvName/WAVE=wv
    
  • fixed spelling in license expiration warning message

  • fixed spelling mistake in user documentation

Changed

  • The output of ipt lint --help and ipt analyze --help is now cleaner and doesn’t list all supported rule names. Use ipt lint --list or ipt analyze --list for that.

  • Reworked how the AST is internally handled. It is now much easier to extend the AST or add new functions. There should be no difference in the output. If you find one, feel free to report it.

  • The output of --print-ast is now more descriptive and contain more information.

  • Reworked how we reintroduce manual line continuations. There should be no difference in the output. If you find one, feel free to report it.

  • The version number that is reported using ipt --version does now show the correct version format.

0.7 - 2025-01-31

Added

  • new command ipt analyze for applying specific analysis rules

  • add linting rules ReadabilityMissingParenthesis, BugproneLoopInitializationAssignment, CodeStyleDefaultPragmas, BugproneContradictingOverrideAndFreeFlag, BugproneReservedKeywordsAsIdentifier, CodeStyleEndIfComment, BugproneMissingSwitchDefaultCase. More information can be found in the respective section.

  • add ability to include or exclude certain rules in ipt lint and ipt analyze

  • add changelog to user documentation

  • add documentation of limitation “Merge of operation flag value with first operation argument”

  • add documentation about severity in the ipt lint section

  • add icon for executable and website

Fixed

  • fixed linting rule FixOldStyleFunctionArgument. It does no longer convert a function signature if one of its arguments have documentation attached.

  • fixed some spelling and wording mistakes in the documentation

  • fixed internal AST

  • fixed internal AST matcher

Changed

  • ipt lint warnings are now handled as errors in terms of exit status code