mirror of https://github.com/icsharpcode/ILSpy.git
Branch:
fix/lambda-parameter-syntax
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
${ item.name }
${ noResults }
6 Commits (fix/lambda-parameter-syntax)
| Author | SHA1 | Message | Date |
|---|---|---|---|
|
|
002748d5d0 |
Give dark-theme syntax colors a perceptual contrast floor
The dark palette is hand-authored for C# only; every other highlighting definition -- XML, IL, Asm, and all AvaloniaEdit built-ins -- is derived by inverting HSL lightness. HSL lightness is not perceptual luminance, so the result depended entirely on hue: blue carries a 0.0722 luminance weight, so plain Blue landed at 4.08:1 against the editor canvas, and an already-light source such as Asm's #8080FF inverted downwards to 1.29:1 -- invisible. Reported against XML resources in #3986. Enforcing a 5.5:1 WCAG floor on the converted foreground fixes every affected definition in the one place they all route through, which a per-language palette would not: the AvaloniaEdit built-ins (JSON, Markdown, JS, HTML, CSS, Python) have no palette to author. 5.5 is where the existing CSharpDark values already sit; the 4.5 AA threshold was measured and only moves the reported blue to 4.51. The floor is deliberately foreground-only -- forcing a span background to contrast with the canvas would repaint Asm's #EEEEEE Registers background as a bright block and bury the text on top of it -- and it is measured against the surface the foreground lands on, which is that span background when the colour declares one, so a light-on-dark span cannot be pulled apart into two colours that no longer contrast with each other. The same function's desaturation guard only fired when the inverted lightness stayed below 0.75, so a dark fully saturated source (DarkMagenta) came back light and still fully saturated -- exactly the neon the softening exists to prevent. Only the softening becomes unconditional; the lightness lift paired with it stays scoped to over-saturated colours, because it is not monotone across its own 0.75 boundary and would reorder neighbouring greys. Hyperlinks were a second, unrelated path: nothing ever set TextView.LinkTextForegroundBrush, so the About page and every decompiler-view link used AvaloniaEdit's registered default of pure blue, 1.94:1 on dark. They now share a themed ILSpy.LinkForeground with the metadata table's token cells, which take it from a style rather than a local Foreground so the selected row's white override still wins over the accent fill. Assisted-by: Claude:claude-opus-5[1m]:Claude Code |
1 month ago |
|
|
51aafa0fd9 |
Move ILSpy UI code back to the ICSharpCode.ILSpy root namespace
The Avalonia port had placed the UI app in an ILSpy.* namespace tree, while the csproj RootNamespace and every prior release (through 10.1) use ICSharpCode.ILSpy.*. Restoring the historical namespace reduces the public API diff against release/10.1 for plugin authors and removes the shadowing that forced global:: qualifiers in the test project. The Images class and AccessOverlayIcon enum move back into the root namespace (as in 10.1), since an ICSharpCode.ILSpy.Images namespace would shadow the Images class for all code inside ICSharpCode.ILSpy. Assisted-by: Claude:claude-fable-5:Claude Code |
3 months ago |
|
|
28c345ca0f |
Keep metadata {Column}Tooltip props out of the grid columns
The reflection-driven column builder turned every public property into a
column, so each {Column}Tooltip companion (NameTooltip, FlagsTooltip,
...) rendered as its own raw column next to the column it describes. That
text is already surfaced as the sibling cell's hover tooltip by
MetadataCellTooltip, which reflects the property off the row directly, so
dropping these properties from the column set leaves the tooltips intact
and removes the duplicate columns.
Assisted-by: Claude:claude-opus-4-8:Claude Code
|
3 months ago |
|
|
102bf2cc5b |
Per-column filter inputs in metadata grid headers
Replace the single text-bar above the grid with one filter input per column, baked into each DataGridColumn's header. The page model carries a ColumnFilters collection alongside Columns; the filter predicate ANDs every non-empty column's case-insensitive substring match. Column instances are built fresh per page so sibling tabs don't share filter state, and the column name moves to Tag for cell-level lookups now that Header is a Panel. Assisted-by: Claude:claude-opus-4-7:Claude Code |
3 months ago |
|
|
3ae24fc12a |
Render token cells as hyperlink-styled buttons
[ColumnInfo(Kind=Token)] properties now produce a DataGridTemplateColumn whose cell is a transparent-background, blue-foreground Button — the hyperlink affordance the user clicks to jump to the target table row. Click raises NavigateToCellRequested(Row, ColumnName) on the owning MetadataTablePageModel; Phase 3c subscribes from the dock workspace, resolves the token to its target table tree node, and scrolls into view. Assisted-by: Claude:claude-opus-4-7:Claude Code |
3 months ago |
|
|
508331c5cb |
Datagrid tab infrastructure for metadata tables
Lays the rails for Phase 2 without flipping any existing nodes onto the new path: MetadataTablePageModel + MetadataTablePage view + MetadataColumnBuilder (cached per row type), an ILSpyTreeNode.CreateTab() hook the docking host now consults before falling through to the decompiler tab, and an App.axaml DataTemplate routing the model to the view. PE-header / heap / table nodes still decompile as text — they get flipped to CreateTab() one batch at a time in subsequent commits. Assisted-by: Claude:claude-opus-4-7:Claude Code |
3 months ago |