Add current-draft diagnostic underlines and passive hover

Preserve raw include diagnostic provenance and derive bands from the existing shaped editor. Retain deferred tooltip paragraphs through rendering. Include source, regression, failure and native-trial evidence; corrected native acceptance remains pending.
This commit is contained in:
2026-09-13 01:43:22 -07:00
parent 4b5991c60c
commit 9fd76aef3a
480 changed files with 141982 additions and 13 deletions
+29 -4
View File
@@ -83,7 +83,23 @@ function Get-ArcadiaNotices([string]$Repository, [string]$Target, [string]$Notic
}
foreach ($id in @($selected | Sort-Object)) {
$package = $packages[$id]
$root = Split-Path -Parent $package.manifest_path
$root = [IO.Path]::GetFullPath((Split-Path -Parent $package.manifest_path)).TrimEnd('\', '/')
$isWorkspace = $metadata.workspace_members -contains $id
$localPath = $null
if (-not $package.source) {
$repositoryRoot = [IO.Path]::GetFullPath($Repository).TrimEnd('\', '/')
$repositoryPrefix = $repositoryRoot + [IO.Path]::DirectorySeparatorChar
$manifestPath = [IO.Path]::GetFullPath($package.manifest_path)
$comparison = if ([IO.Path]::DirectorySeparatorChar -eq '/') { [StringComparison]::Ordinal } else { [StringComparison]::OrdinalIgnoreCase }
if (-not $manifestPath.StartsWith($repositoryPrefix, $comparison)) { throw "Local dependency is outside repository: $id" }
$current = Get-Item -LiteralPath $manifestPath
while ($null -ne $current) {
if (($current.Attributes -band [IO.FileAttributes]::ReparsePoint) -ne 0) { throw "Local dependency has a reparse ancestor: $id" }
if ($current.FullName.Equals($repositoryRoot, $comparison)) { break }
$current = if ($current -is [IO.FileInfo]) { $current.Directory } else { $current.Parent }
}
$localPath = if ($root.Equals($repositoryRoot, $comparison)) { '.' } else { $root.Substring($repositoryPrefix.Length).Replace('\', '/') }
}
$key = "$($package.name)-$($package.version)"
if ($key -notmatch '^[A-Za-z0-9._+-]+$') { throw "Unsafe package identity: $key" }
$prefix = "licenses/dependencies/$key"
@@ -101,6 +117,7 @@ function Get-ArcadiaNotices([string]$Repository, [string]$Target, [string]$Notic
# Hash actual local files (not merely Cargo's cached checksum claims).
$sourceHashes = [ordered]@{}
$notices = New-Object 'Collections.Generic.List[object]'
$hasLicenseText = $false
$fontReferences = New-Object 'Collections.Generic.HashSet[string]'
foreach ($file in @(Get-ChildItem -LiteralPath $root -Recurse -File | Sort-Object FullName)) {
if (($file.Attributes -band [IO.FileAttributes]::ReparsePoint) -ne 0) { throw "Source reparse point requires review: $($file.FullName)" }
@@ -110,6 +127,10 @@ function Get-ArcadiaNotices([string]$Repository, [string]$Target, [string]$Notic
if ($file.Name -match '(^|[-._])(LICENSE|LICENCE|COPYING|NOTICE|OFL|UNLICENSE|COPYRIGHT)([-._]|$)') {
$notices.Add((Add-Notice $file.FullName "$prefix/$relative"))
}
if ($file.Name -match '(^|[-._])(LICENSE|LICENCE|COPYING|OFL|UNLICENSE)([-._]|$)') { $hasLicenseText = $true }
if (-not $package.source -and -not $isWorkspace -and $relative -eq 'ARCADIA-PATCH.md') {
$notices.Add((Add-Notice $file.FullName "$prefix/$relative"))
}
# Literal embedded fonts in production/build source, including feature-gated ones
# conservatively. Tests/examples/benches are excluded, never all font files by glob.
if ($file.Extension -eq '.rs' -and $relative -notmatch '^(tests|examples|benches)/') {
@@ -127,8 +148,10 @@ function Get-ArcadiaNotices([string]$Repository, [string]$Target, [string]$Notic
}
}
}
if (-not $package.source) { $notices.Add((Add-Notice (Under-Root $Repository 'LICENSE') "$prefix/workspace-LICENSE")) }
$matching = @($supplements.packages | Where-Object { $_.name -eq $package.name -and $_.version -eq $package.version })
if ($isWorkspace) { $notices.Add((Add-Notice (Under-Root $Repository 'LICENSE') "$prefix/workspace-LICENSE")) }
# Registry supplements bind original .crate bytes, not a local patch
# with the same name/version and no registry checksum.
$matching = @($supplements.packages | Where-Object { $registryChecksum -and $_.name -eq $package.name -and $_.version -eq $package.version })
foreach ($supplement in $matching) {
if ($supplement.checksum -ne $registryChecksum) { throw "Supplement is for different registry source: $key" }
foreach ($notice in @(Add-Supplements $supplement.notices "$prefix/supplement")) { $notices.Add($notice) }
@@ -137,7 +160,9 @@ function Get-ArcadiaNotices([string]$Repository, [string]$Target, [string]$Notic
if ($package.license_file) {
$licensePath = Under-Root $root $package.license_file
$notices.Add((Add-Notice $licensePath "$prefix/declared-license/$([IO.Path]::GetFileName($licensePath))"))
$hasLicenseText = $true
}
if (-not $package.source -and -not $isWorkspace -and -not $hasLicenseText) { $failures.Add("Local dependency requires its own license text: $key") }
if ($notices.Count -eq 0) { $failures.Add("No notice text: $key ($($package.license)); provide checksum-bound supplement") }
$assets = New-Object 'Collections.Generic.List[object]'
foreach ($relative in @($fontReferences | Sort-Object)) {
@@ -148,7 +173,7 @@ function Get-ArcadiaNotices([string]$Repository, [string]$Target, [string]$Notic
if ($assetNotices.Count -eq 0) { $failures.Add("No embedded font notice: $key/$relative") }
$assets.Add([ordered]@{ path = $relative; sha256 = $assetHash; license = $matches[0].license; notices = $assetNotices })
}
$records.Add([ordered]@{ id = $id; name = $package.name; version = $package.version; license = $package.license; license_file = $package.license_file; repository = $package.repository; source = $package.source; registry_checksum = $registryChecksum; features = $nodes[$id].features; local_source_sha256 = $sourceHashes; notices = @($notices.ToArray()); embedded_fonts = @($assets.ToArray()) })
$records.Add([ordered]@{ id = $id; name = $package.name; version = $package.version; license = $package.license; license_file = $package.license_file; repository = $package.repository; source = $package.source; local_path = $localPath; registry_checksum = $registryChecksum; features = $nodes[$id].features; local_source_sha256 = $sourceHashes; notices = @($notices.ToArray()); embedded_fonts = @($assets.ToArray()) })
}
$rustVersion = @(& rustc -Vv)
if ($LASTEXITCODE -ne 0) { throw 'Unable to identify the selected Rust compiler.' }