mirror of https://github.com/icsharpcode/ILSpy.git
Tree:
4e2f28109e
christophwille/closedhierarchies
christophwille/membench
compound-assignment-operators
fix/1982-params-attribute-args
fix/2040-invalid-xml-characters
fix/2093-navigateto-reference-assembly
fix/2362-xalz-references
fix/2372-address-taken-by
fix/3282-indexer-optional-arguments
fix/3568-record-member-order
fix/4059-deconstruct-out-slots
fix/lambda-parameter-syntax
fix/scroll-children-on-expand
gh-pages
ldmembertoken
master
natural-type-lambdas-methods
null-coalescing-assignment
release/10.1
release/6.2
release/7.1
release/7.2
release/8.1
substring-optimizations
tests/829-async-method-builder-override
tests/829-collection-expressions
tests/829-compound-assignment-operators
tests/829-coverage-audit
tests/829-expression-tree-named-optional-args
tests/829-expression-variables-in-initializers
tests/829-extended-property-patterns
tests/829-extension-members
tests/829-extension-operators
tests/829-file-local-types
tests/829-improved-definite-assignment
tests/829-improved-overload-candidates
tests/829-inline-arrays
tests/829-interpolated-string-improvements
tests/829-lambda-param-modifiers
tests/829-list-patterns
tests/829-lock-object
tests/829-mixed-deconstruction
tests/829-null-coalescing-assignment
tests/829-null-conditional-assignment
tests/829-object-initializer-indexer
tests/829-overload-resolution-priority
tests/829-params-collections
tests/829-pattern-matching-improvements
tests/829-primary-constructors
tests/829-ref-unsafe-in-iterators-async
tests/829-sealed-record-tostring
tests/829-target-typed-conditional
tests/829-tuple-comparison
win-a11y-textsize
1.0-Beta
1.0-M1
1.0-M2
1.0-M3
1.0.0
2.0.0
2.1
2.2
2.3
2.3.1
3.0-Preview1
3.0-Preview2
3.0.2
v10.0
v10.0-preview1
v10.0-preview2
v10.0-preview3
v10.0.1
v10.1
v10.1.1
v11.0
v11.0-preview1
v11.0-rc
v2.3.2
v2.4
v3.0
v3.0-beta1
v3.0-beta2
v3.0-beta2a
v3.0-beta3
v3.0-beta4
v3.0.1
v3.1-beta1
v3.1-final
v3.1-rc
v3.2-beta
v3.2-rc
v3.2.0
v4.0
v4.0-alpha1
v4.0-beta1
v4.0-beta2
v4.0-beta3
v4.0-rc1
v4.0-rc2
v4.0.1
v5.0
v5.0-preview1
v5.0-preview2
v5.0-preview3
v5.0-preview4
v5.0-rc1
v5.0.1
v5.0.2
v6.0
v6.0-preview1
v6.0-preview2
v6.0-preview3
v6.0-preview4
v6.0-rc1
v6.1
v6.2
v6.2-preview1
v6.2-preview2
v6.2.1
v7.0
v7.0-preview1
v7.0-preview2
v7.0-preview3
v7.0-rc1
v7.0-rc2
v7.1
v7.2
v7.2-preview1
v7.2-preview2
v7.2-preview3
v7.2-preview4
v7.2-rc
v7.2.1
v8.0
v8.0-preview1
v8.0-preview2
v8.0-preview3
v8.0-preview4
v8.0-rc1
v8.1
v8.1.1
v8.2
v9.0
v9.0-preview1
v9.0-preview2
v9.0-preview3
v9.0-rc
v9.1
${ noResults }
6 Commits (4e2f28109e0eae18cbbb72cc65eb37fe49e2e983)
| Author | SHA1 | Message | Date |
|---|---|---|---|
|
|
800efc6e10 |
Fix #749: toggle a member's fold together with its documentation
Toggle folding picked the innermost fold containing the offset, but a member's logical region is fragmented: the body fold starts at the opening brace, the XML documentation has an independent fold, and the header line belongs to neither, so toggling there collapsed the whole enclosing type. Visual Studio's source editor keeps documentation regions independent, but its metadata-as-source view treats the member's leading trivia as one hideable unit; for a read-only decompiler view the grouped behavior is the intuitive one. The writer now records where an entity declaration begins, and the definition's fold carries that logical start. Toggling targets the fold whose logical region innermost-contains the offset, so the header line targets the member rather than the type, and leading documentation folds follow the member fold's new state. Inside the documentation the doc fold itself is the innermost region and still toggles alone. Toggle all folding now follows Visual Studio's Toggle All Outlining parity: a mixed state expands everything, a uniform state flips. Assisted-by: Claude:claude-fable-5:Claude Code |
2 months ago |
|
|
4ff11dd796 |
Add a hover-only reference mode, distinct from local highlighting
References had two behaviors encoded in one bool: navigable links, and "local" references that are non-navigable but highlight all occurrences on click. Synthesized dynamic members were routed through the latter, so they picked up the occurrence highlight even though each use is a distinct synthetic member with nothing to group. Model the three modes explicitly with a ReferenceMode enum on ReferenceSegment (Link / LocalHighlight / HoverOnly). Dynamic members, the dynamic constructor and the dynamic keyword now use HoverOnly: they still show a hover tooltip (BuildHoverContent resolves any IEntity reference regardless of mode) but get the arrow cursor, do not navigate, and do not highlight. Local variables keep LocalHighlight. Plumbed via a new isHoverOnly flag on ITextOutput.WriteLocalReference. Assisted-by: Claude:claude-fable-5:Claude Code |
2 months ago |
|
|
f2b51d2c34 |
Fix #2078: Generic local functions not highlighted properly
LocalFunctionMethod.MemberDefinition returned the instance itself, so the declaration of a generic local function (whose base method is an identity specialization) and its use sites (whose base methods carry the use-site substitutions) never compared equal, and click-highlighting could not group them. Returning a wrapper around the unspecialized base method lets the token writer record the same definition object for the declaration and all use sites. Method-group references to local functions additionally need their own lookup, because GetSymbol() does not surface a MethodGroupResolveResult. The token-writer tests now keep the PEFile alive for the duration of each test: recorded references are type-system entities that lazily read from the PE image, and formatting one in an assertion message after disposal crashed with an AccessViolationException. Assisted-by: Claude:claude-fable-5:Claude Code |
2 months ago |
|
|
847324e836 |
Fix #3845: Add option to expand XML documentation comments
Doc-comment folds were created with defaultCollapsed hardcoded to true, so /// blocks always started collapsed. The new Display option is bridged into DecompilerSettings like the other expand flags and drives the fold's default state. Detecting the last line of a doc-comment block requires sibling navigation between trivia nodes, so trivia now carry parent, sibling list, and index state. That state lives on the Trivia subclass to keep AstNode's size unchanged, and the tree API treats trivia as a separate navigation space: Next/PrevSibling and Remove work within the owning list, Slot is null, ReplaceWith throws instead of aliasing the trivia index into the parent's child slots, GetNextNode/GetPrevNode stop at the list boundary, Clone and CopyAnnotationsFrom deep-copy and reparent trivia, and CheckInvariant validates the trivia lists. Assisted-by: Claude:claude-fable-5:Claude Code |
2 months ago |
|
|
04505bbdf2 |
Highlight and scroll to the changed instruction in the ILAst view
The C# debug-steps view highlights and centers the exact AST node a transform changed; the ILAst view already had the step tree and replay-at-step but produced no highlight. Bring it to parity. IL rendering has no token-writer seam like the C# output visitor, so per-instruction text spans are recorded by bracketing ILInstruction.WriteTo via a new INodeTrackingOutput. The dominant inst.ReplaceWith(newInst) transform pattern detaches the instruction passed to Step, so ILTransformContext gains EndStep to record the produced instruction; Stepper additionally records the position's ancestor chain as fallback candidates before the step-limit throw, so the "show state before" view -- which halts at the selected step -- still resolves to a surviving ancestor (ultimately the ILFunction). The highlight-range resolver is shared with the C# language. Assisted-by: Claude:claude-opus-4-8:Claude Code |
3 months ago |
|
|
34c50c19b7 |
Fix #2035: Make the override modifier a link to the overridden member
The decompiled view only offered navigation on member names; finding what an override actually overrides required opening the analyzer. Attaching a reference to the modifier token gives the same go-to-definition affordance Visual Studio has on 'override'. The reference resolves via InheritanceHelper.GetBaseMember, so it targets the nearest overridden member and degrades to plain text when the base member cannot be resolved. Assisted-by: Claude:claude-fable-5:Claude Code |
3 months ago |