All notable changes to the XSLT Debugger extension will be documented in this file.
- XSLT 2.0/3.0 Function Parameter Debugging: Added
SaxonInstrumentation.cshelper to instrumentxsl:functionelements with parameter logging. - Function parameters are now logged during execution with format:
[function functionName] param1=value1, param2=value2, .... - For-each loop instrumentation now works correctly with both Saxon and Compiled engines.
- Simplified function instrumentation to only log parameters (removed verbose return statement logging).
- Unified instrumentation approach for XSLT 1.0 across both Saxon and Compiled engines using shared
Xslt1Instrumentationhelper.
- Cleaner debug output with reduced verbosity for function calls.
- New Extension Icon: Professional icon featuring Logic Apps and .NET branding with XSLT (
< XSL >) brackets and debug bug symbol.
- Shared XSLT 1.0 instrumentation helper used by both engines so Saxon can now debug XSLT 1.0 stylesheets that do not rely on
msxsl:script. - Version-aware Saxon pipeline that switches to the 1.0-safe probes while retaining the existing XSLT 2.0/3.0 instrumentation.
- Integration coverage for the new Saxon 1.0 path (
SaxonEngine_ShouldCaptureVariables_WhenRunningXslt1Stylesheet) and console smoke tests for both engines. - New
BaseXsltEngineabstract class consolidating shared debugging infrastructure (breakpoint management, step mode handling, pause/continue mechanisms).
- Reorganised integration samples under
TestData/Integration/xslt/compiled/andTestData/Integration/xslt/saxon/to mirror the engine split. - XsltCompiledEngine now delegates all 1.0 probe insertion to the shared helper, keeping instrumentation logic in one place.
- Bumped the extension version to
1.0.0and updated packaging docs to reference the new VSIX build numbers. .gitignore/.vscodeignorenow filter generatedout/folders and*.out.xmlartifacts across the tree.- Refactored engine architecture: Both
XsltCompiledEngineandSaxonEnginenow inherit fromBaseXsltEngine, eliminating ~150 lines of duplicate code. - Removed duplicate methods:
NormalizePath,SetBreakpoints, andIsBreakpointHitnow implemented once in base class. - Consolidated shared fields: Synchronization, breakpoint storage, step mode tracking, and call depth management now in base class.
- Made
StepModeenum public for proper accessibility across engine hierarchy.
- Ensured Saxon 1.0 runs produce the same breakpoint and variable capture behaviour as the compiled engine by reusing the same probe shapes.
- Enhanced maintainability by centralizing common debugging logic - changes now made in one location instead of two.
- Added defensive programming documentation for instrumentation safety checks in
Xslt1Instrumentation.cs. - Improved code consistency between engines through shared base implementation.
- All 127 tests pass after refactoring, confirming no regression in functionality.
- Paired
template-entry/template-exitinstrumentation in both engines so call depth is tracked reliably. - Interactive console
StepIntoTesthighlights template markers while stepping through call-template scenarios. - Dedicated
StepIntoTestssuite covering step-into, step-over, and step-out flows for compiled and Saxon engines (115 tests total).
- Step mode controller records the originating stop location to decide when
Step OverandStep Outshould halt. - Saxon instrumentation always emits probes for
xsl:call-template, even when sibling probes exist, ensuring the line after the call is reachable. - Documentation references the 0.6.0 VSIX packages and explains the new stepping behaviour.
Step Overno longer runs the Saxon engine to completion after anxsl:call-template; execution now pauses on the next statement.Step Outconsistently returns to the caller template thanks to call-depth unwinding and exit probes.
- Replaced Saxon-HE 10.9.0 with SaxonHE10Net31Api 10.9.15 (community IKVM build)
- Resolved MissingMethodException errors on .NET 8+ by using modern IKVM-compiled Saxon
- Saxon .NET engine now works on all platforms (Windows, macOS, Linux) without Java
- Upgraded project to target .NET 8.0 for better compatibility with modern packages
- Removed Saxon Java engine as .NET Saxon works cross-platform
- Engine options now limited to
"compiled"(XSLT 1.0) and"saxonnet"(XSLT 2.0/3.0)
- XSLT 2.0/3.0 support now works reliably cross-platform using pure .NET approach
- Uses similar approach as Azure Logic Apps Data Mapper but with SaxonHE10Net31Api
- Documented architecture and function-debugging workflow (README + docs/function-debugging-guidelines.md)
- Enhanced Saxon instrumentation:
dbg:probe="1"tagging, safe loop messaging, and accumulator guardrails - Added advanced Saxon integration tests (XSLT 2.0/3.0 samples) to regression suite
- Packaging scripts (
package-*.sh) now execute unit tests automatically before producing VSIX bundles
- Uses Martin Honnen's community IKVM builds under Mozilla Public License 2.0
- Fixed inline C# compilation when containing
usingstatements that conflicted with generated prelude - XSLT stylesheets with inline C# code can now safely include standard namespaces
- Modified
CompileAndCreateExtensionObjectmethod to dynamically build prelude - Checks for existing
usingstatements in user code and avoids duplicates
- Initial release with XSLT debugging support
- Breakpoint support for XSLT files
- Variable inspection for XSLT context and variables
- XPath evaluation in current context
- Inline C# scripting support via
msxsl:script - Multiple engine support (compiled XSLT 1.0 and Saxon .NET for XSLT 2.0/3.0)
- Configurable log levels: none, log, trace, traceall
- Stop on entry option
- Debug/non-debug execution modes